VerticalPanelView.st
author claus
Fri, 16 Jul 1993 11:44:44 +0200
changeset 0 e6a541c1c0eb
child 3 9d7eefb5e69f
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1989-92 by Claus Gittinger
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
PanelView subclass:#VerticalPanelView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:''
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
VerticalPanelView comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
COPYRIGHT (c) 1989-92 by Claus Gittinger
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
a View for childViews oriented vertical
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
all real work is done in PanelView - just redefine layout
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
%W% %E%
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
written spring/summer 89 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
!VerticalPanelView methodsFor:'queries'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
preferedExtent
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
    "return a good extent, one that makes subviews fit"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
    |sumOfHeights maxWidth|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
    subViews isNil ifTrue:[^ horizontalSpace @ verticalSpace].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
    "compute net height needed"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
    sumOfHeights := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
    maxWidth := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
    subViews do:[:child |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
        sumOfHeights := sumOfHeights + child heightIncludingBorder.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
        maxWidth := maxWidth max:(child widthIncludingBorder)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
    borderWidth ~~ 0 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
        sumOfHeights := sumOfHeights + (horizontalSpace * 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
        maxWidth := maxWidth + (horizontalSpace * 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
    sumOfHeights := sumOfHeights + ((subViews size - 1) * verticalSpace).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
    ^ maxWidth @ sumOfHeights
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
!VerticalPanelView methodsFor:'layout'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
    "(re)compute position of every child"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
    |xpos ypos space sumOfHeights numChilds l|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
    subViews isNil ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
    space := verticalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
    "compute net height needed"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
    sumOfHeights := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
    numChilds := subViews size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
    subViews do:[:child |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
        sumOfHeights := sumOfHeights + child heightIncludingBorder.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
    l := layout.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
    ((l == #center) and:[numChilds == 1]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
        l := #spread
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
    "compute position of topmost subview and space between them;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
     if they do hardly fit, leave no space between them "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    (sumOfHeights >= height) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
        ypos := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
        space := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
        (l == #bottom) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
            ypos := height - (horizontalSpace * numChilds)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
                           - sumOfHeights.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
            borderWidth == 0 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
                ypos := ypos + horizontalSpace 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
        ] ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
            (l == #spread) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
                space := (height - sumOfHeights) // (numChilds + 1).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
                ypos := space.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
                (space == 0) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
                    ypos := (height - sumOfHeights) // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
            ] ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
                (l == #center) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
                    ypos := (height - (sumOfHeights
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
                                       + ((numChilds - 1) * space))) // 2
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
                ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
                    borderWidth == 0 ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
                        ypos := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
                    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
                        ypos := verticalSpace
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
                    ]
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
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
    "now set positions"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
    subViews do:[:childView |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
        xpos := (width - childView widthIncludingBorder) // 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
        (xpos < 0) ifTrue:[ xpos := 0 ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
        childView origin:(xpos@ypos).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
        ypos := ypos + (childView heightIncludingBorder) + space
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
! !