SelectionInTree.st
author Claus Gittinger <cg@exept.de>
Fri, 15 Jun 2018 10:54:35 +0200
changeset 5816 7876c07931a7
parent 5667 a213756b3b4d
child 6156 2f7f8fc3abe1
permissions -rw-r--r--
#DOCUMENTATION by cg class: ComboListView class comment/format in: #documentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5667
a213756b3b4d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5626
diff changeset
     1
"{ Encoding: utf8 }"
a213756b3b4d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5626
diff changeset
     2
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     3
"
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     4
 COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     5
              All Rights Reserved
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     6
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     7
 This software is furnished under a license and may be used
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    12
 hereby transferred.
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    13
"
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1553
diff changeset
    14
"{ Package: 'stx:libwidg2' }"
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1553
diff changeset
    15
4941
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    16
"{ NameSpace: Smalltalk }"
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
    17
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    18
Model subclass:#SelectionInTree
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
    19
	instanceVariableNames:'root list selection showRoot contentsAction labelAction
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
    20
		childrenAction iconAction indicatorList indicatorTask accessLock'
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    21
	classVariableNames:''
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    22
	poolDictionaries:''
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    23
	category:'Interface-Support-Models'
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    24
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    25
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    26
!SelectionInTree class methodsFor:'documentation'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    27
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    28
copyright
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    29
"
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    30
 COPYRIGHT (c) 1997 by eXept Software AG / Claus Gittinger
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    31
              All Rights Reserved
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    32
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    33
 This software is furnished under a license and may be used
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    34
 only in accordance with the terms of that license and with the
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    36
 be provided or otherwise made available to, or used by, any
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    37
 other person.  No title to or ownership of the software is
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    38
 hereby transferred.
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    39
"
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    40
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    41
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    42
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    43
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    44
documentation
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    45
"
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    46
    list and selection holder for hierarchical list structures. 
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    47
    Used to buildup file-trees, class trees etc.
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    48
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    49
    Especially suited for use with SelectionInTreeView.
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    50
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    51
    Notice: this class replaces SelectionInHierarchy, 
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    52
            which provides similar (but less sophisticated) functionality.
1189
0c2cf8ee62e3 comment
Claus Gittinger <cg@exept.de>
parents: 1176
diff changeset
    53
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    54
    [See also:]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    55
        TreeItem
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    56
        SelectionInTreeView
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    57
        SelectionInHierarchy
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    58
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    59
    [Author:]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    60
        W. Olberding
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    61
        Claus Atzkern
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    62
"
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    63
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    64
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
    65
!SelectionInTree class methodsFor:'instance creation'!
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
    66
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
    67
new
2840
93e2b635838d proper #initialize
Claus Gittinger <cg@exept.de>
parents: 2697
diff changeset
    68
    ^ self basicNew initialize
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
    69
! !
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
    70
1174
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    71
!SelectionInTree class methodsFor:'defaults'!
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    72
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    73
defaultItemClass
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    74
    "returns the default item class or nil (the default)"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    75
1174
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    76
    ^ nil
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    77
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    78
    "Modified (comment): / 04-02-2017 / 19:48:09 / cg"
1174
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    79
! !
8d0c73401ea8 ask model for default itemClass
ca
parents: 1166
diff changeset
    80
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    81
!SelectionInTree methodsFor:'accessing'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    82
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    83
list
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    84
    "get the list of currently shown objects"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    85
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    86
    ^ list
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    87
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    88
    "Modified (comment): / 04-02-2017 / 19:38:18 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    89
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    90
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    91
root
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    92
    "get the root node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    93
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    94
    ^ root
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    95
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
    96
    "Modified (comment): / 04-02-2017 / 19:40:07 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    97
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
    98
509
c6c9f5ecb977 add method expand
ca
parents: 496
diff changeset
    99
root:aRoot
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   100
    "set a new root"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   101
1176
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   102
    |tree|
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   103
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   104
    root notNil ifTrue: [
1176
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   105
        tree := root tree.
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   106
        root tree:nil.
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   107
    ] ifFalse:[
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   108
        tree := self
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   109
    ].
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   110
    self stopRunningTasks.
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   111
515
2c09c8688bb8 set parent of root allways to nil
ca
parents: 509
diff changeset
   112
    (root := aRoot) notNil ifTrue:[
1176
cd9fc4bfb273 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1174
diff changeset
   113
        root tree:tree.
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   114
        root parent:nil.
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   115
    ].
1189
0c2cf8ee62e3 comment
Claus Gittinger <cg@exept.de>
parents: 1176
diff changeset
   116
    self recomputeList
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   117
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   118
    "Modified (comment): / 04-02-2017 / 19:40:12 / cg"
860
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   119
!
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   120
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   121
value
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   122
    ^ list
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   123
! !
491
c7d57a5e7a21 change root, do not remove children
ca
parents: 482
diff changeset
   124
