SelTreeV.st
author ca
Fri, 02 Jan 1998 17:07:36 +0100
changeset 639 663a913ec30b
parent 623 4de870640523
child 659 16bb1d26f658
permissions -rw-r--r--
discard motion events if +/- is pressed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     1
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     2
 COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     3
              All Rights Reserved
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     4
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     5
 This software is furnished under a license and may be used
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    10
 hereby transferred.
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    11
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    12
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    13
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    14
SelectionInListView subclass:#SelectionInTreeView
517
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
    15
	instanceVariableNames:'validateDoubleClickBlock selectionHolder rootHolder imageWidth
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
    16
		showLines listOfNodes imageInset textInset labelOffsetY
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
    17
		openIndicator computeResources closeIndicator showRoot
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
    18
		extentOpenIndicator extentCloseIndicator showDirectoryIndicator
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
    19
		indicatorExtentDiv2 imageOpened imageClosed imageItem
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
    20
		discardMotionEvents'
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
    21
	classVariableNames:'ImageOpened ImageClosed ImageItem OpenIndicator CloseIndicator'
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    22
	poolDictionaries:''
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    23
	category:'Views-Text'
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    24
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    25
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    26
!SelectionInTreeView class methodsFor:'documentation'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    27
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    28
copyright
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    29
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    30
 COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    31
              All Rights Reserved
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    32
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    33
 This software is furnished under a license and may be used
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    34
 only in accordance with the terms of that license and with the
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    36
 be provided or otherwise made available to, or used by, any
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    37
 other person.  No title to or ownership of the software is
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    38
 hereby transferred.
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    39
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    40
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    41
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    42
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    43
documentation
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    44
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    45
    somewhat like a SelectionInListView; but specialized for hierarchical (i.e. tree-like)
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    46
    lists and adds the functions to show/hide subtrees. 
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    47
    Requires SelectionInTree as model and TreeItem (or compatible) list entries.
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    48
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    49
    This class obsoletes SelectionInTreeView, which is no longer
446
b6ac0f279b2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
    50
    maintained but kept for backward compatibility.
b6ac0f279b2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
    51
b6ac0f279b2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
    52
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    53
    [see also:]
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    54
        SelectionInTree
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    55
        TreeItem
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    56
        SelectionInTreeView
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    57
        SelectionInListView
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
    58
        FileSelectionTree
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    59
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    60
    [author:]
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    61
        Claus Atzkern
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    62
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    63
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    64
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    65
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    66
examples
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    67
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    68
    shows the tree of smalltalk classes:
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    69
                                                                        [exBegin]
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
    70
      |top sel|
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    71
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
    72
      top := StandardSystemView new; extent:300@300.
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    73
      sel := SelectionInTreeView new.
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
    74
      sel root:(TreeItem newAsTreeFromSmalltalkClass:Object).
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    75
      sel action:[:nr | Transcript show:'selected:'; showCR:nr].
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    76
      top add:(ScrollableView forView:sel) in:((0.0 @ 0.0 ) corner:( 1.0 @ 1.0)).
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    77
      top open.
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    78
                                                                        [exEnd]
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    79
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    80
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
    81
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    82
    same, including nil-subclasses (i.e. really all classes):
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    83
                                                                        [exBegin]
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
    84
      |top sel|
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
    85
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
    86
      top := StandardSystemView new; extent:300@300.
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    87
      sel := SelectionInTreeView new.
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
    88
      sel root:(TreeItem newAsTreeFromSmalltalkClass:nil).
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    89
      sel action:[:nr | Transcript show:'selected:'; showCR:nr].
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    90
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    91
      top add:(ScrollableView forView:sel) in:((0.0 @ 0.0 ) corner:( 1.0 @ 1.0)).
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    92
      top open.
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    93
                                                                        [exEnd]
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
    94
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
    95
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
    96
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
    97
    shows the tree of smalltalk classes; show directory indication and no
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
    98
    lines.
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
    99
                                                                        [exBegin]
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   100
      |top sel|
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   101
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   102
      top := StandardSystemView new; extent:300@300.
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   103
      sel := SelectionInTreeView new.
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   104
      sel showLines:false.
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   105
      sel showDirectoryIndicator:true.
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   106
      sel root:(TreeItem newAsTreeFromSmalltalkClass:Object).
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   107
      sel action:[:nr | Transcript show:'selected:'; showCR:nr].
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   108
      top add:(ScrollableView forView:sel) in:((0.0 @ 0.0 ) corner:( 1.0 @ 1.0)).
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   109
      top open.
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   110
                                                                        [exEnd]
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   111
"
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   112
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   113
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   114
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   115
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   116
!SelectionInTreeView class methodsFor:'constants'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   117
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   118
minImageInset
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   119
    "returns minimum inset from directory indication to image
471
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   120
    "
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   121
  ^ 6
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   122
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   123
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   124
! !
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   125
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   126
!SelectionInTreeView class methodsFor:'default images'!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   127
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   128
closeIndicator
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   129
    <resource: #fileImage>
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   130
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   131
    CloseIndicator isNil ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   132
        CloseIndicator := Image fromFile:('xpmBitmaps/plus.xpm').
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   133
    ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   134
  ^ CloseIndicator
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   135
"
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   136
CloseIndicator := nil
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   137
"
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   138
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   139
    "Modified: / 29.10.1997 / 03:36:00 / cg"
