PanelView.st
author claus
Wed, 13 Oct 1993 02:04:14 +0100
changeset 3 9d7eefb5e69f
parent 0 e6a541c1c0eb
child 5 7b4fb1b170e5
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
3
claus
parents: 0
diff changeset
     2
 COPYRIGHT (c) 1989-93 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:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
3
claus
parents: 0
diff changeset
    22
COPYRIGHT (c) 1989-93 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
3
claus
parents: 0
diff changeset
    25
this is a view for holding subviews. (layout-widget ?!!)
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
this one just tries to get everything into its space -
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
if you dont like its layout, define a subclass ...
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
HorizontalPanelView and VerticalPanelView are two of them.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
3
claus
parents: 0
diff changeset
    32
$Header: /cvs/stx/stx/libwidg/PanelView.st,v 1.2 1993-10-13 01:03:04 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
written spring/summer 89 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
!PanelView methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
    layout := #center.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
    verticalSpace := ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
    horizontalSpace := ViewSpacing.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
    mustRearrange := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
    mustRearrange ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
        self setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
    super realize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
!PanelView methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
verticalSpace:numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
    "set the space between elements (default is 1mm)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
    verticalSpace := numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
horizontalSpace:numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
    "set the space between elements (default is 1mm)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
    horizontalSpace := numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
space:numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
    "set the space between elements (default is 1mm)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
    horizontalSpace := numberOfPixels.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
    verticalSpace := numberOfPixels
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
layout:aSymbol
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
    "change the layout - the argument, aSymbol is interpreted in subclasses
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
     HorizontalPanelView and VerticalPanelView;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
     it may be: #left / #top; #spread; #center or #right / #bottom"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
    (layout ~~ aSymbol) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
        layout := aSymbol.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
        self layoutChanged
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
addSubView:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    super addSubView:aView.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
    self layoutChanged
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
!PanelView methodsFor:'event processing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
    super sizeChanged:how.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
    self setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
!PanelView methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
layoutChanged
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
    (shown and:[realized]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
        self setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
        mustRearrange := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
setChildPositions
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
    "(re)compute position of every child"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
    |first xpos ypos maxHeightInRow|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
    subViews notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
        xpos := horizontalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
        ypos := verticalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
        maxHeightInRow := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
        first := true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
        subViews do:[:child |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
            "go to next row, if this subview won't fit"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
            first ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
                (xpos + child widthIncludingBorder + horizontalSpace) > width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
                ifTrue: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
                    ypos := ypos + verticalSpace + maxHeightInRow.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
                    xpos := horizontalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
                    maxHeightInRow := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
            child origin:(xpos@ypos).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
            xpos := xpos + (child widthIncludingBorder) + horizontalSpace.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
            (maxHeightInRow < (child heightIncludingBorder)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
                maxHeightInRow := child heightIncludingBorder
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
            ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
            first := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
    mustRearrange := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
! !