DSVLabelView.st
author Claus Gittinger <cg@exept.de>
Wed, 14 Jul 1999 16:22:39 +0200
changeset 1454 5d4303847148
parent 1426 9a067c26db45
child 1487 fd003e2156cc
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     1
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     2
 COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     3
              All Rights Reserved
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     4
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e22c45e26653 intitial checkin
ca
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    10
 hereby transferred.
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    11
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    12
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    13
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    14
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    15
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    16
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    17
SimpleView subclass:#DSVLabelView
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
    18
	instanceVariableNames:'items columnView selection enabled enteredItem'
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    19
	classVariableNames:''
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    20
	poolDictionaries:''
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    21
	category:'Views-DataSet'
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    22
!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    23
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    24
!DSVLabelView class methodsFor:'documentation'!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    25
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    26
copyright
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    27
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    28
 COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    29
              All Rights Reserved
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    30
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    31
 This software is furnished under a license and may be used
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    32
 only in accordance with the terms of that license and with the
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    33
 inclusion of the above copyright notice.   This software may not
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    34
 be provided or otherwise made available to, or used by, any
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    35
 other person.  No title to or ownership of the software is
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    36
 hereby transferred.
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    37
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    38
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    39
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    40
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    41
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    42
!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    43
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    44
documentation
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    45
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    46
    shows the labels assigned to the column descriptions. Used by the
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    47
    DataSetView
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    48
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    49
    [Instance variables:]
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    50
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    51
        columnView      <DSVColumnView>         column view which shows the columns
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    52
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    53
        items           <OrderedCollection>     list of items; each item describes
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    54
                                                one column.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    55
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    56
        selection       <Item or nil>           current selected item or nil. An none
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    57
                                                empty selection exists during pressing
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    58
                                                a button.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    59
1086
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    60
        enabled         <Boolean>               if a press action exists on a column
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    61
                                                entry, this action could be enabled or
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    62
                                                disabled.
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    63
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    64
        enteredItem     <Item>                  current entered item; if a press action
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    65
                                                is defined, this itenm is highlighted.
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    66
                                                Used to redraw the item not highlighted
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    67
                                                if the item is leaved.
2b5746c733f6 add some comment
ca
parents: 1085
diff changeset
    68
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    69
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    70
    [author:]
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    71
        Claus Atzkern
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    72
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    73
    [see also:]
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    74
        DSVColumnView
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    75
        DataSetColumnSpec
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    76
        DataSetColumn
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    77
        DataSetView
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    78
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    79
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    80
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    81
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    82
! !
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    83
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    84
!DSVLabelView class methodsFor:'constants'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    85
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    86
activeLevel
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    87
    "returns the active level; item is pressed
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    88
    "
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
    89
    ^ -1
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    90
!
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    91
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    92
passiveLevel
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    93
    "returns the passive level; item not pressed
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    94
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    95
    ^ 1
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    96
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    97
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    98
verticalInset
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    99
    "returns the vertical inset added to the maximum label height
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   100
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   101
    ^ 8
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   102
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   103
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   104
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   105
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   106
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   107
!DSVLabelView methodsFor:'accessing'!
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   108
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   109
columnView
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   110
    ^ columnView
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   111
!
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   112
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   113
enabled
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   114
    ^ enabled
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   115
!
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   116
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   117
enabled:aState
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   118
    enabled := aState.
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   119
! !
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   120
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   121
!DSVLabelView methodsFor:'drawing'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   122
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   123
invalidateItem:anItem
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   124
    "invalidate rectangle assigned to an item
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   125
    "
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   126
    shown ifTrue:[
1426
9a067c26db45 bug fix on highlighting label; copy the layout
Claus Gittinger <cg@exept.de>
parents: 1408
diff changeset
   127
        self invalidate:(anItem layout copy)
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   128
    ]
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   129
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   130
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   131
invalidateX:x y:y width:w height:h
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   132
    "invalidate a rectangle
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   133
    "
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   134
    shown ifTrue:[
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   135
        self invalidate:(Rectangle left:x top:y width:w height:h)
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   136
    ].
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   137
!
562
b7db6629f2cf recompute height from column labels
ca
parents: 560
diff changeset
   138
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   139
redrawX:x y:y width:w height:h
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   140
    "redraw a rectangle
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   141
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   142
    |inset savClip bg fg fgColor bgColor maxX layout left width actLvl pasLvl lv|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   143
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   144
    shown ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   145
        ^ self
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   146
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   147
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   148
    bgColor := columnView backgroundColor.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   149
    fgColor := columnView foregroundColor.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   150
    inset   := columnView horizontalSpacing.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   151
    actLvl  := self class activeLevel.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   152
    pasLvl  := self class passiveLevel.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   153
    maxX    := x + w.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   154
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   155
    self paint:bgColor.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   156
    self fillRectangleX:x y:y width:w height:h.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   157
