provides a basic color menu reused by
authorca
Mon, 19 Jan 1998 09:27:13 +0100
changeset 666 801db9028157
parent 665 f77b80551925
child 667 caa3c553d3d1
provides a basic color menu reused by other components. fast rebuild thus not catched
ColorMenu.st
--- a/ColorMenu.st	Sun Jan 18 22:13:27 1998 +0100
+++ b/ColorMenu.st	Mon Jan 19 09:27:13 1998 +0100
@@ -14,7 +14,7 @@
 
 MenuPanel subclass:#ColorMenu
 	instanceVariableNames:'model enabledChannel labelsAreColored'
-	classVariableNames:'ForegroundColoredMenu BackgroundColoredMenu'
+	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-UIPainter'
 !
@@ -81,199 +81,134 @@
 
 !ColorMenu class methodsFor:'menu spec'!
 
-menu: labelAreColored
-    "get the Menu"
-
-    |color submenu string menu|
-
-    string := String new:3.
-    (menu  := self menuSpec decodeAsLiteralArray) itemsDo:
-    [:anItem|
-        submenu := anItem submenu.
-        submenu notNil 
-        ifTrue:
-        [
-            submenu itemsDo:
-            [:el|
-                color := Parser evaluate: el value.
-                labelAreColored
-                    ifTrue: [el label:(Text string: el value color:color)]
-                    ifFalse: [el label:(Text string: el value emphasis:(Array with:(#backgroundColor->color) with:#bold))].
-                el value:nil.
-            ].
-            color := Parser evaluate: anItem value.
-            color := Array with:(#backgroundColor->color) with:#bold.
-            anItem label:(Text string: anItem label emphasis:color).
-            anItem value: nil.
-        ] 
-        ifFalse:
-        [
-            anItem value == #selection 
-            ifTrue:
-            [
-                anItem label:(Text string:string emphasis:(#backgroundColor->DefaultViewBackgroundColor)).
-            ] 
-            ifFalse:
-            [
-                anItem enabled:false
-            ]
-        ]
-    ].
-    ^menu
-!
-
-menuSpec
-    "specification used to build the Menu
+colorDefinition
+    "color definitions used to build a color menu
     "
 
- ^ #(#Menu #(
-        (#MenuItem
-            #value: #selection
-        )
-        (#MenuItem
-            #value: 'Color gray'
-            #label: 'B/W'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( #(#MenuItem #value: 'Color white')
-                          #(#MenuItem #value: 'Color veryLightGray')
-                          #(#MenuItem #value: 'Color lightGray')
-                          #(#MenuItem #value: 'Color gray')
-                          #(#MenuItem #value: 'Color darkGray')
-                          #(#MenuItem #value: 'Color veryDarkGray')
-                          #(#MenuItem #value: 'Color black')
-                        )
-                        nil
-                        nil
-                )
-        )
-        (#MenuItem
-            #value: ''
-        )
-        (#MenuItem
-            #value: 'Color red'
-            #label: 'R'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( 
-                          #(#MenuItem #value: 'Color red lightened lightened')
-                          #(#MenuItem #value: 'Color red lightened')
-                          #(#MenuItem #value: 'Color red: 100')
-                          #(#MenuItem #value: 'Color red:  80')
-                          #(#MenuItem #value: 'Color red:  60')
-                          #(#MenuItem #value: 'Color red:  40')
-                          #(#MenuItem #value: 'Color red:  20')
-                        )
-                        nil
-                        nil
-                )
-        )
-        (#MenuItem
-            #value: 'Color green'
-            #label: 'G'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( 
-                          #(#MenuItem #value: 'Color green lightened lightened')
-                          #(#MenuItem #value: 'Color green lightened')
-                          #(#MenuItem #value: 'Color green: 100')
-                          #(#MenuItem #value: 'Color green:  80')
-                          #(#MenuItem #value: 'Color green:  60')
-                          #(#MenuItem #value: 'Color green:  40')
-                          #(#MenuItem #value: 'Color green:  20')
-                        )
-                        nil
-                        nil
-                )
+  ^ #(
+        #(  'B/W'
+            gray
+            gray:
+            #(  white
+                veryLightGray
+                lightGray
+                gray 
+                darkGray 
+                veryDarkGray 
+                black 
+             )
         )