471
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   140
!
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   141
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   142
imageClosed
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   143
    <resource: #fileImage>
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   144
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   145
    ImageClosed isNil ifTrue:[
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   146
        ImageClosed := Image fromFile:('xpmBitmaps/document_images/tiny_yellow_dir.xpm').
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   147
    ].
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   148
  ^ ImageClosed
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   149
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   150
ImageClosed := nil
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   151
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   152
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   153
    "Modified: / 29.10.1997 / 03:36:05 / cg"
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   154
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   155
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   156
imageItem
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   157
    <resource: #fileImage>
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   158
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   159
    ImageItem isNil ifTrue:[
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   160
        ImageItem := Image fromFile:('xpmBitmaps/document_images/tiny_file_plain.xpm')  
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   161
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   162
    ].
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   163
  ^ ImageItem
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   164
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   165
ImageItem := nil
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   166
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   167
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   168
    "Modified: / 29.10.1997 / 03:36:10 / cg"
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   169
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   170
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   171
imageOpened
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   172
    <resource: #fileImage>
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   173
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   174
    ImageOpened isNil ifTrue:[
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   175
        ImageOpened := Image fromFile:('xpmBitmaps/document_images/tiny_yellow_dir_open.xpm').
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   176
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   177
    ].
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   178
  ^ ImageOpened
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   179
"
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   180
ImageOpened := nil
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   181
"
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   182
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   183
    "Modified: / 29.10.1997 / 03:36:15 / cg"
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   184
!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   185
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   186
openIndicator
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   187
    <resource: #fileImage>
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   188
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   189
    OpenIndicator isNil ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   190
        OpenIndicator := Image fromFile:('xpmBitmaps/minus.xpm').
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   191
    ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   192
  ^ OpenIndicator
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   193
"
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   194
OpenIndicator := nil
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   195
"
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   196
589
979ea44d23ae checkin from browser
Claus Gittinger <cg@exept.de>
parents: 585
diff changeset
   197
    "Modified: / 29.10.1997 / 03:36:21 / cg"
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   198
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   199
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   200
!SelectionInTreeView methodsFor:'accessing'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   201
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   202
nodeAtIndex:anIndex
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   203
    "returns node at an index or nil
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   204
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   205
    (anIndex notNil and:[anIndex ~~ 0 and:[anIndex <= listOfNodes size]]) ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   206
        ^ listOfNodes at:anIndex
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   207
    ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   208
  ^ nil
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   209
!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   210
507
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   211
root
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   212
    "gets the root of the model; the first item into list.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   213
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   214
    ^ self nodeAtIndex:1
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   215
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   216
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   217
root:aRoot
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   218
    "sets the root of the model; the first item into list.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   219
    "
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   220
    aRoot notNil ifTrue:[aRoot expand].
507
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   221
    model root:aRoot
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   222
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   223
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   224
textInset
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   225
    "get the left inset of the text label
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   226
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   227
    ^ textInset
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   228
!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   229
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   230
textInset:anInset
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   231
    "set the left inset of the text label
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   232
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   233
    anInset ~~ textInset ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   234
        anInset >= 0 ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   235
            textInset := anInset.
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   236
            self invalidate
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   237
        ] ifFalse:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   238
            self error
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   239
        ]
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   240
    ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   241
! !
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   242
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   243
!SelectionInTreeView methodsFor:'accessing-behavior'!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   244
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   245
showDirectoryIndicator
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   246
    "returns true if directories has an open/closed indicator
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   247
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   248
  ^ showDirectoryIndicator
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   249
!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   250
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   251
showDirectoryIndicator:aState
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   252
    "set or clear open/closed indicator for directories
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   253
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   254
    "show or hide lines
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   255
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   256
    aState ~~ showDirectoryIndicator ifTrue:[
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   257
        showDirectoryIndicator := aState.
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   258
        self recomputeDirectoryIndicator.
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   259
        self invalidate
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   260
    ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   261
!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   262
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   263
showLines
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   264
    "returns true if lines are shown
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   265
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   266
  ^ showLines
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   267
!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   268
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   269
showLines:aState
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   270
    "show or hide lines
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   271
    "
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   272
    aState ~~ showLines ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   273
        showLines := aState.
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   274
        self invalidate
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   275
    ].
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   276
!
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   277
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   278
showRoot
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   279
    "list with or without root
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   280
    "
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   281
  ^ showRoot
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   282
!
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   283
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   284
showRoot:aState
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   285
    "list with or without root
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   286
    "
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   287
    showRoot ~~ aState ifTrue:[
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   288
        model showRoot:(showRoot := aState)
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   289
    ].
517
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   290
!
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   291
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   292
validateDoubleClickBlock
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   293
    "set the conditionBlock; this block is evaluated before a doubleClick action
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   294
     on a node will be performed. In case of returning false, the doubleClick will
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   295
     not be handled.
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   296
   "
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   297
   ^ validateDoubleClickBlock
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   298
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   299
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   300
!
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   301
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   302
validateDoubleClickBlock:aOneArgBlock
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   303
    "set the conditionBlock; this block is evaluated before a doubleClick action
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   304
     on a node will be performed. In case of returning false, the doubleClick will
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   305
     not be handled.
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   306
   "
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   307
   validateDoubleClickBlock := aOneArgBlock
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   308
14a46095db49 add validateDoubleClickBlock
ca
parents: 514
diff changeset
   309
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   310
! !
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   311
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   312
!SelectionInTreeView methodsFor:'accessing-channels'!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   313
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   314
rootHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   315
    "get the holder which keeps the hierarchical list entry or nil
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   316
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   317
    ^ rootHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   318
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   319
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   320
rootHolder:aValueHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   321
    "set the holder which keeps the hierarchical list entry or nil
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   322
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   323
    rootHolder notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   324
        rootHolder removeDependent:self
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   325
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   326
    (rootHolder := aValueHolder) notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   327
        rootHolder addDependent:self.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   328
        self rootFromModel.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   329
    ].
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   330
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   331
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   332
selectionHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   333
    "get the holder which keeps a list of selected items or nil
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   334
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   335
    ^ selectionHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   336
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   337
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   338
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   339
selectionHolder:aHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   340
    "set the holder which keeps a list of selected items or nil
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   341
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   342
    selectionHolder notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   343
        selectionHolder removeDependent:self
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   344
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   345
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   346
    (selectionHolder := aHolder) notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   347
        selectionHolder addDependent:self.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   348
        self selectionFromModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   349
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   350
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   351
! !
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   352
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   353
!SelectionInTreeView methodsFor:'accessing-images'!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   354
448
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   355
imageClosed
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   356
    "return the value of the instance variable 'imageClosed' (automatically generated)"
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   357
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   358
    ^ imageClosed
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   359
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   360
    "Created: 3.7.1997 / 12:34:31 / cg"
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   361
!
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   362
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   363
imageItem
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   364
    "return the value of the instance variable 'imageItem' (automatically generated)"
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   365
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   366
    ^ imageItem
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   367
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   368
    "Created: 3.7.1997 / 12:34:34 / cg"
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   369
!
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   370
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   371
imageOnDevice:anImage
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   372
    "associate iamge to device and clear pixel mask (in case of realized);
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   373
     returns the new image.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   374
    "
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   375
    |img|