2697
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   125
!SelectionInTree methodsFor:'accessing hierarchy new'!
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   126
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   127
doMakeVisible:itemOrCollectionOfItems
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   128
    "make an item or collection of items visible"
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   129
2697
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   130
    |anchor parent|
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   131
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   132
    self each:itemOrCollectionOfItems do:[:anItem|
2697
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   133
        parent := anItem.
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   134
        anchor := nil.
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   135
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   136
        parent notNil ifTrue:[
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   137
            [(parent := parent parent) notNil] whileTrue:[
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   138
                parent hidden ifTrue:[
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   139
                    anchor notNil ifTrue:[ anchor expand ].
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   140
                    anchor := parent.
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   141
                ]
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   142
            ].
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   143
            anchor notNil ifTrue:[
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   144
                self expandItem:anchor do:[anchor expand]
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   145
            ]
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   146
        ].
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   147
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   148
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   149
    "Modified (comment): / 18-10-2017 / 11:55:53 / cg"
2697
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   150
! !
c04e7ba6c251 care for nil parent
werner
parents: 2494
diff changeset
   151
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1553
diff changeset
   152
!SelectionInTree methodsFor:'accessing-behavior'!
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   153
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   154
childrenAction
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   155
    "get the children action block.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   156
     This is called by tree items to retrieve the children of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   157
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   158
    ^childrenAction
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   159
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   160
    "Modified (comment): / 04-02-2017 / 19:31:38 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   161
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   162
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   163
childrenAction:aBlock
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   164
    "set the children action block
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   165
     This is called by tree items to retrieve the children of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   166
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   167
    childrenAction := aBlock.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   168
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   169
    "Modified (comment): / 04-02-2017 / 19:31:51 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   170
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   171
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   172
contentsAction
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   173
    "get contents action block
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   174
     This is called by tree items to retrieve the contents of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   175
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   176
    ^contentsAction
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   177
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   178
    "Modified (comment): / 04-02-2017 / 19:32:04 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   179
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   180
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   181
contentsAction:aBlock
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   182
    "set contents action block
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   183
     This is called by tree items to retrieve the contents of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   184
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   185
    contentsAction := aBlock.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   186
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   187
    "Modified (comment): / 04-02-2017 / 19:32:09 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   188
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   189
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   190
iconAction
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   191
    "get icon action block
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   192
     This is called by tree items to retrieve the icon of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   193
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   194
    ^iconAction
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   195
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   196
    "Modified (comment): / 04-02-2017 / 19:32:22 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   197
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   198
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   199
iconAction:aBlock
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   200
    "set icon action block
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   201
     This is called by tree items to retrieve the icon of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   202
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   203
    iconAction := aBlock.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   204
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   205
    "Modified (comment): / 04-02-2017 / 19:32:17 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   206
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   207
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   208
labelAction
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   209
    "get label action block
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   210
     This is called by tree items to retrieve the label of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   211
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   212
    ^labelAction
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   213
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   214
    "Modified (comment): / 04-02-2017 / 19:32:27 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   215
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   216
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   217
labelAction:aBlock
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   218
    "set label action block
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   219
     This is called by tree items to retrieve the label of a node"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   220
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   221
    labelAction := aBlock.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   222
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   223
    "Modified (comment): / 04-02-2017 / 19:32:35 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   224
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   225
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   226
showRoot
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   227
    "controls if the list is shown with or without root.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   228
     Notice that technically, there is always one single root item;
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   229
     however, its visibility can be suppressed to make the tree look like a list
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   230
     on the top level"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   231
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   232
    ^ showRoot
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   233
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   234
    "Modified (comment): / 04-02-2017 / 19:33:45 / cg"
491
c7d57a5e7a21 change root, do not remove children
ca
parents: 482
diff changeset
   235
!
c7d57a5e7a21 change root, do not remove children
ca
parents: 482
diff changeset
   236
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   237
showRoot:aBoolean
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   238
    "controls if the list is shown with or without root.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   239
     Notice that technically, there is always one single root item;
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   240
     however, its visibility can be suppressed to make the tree look like a list
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   241
     on the top level"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   242
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   243
    aBoolean ~~ showRoot ifTrue:[
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   244
        showRoot := aBoolean.
491
c7d57a5e7a21 change root, do not remove children
ca
parents: 482
diff changeset
   245
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   246
        root notNil ifTrue:[
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   247
            aBoolean ifTrue:[
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   248
                list addFirst:root.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   249
                self changed:#insertCollection: with:(Array with:1 with:1 with:nil).
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   250
            ] ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   251
                list removeFirst.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   252
                self changed:#removeFrom: with:(Array with:1 with:1 with:nil).
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   253
            ].
491
c7d57a5e7a21 change root, do not remove children
ca
parents: 482
diff changeset
   254
        ].
c7d57a5e7a21 change root, do not remove children
ca
parents: 482
diff changeset
   255
    ].
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   256
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   257
    "Modified (format): / 04-02-2017 / 21:34:26 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   258
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   259
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1553
diff changeset
   260
