ColorMenu.st
changeset 664 53f8cdd4462c
parent 617 60997dbaa749
child 666 801db9028157
--- a/ColorMenu.st	Sat Jan 17 12:10:06 1998 +0100
+++ b/ColorMenu.st	Sun Jan 18 19:21:31 1998 +0100
@@ -13,8 +13,8 @@
 
 
 MenuPanel subclass:#ColorMenu
-	instanceVariableNames:'model enabledChannel'
-	classVariableNames:'Menu'
+	instanceVariableNames:'model enabledChannel labelsAreColored'
+	classVariableNames:'ForegroundColoredMenu BackgroundColoredMenu'
 	poolDictionaries:''
 	category:'Interface-UIPainter'
 !
@@ -68,83 +68,119 @@
 
 ! !
 
+!ColorMenu class methodsFor:'initialization'!
+
+initialize
+
+    super initialize.
+
+    self releaseResources
+
+
+! !
+
 !ColorMenu class methodsFor:'menu spec'!
 
-menu
-    "get the Menu
-    "
-    |col submenu string|
+menu: labelAreColored
+    "get the Menu"
 
-    Menu isNil ifTrue:[
-        Menu   := self menuSpec decodeAsLiteralArray.
-        string := String new:3.
+    |color submenu string menu|
 
-        Menu itemsDo:[:anItem|
-            submenu := anItem submenu.
-            submenu notNil ifTrue:[
-                submenu itemsDo:[:el|
-                    col := Parser evaluate:(el value).
-                    el label:(Text string:string emphasis:(#backgroundColor->col)).
-                    el value:nil.
-                ].
-                col := Parser evaluate:(anItem value).
-                col := Array with:(#backgroundColor->col) with:#bold.
-                anItem label:(Text string:string emphasis:col).
-                anItem value:nil.
-            ] ifFalse:[
-                anItem value == #selection ifTrue:[
-                    anItem label:(Text string:string emphasis:(#backgroundColor->DefaultViewBackgroundColor)).
-                ] ifFalse:[
-                    anItem enabled:false
-                ]
+    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
-"
-Menu := nil
-"
+    ^menu
 !
 
 menuSpec
     "specification used to build the Menu
     "
-"
-Menu := nil
-"
 
  ^ #(#Menu #(
         (#MenuItem
             #value: #selection
         )
         (#MenuItem
-            #label: '='
+            #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 gray'
+            #value: 'Color red'
+            #label: 'R'
+            #'isButton:' true
             #submenu:
-               #(#Menu #( #(#MenuItem #value: 'Color white' )
-                          #(#MenuItem #value: 'Color gray:95' )
-                          #(#MenuItem #value: 'Color gray:90' )
-                          #(#MenuItem #value: 'Color gray:85' )
-                          #(#MenuItem #value: 'Color gray:80' )
-                          #(#MenuItem #value: 'Color gray:75' )
-                          #(#MenuItem #value: 'Color gray:70' )
-                          #(#MenuItem #value: 'Color gray:65' )
-                          #(#MenuItem #value: 'Color gray:60' )
-                          #(#MenuItem #value: 'Color gray:55' )
-                          #(#MenuItem #value: 'Color gray:50' )
-                          #(#MenuItem #value: 'Color gray:45' )
-                          #(#MenuItem #value: 'Color gray:40' )
-                          #(#MenuItem #value: 'Color gray:35' )
-                          #(#MenuItem #value: 'Color gray:30' )
-                          #(#MenuItem #value: 'Color gray:25' )
-                          #(#MenuItem #value: 'Color gray:20' )
-                          #(#MenuItem #value: 'Color gray:15' )
-                          #(#MenuItem #value: 'Color gray:10' )
-                          #(#MenuItem #value: 'Color gray:5' )
-                          #(#MenuItem #value: 'Color black' )
+               #(#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
@@ -152,95 +188,74 @@
         )
         (#MenuItem
             #value: 'Color blue'
+            #label: 'B'
+            #'isButton:' true
             #submenu:
                #(#Menu #( 
-                          #(#MenuItem #value: 'Color blue lightened lightened' )
-                          #(#MenuItem #value: 'Color blue lightened' )
-                          #(#MenuItem #value: 'Color red:0    green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:10   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:20   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:30   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:40   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:50   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:60   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:70   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:80   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:90   green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:100  green:0   blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:10  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:20  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:30  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:40  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:50  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:60  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:70  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:80  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:90  blue:100'   )
-                          #(#MenuItem #value: 'Color red:0    green:100 blue:100'   )
+                          #(#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: 'Color red'
+            #value: ''
+        )
+        (#MenuItem
+            #value: 'Color cyan'
+            #label: 'C'
+            #'isButton:' true
             #submenu:
-               #(#Menu #(
-                          #(#MenuItem #value: 'Color red lightened lightened' )     
-                          #(#MenuItem #value: 'Color red lightened' )     
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:10  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:20  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:30  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:40  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:50  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:60  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:70  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:80  blue:0'   )
-                          #(#MenuItem #value: 'Color red:100 green:90  blue:0'   )     
-                          #(#MenuItem #value: 'Color red:100 green:100 blue:0'   )     
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:10'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:20'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:30'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:40'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:50'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:60'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:70'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:80'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:90'  )
-                          #(#MenuItem #value: 'Color red:100 green:0   blue:100' )
+               #(#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
                 )
         )
         (#MenuItem
-            #value: 'Color green'
+            #value: 'Color magenta'
+            #label: 'M'
+            #'isButton:' true
             #submenu:
                #(#Menu #( 
-                          #(#MenuItem #value: 'Color green lightened lightened'  )
-                          #(#MenuItem #value: 'Color green lightened'  )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:10  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:20  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:30  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:40  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:50  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:60  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:70  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:80  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:90  green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:100 green:100 blue:0'  )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:10' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:20' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:30' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:40' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:50' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:60' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:70' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:80' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:90' )
-                          #(#MenuItem #value: 'Color red:0   green:100 blue:100' )
+                          #(#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
@@ -256,25 +271,29 @@
 !ColorMenu class methodsFor:'release resources'!
 
 releaseResources
-    "called by application to release the Menu and thus the allocate Colors
-    "
-    Menu := nil
+    "called by application to release the both Menus and thus the allocate Colors"
+
+    ForegroundColoredMenu := BackgroundColoredMenu := nil
 ! !
 
 !ColorMenu methodsFor:'accept'!
 
 accept:anItem
-    "accept current selected item
-    "
+    "accept current selected item"
+
     |item holder color|
 
-    (item := super accept:anItem) notNil ifTrue:[
-        (holder := self colorHolder) == item ifTrue:[
+    (item := super accept:anItem) notNil 
+    ifTrue:
+    [
+        (holder := self colorHolder) == item ifTrue:
+        [
             enabledChannel value ifTrue:[color := self color]
-                                
-        ] ifFalse:[
-            holder label:(item label).
-            color := self color.
+        ] 
+        ifFalse:
+        [
+            holder label: item label.
+            color := self color
         ].
         model notNil ifTrue:[model value:color]
     ]
@@ -283,51 +302,65 @@
 !ColorMenu methodsFor:'accessing'!
 
 color
-    "get current color
-    "
-  ^ (self colorHolder label emphasis at:1) value
+    "get current color"
+
+    |firstEmphasis|
+    (firstEmphasis := (self colorHolder label emphasis at:1)) isAssociation ifTrue: [^firstEmphasis value].
+    ^(firstEmphasis at: 1) value 
 !
 
 color:aColor
-    "set current color
-    "
+    "set current color"
+
     |holder label|
 
-    aColor isColor ifFalse:[
+    aColor isColor 
+    ifFalse:
+    [
         enabledChannel value:false
-    ] ifTrue:[
-        self disabledRedrawDo:[
-            holder := self colorHolder.
-            label  := Text string:(holder label string) emphasis:(#backgroundColor->aColor).
+    ] 
+    ifTrue:
+    [
+        self disabledRedrawDo:
+        [
+            holder := self colorHolder.     
+            label  := Text string: '   ' emphasis:(#backgroundColor->aColor).
             enabledChannel value:true.
-            holder label:label.
+            holder label:label
         ]
     ]
+!
+
+labelsAreColored: aBoolean
+    "sets whether labels or their backgrounds will be colored"
+
+    labelsAreColored := aBoolean ? false.
+    self setupMenu
+
 ! !
 
 !ColorMenu methodsFor:'accessing channels'!
 
 model
-    "get my color channel
-    "
-  ^ model
+    "get my color channel"
+
+    ^model
 
 
 
 !
 
 model:aValueHolder
-    "set my color channel
-    "
-    model notNil ifTrue:[
-        model removeDependent:self. 
-    ].
-    model := aValueHolder.
+    "set my color channel"
+
+    model notNil ifTrue:[model removeDependent:self].
 
-    model notNil ifTrue:[
+    (model := aValueHolder) notNil 
+    ifTrue:
+    [
         model addDependent:self.
-        self color:(model value).
-    ].
+        self color: model value
+    ]
 
 
 
@@ -336,19 +369,18 @@
 !ColorMenu methodsFor:'accessing look'!
 
 showSeparatingLines
-    "always returns true
-    "
-  ^ true
+    "no drawing of separating lines here"
+
+    ^true
+
 ! !
 
 !ColorMenu methodsFor:'change & update'!
 
 update:something with:aParameter from:changedObject
-    "one of my models changed its value
-    "
-    changedObject == model ifTrue:[
-         ^ self color:(model value)
-    ].
+    "one of my models changed its value"
+
+    changedObject == model ifTrue:[^self color: model value].
     super update:something with:aParameter from:changedObject
 
 
@@ -359,17 +391,18 @@
 !ColorMenu methodsFor:'initialization'!
 
 destroy
-    "release color channel dependency
-    "
+    "release color channel dependency"
+
     self model:nil.
-    super destroy.
+    super destroy
 
 !
 
 initialize
-    "setup menu
-    "
+    "setup menu"
+
     super initialize.
+    labelsAreColored := false.
     self verticalLayout:false.
     self fitFirstPanel:false.
     enabledChannel := false asValue.
@@ -377,25 +410,29 @@
 !
 
 setupMenu
-    "setup menu
-    "
+    "setup menu"
+
     |menu|
 
-    menu := self class menu.
+    labelsAreColored 
+        ifTrue: [menu := ForegroundColoredMenu ? (ForegroundColoredMenu := self class menu: labelsAreColored)]
+        ifFalse:[menu := BackgroundColoredMenu ? (BackgroundColoredMenu := self class menu: labelsAreColored)].
 
     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]
         ]
-    ].
+    ]
 ! !
 
 !ColorMenu methodsFor:'private'!
@@ -409,5 +446,6 @@
 !ColorMenu class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.6 1997-11-14 09:10:10 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.7 1998-01-18 18:21:31 tz Exp $'
 ! !
+ColorMenu initialize!