448
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   376
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   377
    img := anImage onDevice:device.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   378
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   379
    realized ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   380
        img := img clearMaskedPixels
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   381
    ].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   382
    ^ img
448
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   383
!
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   384
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   385
imageOpened
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   386
    "return the value of the instance variable 'imageOpened' (automatically generated)"
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   387
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   388
    ^ imageOpened
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   389
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   390
    "Created: 3.7.1997 / 12:34:28 / cg"
471
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   391
! !
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   392
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   393
!SelectionInTreeView methodsFor:'change & update'!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   394
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   395
update:something with:aParameter from:aModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   396
    "one of my models changed its value
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   397
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   398
    aModel == rootHolder ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   399
        ^ self rootFromModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   400
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   401
    aModel == selectionHolder ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   402
        ^ self selectionFromModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   403
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   404
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   405
    aModel == aModel ifTrue:[
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   406
        something == #list ifTrue:[
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   407
            ^ self getListFromModel
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   408
        ]
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   409
    ].
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   410
    ^ super update:something with:aParameter from:aModel.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   411
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   412
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   413
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   414
! !
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   415
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   416
!SelectionInTreeView methodsFor:'drawing'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   417
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   418
drawLine:line atX:atX inVisible:visLineNr with:fg and:bg
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   419
    self drawFromVisibleLine:visLineNr to:visLineNr with:fg and:bg
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   420
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   421
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   422
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   423
drawLine:line fromX:x inVisible:visLineNr with:fg and:bg
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   424
    self drawFromVisibleLine:visLineNr to:visLineNr with:fg and:bg
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   425
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   426
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   427
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   428
drawLine:line inVisible:visLineNr with:fg and:bg
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   429
    self drawFromVisibleLine:visLineNr to:visLineNr with:fg and:bg
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   430
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   431
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   432
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   433
drawVisibleLine:visLineNr col:col with:fg and:bg
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   434
    self drawFromVisibleLine:visLineNr to:visLineNr with:fg and:bg
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   435
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   436
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   437
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   438
drawVisibleLine:visLineNr from:startCol to:endCol with:fg and:bg
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   439
    self drawFromVisibleLine:visLineNr to:visLineNr with:fg and:bg
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   440
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   441
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   442
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   443
drawVisibleLine:visLineNr from:startCol with:fg and:bg
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   444
    self drawFromVisibleLine:visLineNr to:visLineNr with:fg and:bg
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   445
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   446
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   447
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   448
!SelectionInTreeView methodsFor:'drawing basics'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   449
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   450
drawFromVisibleLine:startVisLineNr to:endVisLineNr with:fg and:bg
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   451
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   452
    |size end index yBot yTop yCtr level figWidthDiv2
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   453
     x xFig xStr node lv idx image xCross|
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   454
552
1b84811f7c45 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 551
diff changeset
   455
    level := nil. "/ to force evaluation of #ifFalse in loop
1b84811f7c45 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 551
diff changeset
   456
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   457
    index := self visibleLineToAbsoluteLine:startVisLineNr.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   458
    size  := listOfNodes size.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   459
    yTop  := self yOfVisibleLine:startVisLineNr.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   460
    yTop  := yTop - 1.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   461
    end   := endVisLineNr - startVisLineNr + 1.
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   462
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   463
"/  clear rectangle line and set background color
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   464
    self paint:bg.
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   465
    self fillRectangleX:0 y:yTop width:width height:(end * fontHeight).
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   466
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   467
    index isNil ifTrue:[^ self].
541
4e7032015683 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   468
    figWidthDiv2 := imageWidth // 2.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   469
    yCtr := yTop - (fontHeight // 2).
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   470
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   471
    self paint:fg on:bg.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   472
    (end := index + end) > size ifTrue:[end := size + 1].
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   473
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   474
    [index < end] whileTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   475
        node := listOfNodes at:index.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   476
        yBot := yTop + fontHeight.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   477
        yCtr := yCtr + fontHeight.
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   478
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   479
        (lv := node level) == level ifFalse:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   480
            level  := lv.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   481
            xFig   := self xOfFigureLevel:lv.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   482
            xStr   := self xOfStringLevel:lv.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   483
            xCross := (self xOfFigureLevel:(lv-1)) + figWidthDiv2.
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   484
        ].
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   485
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   486
        showLines ifTrue:[
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   487
            (node isCollapsable and:[node numberOfChildren ~~ 0]) ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   488
                x := xFig + figWidthDiv2.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   489
                self displayLineFromX:x y:yCtr  toX:x y:yBot
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   490
            ].
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   491
            (level ~~ 1 and:[node parent children last == node]) ifTrue:[
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   492
                self displayLineFromX:xCross y:yTop - 1 toX:xCross y:yCtr . "/ vertical
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   493
            ].
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   494
            self displayLineFromX:xCross y:yCtr toX:xFig y:yCtr .       "/ horizontal
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   495
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   496
        "/  draw vertical lines
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   497
            idx := index.
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   498
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   499
            [(lv > 0 and:[(idx := idx + 1) <= size])] whileTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   500
                (x := (listOfNodes at:idx) level) <= lv ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   501
                    lv := x - 1.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   502
                    x  := (self xOfFigureLevel:lv) + figWidthDiv2.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   503
                    self displayLineFromX:x y:yTop - 1 toX:x y:yBot.
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   504
                ]
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   505
            ]
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   506
        ].
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   507
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   508
        "/ draw image
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   509
        image := self figureFor:node.