!SelectionInTree methodsFor:'accessing-hierarchy'!
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   261
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   262
collapse:something 
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   263
    "collapse a node or collection of nodes"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   264
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   265
    |listChanged|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   266
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   267
    listChanged := false.
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   268
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   269
    self each:something do:[:aNode|
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   270
        aNode isCollapsable ifTrue:[
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   271
            aNode collapse.
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   272
            listChanged := true
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   273
        ]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   274
    ].
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   275
    listChanged ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   276
        self listFromRoot.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   277
        self changed:#list.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   278
    ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   279
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   280
    "Modified (comment): / 04-02-2017 / 19:34:09 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   281
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   282
509
c6c9f5ecb977 add method expand
ca
parents: 496
diff changeset
   283
expand
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   284
    "expand the root"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   285
509
c6c9f5ecb977 add method expand
ca
parents: 496
diff changeset
   286
    self expand:root
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   287
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   288
    "Modified (comment): / 04-02-2017 / 19:34:13 / cg"
509
c6c9f5ecb977 add method expand
ca
parents: 496
diff changeset
   289
!
c6c9f5ecb977 add method expand
ca
parents: 496
diff changeset
   290
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   291
expand:something 
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   292
    "expand a node or collection of nodes"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   293
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   294
    |listChanged|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   295
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   296
    listChanged := false.
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   297
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   298
    self each:something do:[:aNode|
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   299
        aNode isExpandable ifTrue:[
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   300
            aNode expand.
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   301
            listChanged := true
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   302
        ]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   303
    ].
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   304
    listChanged ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   305
        self listFromRoot.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   306
        self changed:#list.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   307
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   308
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   309
    "Modified (comment): / 04-02-2017 / 19:34:17 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   310
! !
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   311
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1553
diff changeset
   312