859
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   158
    items isEmpty ifTrue:[
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   159
        ^ self
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   160
    ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   161
    savClip := clipRect.
859
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   162
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   163
    self clippingRectangle:(Rectangle left:x top:y width:w height:h).
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   164
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   165
    items do:[:anItem|
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   166
        layout := anItem layout.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   167
        left   := layout left.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   168
        width  := layout width.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   169
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   170
        (left < maxX and:[layout right > x]) ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   171
            (bg := anItem backgroundColor) notNil ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   172
                bg ~= bgColor ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   173
                    self paint:bg.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   174
                    self fillRectangleX:left y:y width:width height:h.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   175
                ]
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   176
            ] ifFalse:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   177
                bg := bgColor
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   178
            ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   179
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   180
            fg := (anItem foregroundColor) ? fgColor.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   181
            lv := selection == anItem ifTrue:[actLvl] ifFalse:[pasLvl].
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   182
            self paint:fg on:bg.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   183
            anItem redrawLabelOn:self hInset:inset + (lv abs).
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   184
            anItem == enteredItem ifTrue:[lv := lv + 1].
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   185
            columnView drawEdgesAtX:left y:0 width:width height:height level:lv on:self
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   186
        ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   187
    ].
859
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   188
    self clippingRectangle:savClip.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   189
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   190
562
b7db6629f2cf recompute height from column labels
ca
parents: 560
diff changeset
   191
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   192
! !
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   193
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   194
!DSVLabelView methodsFor:'event handling'!
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   195
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   196
buttonMotion:state x:x y:y
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   197
    |sensor|
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   198
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   199
    (selection isNil and:[(sensor := self sensor) notNil]) ifTrue:[
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   200
        self itemEntered:(self detectItemAtX:x y:y)
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   201
    ].
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   202
    super buttonMotion:state x:x y:y
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   203
!
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   204
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   205
buttonPress:button x:x y:y
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   206
    "handle a button press event; checks whether the item under the mouse
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   207
     is selectable. If true, the selection is set to the item.
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   208
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   209
    |item|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   210
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   211
    self itemEntered:nil.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   212
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   213
    enabled ifTrue:[
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   214
        (     button == 1
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   215
         and:[selection isNil
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   216
         and:[(item := self detectItemAtX:x y:y) notNil
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   217
         and:[item isSelectable]]]
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   218
        ) ifTrue:[
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   219
            self invalidateItem:(selection := item)
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   220
        ]
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   221
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   222
    super buttonPress:button x:x y:y
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   223
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   224
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   225
!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   226
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   227
buttonRelease:button x:x y:y
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   228
    "handle a button press event; checks whether the item under the mouse
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   229
     is the selected item. If true, the application is informed.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   230
    "
1269
f33ad4d38b5b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   231
    |item same layout|
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   232
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   233
    self itemEntered:nil.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   234
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   235
    ( button == 1 and:[selection notNil]) ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   236
        same      := (self detectItemAtX:x y:y) == selection.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   237
        item      := selection.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   238
        layout    := item layout.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   239
        selection := nil.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   240
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   241
        self invalidateItem:item.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   242
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   243
        same ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   244
            item sendClickMsgTo:(self application)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   245
        ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   246
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   247
    super buttonRelease:button x:x y:y.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   248
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   249
!
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   250
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   251
itemEntered:anItemOrNil
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   252
    |prevEntered|
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   253
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   254
    enteredItem == anItemOrNil ifTrue:[
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   255
        ^ self
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   256
    ].
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   257
    prevEntered := enteredItem.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   258
    enteredItem := anItemOrNil.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   259
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   260
    prevEntered notNil ifTrue:[
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   261
        prevEntered isSelectable ifTrue:[
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   262
            self invalidateItem:prevEntered
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   263
        ]
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   264
    ].
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   265
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   266
    enteredItem notNil ifTrue:[
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   267
        enteredItem isSelectable ifTrue:[
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   268
            self invalidateItem:enteredItem
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   269
        ]
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   270
    ]
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   271
!
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   272
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   273
pointerLeave:state
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   274
    self itemEntered:nil.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   275
    super pointerLeave:state
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   276
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   277
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   278
!DSVLabelView methodsFor:'instance creation'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   279
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   280
for:aColumnView
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   281
    "initialization
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   282
    "
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   283
    enabled := true.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   284
    items := OrderedCollection new.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   285
    columnView := aColumnView.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   286
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   287
!
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   288
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   289
initialize
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   290
    super initialize.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   291
    self enableMotionEvents.
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   292
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   293
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   294
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   295
!DSVLabelView methodsFor:'notifications'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   296
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   297
columnsLayoutChanged
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   298
    "layout of columns changed and thus the layout of
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   299
     all items.
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   300
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   301
    items size == columnView numberOfColumns ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   302
        self columnsSizeChanged
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   303
    ] ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   304
        self updateLayoutsHeight:(self height).
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   305
        self invalidate.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   306
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   307
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   308
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   309
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   310
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   311
columnsOriginChanged:aPoint
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   312
    "the origin of the columnView changed caused by a scroll operation
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   313
    "
