provides a basic color menu reused by
other components. fast rebuild thus not catched
--- 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!