diff -r b418df6b72d8 -r 53f8cdd4462c ColorMenu.st --- 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!