comment/format in:
authorClaus Gittinger <cg@exept.de>
Tue, 19 Apr 2011 12:58:46 +0200
changeset 9860 5225713f415e
parent 9859 38ac3e126c5b
child 9861 2fb5f110fe82
comment/format in: #openSettings #settingsList changed: #initializeSettingsList
AbstractLauncherApplication.st
--- a/AbstractLauncherApplication.st	Tue Apr 19 12:58:24 2011 +0200
+++ b/AbstractLauncherApplication.st	Tue Apr 19 12:58:46 2011 +0200
@@ -265,29 +265,64 @@
 !
 
 initializeSettingsList
-    |rawList filteredList settingsList|
+    |rawList cookedList settingsList|
 
     rawList := self defaultSettingsApplicationList.
-    filteredList := rawList select:[:eachEntry|
-			|className|
-
-			className := eachEntry at:2 ifAbsent:nil.
-			className isNil
-			or:[ (Smalltalk at:className) notNil ]
-		    ].
-
-    settingsList := filteredList collect:[:eachEntry|
-			|iconSelector newEntry|
-
-			iconSelector := eachEntry at:3 ifAbsent:nil.
-			iconSelector isNil ifTrue:[
-			    eachEntry
-			] ifFalse:[
-			    newEntry := eachEntry copy.
-			    newEntry at:3 put:(self perform:iconSelector).
-			    newEntry
-			].
-		    ].
+    cookedList := OrderedCollection new.
+
+    rawList do:[:eachEntry|
+        |treeName className newEntry code classList name nameCode nameBlock nameList iconCode iconBlock|
+
+        className := eachEntry at:2 ifAbsent:nil.
+        (className notNil and:[className startsWith:'[']) ifTrue:[
+            code := className copyFrom:2 to:(className size - 1).
+            classList := Parser evaluate:code.
+            name := eachEntry at:1.
+            self assert:(name includesString:'[').
+
+            nameCode := name copyFrom:(name indexOf:$[)+1 to:(name indexOf:$])-1.
+            nameCode := '^ [:each | ' , (nameCode copyReplaceString:'%' withString:'each') ,']'.
+            nameBlock := Parser evaluate:nameCode.
+
+            nameList := classList collect:nameBlock.
+            nameList sortWith:classList.
+            nameList with:classList do:[:eachName :eachClass |
+                |newEntry|
+
+                newEntry := eachEntry copy.
+                newEntry at:1 put:(name copyTo:(name indexOf:$[)-1),eachName.
+                newEntry at:2 put:eachClass name.
+                cookedList add:newEntry.
+            ].
+        ] ifFalse:[
+            (className isNil "a directory entry"
+            or:[ (Smalltalk at:className) notNil "a valid entry"]) ifTrue:[
+                cookedList add:eachEntry.
+            ].
+        ].
+    ].
+
+    settingsList := 
+        cookedList collect:[:eachEntry |
+            |iconCodeOrSelector iconCode iconBlock newEntry|
+
+            iconCodeOrSelector := eachEntry at:3 ifAbsent:nil.
+            iconCodeOrSelector isNil ifTrue:[
+                newEntry := eachEntry
+            ] ifFalse:[
+                newEntry := eachEntry copy.
+                (iconCodeOrSelector startsWith:'[') ifTrue:[
+                    iconCode := iconCodeOrSelector copyFrom:(iconCodeOrSelector indexOf:$[)+1 to:(iconCodeOrSelector indexOf:$])-1.
+                    iconCode := '^ [:each | ' , (iconCode copyReplaceString:'%' withString:'each') ,']'.
+                    iconBlock := Parser evaluate:iconCode.
+                    newEntry at:3 put:(iconBlock value:(Smalltalk classNamed:(eachEntry at:2))).
+                ] ifFalse:[
+                    newEntry at:3 put:(self perform:iconCodeOrSelector).
+                ].
+            ].
+            newEntry.
+        ].
+
     SettingsList := settingsList.
     ^ settingsList.
 
@@ -296,7 +331,7 @@
     "
 
     "Modified: / 16-12-2002 / 18:12:50 / penk"
-    "Modified: / 01-12-2006 / 14:01:12 / cg"
+    "Modified: / 19-04-2011 / 12:53:26 / cg"
 !
 
 removeSettingsApplicationByClass:aClass
@@ -325,11 +360,14 @@
 settingsList
     "/ do NOT cache SettingsList
     "/ use UserSettingsList to add settings from loaded libraries
+
     SettingsList := nil.
     SettingsList isNil ifTrue: [
         SettingsList := self initializeSettingsList
     ].
     ^ SettingsList
+
+    "Modified: / 19-04-2011 / 12:08:17 / cg"
 !
 
 userSettingsList
@@ -1021,6 +1059,7 @@
         ].
         OpenSettingsDialog := nil.
     ].
+
     settingsApp := SettingsDialog new.
     settingsApp requestor:self.
     settingsApp installSettingsEntries:(self class allSettingsList).
@@ -1029,6 +1068,8 @@
     settingsApp allButOpen.
     settingsApp window label:(resources string:'ST/X Settings').
     settingsApp openWindow.
+
+    "Modified: / 19-04-2011 / 12:09:10 / cg"
 !
 
 settingsClosed
@@ -6773,9 +6814,9 @@
 !AbstractLauncherApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractLauncherApplication.st,v 1.401 2011-03-25 18:53:19 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractLauncherApplication.st,v 1.402 2011-04-19 10:58:46 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractLauncherApplication.st,v 1.401 2011-03-25 18:53:19 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractLauncherApplication.st,v 1.402 2011-04-19 10:58:46 cg Exp $'
 ! !