541
4e7032015683 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   510
        image notNil ifTrue:[
529
d92232a9ce41 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   511
            self displayForm:image x:xFig y:(yCtr - (image height // 2)).
541
4e7032015683 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   512
        ].
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   513
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   514
        "/ draw text label
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   515
        self drawLabelIndex:index atX:xStr y:yCtr .
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   516
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   517
        "/ draw directory indicator
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   518
        (showDirectoryIndicator and:[node showIndicator]) ifTrue:[
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   519
            node isCollapsable ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   520
                image := openIndicator.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   521
                x := extentOpenIndicator.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   522
            ] ifFalse:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   523
                image := closeIndicator.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   524
                x := extentCloseIndicator.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   525
            ].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   526
            self displayForm:image x:(xCross - x x)
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   527
                                   y:(yCtr   - x y)
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   528
        ].
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   529
        "/ setup next line
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   530
        index := index + 1.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   531
        yTop  := yBot.
481
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   532
    ].
91b3f1788cea redraw mechanism
ca
parents: 480
diff changeset
   533
541
4e7032015683 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   534
    "Modified: 6.10.1997 / 13:31:51 / cg"
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   535
!
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   536
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   537
drawLabelIndex:anIndex atX:x y:yCenter
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   538
    "draw text label at x and y centered
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   539
    "
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   540
    |lbl|
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   541
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   542
    (lbl := (listOfNodes at:anIndex) name) notNil ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   543
        self displayOpaqueString:lbl x:x y:(yCenter + labelOffsetY).
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   544
    ]    
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   545
!
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   546
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   547
redrawX:x y:y width:w height:h
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   548
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   549
    self shown ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   550
        super redrawX:x y:y width:w height:h.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   551
    ].
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   552
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   553
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   554
!SelectionInTreeView methodsFor:'enumerating'!
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   555
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   556
detectNode:aOneArgBlock
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   557
    "evaluate the argument, aBlock for each node in the list until
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   558
     the block returns true; in this case return the node which caused
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   559
     the true evaluation. If none node is detected, nil is returned.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   560
    "
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   561
  ^ listOfNodes detect:aOneArgBlock ifNone:nil
