DSVLabelView.st
author ca
Wed, 03 Jun 1998 16:30:36 +0200
changeset 907 3250a67fcce2
parent 893 7e52a293a3da
child 1085 cebea5318863
permissions -rw-r--r--
draw for each column the label
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
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
    18
	instanceVariableNames:'items columnView selection enabled'
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
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    24
Object subclass:#Item
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
    25
	instanceVariableNames:'label selector argument adjust font fgColor bgColor layout
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
    26
		preferredExtent'
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    27
	classVariableNames:'DefaultLayout'
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    28
	poolDictionaries:''
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    29
	privateIn:DSVLabelView
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    30
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    31
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    32
!DSVLabelView class methodsFor:'documentation'!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    33
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    34
copyright
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    35
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    36
 COPYRIGHT (c) 1997 by Claus Gittinger / eXept Software AG
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    37
              All Rights Reserved
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    38
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    39
 This software is furnished under a license and may be used
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    40
 only in accordance with the terms of that license and with the
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    41
 inclusion of the above copyright notice.   This software may not
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    42
 be provided or otherwise made available to, or used by, any
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    43
 other person.  No title to or ownership of the software is
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    44
 hereby transferred.
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    45
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    46
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    47
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    48
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    49
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    50
!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    51
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    52
documentation
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    53
"
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    54
    shows the labels assigned to the column descriptions. Used by the
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    55
    DataSetView
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    56
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    57
    [Instance variables:]
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    58
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    59
        columnView      <DSVColumnView>         column view which shows the columns
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    60
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    61
        items           <OrderedCollection>     list of items; each item describes
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    62
                                                one column.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    63
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    64
        selection       <Item or nil>           current selected item or nil. An none
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    65
                                                empty selection exists during pressing
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    66
                                                a button.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    67
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    68
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    69
    [author:]
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    70
        Claus Atzkern
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    71
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    72
    [see also:]
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    73
        DSVColumnView
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    74
        DataSetColumnSpec
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    75
        DataSetColumn
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    76
        DataSetView
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    77
"
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
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    83
!DSVLabelView class methodsFor:'constants'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    84
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    85
activeLevel
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    86
    "returns the active level; item is pressed
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    87
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    88
    ^ -2
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    89
!
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
    90
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    91
passiveLevel
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    92
    "returns the passive level; item not pressed
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    93
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    94
    ^ 1
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    95
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    96
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    97
verticalInset
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
    98
    "returns the vertical inset added to the maximum label height
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
    99
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   100
    ^ 8
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   101
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
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   106
!DSVLabelView methodsFor:'accessing'!
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   107
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   108
columnView
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   109
    ^ columnView
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   110
!
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   111
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   112
enabled
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   113
    ^ enabled
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   114
!
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   115
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   116
enabled:aState
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   117
    enabled := aState.
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   118
! !
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   119
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   120
!DSVLabelView methodsFor:'drawing'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   121
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   122
redraw
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   123
    "redraw complete view
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   124
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   125
    self redrawX:0 y:0 width:(self width) height:(self height).
562
b7db6629f2cf recompute height from column labels
ca
parents: 560
diff changeset
   126
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   127
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   128
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   129
redrawItem:anItem
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   130
    "redraw rectangle assigned to an item
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   131
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   132
    |layout|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   133
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   134
    layout := anItem layout.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   135
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   136
    self redrawX:(layout left)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   137
               y:(layout top)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   138
           width:(layout width)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   139
          height:(layout height).
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   140
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   141
! !
562
b7db6629f2cf recompute height from column labels
ca
parents: 560
diff changeset
   142
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   143
!DSVLabelView methodsFor:'drawing basics'!
562
b7db6629f2cf recompute height from column labels
ca
parents: 560
diff changeset
   144
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   145
redrawX:x y:y width:w height:h
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   146
    "redraw a rectangle
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   147
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   148
    |inset savClip bg fg fgColor bgColor maxX layout left width actLvl pasLvl lv|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   149
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   150
    shown ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   151
        ^ self
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   152
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   153
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   154
    bgColor := columnView backgroundColor.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   155
    fgColor := columnView foregroundColor.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   156
    inset   := columnView horizontalSpacing.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   157
    actLvl  := self class activeLevel.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   158
    pasLvl  := self class passiveLevel.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   159
    maxX    := x + w.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   160
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   161
    self paint:bgColor.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   162
    self fillRectangleX:x y:y width:w height:h.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   163