-        (#MenuItem
-            #value: 'Color blue'
-            #label: 'B'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( 
-                          #(#MenuItem #value: 'Color blue lightened lightened')
-                          #(#MenuItem #value: 'Color blue lightened')
-                          #(#MenuItem #value: 'Color blue: 100')
-                          #(#MenuItem #value: 'Color blue:  80')
-                          #(#MenuItem #value: 'Color blue:  60')
-                          #(#MenuItem #value: 'Color blue:  40')
-                          #(#MenuItem #value: 'Color blue:  20')
-                        )
-                        nil
-                        nil
-                )
-        )
-        (#MenuItem
-            #value: ''
+
+        #(  'R'
+            red
+            red:
+            #( lightened 100 80 60 40 )
+         )
+
+        #(  'G'
+            green
+            green:
+            #( lightened 100 80 60 40 )
+         )
+
+        #(  'B'
+            blue
+            blue:
+            #( lightened 100 80 60 40 )
+         )
+
+        #(  'C'
+            cyan
+            #'cyan:magenta:yellow:'
+            #(
+                lightened
+                #( 100  0  0 )
+                #( 100 20 20 )
+                #( 100 40 40 )
+                #( 100 60 60 )
+                #( 100 80 80 )
+             )
         )
-        (#MenuItem
-            #value: 'Color cyan'
-            #label: 'C'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( 
-                          #(#MenuItem #value: 'Color cyan lightened lightened')
-                          #(#MenuItem #value: 'Color cyan lightened')
-                          #(#MenuItem #value: 'Color cyan: 100 magenta:  0 yellow:  0')
-                          #(#MenuItem #value: 'Color cyan: 100 magenta: 20 yellow: 20')
-                          #(#MenuItem #value: 'Color cyan: 100 magenta: 40 yellow: 40')
-                          #(#MenuItem #value: 'Color cyan: 100 magenta: 60 yellow: 60')
-                          #(#MenuItem #value: 'Color cyan: 100 magenta: 80 yellow: 80')
-                        )
-                        nil
-                        nil
-                )
+
+        #(  'M'
+            magenta
+            #'cyan:magenta:yellow:'
+            #(
+                lightened
+                #(  0 100  0 )
+                #( 20 100 20 )
+                #( 40 100 40 )
+                #( 60 100 60 )
+                #( 80 100 80 )
+             )
         )
-        (#MenuItem
-            #value: 'Color magenta'
-            #label: 'M'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( 
-                          #(#MenuItem #value: 'Color magenta lightened lightened')
-                          #(#MenuItem #value: 'Color magenta lightened')
-                          #(#MenuItem #value: 'Color cyan:  0 magenta: 100 yellow:  0')
-                          #(#MenuItem #value: 'Color cyan: 20 magenta: 100 yellow: 20')
-                          #(#MenuItem #value: 'Color cyan: 40 magenta: 100 yellow: 40')
-                          #(#MenuItem #value: 'Color cyan: 60 magenta: 100 yellow: 60')
-                          #(#MenuItem #value: 'Color cyan: 80 magenta: 100 yellow: 80')
-                        )
-                        nil
-                        nil
-                )
-        )
-        (#MenuItem
-            #value: 'Color yellow'
-            #label: 'Y'
-            #'isButton:' true
-            #submenu:
-               #(#Menu #( 
-                          #(#MenuItem #value: 'Color yellow lightened lightened')
-                          #(#MenuItem #value: 'Color yellow lightened')
-                          #(#MenuItem #value: 'Color cyan:  0 magenta: 0  yellow: 100')
-                          #(#MenuItem #value: 'Color cyan: 20 magenta: 20 yellow: 100')
-                          #(#MenuItem #value: 'Color cyan: 40 magenta: 40 yellow: 100')
-                          #(#MenuItem #value: 'Color cyan: 60 magenta: 60 yellow: 100')
-                          #(#MenuItem #value: 'Color cyan: 80 magenta: 80 yellow: 100')
-                        )
-                        nil
-                        nil
-                )
+
+        #(  'Y'
+            yellow
+            #'cyan:magenta:yellow:'
+            #(
+                lightened
+                #(  0  0 100 )
+                #( 20 20 100 )
+                #( 40 40 100 )
+                #( 60 60 100 )
+                #( 80 80 100 )
+             )
         )
     )