507
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   562
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   563
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   564
selectedNodesDo:aOneArgBlock
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   565
    "evaluate the block on each node selected
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   566
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   567
    self selectionDo:[:i| aOneArgBlock value:(listOfNodes at:i) ]
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   568
! !
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   569
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   570
!SelectionInTreeView methodsFor:'event handling'!
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   571
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   572
buttonMotion:buttonMask x:x y:y
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   573
    "mouse-move while button was pressed - handle selection changes"
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   574
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   575
    discardMotionEvents ifFalse:[
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   576
        super buttonMotion:buttonMask x:x y:y
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   577
    ]
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   578
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   579
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   580
!
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   581
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   582
buttonMultiPress:button x:x y:y
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   583
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   584
    (self indicatiorLineForButton:button atX:x y:y) == 0 ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   585
        ^ super buttonMultiPress:button x:x y:y
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   586
    ].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   587
    "/ discard doubleClick on indicator
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   588
!
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   589
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   590
buttonPress:button x:x y:y
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   591
    "check for indicator
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   592
    "
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   593
    |expand node lineNr|
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   594
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   595
    lineNr := self indicatiorLineForButton:button atX:x y:y.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   596
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   597
    lineNr == 0 ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   598
        ^ super buttonPress:button x:x y:y
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   599
    ].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   600
    node := listOfNodes at:lineNr.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   601
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   602
    (     validateDoubleClickBlock isNil
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   603
     or:[(validateDoubleClickBlock value:node) ~~ false]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   604
    ) ifFalse:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   605
        ^ super buttonPress:button x:x y:y
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   606
    ].
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   607
    discardMotionEvents := true.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   608
    dragIsActive  := false.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   609
    clickPosition := nil.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   610
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   611
    self hasSelection ifTrue:[
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   612
        (selectConditionBlock isNil or:[selectConditionBlock value:lineNr]) ifTrue:[
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   613
            self selection:lineNr
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   614
        ] ifFalse:[
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   615
            self selection:nil
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   616
        ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   617
    ].
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   618
    self nodeAt:lineNr expand:(node isExpandable).
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   619
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   620
!
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   621
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   622
buttonRelease:button x:x y:y
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   623
    "stop any autoscroll"
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   624
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   625
    discardMotionEvents ifTrue:[
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   626
        clickPosition := nil.
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   627
        discardMotionEvents := false.
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   628
    ].
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   629
    super buttonRelease:button x:x y:y
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   630
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   631
!
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   632
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   633
doubleClicked
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   634
    "handle a double click; collapse or expand selected entry
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   635
     in case of having children
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   636
    "
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   637
    |node|
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   638
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   639
    (node := self selectedNode) notNil ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   640
        (     validateDoubleClickBlock isNil
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   641
         or:[(validateDoubleClickBlock value:node) ~~ false]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   642
        ) ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   643
            self selectedNodeExpand:(node isExpandable).
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   644
            super doubleClicked
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   645
        ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   646
    ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   647
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   648
!
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   649
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   650
indicatiorLineForButton:aButton atX:x y:y
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   651
    "returns linenumber assigned to indicator at x/y or 0
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   652
    "
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   653
    |sensor nr x0 node|
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   654
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   655
    (     enabled
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   656
     and:[showDirectoryIndicator
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   657
     and:[aButton == 1 or:[aButton == #select]]]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   658
    ) ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   659
        sensor := self sensor.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   660
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   661
        (sensor ctrlDown or:[sensor shiftDown]) ifFalse:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   662
            nr := self visibleLineToListLine:(self visibleLineOfY:y).
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   663
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   664
            nr notNil ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   665
                node := listOfNodes at:nr.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   666
                x0   := self xOfFigureLevel:(node level - 1).
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   667
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   668
                (x > x0 and:[(x0 + imageWidth) > x and:[node numberOfChildren ~~ 0]]) ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   669
                    ^ nr
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   670
                ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   671
            ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   672
        ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   673
    ].            
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   674
    ^ 0
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   675
! !
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   676
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   677
!SelectionInTreeView methodsFor:'initialization'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   678
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   679
destroy
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   680
    "remove dependencies
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   681
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   682
    rootHolder notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   683
        rootHolder removeDependent:self
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   684
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   685
    selectionHolder notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   686
        selectionHolder removeDependent:self
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   687
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   688
    super destroy.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   689
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   690
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   691
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   692
448
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   693
fetchDeviceResources
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   694
    "initialize heavily used device resources - to avoid rendering
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   695
     images again and again later"
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   696
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   697
    super fetchDeviceResources.
478
ca
parents: 471
diff changeset
   698
    self refetchDeviceResources
448
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   699
!
7f9f3531660c cache device images for fast drawing
Claus Gittinger <cg@exept.de>
parents: 446
diff changeset
   700
478
ca
parents: 471
diff changeset
   701
fetchImageResources
ca
parents: 471
diff changeset
   702
    "initialize heavily used device resources - to avoid rendering
ca
parents: 471
diff changeset
   703
     images again and again later; returns maximum extent of the images used.
ca
parents: 471
diff changeset
   704
     Could be redefined by subclass
471
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   705
    "
533
d7867efb6f60 #fetchImageResources returned the max extent only on the first invocation
Stefan Vogel <sv@exept.de>
parents: 532
diff changeset
   706
    |extent|
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   707
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   708
    imageOpened isNil ifTrue:[
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   709
        imageOpened := (self class imageOpened) onDevice:device
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   710
    ].
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   711
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   712
    imageClosed isNil ifTrue:[
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   713
        imageClosed := self imageOnDevice:(self class imageClosed)
533
d7867efb6f60 #fetchImageResources returned the max extent only on the first invocation
Stefan Vogel <sv@exept.de>
parents: 532
diff changeset
   714
    ].
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   715
    extent := (imageOpened extent) max:(imageClosed extent).
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   716
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   717
    imageItem isNil ifTrue:[
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   718
        imageItem := self imageOnDevice:(self class imageItem)
533
d7867efb6f60 #fetchImageResources returned the max extent only on the first invocation
Stefan Vogel <sv@exept.de>
parents: 532
diff changeset
   719
    ].
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   720
    ^ extent max:(imageItem extent)
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   721
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   722
480
982c2ad4f6a2 getFontParameters
ca
parents: 478
diff changeset
   723
getFontParameters
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   724
    "save old computed height derived from images
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   725
    "
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   726
    |lineHeight|
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   727
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   728
    lineHeight := fontHeight ? 0.
480
982c2ad4f6a2 getFontParameters
ca
parents: 478
diff changeset
   729
    super getFontParameters.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   730
    labelOffsetY := fontAscent - (fontHeight - lineSpacing // 2).
480
982c2ad4f6a2 getFontParameters
ca
parents: 478
diff changeset
   731
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   732
    lineHeight > fontHeight ifTrue:[
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   733
        fontHeight := lineHeight
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   734
    ].
480
982c2ad4f6a2 getFontParameters
ca
parents: 478
diff changeset
   735
!
982c2ad4f6a2 getFontParameters
ca
parents: 478
diff changeset
   736
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   737
initialize
471
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   738
    "setup instance attributes
6fe41e3caca1 add showLines;
ca
parents: 470
diff changeset
   739
    "
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   740
    super initialize.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   741
    self bitGravity:#NorthWest.
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   742
    showLines := true.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   743
    showRoot  := true.
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   744
    computeResources := true.
485
26e87be7210f showDirectoryIndicator
ca
parents: 483
diff changeset
   745
    showDirectoryIndicator := false.
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   746
    discardMotionEvents := false.
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
   747
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   748
    textInset  := 2.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   749
    imageInset := 0.    "/ set during indication enabled
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   750
    imageWidth := 8.    "/ default: will change during startup
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   751
    self model:nil.     "/ creates a default model.
478
ca
parents: 471
diff changeset
   752
!
ca
parents: 471
diff changeset
   753
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   754
realize
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   755
    super realize.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   756
    self  refetchDeviceResources.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   757
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   758
!
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   759
478
ca
parents: 471
diff changeset
   760
refetchDeviceResources
ca
parents: 471
diff changeset
   761
    "reinitialize heavily used device resources - to avoid rendering
ca
parents: 471
diff changeset
   762
     images again and again later
ca
parents: 471
diff changeset
   763
    "
551
b9d3ddbc3365 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 546
diff changeset
   764
    |extent|
478
ca
parents: 471
diff changeset
   765
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   766
    (realized and:[computeResources and:[listOfNodes size ~~ 0]]) ifTrue:[
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   767
        computeResources := false.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   768
        extent := self fetchImageResources.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   769
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   770
        extent y >= fontHeight ifTrue:[
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   771
            fontHeight := 1 + extent y.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   772
        ].
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   773
        imageWidth := extent x.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   774
        self recomputeDirectoryIndicator.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   775
        self computeNumberOfLinesShown.
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   776
    ]
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   777
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   778
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   779
!SelectionInTreeView methodsFor:'model'!
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   780
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   781
getListFromModel
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   782
    "if I have a model, get my list from it using the listMessage.
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   783
     If listMessage is nil, try aspectMessage for backward compatibilty.
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   784
    "
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   785
    super list:(self listFromModel) keepSelection:true
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   786
!
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   787
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   788
listFromModel
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   789
    "get list from model and return the new list.
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   790
     If listMessage is nil, try aspectMessage for backward compatibilty.
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   791
    "
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   792
    |msg|
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   793
468
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   794
    widthOfWidestLine := nil.
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   795
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   796
    (msg := listMsg ? aspectMsg) notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   797
        listOfNodes := model perform:msg.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   798
        listOfNodes size ~~ 0 ifTrue:[
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   799
            self refetchDeviceResources.
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   800
            ^ listOfNodes collect:[:n|n name]
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   801
        ]
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   802
    ].
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   803
    listOfNodes := #().
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
   804
  ^ #()
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   805
!
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   806
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
   807
model:aModel
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   808
    "check whether model is nil; than a default model is created
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   809
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   810
    |model|
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   811
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   812
    model := aModel ? (SelectionInTree new).
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   813
    model showRoot:showRoot.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   814
    super model:model.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   815
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   816
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   817
rootFromModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   818
    "update hierarchical list from root model; 'rootHolder'
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   819
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   820
    |root|
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   821
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   822
    root := rootHolder root.
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   823
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   824
    self root == root ifFalse:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   825
        self selection:nil.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   826
        self root:root.
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   827
    ].
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   828
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   829
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   830
selectionFromModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   831
    "set the selection derived from the selectionHolder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   832
    "
545
d01d14358b07 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 541
diff changeset
   833
    |coll value sz|
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   834
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   835
    (value := selectionHolder value) isNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   836
        ^ self deselect
507
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
   837
    ].
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   838
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   839
    multipleSelectOk ifFalse:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   840
        self selectNode:value
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   841
    ] ifTrue:[
545
d01d14358b07 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 541
diff changeset
   842
        (sz := value size) ~~ 0 ifTrue:[
d01d14358b07 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 541
diff changeset
   843
            coll := OrderedCollection new:sz.
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   844
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   845
            value do:[:aNode||i|
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   846
                (i := self indexOfNode:aNode) notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   847
                    coll add:i
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   848
                ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   849
            ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   850
        ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   851
        coll size == 0 ifTrue:[self deselect]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   852
                      ifFalse:[self selection:coll]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   853
    ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   854
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   855
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   856
selectionToModel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   857
    "write selection to selection holder
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   858
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   859
    |newSel oldSel|
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   860
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   861
    oldSel := selectionHolder value.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   862
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   863
    multipleSelectOk ifFalse:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   864
        (newSel := self selectedNode) ~~ oldSel ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   865
            selectionHolder value:newSel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   866
        ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   867
    ] ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   868
        selection size == 0 ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   869
            oldSel notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   870
                selectionHolder value:nil
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   871
            ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   872
        ] ifFalse:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   873
            newSel := selection collect:[:i| listOfNodes at:i].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   874
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   875
            newSel size ~~ oldSel size ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   876
                selectionHolder value:newSel.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   877
            ] ifFalse:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   878
                newSel do:[:aNode|
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   879
                    (oldSel includes:aNode) ifFalse:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   880
                        ^ selectionHolder value:newSel
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   881
                    ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   882
                ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   883
            ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   884
        ]
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
   885
    ]
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   886
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
   887
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   888
!SelectionInTreeView methodsFor:'private'!
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   889
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   890
list:aList keepSelection:keepSelection
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   891
    "setup new list; keep selection dependent on the boolean state
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   892
     keepSelection
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   893
    "
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   894
    |list|
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   895
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   896
    list := aList.
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   897
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   898
    list size == 0 ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   899
        listOfNodes := #()
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   900
    ] ifFalse:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   901
        (list first respondsTo:#hasChildren) ifTrue:[
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   902
            listOfNodes := aList.
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   903
            self refetchDeviceResources.
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   904
            list := listOfNodes collect:[:aNode| aNode name ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   905
        ]
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   906
    ].
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   907
    super list:list keepSelection:keepSelection
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   908
!
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   909
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   910
nodeAt:anIndex expand:doExpand
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   911
    "expand or collapse the node at an index, anIndex dependent on the boolean state
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   912
     of doExpand
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   913
    "
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   914
    |node|
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   915
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   916
    node := listOfNodes at:anIndex.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   917
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   918
    node hasChildren ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   919
        node isExpandable ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   920
            doExpand ifFalse:[^ self].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   921
            node expand
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   922
        ] ifFalse:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   923
            doExpand ifTrue:[^ self].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   924
            node collapse
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   925
        ].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   926
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   927
        node numberOfChildren == 0 ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   928
            "/ no children; redraw selected line (image might change)
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   929
            self redrawLine:anIndex.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   930
        ] ifFalse:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   931
            "/ with children; update list and redraw to end.
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   932
            model removeDependent:self.
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   933
            model recomputeList.
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
   934
            model addDependent:self.
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   935
            list := self listFromModel.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   936
            self redrawFromLine:anIndex.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   937
            self contentsChanged.
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   938
        ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   939
    ]
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   940
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   941
!
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   942
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   943
recomputeDirectoryIndicator
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   944
    "setup attributes used by directory indicator
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   945
    "
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   946
    |x1 x2 y|
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   947
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   948
    imageInset := 0.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   949
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   950
    (showDirectoryIndicator and:[computeResources not]) ifFalse:[
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   951
        ^ self
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   952
    ].