!SelectionInTree methodsFor:'accessing-hierarchy new'!
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   313
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   314
doCollapse:something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   315
    "collapse all children under an item or a sequence of items;
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   316
     if the list changed, a change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   317
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   318
    self each:something do:[:anItem|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   319
        self collapseItem:anItem do:[ anItem collapse ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   320
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   321
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   322
    "Modified (comment): / 04-02-2017 / 19:36:30 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   323
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   324
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   325
doCollapseAll:something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   326
    "collapse all children and subChildren under an item or sequence of items;
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   327
     if the list changed, a change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   328
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   329
    self each:something do:[:anItem|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   330
        self collapseItem:anItem do:[ anItem collapseAll ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   331
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   332
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   333
    "Modified (comment): / 04-02-2017 / 19:36:39 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   334
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   335
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   336
doExpand:something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   337
    "expand all children under an item or collection of items;
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   338
     if the list changed, a change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   339
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   340
    self each:something do:[:anItem|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   341
        self expandItem:anItem do:[anItem expand]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   342
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   343
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   344
    "Modified (comment): / 04-02-2017 / 19:36:44 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   345
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   346
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   347
doExpandAll:something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   348
    "expand all children and subChildren under an item or sequence of items;
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   349
     if the list changed, change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   350
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   351
    self each:something do:[:anItem|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   352
        self expandItem:anItem do:[anItem expandAll]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   353
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   354
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   355
    "Modified (comment): / 04-02-2017 / 19:36:55 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   356
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   357
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   358
!SelectionInTree methodsFor:'adding & removing'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   359
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   360
add:something after:aChild
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   361
    "add a node or collection of nodes to the parent of aChild
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   362
     after that child in the sublist"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   363
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   364
    |p|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   365
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   366
    (aChild notNil and:[(p := aChild parent) notNil]) ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   367
        self add:something afterIndex:(p indexOfChild:aChild) below:p
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   368
    ]
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   369
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   370
    "Modified (comment): / 04-02-2017 / 19:35:11 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   371
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   372
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   373
add:something afterIndex:anIndex below:aParent
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   374
    "add a node or collection of nodes to parent after an index
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   375
    "
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   376
    self add:something beforeIndex:(anIndex + 1) below:aParent
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   377
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   378
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   379
add:something before:aChild
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   380
    "add a node or collection of nodes to before a child"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   381
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   382
    |p|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   383
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   384
    (aChild notNil and:[(p := aChild parent) notNil]) ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   385
        self add:something beforeIndex:(p indexOfChild:aChild) below:p
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   386
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   387
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   388
    "Modified (comment): / 04-02-2017 / 19:35:19 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   389
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   390
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   391
add:something beforeIndex:anIndex below:aParent
1204
3940e6cbde19 comment
Claus Gittinger <cg@exept.de>
parents: 1189
diff changeset
   392
    "add a node or collection of nodes to aParents children
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   393
     before anIndex (which is a child-index)"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   394
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   395
    |children start index size pList|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   396
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   397
    (    aParent isNil
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   398
     or:[something isNil
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   399
     or:[(something isCollection and:[something isEmpty])]]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   400
    ) ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   401
        ^ self
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   402
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   403
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   404
    (start := self indexOf:aParent) == 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   405
        "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   406
        "/ parent not visible; list not changed
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   407
        "/
1304
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   408
        aParent == root ifFalse:[
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   409
            aParent add:something beforeIndex:anIndex.
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   410
          ^ self
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   411
        ]
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   412
    ] ifFalse:[
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   413
        aParent shown ifFalse:[
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   414
            aParent add:something beforeIndex:anIndex.
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   415
            self changed:#at: with:start.
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   416
            ^ self
e6693ac51d54 add item at root
Claus Gittinger <cg@exept.de>
parents: 1268
diff changeset
   417
        ]
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   418
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   419
    children := aParent children.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   420
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   421
    (children isEmpty or:[anIndex <= 1]) ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   422
        index := 1.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   423
    ] ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   424
        size  := children size.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   425
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   426
        anIndex > size ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   427
            index := size + 1.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   428
            start := aParent numberOfAllVisibleChildren + start.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   429
        ] ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   430
            index := anIndex.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   431
            start := (self indexOf:(children at:index)) - 1.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   432
        ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   433
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   434
    aParent add:something beforeIndex:index.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   435
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   436
    (start := start + 1) == 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   437
        "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   438
        "/ not visible
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   439
        "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   440
        ^ self
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   441
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   442
    pList := OrderedCollection new:2048.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   443
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   444
    self each:something do:[:aNode|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   445
        pList add:aNode.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   446
        aNode addVisibleChildrenTo:pList
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   447
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   448
    pList isEmpty ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   449
        ^ self
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   450
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   451
    list addAll:pList beforeIndex:start.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   452
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   453
    self changed:#insertCollection:
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   454
            with:(Array with:start with:pList size with:aParent).
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   455
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   456
    "Modified (comment): / 04-02-2017 / 19:35:23 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   457
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   459
add:something below:aParent
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   460
    "add a node or collection of nodes to parent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   461
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   462
    aParent notNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   463
        self add:something beforeIndex:(aParent numberOfChildren + 1) below:aParent
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   464
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   465
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   466
    "Modified (comment): / 04-02-2017 / 19:35:28 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   467
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   468
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   469
remove:something
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   470
    "remove a node or collection of nodes.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   471
     Change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   472
1268
37066c039eb3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1234
diff changeset
   473
    |node index loNums loItem start size parent stop|
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   474
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   475
    something isNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   476
        ^ something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   477
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   478
    loNums := SortedCollection new.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   479
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   480
    self each:something do:[:el|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   481
        node := el isNumber ifTrue:[list at:el ifAbsent:nil]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   482
                           ifFalse:[el].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   483
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   484
        node notNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   485
            self stopIndicatorValidationFor:node.
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   486
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   487
            node parent isNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   488
                "/ remove all including root
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   489
                node == root ifTrue:[ self root:nil ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   490
              ^ something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   491
            ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   492
            index := self indexOf:node.
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   493
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   494
            index == 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   495
                "/ not visible
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   496
                node parent removeChild:node
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   497
            ] ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   498
                loNums add:index
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   499
            ].
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   500
        ]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   501
    ].
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   502
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   503
    loNums isEmpty ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   504
        "/ nothing visible changed
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   505
        ^ something
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   506
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   507
    loItem := OrderedCollection new.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   508
    loNums do:[:i| loItem add:(list at:i)].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   509
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   510
    loItem do:[:aNode|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   511
        start := self indexOf:aNode.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   512
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   513
        start ~~ 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   514
            parent := aNode parent.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   515
            size   := 1 + aNode numberOfAllVisibleChildren.
860
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   516
            stop   := start + size - 1.
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   517
            parent remove:aNode.
860
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   518
            list removeFromIndex:start toIndex:stop.
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   519
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   520
            self changed:#removeFrom:
860
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   521
                    with:(Array with:start with:stop with:parent).
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   522
        ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   523
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   524
    ^ something
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   525
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   526
    "Modified (comment): / 04-02-2017 / 19:39:07 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   527
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   528
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   529
removeAllOtherThanRoot
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   530
    "remove all children from the root
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   531
     Change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   532
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   533
    |listChanged|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   534
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   535
    root notNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   536
        listChanged := root isCollapsable.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   537
        root children:(OrderedCollection new).
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   538
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   539
        listChanged ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   540
            self listFromRoot.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   541
            self changed:#list
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   542
        ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   543
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   544
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   545
    "Modified (comment): / 04-02-2017 / 19:39:31 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   546
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   547
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   548
removeIndex:something
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   549
    "remove a node at index or collection of indexed nodes.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   550
     Change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   551
     
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   552
    self remove:something
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   553
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   554
    "Modified (comment): / 04-02-2017 / 19:39:42 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   555
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   556
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   557
removeSelection
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   558
    "remove selected nodes.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   559
     Change notifications are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   560
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   561
    |sel|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   562
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   563
    sel := self selectionIndex.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   564
    self selectionIndex:nil.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   565
    self remove:sel.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   566
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   567
    "Modified (comment): / 04-02-2017 / 19:39:51 / cg"
1209
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   568
!
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   569
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   570
replaceNode:aNode with:aNewNode
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   571
    "replace a node by a new node; if the new node is nil, the node and its
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   572
     children are removed. 
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   573
     Otherwise the children are taken over to the new node."
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   574
1209
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   575
    |parent index children|
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   576
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   577
    (aNode isNil or:[aNode == aNewNode]) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   578
        ^ self
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   579
    ].
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   580
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   581
    aNewNode isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   582
        ^ self remove:aNode
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   583
    ].
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   584
    self stopIndicatorValidationFor:aNode.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   585
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   586
    aNewNode children:(aNode children).    
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   587
    aNode    children:nil.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   588
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   589
    aNode == root ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   590
        aNewNode tree:(aNode tree).
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   591
        aNewNode parent:nil.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   592
        root := aNewNode.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   593
    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   594
        parent := aNode parent.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   595
        aNewNode tree:nil.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   596
        aNewNode parent:parent.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   597
        children := parent children.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   598
        index := children identityIndexOf:aNode.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   599
        children at:index put:aNewNode.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   600
    ].
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   601
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   602
    aNode tree:nil.        
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   603
    aNode parent:nil.        
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   604
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   605
    (index := self indexOf:aNode) ~~ 0 ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   606
        list at:index put:aNewNode.
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   607
        self changed:#at: with:index