-    nil
-    nil
-    )
+!
+
+colorMenu:labelAreColored value:aValue
+    "returns a color menu
+    "
+    |menu fgOrBg mainCol style|
+
+    menu  := Menu new.
+    style := labelAreColored == false ifTrue:[#backgroundColor] ifFalse:[#color].
+
+    self colorDefinition do:[:aSlice|
+        |size colOp color item smenu|
+
+        mainCol := Color perform:(aSlice at:2).
+        item    := MenuItem labeled:(Text string:(aSlice at:1) emphasis:(#backgroundColor->mainCol)).
+        smenu   := Menu new.
+        colOp   := aSlice at:3.
 
+        (aSlice at:4) do:[:el||sitem label|
+            el isSymbol ifTrue:[
+                color := el == #lightened ifTrue:[mainCol perform:el] ifFalse:[Color perform:el].
+                label := el.
+            ] ifFalse:[
+                el isNumber ifTrue:[
+                    color := Color perform:colOp with:el.
+                    label := colOp, ' ', el printString.
+                ] ifFalse:[
+                    color := Color perform:colOp with:(el at:1) with:(el at:2) with:(el at:3).
+                    label := ''.
+                    colOp keywords keysAndValuesDo:[:i :c| label := label, ' ', c, ' ' , (el at:i) printString ].
+                ]
+            ].
+            sitem := MenuItem labeled:(Text string:('Color ', label) emphasis:(style->color)).
+            sitem argument:color.
+            sitem value:aValue.
+            smenu addItem:sitem.
+        ].
+        item submenu:smenu.
+        item value:nil.
+        menu addItem:item        
+    ].
+    ^ menu
+"
+(ColorMenu colorMenu:true  value:nil) startUp
+(ColorMenu colorMenu:false value:#aSelector:) startUp
+"
 ! !
 
 !ColorMenu class methodsFor:'release resources'!
 
 releaseResources
-    "called by application to release the both Menus and thus the allocate Colors"
-
-    ForegroundColoredMenu := BackgroundColoredMenu := nil
+    "obsolete
+    "
 ! !
 
 !ColorMenu methodsFor:'accept'!
@@ -293,7 +228,7 @@
         ifFalse:
         [
             holder label: item label.
-            color := self color
+            color := item argument.
         ].
         model notNil ifTrue:[model value:color]
     ]
@@ -411,26 +346,24 @@
 
 setupMenu
     "setup menu"
-
-    |menu|
+    |menu item|
 
-    labelsAreColored 
-        ifTrue: [menu := ForegroundColoredMenu ? (ForegroundColoredMenu := self class menu: labelsAreColored)]
-        ifFalse:[menu := BackgroundColoredMenu ? (BackgroundColoredMenu := self class menu: labelsAreColored)].
-
+    menu := self class colorMenu:labelsAreColored value:nil.
+    menu itemsDo:[:el| el isButton:true].
+    menu addItem:(MenuItem labeled:'-') beforeIndex:5.
+    menu addItem:(MenuItem labeled:'-') beforeIndex:2.
+    menu addItem:(MenuItem labeled:'-') beforeIndex:1.
+    item := MenuItem labeled:(Text string:'   ' emphasis:(#backgroundColor->DefaultViewBackgroundColor)).
+    item value:#selection.
+    menu addItem:item beforeIndex:1.
     self menu:menu.
 
-    self do:
-    [:anItem|
-        (anItem submenu) notNil ifTrue:
-        [
+    self do:[:anItem|
+        (anItem submenu) notNil ifTrue:[
             anItem enabled:enabledChannel.
-        ] 
-        ifFalse:
-        [
-            anItem value == #selection 
-                ifTrue: [anItem indication:enabledChannel] 
-                ifFalse:[anItem enabled:false]
+        ] ifFalse:[
+            anItem value == #selection ifTrue:[anItem indication:enabledChannel] 
+                                      ifFalse:[anItem enabled:false]
         ]
     ]
 ! !
@@ -446,6 +379,6 @@
 !ColorMenu class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.7 1998-01-18 18:21:31 tz Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.8 1998-01-19 08:27:13 ca Exp $'
 ! !
 ColorMenu initialize!