ColorMenu.st
author Claus Gittinger <cg@exept.de>
Tue, 28 Oct 1997 21:08:03 +0100
changeset 583 4753eec71973
parent 476 8a93a1f8213a
child 592 c7813cfa8794
permissions -rw-r--r--
*** empty log message ***

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

    <resource: #menu>

 ^ #(#Menu #(
        (#MenuItem
            #value: #selection
        )
        (#MenuItem
            #label: '='
        )

        (#MenuItem
            #value: 'Color gray'
            #submenu:
               #(#Menu #( #(#MenuItem #value: 'Color white' )
                          #(#MenuItem #value: 'Color gray:90' )
                          #(#MenuItem #value: 'Color gray:80' )
                          #(#MenuItem #value: 'Color gray:70' )
                          #(#MenuItem #value: 'Color gray:60' )
                          #(#MenuItem #value: 'Color gray:50' )
                          #(#MenuItem #value: 'Color gray:40' )
                          #(#MenuItem #value: 'Color gray:30' )
                          #(#MenuItem #value: 'Color gray:20' )
                          #(#MenuItem #value: 'Color gray:10' )
                          #(#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 blue' )
                          #(#MenuItem #value: 'Color blue darkened' )
                        )
                        nil
                        nil
                )
        )
        (#MenuItem
            #value: 'Color red'
            #submenu:
               #(#Menu #(
                          #(#MenuItem #value: 'Color red lightened lightened' )     
                          #(#MenuItem #value: 'Color red lightened' )     
                          #(#MenuItem #value: 'Color red' )     
                          #(#MenuItem #value: 'Color red darkened'  )
                        )
                        nil
                        nil
                )
        )
        (#MenuItem
            #value: 'Color green'
            #submenu:
               #(#Menu #( 
                          #(#MenuItem #value: 'Color green lightened lightened'  )
                          #(#MenuItem #value: 'Color green lightened'  )
                          #(#MenuItem #value: 'Color green'  )
                          #(#MenuItem #value: 'Color green darkened'  )
                          #(#MenuItem #value: 'Color green darkened darkened'  )
                          #(#MenuItem #value: 'Color red:100 green:100 blue:0' )     
                          #(#MenuItem #value: '(Color red:100 green:100 blue:0) darkened'  )
                          #(#MenuItem #value: '(Color red:100 green:100 blue:0) darkened darkened'  )
                          #(#MenuItem #value: 'Color red:0 green:100 blue:100'  )
                          #(#MenuItem #value: '(Color red:0 green:100 blue:100) darkened'  )
                          #(#MenuItem #value: '(Color red:0 green:100 blue:100) darkened darkened'  )
                        )
                        nil
                        nil
                )
        )
    )
    nil
    nil
    )

    "Modified: / 27.10.1997 / 17:11:50 / cg"
! !

!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 isNil ifTrue:[
        enabledChannel value:false
    ] ifFalse:[
        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.4 1997-10-28 20:08:03 cg Exp $'
! !