569
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   953
    openIndicator isNil ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   954
        openIndicator  := self imageOnDevice:(self class openIndicator)
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   955
    ].
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   956
    closeIndicator isNil ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   957
        closeIndicator := self imageOnDevice:(self class closeIndicator)
2a1014d6697c checkin from browser
ca
parents: 552
diff changeset
   958
    ].
546
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   959
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   960
    x1 := (openIndicator widthOn:self) // 2.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   961
    y  := openIndicator heightOn:self.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   962
    extentOpenIndicator := Point x:x1 y:(y // 2).
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   963
    x2 := (closeIndicator widthOn:self) // 2.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   964
    y  := closeIndicator heightOn:self.
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   965
    extentCloseIndicator := Point x:x2 y:(y // 2).
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   966
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   967
    x2 > x1 ifTrue:[x1 := x2].
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   968
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   969
    (x1 := x1 + self class minImageInset) > (imageWidth // 2) ifTrue:[
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   970
        imageInset := x1 - (imageWidth // 2).
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   971
    ].
8d274d70c2c3 fetch resources only if list of nodes not nil otherwise
ca
parents: 545
diff changeset
   972
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   973
! !
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
   974
468
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   975
!SelectionInTreeView methodsFor:'private queries'!
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   976
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   977
lengthOfLongestLineBetween:firstLine and:lastLine
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   978
    "return the length (in characters) of the longest line in a line-range
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   979
    "
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   980
    |max|
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   981
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   982
    max := self widthOfContents:firstLine and:lastLine.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   983
  ^ (max // fontWidth) + 1
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   984
!
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   985
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   986
widthOfContents
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   987
    "return the width of the contents in pixels
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   988
     - used for scrollbar interface"
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   989
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   990
    list isNil ifTrue:[^ 0].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   991
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   992
    (widthOfWidestLine isNil or:[widthOfWidestLine == 0]) ifTrue:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   993
        widthOfWidestLine := self widthOfContents:1 and:(self size).
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   994
    ].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   995
  ^ widthOfWidestLine + (leftMargin * 2)
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   996
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   997
!
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   998
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
   999
widthOfContents:firstLine and:lastLine
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1000
    "return the length (in pixels) of the longest line in a line-range
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1001
    "
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1002
    |max      "{ Class: SmallInteger }"
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1003
     thisLen  "{ Class: SmallInteger }"
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1004
     first    "{ Class: SmallInteger }"
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1005
     last     "{ Class: SmallInteger }" |
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1006
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1007
    listOfNodes size == 0 ifTrue:[^ 0].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1008
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1009
    last  := listOfNodes size.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1010
    first := firstLine.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1011
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1012
    (first > last) ifTrue:[^ 0].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1013
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1014
    (lastLine < last) ifTrue:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1015
        last := lastLine
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1016
    ].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1017
    max  := 0.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1018
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1019
    listOfNodes from:first to:last do:[:anItem||name|
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1020
        thisLen := self xOfStringNode:anItem.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1021
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1022
        (name := anItem name) notNil ifTrue:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1023
            thisLen := thisLen + (name widthOn:self).
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1024
        ].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1025
        (thisLen > max) ifTrue:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1026
            max := thisLen.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1027
        ]
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1028
    ].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1029
  ^ max + leftOffset.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1030