1454
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   314
    |point pX x w h wg|
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   315
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   316
    (pX := aPoint x) == 0 ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   317
        ^ self
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   318
    ].
1454
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   319
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   320
    (wg := self windowGroup) notNil ifTrue:[
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   321
        wg processRealExposeEventsFor:self.
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   322
    ].
1454
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   323
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   324
    point := Point x:(aPoint x) y:0.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   325
    items do:[:anItem| anItem originChanged:point].
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   326
1454
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   327
"/    (self sensor hasExposeEventFor:self) ifTrue:[
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   328
"/        ^ self invalidate
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   329
"/    ].
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   330
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   331
    x := pX abs.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   332
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   333
    (w := self width - x) < 20 ifTrue:[
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   334
        ^ self invalidate
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   335
    ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   336
    h := self height.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   337
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   338
    self catchExpose.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   339
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   340
    pX < 0 ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   341
        self copyFrom:self x:0 y:0 toX:x y:0 width:w height:h async:true.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   342
        w := 0.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   343
    ] ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   344
        self copyFrom:self x:x y:0 toX:0 y:0 width:w height:h async:true.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   345
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   346
    self waitForExpose.
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   347
    self invalidateX:w y:0 width:x height:h.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   348
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   349
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   350
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   351
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   352
columnsSizeChanged
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   353
    "the list of columns changed; recreate all items
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   354
    "
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   355
    |height font|
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   356
1085
cebea5318863 add enteredItem;
ca
parents: 907
diff changeset
   357
    self itemEntered:nil.
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   358
    items := OrderedCollection new.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   359
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   360
    columnView numberOfColumns ~~ 0 ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   361
        font   := columnView font.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   362
        height := 0.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   363
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   364
        columnView columnsDo:[:aColumn||item|
1148
893a2a5a640f allow collection of strings or icons
Claus Gittinger <cg@exept.de>
parents: 1114
diff changeset
   365
            items add:(item := aColumn label).
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   366
            height := (item preferredExtent y) max:height.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   367
        ].
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   368
        height := height + self class verticalInset.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   369
        self updateLayoutsHeight:height.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   370
        self bottomInset:height negated.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   371
    ].
1408
1cda0a4fb566 use invalidate... insteat of redraw...
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   372
    self invalidate.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   373
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   374
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   375
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   376
!DSVLabelView methodsFor:'private'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   377
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   378
detectItemAtX:x y:y
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   379
    "returns item at point x@y or nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   380
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   381
    items do:[:anItem|
1148
893a2a5a640f allow collection of strings or icons
Claus Gittinger <cg@exept.de>
parents: 1114
diff changeset
   382
        (anItem layout containsPointX:x y:y) ifTrue:[ ^ anItem ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   383
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   384
    ^ nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   385
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   386
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   387
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   388
updateLayoutsHeight:h
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   389
    "update the rectangle layout for each item based on a height
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   390
    "
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   391
    |i x w|
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   392
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   393
    i := 1.
1114
5d3661d169f4 set right and left border of a column like
ca
parents: 1086
diff changeset
   394
    x := columnView margin - columnView xOriginOfContents + 1.
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   395
    columnView has3Dseparators ifFalse:[ x := x + 1].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   396
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   397
    columnView columnsDo:[:aCol|
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   398
        w := aCol width.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   399
        (items at:i) layout:(Rectangle origin:(x @ 0) extent:(w @ h)).
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   400
        i := i + 1.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   401
        x := x + w.
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   402
    ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   403
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   404
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   405
!DSVLabelView class methodsFor:'documentation'!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   406
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   407
version
1454
5d4303847148 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1426
diff changeset
   408
    ^ '$Header: /cvs/stx/stx/libwidg2/DSVLabelView.st,v 1.24 1999-07-14 14:22:39 cg Exp $'
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   409
! !