Claus Gittinger <cg@exept.de>
parents: 1204
diff changeset
   608
    ].
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   609
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   610
    "Modified (comment): / 04-02-2017 / 19:40:02 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   611
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   612
758
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   613
!SelectionInTree methodsFor:'change & update'!
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   614
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   615
invalidate
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   616
    "called whenever something changed that requires a redraw but no recomputation.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   617
     For example a name or icon"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   618
758
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   619
    self dependents do:[:aDependent|
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   620
        aDependent isView ifTrue:[ aDependent invalidate ]
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   621
    ].
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   622
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   623
    "Modified (comment): / 04-02-2017 / 19:38:06 / cg"
762
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   624
!
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   625
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   626
update:something with:aParameter from:aModel
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   627
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   628
    self dependents do:[:aDependent|
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   629
        aDependent update:something with:aParameter from:aModel
df337e82f064 supports dynamic read behavior for contents, label, children, and icon of tree items
tz
parents: 758
diff changeset
   630
    ]
758
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   631
! !
0f0b16a16fa7 add method: #invalidate
ca
parents: 585
diff changeset
   632
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   633
!SelectionInTree methodsFor:'enumerating'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   634
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   635
each:itemOrCollectionOfItems do:aOneArgBlock
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   636
    "evaluate a block for something or in case of a collection for each
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   637
     element in the collection"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   638
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   639
    itemOrCollectionOfItems notNil ifTrue:[
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   640
        itemOrCollectionOfItems isCollection ifTrue:[
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   641
            itemOrCollectionOfItems do:aOneArgBlock
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   642
        ] ifFalse:[
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   643
            aOneArgBlock value:itemOrCollectionOfItems
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   644
        ]
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   645
    ]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   646
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   647
    "Modified (format): / 18-10-2017 / 11:55:36 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   648
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   649
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   650
!SelectionInTree methodsFor:'initialization'!
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   651
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   652
initialize
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   653
1166
d062a52bc7cc list attribute changed from OrderedCollection to List
Claus Gittinger <cg@exept.de>
parents: 1155
diff changeset
   654
    showRoot      := true.
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   655
    indicatorList := OrderedCollection new.
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   656
    accessLock    := Semaphore forMutualExclusion.
1166
d062a52bc7cc list attribute changed from OrderedCollection to List
Claus Gittinger <cg@exept.de>
parents: 1155
diff changeset
   657
    list          := List new.
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   658
! !
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   659
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   660
!SelectionInTree methodsFor:'private'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   661
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   662
recomputeList
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   663
    "Travers the tree and build a new list."
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   664
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   665
    self listFromRoot.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   666
    self changed:#list.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   667
! !
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   668
2494
87ae868b836a method category rename
Claus Gittinger <cg@exept.de>
parents: 2038
diff changeset
   669
!SelectionInTree methodsFor:'private-hierarchy'!
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   670
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   671
collapseItem:anItem do:collapseBlock
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   672
    "collapse all children under an item; 
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   673
     send a change notification if the list changed"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   674
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   675
    |start stop size|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   676
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   677
    anItem isCollapsable ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   678
        ^ self
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   679
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   680
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   681
    (start := self indexOf:anItem) == 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   682
        "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   683
        "/ item not visible
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   684
        "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   685
        collapseBlock value.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   686
    ] ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   687
        size := anItem numberOfAllVisibleChildren.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   688
        collapseBlock value.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   689
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   690
        size == 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   691
            "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   692
            "/ no children before; list not changed 
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   693
            "/
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   694
            self changed:#at: with:start
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   695
        ] ifFalse:[        
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   696
            stop  := start + size.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   697
            start := start + 1.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   698
            list removeFromIndex:start toIndex:stop.
860
64d52b8e3dbd bug fix in remove:
ca
parents: 857
diff changeset
   699
            self changed:#removeFrom: with:(Array with:start with:stop with:anItem).
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   700
        ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   701
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   702
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   703
    "Modified (comment): / 04-02-2017 / 19:35:52 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   704
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   705
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   706
expandItem:anItem do:expandBlock
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   707
    "expand all children under an item; 
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   708
     send out change a notification if the list changed"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   709
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   710
    |start size pList|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   711
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   712
    anItem isExpandable ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   713
        ^ self
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   714
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   715
    expandBlock value.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   716
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   717
    (start := self indexOf:anItem) ~~ 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   718
        anItem addVisibleChildrenTo:(pList := OrderedCollection new:2048).
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   719
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   720
        (size := pList size) ~~ 0 ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   721
            start := 1 + start.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   722
            list addAll:pList beforeIndex:start.
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   723
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   724
            self changed:#insertCollection:
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   725
                    with:(Array with:start with:size with:anItem).
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   726
        ] ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   727
            self changed:#at: with:start
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   728
        ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   729
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   730
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   731
    "Modified (comment): / 04-02-2017 / 19:37:29 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   732
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   733
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   734
listFromRoot
1204
3940e6cbde19 comment
Claus Gittinger <cg@exept.de>
parents: 1189
diff changeset
   735
    "Traverse the tree and build a new list;
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   736
     no change notification are sent"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   737
