From a0dcc1dd1c57cb3116569114772dae475f946dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20Magu=C3=A9r=C3=A8s?= Date: Thu, 30 Apr 2026 10:21:53 +0200 Subject: [PATCH 1/2] Split Toplo library into separate categories: hide broken elements, move unserialized elements to 'Unstable' category --- .../PyramidLibraryElement.class.st | 15 +++- .../PyramidToploThemePlugin.class.st | 85 +++++++++++++++---- 2 files changed, 81 insertions(+), 19 deletions(-) diff --git a/src/Pyramid-Bloc/PyramidLibraryElement.class.st b/src/Pyramid-Bloc/PyramidLibraryElement.class.st index 08385a16..27ba1e4b 100644 --- a/src/Pyramid-Bloc/PyramidLibraryElement.class.st +++ b/src/Pyramid-Bloc/PyramidLibraryElement.class.st @@ -4,7 +4,8 @@ Class { #instVars : [ 'name', 'icon', - 'block' + 'block', + 'status' ], #category : #'Pyramid-Bloc-plugin-navigation' } @@ -85,3 +86,15 @@ PyramidLibraryElement >> name: anObject [ name := anObject ] + +{ #category : #accessing } +PyramidLibraryElement >> status [ + + ^ status ifNil: [ #ok ] +] + +{ #category : #accessing } +PyramidLibraryElement >> status: aSymbol [ + + status := aSymbol +] diff --git a/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st b/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st index b1164fa2..a5fb2c45 100644 --- a/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st +++ b/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st @@ -110,30 +110,79 @@ PyramidToploThemePlugin class >> toploIconThemeCategoryFromClass: aClass withCat PyramidToploThemePlugin class >> toploLibraryCategory [ - | classes elements | + | classes elements knownBroken testClass okElements unserializedElements | + knownBroken := #( #ToCircularMenuInnerElement + #ToCircularMenuList #ToExPicsumNode #ToAnimatedIcon ). + testClass := Smalltalk at: #ToSerializerTest. classes := ToElement allSubclasses , { ToElement }. - elements := classes - reject: [ :each | - each isAbstract or: [ - (each name findString: 'Abstract') > 0 or: [ - [ - each new. - false ] - on: Error - do: [ true ] ] ] ] - thenCollect: [ :class | + classes := classes reject: [ :each | + each isAbstract or: [ + (each name findString: 'Abstract') > 0 ] ]. + elements := classes collect: [ :class | + | broken serializable status | + broken := [ + class new. + false ] + on: Error + do: [ :e | true ]. + broken := broken or: [ + knownBroken includes: class name asSymbol ]. + serializable := [ + | suite prefix | + prefix := 'test' , class name. + suite := testClass suite tests + select: [ :t | + (t selector beginsWith: + prefix) and: [ + t selector size + = prefix size or: [ + | suffix | + suffix := t selector + copyFrom: + prefix size + + 1 + to: + t selector + size. + suffix allSatisfy: [ + :c | c isDigit ] ] ] ]. + suite isNotEmpty ] + on: Error + do: [ false ]. + status := broken + ifTrue: [ #broken ] + ifFalse: [ + serializable + ifTrue: [ #ok ] + ifFalse: [ #unserialized ] ]. PyramidLibraryElement new icon: - (Smalltalk ui icons iconNamed: class systemIconName); + (Smalltalk ui icons iconNamed: (status = #broken + ifTrue: [ #error ] + ifFalse: [ + status = #unserialized + ifTrue: [ #warning ] + ifFalse: [ class systemIconName ] ])); name: class name; block: [ { class new } ]; + status: status; yourself ]. - - ^ { (PyramidLibraryCategory new - name: 'Toplo'; - icon: (Smalltalk ui icons iconNamed: #box); - elements: (elements sorted: [ :a :b | a name < b name ]); - yourself) } + elements := elements reject: [ :e | e status = #broken ]. + okElements := elements select: [ :e | e status = #ok ]. + unserializedElements := elements select: [ :e | + e status = #unserialized ]. + ^ { + (PyramidLibraryCategory new + name: 'Toplo'; + icon: (Smalltalk ui icons iconNamed: #box); + elements: (okElements sorted: [ :a :b | a name < b name ]); + yourself). + (PyramidLibraryCategory new + name: 'Unstable'; + icon: (Smalltalk ui icons iconNamed: #warning); + elements: + (unserializedElements sorted: [ :a :b | a name < b name ]); + yourself) } ] { #category : #adding } From 0f7eca33e5ce09399585dffd58f0a67d1ca344b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20Magu=C3=A9r=C3=A8s?= Date: Thu, 28 May 2026 15:13:28 +0200 Subject: [PATCH 2/2] update the method named 'toploLibraryCategory' --- .../PyramidToploThemePlugin.class.st | 74 +++++++++---------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st b/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st index a5fb2c45..bc3b3343 100644 --- a/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st +++ b/src/Pyramid-Toplo/PyramidToploThemePlugin.class.st @@ -110,67 +110,65 @@ PyramidToploThemePlugin class >> toploIconThemeCategoryFromClass: aClass withCat PyramidToploThemePlugin class >> toploLibraryCategory [ - | classes elements knownBroken testClass okElements unserializedElements | - knownBroken := #( #ToCircularMenuInnerElement - #ToCircularMenuList #ToExPicsumNode #ToAnimatedIcon ). + | allowedClasses allClasses elements knownNotUsable testClass okElements unserializedElements | + allowedClasses := { + ToButton. + ToLabel. + ToImage. + ToAlbum. + ToTextField. + ToListElement. }. + knownNotUsable := #( #ToCircularMenuInnerElement + #ToCircularMenuList #ToExPicsumNode + #ToAnimatedIcon ). testClass := Smalltalk at: #ToSerializerTest. - classes := ToElement allSubclasses , { ToElement }. - classes := classes reject: [ :each | - each isAbstract or: [ - (each name findString: 'Abstract') > 0 ] ]. - elements := classes collect: [ :class | - | broken serializable status | - broken := [ - class new. - false ] - on: Error - do: [ :e | true ]. - broken := broken or: [ - knownBroken includes: class name asSymbol ]. + allClasses := ToElement allSubclasses , { ToElement }. + allClasses := allClasses reject: [ :each | + each isAbstract or: [ + (each name findString: 'Abstract') > 0 ] ]. + elements := allClasses collect: [ :class | + | notUsable serializable status | + notUsable := [ + class new. + false ] + on: Error + do: [ :e | true ]. + notUsable := notUsable or: [ + knownNotUsable includes: + class name asSymbol ]. serializable := [ | suite prefix | prefix := 'test' , class name. suite := testClass suite tests select: [ :t | - (t selector beginsWith: - prefix) and: [ - t selector size - = prefix size or: [ - | suffix | - suffix := t selector - copyFrom: - prefix size - + 1 - to: - t selector - size. - suffix allSatisfy: [ - :c | c isDigit ] ] ] ]. + t selector beginsWith: + prefix ]. suite isNotEmpty ] on: Error do: [ false ]. - status := broken - ifTrue: [ #broken ] + status := notUsable + ifTrue: [ #notUsable ] ifFalse: [ - serializable + ((allowedClasses includes: class) and: [ + serializable ]) ifTrue: [ #ok ] - ifFalse: [ #unserialized ] ]. + ifFalse: [ #unstable ] ]. PyramidLibraryElement new icon: - (Smalltalk ui icons iconNamed: (status = #broken + (Smalltalk ui icons iconNamed: (status = #notUsable ifTrue: [ #error ] ifFalse: [ - status = #unserialized + status = #unstable ifTrue: [ #warning ] ifFalse: [ class systemIconName ] ])); name: class name; block: [ { class new } ]; status: status; yourself ]. - elements := elements reject: [ :e | e status = #broken ]. + elements := elements reject: [ :e | e status = #notUsable ]. okElements := elements select: [ :e | e status = #ok ]. unserializedElements := elements select: [ :e | - e status = #unserialized ]. + e status = #unstable ]. ^ { (PyramidLibraryCategory new name: 'Toplo';