859
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   164
    items isEmpty ifTrue:[
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   165
        ^ self
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   166
    ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   167
    savClip := clipRect.
859
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   168
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   169
    self clippingRectangle:(Rectangle left:x top:y width:w height:h).
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   170
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   171
    items do:[:anItem|
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   172
        layout := anItem layout.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   173
        left   := layout left.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   174
        width  := layout width.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   175
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   176
        (left < maxX and:[layout right > x]) ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   177
            (bg := anItem backgroundColor) notNil ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   178
                bg ~= bgColor ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   179
                    self paint:bg.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   180
                    self fillRectangleX:left y:y width:width height:h.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   181
                ]
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   182
            ] ifFalse:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   183
                bg := bgColor
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   184
            ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   185
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   186
            fg := (anItem foregroundColor) ? fgColor.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   187
            lv := selection == anItem ifTrue:[actLvl] ifFalse:[pasLvl].
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   188
            self paint:fg on:bg.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   189
            anItem redrawLabelOn:self hInset:inset + (lv abs).
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   190
            columnView drawEdgesAtX:left y:0 width:width height:height level:lv on:self
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   191
        ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   192
    ].
859
e63eb6f321e1 support List for columns
ca
parents: 824
diff changeset
   193
    self clippingRectangle:savClip.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   194
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   195
562
b7db6629f2cf recompute height from column labels
ca
parents: 560
diff changeset
   196
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   197
! !
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   198
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   199
!DSVLabelView methodsFor:'event handling'!
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   200
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   201
buttonPress:button x:x y:y
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   202
    "handle a button press event; checks whether the item under the mouse
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   203
     is selectable. If true, the selection is set to the item.
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   204
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   205
    |item|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   206
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   207
    enabled ifTrue:[
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   208
        (     button == 1
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   209
         and:[selection isNil
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   210
         and:[(item := self detectItemAtX:x y:y) notNil
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   211
         and:[item isSelectable]]]
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   212
        ) ifTrue:[
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   213
            self redrawItem:(selection := item)
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   214
        ]
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   215
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   216
    super buttonPress:button x:x y:y
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   217
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   218
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   219
!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   220
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   221
buttonRelease:button x:x y:y
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   222
    "handle a button press event; checks whether the item under the mouse
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   223
     is the selected item. If true, the application is informed.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   224
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   225
    |item same layout arg appl|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   226
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   227
    ( button == 1 and:[selection notNil]) ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   228
        same      := (self detectItemAtX:x y:y) == selection.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   229
        item      := selection.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   230
        layout    := item layout.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   231
        selection := nil.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   232
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   233
        self redrawItem:item.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   234
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   235
        same ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   236
            item sendClickMsgTo:(self application)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   237
        ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   238
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   239
    super buttonRelease:button x:x y:y.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   240
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   241
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   242
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   243
!DSVLabelView methodsFor:'instance creation'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   244
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   245
for:aColumnView
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   246
    "initialization
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   247
    "
884
4b2f2ddef43c bug fix:
ca
parents: 859
diff changeset
   248
    enabled := true.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   249
    items := OrderedCollection new.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   250
    columnView := aColumnView.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   251
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   252
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   253
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   254
!DSVLabelView methodsFor:'notifications'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   255
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   256
columnsLayoutChanged
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   257
    "layout of columns changed and thus the layout of
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   258
     all items.
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   259
    "
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   260
    items size == columnView numberOfColumns ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   261
        self columnsSizeChanged
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   262
    ] ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   263
        self updateLayoutsHeight:(self height).
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   264
        self redraw.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   265
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   266
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   267
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   268
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   269
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   270
columnsOriginChanged:aPoint
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   271
    "the origin of the columnView changed caused by a scroll operation
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   272
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   273
    |point pX x w h|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   274
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   275
    (pX := aPoint x) == 0 ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   276
        ^ self
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   277
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   278
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   279
    point := Point x:(aPoint x) y:0.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   280
    items do:[:anItem| anItem originChanged:point].
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   281
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   282
    (self sensor hasExposeEventFor:self) ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   283
        ^ self invalidateRepairNow:true
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   284
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   285
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   286
    x := pX abs.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   287
    w := self width - x.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   288
    h := self height.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   289
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   290
    w < 20 ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   291
        ^ self redraw
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   292
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   293
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   294
    self catchExpose.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   295
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   296
    pX < 0 ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   297
        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
   298
        w := 0.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   299
    ] ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   300
        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
   301
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   302
    self redrawX:w y:0 width:x height:h.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   303
    self waitForExpose.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   304
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   305
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
columnsSizeChanged
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   309
    "the list of columns changed; recreate all items
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   310
    "
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   311
    |height font|
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   312
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   313
    items := OrderedCollection new.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   314
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   315
    columnView numberOfColumns ~~ 0 ifTrue:[
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   316
        font   := columnView font.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   317
        height := 0.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   318
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   319
        columnView columnsDo:[:aColumn||item|
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   320
            items add:(item := Item column:aColumn font:font on:self).
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   321
            height := (item preferredExtent y) max:height.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   322
        ].
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   323
        height := height + self class verticalInset.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   324
        self updateLayoutsHeight:height.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   325
        self bottomInset:height negated.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   326
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   327
    self redraw.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   328
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   329
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   330
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   331
!DSVLabelView methodsFor:'private'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   332
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   333
detectItemAtX:x y:y
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   334
    "returns item at point x@y or nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   335
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   336
    items do:[:anItem|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   337
        (anItem layout containsPointX:x y:y) ifTrue:[ ^ anItem ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   338
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   339
    ^ nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   340
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   341
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   342
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   343
updateLayoutsHeight:h
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   344
    "update the rectangle layout for each item based on a height
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   345
    "
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   346
    |i x w|
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   347
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   348
    i := 1.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   349
    x := columnView margin - columnView xOriginOfContents.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   350
    columnView has3Dseparators ifFalse:[ x := x + 1].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   351
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   352
    columnView columnsDo:[:aCol|
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   353
        w := aCol width.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   354
        (items at:i) layout:(Rectangle origin:(x @ 0) extent:(w @ h)).
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   355
        i := i + 1.
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   356
        x := x + w.
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   357
    ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   358
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   359
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   360
!DSVLabelView::Item class methodsFor:'constants'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   361
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   362
defaultLayout
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   363
    "returns the default layout used for initialization
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   364
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   365
    DefaultLayout isNil ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   366
        DefaultLayout := Rectangle left:0 right:0 top:0 bottom:0
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   367
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   368
    ^ DefaultLayout
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   369
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   370
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   371
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   372
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   373
!DSVLabelView::Item class methodsFor:'documentation'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   374
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   375
documentation
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   376
"
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   377
    describes the label of one column entry.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   378
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   379
    [Instance variables:]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   380
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   381
        label           <Object>        the label of the column
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   382
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   383
        selector        <Symbol>        a selector, which is evaluated with the argument
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   384
                                        if the item is selected and the button is released.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   385
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   386
        argument        <Object>        user defined argument for the selector.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   387
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   388
        adjust          <Symbol>        align label left, right or center; default is center
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   389
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   390
        font            <Font>          font used to dispaly the label; if the font is
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   391
                                        undefined, the default font is used.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   392
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   393
        fgColor         <Color>         foreground color for the label; if the fgColor is
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   394
                                        undefined, the default foreground color is used.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   395
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   396
        bgColor         <Color>         background color for the label; if the bgColor is
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   397
                                        undefined, the default background color is used.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   398
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   399
        layout          <Rectangle>     the layout of the item
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   400
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   401
        preferredExtent <Point>         preferred extent of the label
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   402
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   403
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   404
    [author:]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   405
        Claus Atzkern
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   406
"
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   407
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   408
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   409
!DSVLabelView::Item class methodsFor:'instance creation'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   410
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   411
column:aColumn font:aFont on:aGC
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   412
    "create a new item for a column
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   413
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   414
    ^ (self new) column:aColumn font:aFont on:aGC
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   415
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   416
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   417
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   418
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   419
!DSVLabelView::Item methodsFor:'accessing'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   420
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   421
backgroundColor
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   422
    "returns the background color of the column or nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   423
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   424
    ^ bgColor
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   425
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   426
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   427
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   428
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   429
foregroundColor
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   430
    "returns the foreground color of the column or nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   431
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   432
    ^ fgColor
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   433
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   434
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   435
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   436
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   437
label
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   438
    "returns the label of the column or nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   439
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   440
    ^ label
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   441
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   442
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   443
! !
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   444
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   445
!DSVLabelView::Item methodsFor:'accessing dimensions'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   446
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   447
layout
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   448
    "returns the item's layout, a Rectangle
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   449
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   450
    ^ layout
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   451
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   452
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   453
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   454
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   455
layout:aLayout
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   456
    "set the item's layout, a Rectangle
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   457
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   458
    layout := aLayout
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   459
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   460
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   461
!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   462
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   463
preferredExtent
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   464
    "returns the preferred extent of the label
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   465
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   466
    ^ preferredExtent
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   467
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   468
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   469
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   470
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   471
!DSVLabelView::Item methodsFor:'actions'!
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   472
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   473
sendClickMsgTo:aReceiver
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   474
    "inform the receiver of a button release notification
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   475
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   476
    (aReceiver notNil and:[selector notNil]) ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   477
        selector numArgs ~~ 0 ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   478
            aReceiver perform:selector with:argument
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   479
        ] ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   480
            aReceiver perform:selector
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   481
        ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   482
    ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   483
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   484
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   485
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   486
!DSVLabelView::Item methodsFor:'drawing'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   487
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   488
redrawLabelOn:aGC hInset:hInset
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   489
    "redraw the label; the background is cleared and the paint is set
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   490
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   491
    |x y|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   492
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   493
    label isNil ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   494
        ^ self
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   495
    ].
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   496
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   497
    adjust == #left ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   498
        x := layout left + hInset.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   499
    ] ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   500
        adjust == #right ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   501
            x := layout right - preferredExtent x - hInset        
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   502
        ] ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   503
            x := layout left + (((layout width - preferredExtent x) // 2) max:0)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   504
        ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   505
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   506
    y := layout top + (layout height - preferredExtent y // 2).
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   507
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   508
    font notNil ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   509
        aGC font:font.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   510
        y := y + font ascent.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   511
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   512
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   513
    label displayOn:aGC x:x y:y.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   514
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   515
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   516
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   517
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   518
!DSVLabelView::Item methodsFor:'instance creation'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   519
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   520
column:aColumn font:aFont on:aGC
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   521
    "create instance for a column
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   522
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   523
    |img|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   524
893
7e52a293a3da checkin from browser
ca
parents: 884
diff changeset
   525
    label    := aColumn label.
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   526
    selector := aColumn description labelActionSelector.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   527
    argument := (aColumn description labelActionArgument) ? label.
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   528
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   529
    adjust := aColumn labelAlignment.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   530
    layout := self class defaultLayout.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   531
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   532
    (fgColor := aColumn labelForegroundColor) notNil ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   533
        fgColor := fgColor on:(aGC device)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   534
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   535
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   536
    (bgColor := aColumn labelBackgroundColor) notNil ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   537
        bgColor := bgColor on:(aGC device)
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   538
    ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   539
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   540
    label notNil ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   541
        label isString ifFalse:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   542
            label := label on:aGC device.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   543
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   544
            label isImage ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   545
                label clearMaskedPixels
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   546
            ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   547
        ] ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   548
            label withoutSeparators isEmpty ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   549
                label := nil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   550
            ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   551
        ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   552
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   553
        (label respondsTo:#string) ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   554
            font := aColumn labelFont.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   555
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   556
            font notNil ifTrue:[ font := font on:(aGC device) ]
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   557
                       ifFalse:[ font := aFont ].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   558
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   559
            aGC font:font.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   560
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   561
            label class == LabelAndIcon ifTrue:[
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   562
                label := label on:(aGC device).
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   563
                (img := label image) isImage ifTrue:[img clearMaskedPixels].
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   564
                (img := label icon)  isImage ifTrue:[img clearMaskedPixels].
637
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   565
            ]
e56ec99923ae VW compatible
ca
parents: 620
diff changeset
   566
        ]
560
bdd3bad699a9 check whether labels exists
ca
parents: 542
diff changeset
   567
    ].
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   568
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   569
    preferredExtent := label notNil ifTrue:[ Point x:(label widthOn:aGC) y:(label heightOn:aGC) ]
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   570
                                   ifFalse:[ 0 @ 0 ].
824
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   571
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   572
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   573
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   574
!DSVLabelView::Item methodsFor:'notification'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   575
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   576
originChanged:aDeltaPoint
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   577
    "called when the origin of the layout changed; scrolling left or right
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   578
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   579
    |origin extent|
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   580
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   581
    origin := layout origin.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   582
    extent := layout extent.
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   583
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   584
    layout origin:(origin - aDeltaPoint) extent:extent
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   585
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   586
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   587
! !
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   588
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   589
!DSVLabelView::Item methodsFor:'queries'!
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   590
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   591
isSelectable
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   592
    "returns true if the item is selectable; a valid selector
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   593
     to notify the receiver for a release button event exists
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   594
    "
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   595
    ^ selector notNil
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   596
d2e60c8ac775 support of Drag & Drop
ca
parents: 648
diff changeset
   597
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   598
! !
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   599
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   600
!DSVLabelView class methodsFor:'documentation'!
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   601
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   602
version
907
3250a67fcce2 draw for each column the label
ca
parents: 893
diff changeset
   603
    ^ '$Header: /cvs/stx/stx/libwidg2/DSVLabelView.st,v 1.16 1998-06-03 14:30:36 ca Exp $'
542
e22c45e26653 intitial checkin
ca
parents:
diff changeset
   604
! !