842
636d8a543c35 call clearContents to reinitialize the list
ca
parents: 811
diff changeset
   738
    list clearContents.
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   739
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   740
    root notNil ifTrue:[
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   741
        showRoot ifTrue:[ list add:root ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   742
        root addVisibleChildrenTo:list
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   743
    ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   744
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   745
    "Modified (comment): / 04-02-2017 / 19:38:29 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   746
! !
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   747
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   748
!SelectionInTree methodsFor:'queries'!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   749
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   750
indexOf:anItem
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   751
    "returns the index of an item or 0"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   752
5667
a213756b3b4d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5626
diff changeset
   753
    ^ anItem notNil 
a213756b3b4d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5626
diff changeset
   754
        ifTrue:[list identityIndexOf:anItem]
a213756b3b4d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5626
diff changeset
   755
        ifFalse:[0]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   756
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   757
    "Modified (comment): / 04-02-2017 / 19:37:38 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   758
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   759
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   760
!SelectionInTree methodsFor:'searching'!
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   761
1550
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   762
detectFirstItem:aOneArgBlock
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   763
    "detect an item the evaluation of the block returns true. 
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   764
     The argument to the block is the item.
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   765
     This recursively enumerates the tree for the first item for which
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   766
     the block returns true."
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   767
1550
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   768
    root notNil ifTrue:[
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   769
        ^ root detectFirstChild:aOneArgBlock
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   770
    ].
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   771
    ^ nil
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   772
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   773
    "Modified (comment): / 04-02-2017 / 19:36:01 / cg"
1550
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   774
!
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   775
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   776
detectItem:aOneArgBlock
1553
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   777
    "detect an item the evaluation of the block returns true. 
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   778
     The argument to the block is the item.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   779
     This searches top-level items only."
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   780
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   781
    root notNil ifTrue:[
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   782
        ^ root detectChild:aOneArgBlock
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   783
    ].
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   784
    ^ nil
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   785
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   786
    "Modified (comment): / 04-02-2017 / 19:36:06 / cg"
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   787
!
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   788
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   789
detectItem:aTwoArgBlock arguments:aListOfArgs
1553
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   790
    "detect an item the evaluation of the block returns true. 
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   791
     The first argument to the block is the item, the second argument
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   792
     the value derived from the argument list at level.
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   793
     This recursively walks down the tree up to aListOfArgs size levels;
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   794
     i.e. if you pass (1 to:10) as aListOfArgs, the block will get the sub-level
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   795
     as second argument and stop the search after 10 levels."
1550
3f9efcb63b4e added detectFirstItem:
Claus Gittinger <cg@exept.de>
parents: 1304
diff changeset
   796
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   797
    root notNil ifTrue:[
1553
38d1274a3e2f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1550
diff changeset
   798
        ^ root detectChild:aTwoArgBlock arguments:aListOfArgs
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   799
    ].
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   800
    ^ nil
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   801
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   802
    "Modified (comment): / 04-02-2017 / 19:36:15 / cg"
849
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   803
! !
f7d8363fc24f support more detectItem mechanisms
ca
parents: 842
diff changeset
   804
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   805
!SelectionInTree methodsFor:'selection'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   806
1213
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   807
selectNode:aNode
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   808
    "select a given node (by identity - not by index).
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   809
     Notice, that the node must be visible - i.e. its parent chain must be
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   810
     currently expanded."
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   811
    
1213
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   812
    |index|
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   813
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   814
    (index := self indexOf:aNode) ~~ 0 ifTrue:[
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   815
        self selectionIndex:index
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   816
    ] ifFalse:[
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   817
        "/ self halt.
1213
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   818
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   819
5626
e08c32a9a32a #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5452
diff changeset
   820
    "Modified: / 18-10-2017 / 11:56:20 / cg"
1213
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   821
!
5b22dd452a58 added #selectNode:.
Claus Gittinger <cg@exept.de>
parents: 1209
diff changeset
   822
1234
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   823
selectNodes:aCollectionOfNodes
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   824
    "select a given set of nodes (by identity - not by index)"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   825
1234
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   826
    | indices|
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   827
4941
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   828
    indices := aCollectionOfNodes 
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   829
                    collect:[:aNode | self indexOf:aNode]
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
   830
                    thenSelect:[:idx | idx ~~ 0].
1234
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   831
    indices sort.
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   832
    self selectionIndex:indices
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   833
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   834
    "Created: / 06-03-1999 / 22:37:59 / cg"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   835
    "Modified (comment): / 04-02-2017 / 19:40:55 / cg"
1234
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   836
!
1dee4432fd38 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1213
diff changeset
   837
906
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   838
selectedNode
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   839
    "returns the selected node or nil"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   840
906
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   841
    |nodes|
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   842
    (nodes := self selectedNodes) notNil ifTrue: [
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   843
        ^nodes first
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   844
    ].
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   845
    ^nil
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   846
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   847
    "Modified (comment): / 04-02-2017 / 19:41:04 / cg"
906
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   848
!
6173137343de need method #selectedNode
tz
parents: 860
diff changeset
   849
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   850
selectedNodes
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   851
    "returns a collection of selected nodes or nil"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   852
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   853
    |node coll|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   854
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   855
    selection isNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   856
        ^ nil
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   857
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   858
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   859
    selection isCollection ifFalse:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   860
        node := list at:selection ifAbsent:nil.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   861
        ^ node notNil ifTrue:[Array with:node] ifFalse:[nil]
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   862
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   863
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   864
    selection isEmpty ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   865
        ^ nil
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   866
    ].
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   867
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   868
    coll := OrderedCollection new:(selection size).
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   869
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   870
    selection do:[:idx|
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   871
        (node := list at:idx ifAbsent:nil) notNil ifTrue:[
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   872
            coll add:node
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   873
        ]
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   874
    ].
4275
9b7b0a680e70 class: SelectionInTree
Claus Gittinger <cg@exept.de>
parents: 3872
diff changeset
   875
    ^ coll asNilIfEmpty
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   876
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   877
    "Modified (format): / 04-02-2017 / 19:41:19 / cg"
857
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   878
!
d8e14b853cb7 methods for adding & removing items are
ca
parents: 849
diff changeset
   879
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   880
selectedNodesDo:aOneArgBlock
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   881
    "evaluate the block on each node selected"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   882
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   883
    |node|
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   884
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   885
    selection isNil ifTrue:[
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   886
        ^ nil
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   887
    ].
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   888
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   889
    selection isCollection ifFalse:[
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   890
        node := list at:selection ifAbsent:nil.
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   891
        node notNil ifTrue:[
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   892
            aOneArgBlock value:node
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   893
        ].
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   894
        ^ self
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   895
    ].
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   896
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   897
    selection do:[:i|
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   898
        node := list at:i ifAbsent:nil.
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   899
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   900
        node notNil ifTrue:[
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   901
            aOneArgBlock value:node
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   902
        ].
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   903
    ].
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   904
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   905
    "Modified (comment): / 04-02-2017 / 19:41:54 / cg"
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   906
!
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   907
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   908
selection
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   909
    "get the selection index or nil"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   910
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   911
    ^ self selectionIndex
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   912
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   913
    "Modified (comment): / 04-02-2017 / 19:42:40 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   914
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   915
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   916
selection:indexesOrNil
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   917
    "set the selection index"
3872
a35d3ecdb0bb comment/format in: #selection:
Claus Gittinger <cg@exept.de>
parents: 2840
diff changeset
   918
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   919
    self selectionIndex:indexesOrNil
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   920
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   921
    "Modified (comment): / 04-02-2017 / 19:42:45 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   922
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   923
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   924
selectionIndex
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   925
    "get the selection index or nil"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   926
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   927
    ^ selection
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   928
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   929
    "Modified (comment): / 04-02-2017 / 19:42:59 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   930
!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   931
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   932
selectionIndex:indexesOrNil
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   933
    "set the selection index (or nil to deselect)"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   934
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   935
    |oldSel|
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   936
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   937
    oldSel := selection.
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   938
    self setSelectionIndex:indexesOrNil.
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   939
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   940
    oldSel = selection ifFalse:[
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   941
        self changed:#selectionIndex.
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   942
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   943
        self selectedNodesDo:[:aNode|
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   944
            aNode changedSelected
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
   945
        ]
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   946
    ]
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   947
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   948
    "Modified (comment): / 04-02-2017 / 19:43:12 / cg"
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   949
!
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   950
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   951
setSelection:indexesOrNil
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   952
    "set the selection index without sending out change notifications"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   953
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   954
    self setSelectionIndex:indexesOrNil
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   955
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   956
    "Modified (comment): / 04-02-2017 / 19:43:41 / cg"
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   957
!
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   958
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   959
setSelectionIndex:indexesOrNil
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   960
    "set the selection index without sending out change notifications"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   961
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   962
    |indexes|
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   963
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   964
    indexes := indexesOrNil.
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   965
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   966
    indexes size == 0 ifTrue:[
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   967
        (indexes isCollection or:[indexes == 0]) ifTrue:[
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   968
            indexes := nil
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   969
        ]
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   970
    ].
496
d511fde77222 show or hide root directory
ca
parents: 491
diff changeset
   971
    selection := indexes
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   972
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   973
    "Modified (comment): / 04-02-2017 / 19:43:37 / cg"
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   974
! !
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
   975
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   976
!SelectionInTree methodsFor:'update indication task'!
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   977
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   978
startIndicatorValidationFor:aNode
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   979
    "add a node to the list of nodes which are automatically
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   980
     monitored for changes in their children list (by a background task),
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   981
     and which will then update their 'has-children' arrow indicator icon.
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   982
     This is typically used to check for changed folders in file trees,
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   983
     data in databases etc."
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   984
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   985
    |index|
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   986
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   987
    accessLock critical:[
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
   988
        |prio|
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
   989
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   990
        index := indicatorList identityIndexOf:aNode.
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   991
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   992
        index ~~ 0 ifTrue:[
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   993
            indicatorList removeIndex:index.    "/ reorganize list to be faster
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   994
        ].
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
   995
        indicatorList addLast: "addFirst:" aNode.
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   996
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
   997
        indicatorTask isNil ifTrue:[
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
   998
            prio := Processor activePriority.
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
   999
            indicatorTask := 
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1000
                [
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1001
                    [ self taskCycle ] whileTrue:[ Processor yield ]
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1002
                ] forkAt:(prio - 1).
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
  1003
            indicatorTask priorityRange:(prio-1 to:prio).
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1004
        ]
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1005
    ].
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
  1006
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1007
    "Modified: / 26-09-1998 / 15:20:44 / cg"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1008
    "Modified (comment): / 04-02-2017 / 19:47:28 / cg"
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1009
!
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1010
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1011
stopIndicatorValidationFor:aNodeOrList
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1012
    "remove a node or list of nodes from the list of automatically monitored nodes."
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1013
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1014
    accessLock critical:[
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1015
        aNodeOrList isCollection ifTrue:[
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1016
            aNodeOrList do:[:aNode|
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1017
                indicatorList removeIdentical:aNode ifAbsent:nil
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1018
            ]
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1019
        ] ifFalse:[
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1020
            indicatorList removeIdentical:aNodeOrList ifAbsent:nil
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1021
        ]
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1022
    ]
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1023
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1024
    "Modified (comment): / 04-02-2017 / 19:46:18 / cg"
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1025
!
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1026
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1027
stopRunningTasks
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1028
    "stop the running update task"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1029
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1030
    accessLock critical:[ indicatorList removeAll ]
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1031
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1032
    "Modified (comment): / 04-02-2017 / 19:46:33 / cg"
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1033
!
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1034
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1035
taskCycle
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
  1036
    "run one cycle fetching indicator state.
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
  1037
     This is done in the background to avoid long startup
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
  1038
     delays, in case the indicator information takes long to
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1039
     gather (i.e. when reading network directories)"
1155
ff5b146ca277 run the indicator update process with a prio-range,
Claus Gittinger <cg@exept.de>
parents: 1145
diff changeset
  1040
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
  1041
    |node flag|
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1042
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1043
    accessLock critical:[
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1044
        indicatorList isEmpty ifTrue:[          "/ queue is empty; terminate task
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1045
            indicatorTask := nil.
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1046
            ^ false
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1047
        ].
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1048
        node := indicatorList removeFirst.      "/ run task on first node
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1049
        node hasValidIndicator ifTrue:[         "/ up to date
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1050
            ^ true
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1051
        ].
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
  1052
        node setShowIndicator:(node defaultShowSeparator).      "/ disable registry
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1053
    ].
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1054
2038
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
  1055
    flag := DirectoryContents directoryNamed:(node fileName) detect:(node matchAction).
81b3b590c9d8 *** empty log message ***
ca
parents: 1818
diff changeset
  1056
    node showIndicator:flag.
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1057
    ^ true
1145
3ee5513dff2a no change
Claus Gittinger <cg@exept.de>
parents: 906
diff changeset
  1058
5452
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1059
    "Modified: / 26-09-1998 / 15:11:16 / cg"
f7c0a99ef04d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4941
diff changeset
  1060
    "Modified (comment): / 04-02-2017 / 19:47:51 / cg"
811
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1061
! !
a688e8f11bc6 async. reading of directory indicators
ca
parents: 762
diff changeset
  1062
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
  1063
!SelectionInTree class methodsFor:'documentation'!
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
  1064
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
  1065
version
4941
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1066
    ^ '$Header$'
3872
a35d3ecdb0bb comment/format in: #selection:
Claus Gittinger <cg@exept.de>
parents: 2840
diff changeset
  1067
!
a35d3ecdb0bb comment/format in: #selection:
Claus Gittinger <cg@exept.de>
parents: 2840
diff changeset
  1068
a35d3ecdb0bb comment/format in: #selection:
Claus Gittinger <cg@exept.de>
parents: 2840
diff changeset
  1069
version_CVS
4941
bd6fab9e6d8f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 4275
diff changeset
  1070
    ^ '$Header$'
458
e4b907c8f0ce intitial checkin
ca
parents:
diff changeset
  1071
! !
4275
9b7b0a680e70 class: SelectionInTree
Claus Gittinger <cg@exept.de>
parents: 3872
diff changeset
  1072