--- 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!