!
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1031
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1032
withoutRedrawAt:anIndex put:aString
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1033
    "change a line without redisplay"
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1034
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1035
    |width|
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1036
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1037
    width := widthOfWidestLine.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1038
    widthOfWidestLine := nil.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1039
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1040
    super withoutRedrawAt:anIndex put:aString.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1041
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1042
    (widthOfWidestLine := width) notNil ifTrue:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1043
        width := self widthOfContents:anIndex and:anIndex.
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1044
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1045
        width > widthOfWidestLine ifTrue:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1046
            widthOfWidestLine := width
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1047
        ] ifFalse:[
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1048
            widthOfWidestLine := nil "/ means: unknown
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1049
        ]
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1050
    ].
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1051
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1052
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1053
! !
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1054
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1055
!SelectionInTreeView methodsFor:'queries'!
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1056
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1057
figureFor:aNode
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1058
    "access figure for a node
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1059
    "
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1060
    aNode hasChildren ifTrue:[
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1061
        aNode isExpandable ifTrue:[ ^ imageClosed ]
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1062
                          ifFalse:[ ^ imageOpened ]
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1063
    ].
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1064
  ^ imageItem
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1065
!
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1066
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1067
indexOfNode:aNode
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1068
    "returns index of a node
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1069
    "
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1070
    ^ listOfNodes findFirst:[:n| n == aNode ]
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1071
!
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1072
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1073
xOfFigureLevel:aLevel
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1074
    "origin x where to draw the icon
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1075
    "
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1076
    |l|
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1077
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1078
    showRoot ifTrue:[l := aLevel]
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1079
            ifFalse:[l := aLevel - 1].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1080
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1081
    showDirectoryIndicator ifFalse:[l := l - 1].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1082
  ^ (l * (imageInset + imageWidth)) + imageInset - leftOffset + leftMargin
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1083
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1084
!
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1085
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1086
xOfFigureNode:aNode
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1087
    "origin x where to draw the icon
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1088
    "
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1089
    ^ self xOfFigureLevel:(aNode level)
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1090
!
490
1129f3cf5cea add directory open/close indication
ca
parents: 485
diff changeset
  1091
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1092
xOfStringLevel:aLevel
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1093
    "origin x where to draw the text( label )
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1094
    "
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1095
    ^ (self xOfFigureLevel:aLevel) + imageWidth + textInset
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1096
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1097
!
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1098
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1099
xOfStringNode:aNode
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1100
    "origin x where to draw the text( label )
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1101
    "
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1102
    ^ self xOfStringLevel:(aNode level)
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1103
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1104
! !
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1105
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1106
!SelectionInTreeView methodsFor:'selection'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1107
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1108
selectFromListOfNames:aListOfNames
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1109
    "set selection from a list of names
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1110
    "
497
9b5503aa6f57 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 494
diff changeset
  1111
    |node rdwNd|
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1112
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1113
    aListOfNames size < 1 ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1114
        ^ self selection:nil
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1115
    ].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1116
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1117
    node := model root.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1118
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1119
    aListOfNames do:[:el||next|
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1120
        next := node detectChild:[:e|e name = el].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1121
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1122
        next notNil ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1123
            node hidden ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1124
                rdwNd isNil ifTrue:[
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1125
                    rdwNd := node.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1126
                    self selectNode:node.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1127
                ].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1128
                node expand
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1129
            ].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1130
            node := next
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1131
        ]
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1132
    ].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1133
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1134
    rdwNd notNil ifTrue:[
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
  1135
        model removeDependent:self.
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
  1136
        model recomputeList.
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
  1137
        model addDependent:self.
494
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1138
        list := self listFromModel.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1139
        self redrawFromLine:(self indexOfNode:rdwNd).
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1140
        self contentsChanged.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1141
    ].
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1142
    self selectNode:node.
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1143
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1144
!
76d8c4e0b612 directory indicator; set a path to be selected
ca
parents: 490
diff changeset
  1145
468
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1146
selectNode:aNode
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1147
    "change selection to a node
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1148
    "
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1149
    self selection:(self indexOfNode:aNode)
468
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1150
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1151
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1152
!
9c54016f159d support of vertical scrollbar
ca
parents: 456
diff changeset
  1153
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1154
selectedIndex
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1155
    "get single selected index or 0
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1156
    "
483
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1157
    selection size == 1 ifTrue:[^ selection first].
