UIPainter.st
author ca
Tue, 25 Feb 1997 14:15:56 +0100
changeset 59 0a2b2ff030a0
parent 58 668eb9eae2ac
child 60 7542ab7fbbfe
permissions -rw-r--r--
so far ...

HorizontalPanelView subclass:#ButtonPanel
	instanceVariableNames:'receiver argumentToSelector'
	classVariableNames:''
	poolDictionaries:''
	privateIn:UIPainter
!

!UIPainter::ButtonPanel methodsFor:'accessing'!

receiver
    ^ receiver
!

receiver:aReceiver
    receiver := aReceiver
! !

!UIPainter::ButtonPanel methodsFor:'initialization'!

initialize
    "initialize and setup buttons
    "
    super initialize.

    self level:-1.
    self borderWidth:0.
    self horizontalLayout:#leftSpace.
    argumentToSelector := 1.

    self specification do:[:anArray|
        |selector image button seperator|

        selector := anArray at:1.

        selector notNil ifTrue:[
            image  := Image fromFile:( anArray at:2 ).
            button := Button label:image in:self.

            selector last == $: ifFalse:[
                button action:[
                    receiver notNil ifTrue:[
                        receiver perform:selector
                    ]
                ]
            ] ifTrue:[
                button pressAction:[
                    receiver notNil ifTrue:[
                        receiver perform:selector with:argumentToSelector
                    ]
                ].
                button autoRepeat:true.
                button menuHolder:self; menuMessage:#editMenu; menuPerformer:self.
            ]
        ] ifFalse:[
            seperator := View in:self.
            seperator extent:20@1.
            seperator borderWidth:0.
        ]
    ].

!

specification
    "return a spec for the buttons in the panel;
     entries consists of selector and bitmap-filename.
     nil selectors are taken as separators (see setupButtonPanel)"

    ^ #(
        #( alignSelectionLeft         'b_alignL.xbm'    )
        #( alignSelectionRight        'b_alignR.xbm'    )
        #( alignSelectionLeftAndRight 'b_alignLR.xbm'   )
        #( nil )
        #( alignSelectionTop          'b_alignT.xbm'    )
        #( alignSelectionBottom       'b_alignB.xbm'    )
        #( alignSelectionTopAndBottom 'b_alignTB.xbm'   )
        #( nil )
        #( alignSelectionCenterHor    'b_alignCH.xbm'   )
        #( alignSelectionCenterVer    'b_alignCV.xbm'   )
        #( nil )
        #( moveSelectionLeft:         'b_moveLeft.xbm'  )
        #( moveSelectionRight:        'b_moveRight.xbm' )
        #( moveSelectionUp:           'b_moveUp.xbm'    )
        #( moveSelectionDown:         'b_moveDown.xbm'  )
       )


! !

!UIPainter::ButtonPanel methodsFor:'menu'!

editMenu
    "edit menu used by buttons using an argument for the receiver; the argumentToSelector
    "
    |menu|

    menu := PopUpMenu labels:#( '1' '2' '4' '10' '20' '..' )
                        args:#(  1   2   4   10   20  nil  ).

    menu action:[:anArg||no|
        (no := anArg) isNil ifTrue:[
            no := EnterBox request:'number'.
            no := SmallInteger readFrom:no onError:0.
        ].
        no ~~ 0 ifTrue:[
            |index view|

            view := (WindowGroup lastEventQuerySignal raise) view.
            view := view menuPerformer.
            argumentToSelector := no.
            view pressAction value.
            argumentToSelector := 1.
        ]
    ].
    ^ menu
! !