PanelView.st
author claus
Mon, 10 Oct 1994 04:03:47 +0100
changeset 59 450ce95a72a4
parent 38 4b9b70b2cc87
child 60 f3c738c24ce6
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
View subclass:#PanelView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'layout verticalSpace horizontalSpace mustRearrange'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
       category:'Views-Layout'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
PanelView comment:'
5
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    24
$Header: /cvs/stx/stx/libwidg/PanelView.st,v 1.5 1994-08-07 13:23:05 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    25
'!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    26
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    27
!PanelView class methodsFor:'documentation'!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    29
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    30
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    31
 COPYRIGHT (c) 1989 by Claus Gittinger
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    32
              All Rights Reserved
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    34
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    35
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    37
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    38
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    39
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    40
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    41
!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    43
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    44
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    45
$Header: /cvs/stx/stx/libwidg/PanelView.st,v 1.5 1994-08-07 13:23:05 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    46
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    47
!
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    49
documentation
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    50
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    51
    this is a view for holding subviews. (layout-widget ?!!)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    52
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    53
    Instances of PanelView try to get all their subviews into them,
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    54
    arranging subviews left-to-right, top-to-bottom.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    55
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    56
    If you dont like its layout, define a new subclass or use one of
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    57
    the existing subclasses: HorizontalPanelView and VerticalPanelView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    58
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
    59
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
!PanelView methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
    layout := #center.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
    verticalSpace := ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
    horizontalSpace := ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
    mustRearrange := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
    mustRearrange ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
        self setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
    super realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
!PanelView methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
verticalSpace:numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
    "set the space between elements (default is 1mm)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
    verticalSpace := numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
horizontalSpace:numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    "set the space between elements (default is 1mm)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
    horizontalSpace := numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
space:numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
    "set the space between elements (default is 1mm)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
    horizontalSpace := numberOfPixels.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    verticalSpace := numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   100
layout
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   101
    "return the layout as symbol.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   102
     the returned value is #left / #top; #spread; #center or #right / #bottom"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   103
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   104
    ^ layout
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   105
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   106
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
layout:aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
    "change the layout - the argument, aSymbol is interpreted in subclasses
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
     HorizontalPanelView and VerticalPanelView;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
     it may be: #left / #top; #spread; #center or #right / #bottom"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
    (layout ~~ aSymbol) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
        layout := aSymbol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
        self layoutChanged
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
addSubView:aView
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   119
    "redefined to recompute layout when a subview is added"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   120
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
    super addSubView:aView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    self layoutChanged
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   123
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   124
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   125
addSubView:newView after:aView
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   126
    "redefined to recompute layout when a subview is added"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   127
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   128
    super addSubView:newView after:aView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   129
    self layoutChanged
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   130
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   131
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   132
addSubView:newView before:aView
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   133
    "redefined to recompute layout when a subview is added"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   134
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   135
    super addSubView:newView before:aView.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   136
    self layoutChanged
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
!PanelView methodsFor:'event processing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
    super sizeChanged:how.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
    self setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
!PanelView methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
layoutChanged
15
0dbce35d3c69 *** empty log message ***
claus
parents: 5
diff changeset
   149
    shown ifTrue:[
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
        self setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
        mustRearrange := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
    "(re)compute position of every child"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   158
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   159
    |first xpos ypos maxHeightInRow thisRow fixRow|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
        xpos := horizontalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
        ypos := verticalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
        maxHeightInRow := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
        first := true.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   167
        thisRow := OrderedCollection new.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
        subViews do:[:child |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
            "go to next row, if this subview won't fit"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
            first ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
                (xpos + child widthIncludingBorder + horizontalSpace) > width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   172
                ifTrue: [
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   173
                    thisRow notEmpty ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   174
                        thisRow do:[:rowElement |
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   175
                            rowElement heightIncludingBorder < maxHeightInRow ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   176
                                rowElement top:(rowElement top + (maxHeightInRow - rowElement heightIncludingBorder))
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   177
                            ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   178
                        ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   179
                    ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   180
                    ypos := ypos + verticalSpace + maxHeightInRow.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   181
                    xpos := horizontalSpace.
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   182
                    maxHeightInRow := 0.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   183
                    thisRow := OrderedCollection new.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   185
            ].
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   186
            thisRow add:child.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   187
            child origin:(xpos@ypos).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   188
            xpos := xpos + (child widthIncludingBorder) + horizontalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   189
            (maxHeightInRow < (child heightIncludingBorder)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   190
                maxHeightInRow := child heightIncludingBorder
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   191
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   192
            first := false
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   193
        ].
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   194
        thisRow notEmpty ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   195
            thisRow do:[:rowElement |
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   196
                rowElement heightIncludingBorder < maxHeightInRow ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   197
                    rowElement top:(rowElement top + (maxHeightInRow - rowElement heightIncludingBorder))
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   198
                ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   199
            ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 15
diff changeset
   200
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   201
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   202
    mustRearrange := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
! !