1dad61b63e9d optimize doubleClicked & redrawing
ca
parents: 481
diff changeset
  1158
    selection isNumber  ifTrue:[^ selection].
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1159
  ^ 0
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1160
!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1161
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1162
selectedNode
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1163
    "get the single selected node or nil
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1164
    "
456
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1165
    |idx|
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1166
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1167
    (idx := self selectedIndex) ~~ 0 ifTrue:[
d46a10de4380 change model; supports multiple selection
ca
parents: 448
diff changeset
  1168
        ^ listOfNodes at:idx
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1169
    ].
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1170
  ^ nil
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1171
!
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1172
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1173
selectionChangedFrom:oldSelection
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1174
    "update selectionHolder if not nil
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1175
    "
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1176
623
4de870640523 first change selectionHolders value,
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
  1177
    "/ first change my selectionHolders value ...
514
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1178
    selectionHolder notNil ifTrue:[
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1179
        self selectionToModel.
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1180
    ].
c25e078ed84c add selectionHolder and hierarchical list holder
ca
parents: 507
diff changeset
  1181
623
4de870640523 first change selectionHolders value,
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
  1182
    "/ ... then make notifications.
4de870640523 first change selectionHolders value,
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
  1183
    super selectionChangedFrom:oldSelection.
4de870640523 first change selectionHolders value,
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
  1184
4de870640523 first change selectionHolders value,
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
  1185
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1186
! !
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1187
507
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1188
!SelectionInTreeView methodsFor:'selection-actions'!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1189
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1190
selectedNodeAdd:something
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1191
    "add a node or collection of nodes after selected node
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1192
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1193
    |node|
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1194
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1195
    something notNil ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1196
        (node := self selectedNode) notNil ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1197
            node parent notNil ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1198
                node isCollapsable ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1199
                    model add:something beforeIndex:1 below:node
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1200
                ] ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1201
                    model add:something after:node
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1202
                ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1203
            ] ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1204
                model add:something beforeIndex:1 below:(self root)
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1205
            ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1206
        ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1207
    ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1208
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1209
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1210
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1211
selectedNodeBecomeChildOfNext
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1212
    "become node a child of followd node
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1213
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1214
    |idx node cprt nprt|
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1215
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1216
    ((node := self selectedNode) isNil or:[(cprt := node parent) isNil]) ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1217
        idx := cprt indexOfChild:node.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1218
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1219
        idx == cprt children size ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1220
            nprt := cprt childAt:(idx + 1).
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1221
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1222
            nprt notNil ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1223
                model removeDependent:self.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1224
                model removeSelection.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1225
                selection := nil.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1226
                model collapse:nprt.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1227
                model add:node beforeIndex:1 below:nprt.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1228
                model addDependent:self.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1229
                model expand:nprt.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1230
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1231
                self selectNode:node.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1232
            ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1233
        ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1234
    ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1235
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1236
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1237
selectedNodeBecomeSisterOfParent
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1238
    "become node a sister of its current parent
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1239
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1240
    |node cprt nprt|
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1241
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1242
    (    (node := self selectedNode) isNil
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1243
     or:[(cprt := node parent) isNil
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1244
     or:[(nprt := cprt parent) isNil]]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1245
    ) ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1246
        model removeDependent:self.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1247
        model removeSelection.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1248
        selection := nil.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1249
        model addDependent:self.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1250
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1251
        model add:node afterIndex:(nprt indexOfChild:cprt) below:nprt.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1252
        self selectNode:node.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1253
    ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1254
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1255
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1256
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1257
selectedNodeChangeSequenceOrder:anOffset
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1258
    "move child 'anOffset' forward or backward in list of children
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1259
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1260
    |idx node size parent|
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1261
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1262
    (      (node   := self selectedNode) notNil
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1263
      and:[(parent := node parent) notNil
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1264
      and:[(size   := parent children size) > 1]]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1265
    ) ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1266
        idx := parent indexOfChild:node.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1267
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1268
        model removeDependent:self.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1269
        model removeSelection.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1270
        selection := nil.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1271
        model addDependent:self.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1272
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1273
        (idx := idx + anOffset) < 1 ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1274
            idx := size
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1275
        ] ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1276
            idx > size ifTrue:[idx := 1]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1277
        ].
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1278
        model add:node beforeIndex:idx below:parent.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1279
        self selectNode:node.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1280
    ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1281
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1282
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1283
selectedNodeExpand:doExpand
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1284
    "collapse or expand selected node
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1285
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1286
    |node index|
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1287
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1288
    (index := self selectedIndex) ~~ 0 ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1289
        node := listOfNodes at:index.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1290
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1291
        node hasChildren ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1292
            node isExpandable ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1293
                doExpand ifFalse:[^ self].
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1294
                node expand
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1295
            ] ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1296
                doExpand ifTrue:[^ self].
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1297
                node collapse
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1298
            ].
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1299
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1300
            node numberOfChildren == 0 ifTrue:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1301
                "/ no children; redraw selected line (image might change)
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1302
                self redrawLine:index.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1303
            ] ifFalse:[
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1304
                "/ with children; update list and redraw to end.
585
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
  1305
                model removeDependent:self.
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
  1306
                model recomputeList.
5a0ed2305998 bug fixes:
ca
parents: 569
diff changeset
  1307
                model addDependent:self.
507
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1308
                list := self listFromModel.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1309
                self redrawFromLine:index.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1310
                self contentsChanged.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1311
            ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1312
        ]
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1313
    ].
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1314
!
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1315
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1316
selectedNodesRemove
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1317
    "remove selected nodes
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1318
    "
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1319
    model removeSelection.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1320
    self selection:nil.
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1321
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1322
! !
546f43d75275 add more functionality based on selection
ca
parents: 497
diff changeset
  1323
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1324
!SelectionInTreeView class methodsFor:'documentation'!
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1325
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1326
version
639
663a913ec30b discard motion events if +/- is pressed
ca
parents: 623
diff changeset
  1327
    ^ '$Header: /cvs/stx/stx/libwidg2/Attic/SelTreeV.st,v 1.32 1998-01-02 16:07:36 ca Exp $'
444
6d40e2c4ed53 intitial checkin
ca
parents:
diff changeset
  1328
! !