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