"
COPYRIGHT (c) 1995 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
MenuPanel subclass:#ColorMenu
instanceVariableNames:'model enabledChannel'
classVariableNames:'Menu'
poolDictionaries:''
category:'Interface-UIPainter'
!
!ColorMenu class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1995 by eXept Software AG
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
documentation
"
ColorMenu used by UIPainter
[see also:]
UIPainter
ColorMenuSpec
[author:]
Claus Atzkern
"
!
examples
"
simple example
[exBegin]
|tool top channel|
top := StandardSystemView new.
top extent:250@30.
channel := (Color red) asValue.
tool := self origin:0.0@0.0 corner:1.0@1.0 in:top.
tool model:channel.
top open.
[exEnd]
"
! !
!ColorMenu class methodsFor:'menu spec'!
menu
"get the Menu
"
|col submenu string|
Menu isNil ifTrue:[
Menu := self menuSpec decodeAsLiteralArray.
string := String new:3.
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
]
]
].
].
^ Menu
"
Menu := nil
"
!
menuSpec
"specification used to build the Menu
"
"
Menu := nil
"
^ #(#Menu #(
(#MenuItem
#value: #selection
)
(#MenuItem
#label: '='
)
(#MenuItem
#value: 'Color gray'
#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' )
)
nil
nil
)
)
(#MenuItem
#value: 'Color blue'
#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' )
)
nil
nil
)
)
(#MenuItem
#value: 'Color red'
#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' )
)
nil
nil
)
)
(#MenuItem
#value: 'Color green'
#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' )
)
nil
nil
)
)
)
nil
nil
)
! !
!ColorMenu class methodsFor:'release resources'!
releaseResources
"called by application to release the Menu and thus the allocate Colors
"
Menu := nil
! !
!ColorMenu methodsFor:'accept'!
accept:anItem
"accept current selected item
"
|item holder color|
(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.
].
model notNil ifTrue:[model value:color]
]
! !
!ColorMenu methodsFor:'accessing'!
color
"get current color
"
^ (self colorHolder label emphasis at:1) value
!
color:aColor
"set current color
"
|holder label|
aColor isColor ifFalse:[
enabledChannel value:false
] ifTrue:[
self disabledRedrawDo:[
holder := self colorHolder.
label := Text string:(holder label string) emphasis:(#backgroundColor->aColor).
enabledChannel value:true.
holder label:label.
]
]
! !
!ColorMenu methodsFor:'accessing channels'!
model
"get my color channel
"
^ model
!
model:aValueHolder
"set my color channel
"
model notNil ifTrue:[
model removeDependent:self.
].
model := aValueHolder.
model notNil ifTrue:[
model addDependent:self.
self color:(model value).
].
! !
!ColorMenu methodsFor:'accessing look'!
showSeparatingLines
"always returns true
"
^ 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)
].
super update:something with:aParameter from:changedObject
! !
!ColorMenu methodsFor:'initialization'!
destroy
"release color channel dependency
"
self model:nil.
super destroy.
!
initialize
"setup menu
"
super initialize.
self verticalLayout:false.
self fitFirstPanel:false.
enabledChannel := false asValue.
self setupMenu.
!
setupMenu
"setup menu
"
|menu|
menu := self class menu.
self menu:menu.
self do:[:anItem|
(anItem submenu) notNil ifTrue:[
anItem enabled:enabledChannel.
] ifFalse:[
anItem value == #selection ifTrue:[
anItem indication:enabledChannel.
] ifFalse:[
anItem enabled:false
]
]
].
! !
!ColorMenu methodsFor:'private'!
colorHolder
"returns the item which keeps the selected color in its label
"
^ self itemAt:#selection
! !
!ColorMenu class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libwidg2/ColorMenu.st,v 1.6 1997-11-14 09:10:10 ca Exp $'
! !