"
COPYRIGHT (c) 1989-92 by Claus Gittinger
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.
"
View subclass:#PanelView
instanceVariableNames:'layout verticalSpace horizontalSpace mustRearrange'
classVariableNames:''
poolDictionaries:''
category:'Views-Layout'
!
PanelView comment:'
COPYRIGHT (c) 1989-92 by Claus Gittinger
All Rights Reserved
this is a view for holding subviews. (layout-widget ?!)
this one just tries to get everything into its space -
if you dont like its layout, define a subclass ...
HorizontalPanelView and VerticalPanelView are two of them.
%W% %E%
written spring/summer 89 by claus
'!
!PanelView methodsFor:'initialization'!
initialize
super initialize.
layout := #center.
verticalSpace := ViewSpacing.
horizontalSpace := ViewSpacing.
mustRearrange := false
!
realize
mustRearrange ifTrue:[
self setChildPositions
].
super realize
! !
!PanelView methodsFor:'accessing'!
verticalSpace:numberOfPixels
"set the space between elements (default is 1mm)"
verticalSpace := numberOfPixels
!
horizontalSpace:numberOfPixels
"set the space between elements (default is 1mm)"
horizontalSpace := numberOfPixels
!
space:numberOfPixels
"set the space between elements (default is 1mm)"
horizontalSpace := numberOfPixels.
verticalSpace := numberOfPixels
!
layout:aSymbol
"change the layout - the argument, aSymbol is interpreted in subclasses
HorizontalPanelView and VerticalPanelView;
it may be: #left / #top; #spread; #center or #right / #bottom"
(layout ~~ aSymbol) ifTrue:[
layout := aSymbol.
self layoutChanged
]
!
addSubView:aView
super addSubView:aView.
self layoutChanged
! !
!PanelView methodsFor:'event processing'!
sizeChanged:how
super sizeChanged:how.
self setChildPositions
! !
!PanelView methodsFor:'private'!
layoutChanged
(shown and:[realized]) ifTrue:[
self setChildPositions
] ifFalse:[
mustRearrange := true
]
!
setChildPositions
"(re)compute position of every child"
|first xpos ypos maxHeightInRow|
subViews notNil ifTrue:[
xpos := horizontalSpace.
ypos := verticalSpace.
maxHeightInRow := 0.
first := true.
subViews do:[:child |
"go to next row, if this subview won't fit"
first ifFalse: [
(xpos + child widthIncludingBorder + horizontalSpace) > width
ifTrue: [
ypos := ypos + verticalSpace + maxHeightInRow.
xpos := horizontalSpace.
maxHeightInRow := 0
]
].
child origin:(xpos@ypos).
xpos := xpos + (child widthIncludingBorder) + horizontalSpace.
(maxHeightInRow < (child heightIncludingBorder)) ifTrue:[
maxHeightInRow := child heightIncludingBorder
].
first := false
]
].
mustRearrange := false
! !