FileSelectionTree.st
author Jan Vrany <jan.vrany@labware.com>
Fri, 02 Sep 2022 11:25:39 +0100
branchjv
changeset 6261 9b7eb7159d29
parent 5254 65e55bcab14c
child 5448 42c78b5c5f7e
permissions -rw-r--r--
Fix loong standing bug with some menus not being translated / resolved This has happened with browser "View" menu when sometimes it had the slice resolved and sometimes not. It turned out that it was because the code disabled resources (and therefore slices) resolution when processing shortcuts, so the menu was created and cached unresolved. This fixes the issue. eXept apparently run into the same problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     1
"
488
bb017dc6df4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
     2
 COPYRIGHT (c) 1997 by eXept Software AG 
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     3
              All Rights Reserved
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     4
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     5
 This software is furnished under a license and may be used
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
d031f77ada55 intitial checkin
ca
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    10
 hereby transferred.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    11
"
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
    12
"{ Package: 'stx:libwidg2' }"
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
    13
5060
8674d94ecbfb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4247
diff changeset
    14
"{ NameSpace: Smalltalk }"
8674d94ecbfb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4247
diff changeset
    15
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    16
SelectionInTreeView subclass:#FileSelectionTree
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
    17
	instanceVariableNames:'triggerMonitorBlock monitoringDelayTime'
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    18
	classVariableNames:''
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    19
	poolDictionaries:''
1233
ba2244433fd4 category change
Claus Gittinger <cg@exept.de>
parents: 1173
diff changeset
    20
	category:'Views-Trees'
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    21
!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    22
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    23
!FileSelectionTree class methodsFor:'documentation'!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    24
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    25
copyright
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    26
"
488
bb017dc6df4f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
    27
 COPYRIGHT (c) 1997 by eXept Software AG 
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    28
              All Rights Reserved
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    29
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    30
 This software is furnished under a license and may be used
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    31
 only in accordance with the terms of that license and with the
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    33
 be provided or otherwise made available to, or used by, any
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    34
 other person.  No title to or ownership of the software is
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    35
 hereby transferred.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    36
"
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    37
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    38
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    39
!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    40
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    41
documentation
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    42
"
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    43
    somewhat like a FileSelectionInList; but specialized for hierarchical (i.e. tree-like)
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    44
    lists and adds the functions to show/hide subtrees. 
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    45
    Requires SelectionInTree as model and FileSelectionItem (or compatible) list entries.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    46
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    47
    You can define your own TreeItem instead of useing the default class FileSelectionItem
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    48
    by seting the class through to #itemClass:
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    49
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    50
    [see also:]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    51
        FileSelectionItem
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    52
        SelectionInTree
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    53
        SelectionInTreeView
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    54
        SelectionInListView
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    55
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    56
    [author:]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    57
        Claus Atzkern
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    58
"
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    59
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    60
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    61
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    62
!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    63
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    64
examples
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    65
"
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    66
    open a FileSelectionTree on current directory
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    67
                                                                        [exBegin]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    68
    |top scr|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    69
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    70
    top := StandardSystemView new label:'select'; extent:300@500.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    71
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    72
    scr := scr scrolledView.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    73
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
    74
    scr directory:'/'.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
    75
    scr showDirectoryIndicator:true.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
    76
    scr showRoot:false.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
    77
    scr showLines:false.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
    78
    scr allowDrag:true.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
    79
    scr multipleSelectOk:true.
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    80
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    81
    top open
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    82
                                                                        [exEnd]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    83
d031f77ada55 intitial checkin
ca
parents:
diff changeset
    84
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    85
    open a FileSelectionTree useing a model
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    86
                                                                        [exBegin]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    87
    |top scr model|
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    88
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    89
    top := StandardSystemView new label:'select'; extent:300@500.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    90
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    91
    scr := scr scrolledView.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    92
    model := (Filename currentDirectory asString) asValue.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    93
    scr rootHolder:model.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    94
    model inspect.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    95
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    96
    scr action:[:anIndex| Transcript showCR:anIndex.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    97
                          Transcript showCR:scr selectedPathname.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    98
               ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
    99
    top open
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   100
                                                                        [exEnd]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   101
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   102
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   103
                                                                        [exBegin]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   104
    |top scr|
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   105
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   106
    top := StandardSystemView new label:'select'; extent:300@500.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   107
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   108
    scr := scr scrolledView.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   109
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   110
    scr directory:Filename currentDirectory.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   111
    scr selectionHolder:nil asValue.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   112
    scr selectionHolder inspect.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   113
    scr multipleSelectOk:true.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   114
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   115
    scr action:[:anIndex| Transcript showCR:anIndex.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   116
                          Transcript showCR:scr selectedPathname.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   117
               ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   118
    top open
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   119
                                                                        [exEnd]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   120
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   121
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   122
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   123
    open a FileSelectionTree on root path; show directory
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   124
    indication (open/closed), no lines and not the root
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   125
                                                                        [exBegin]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   126
    |top scr|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   127
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   128
    top := StandardSystemView new label:'select'; extent:300@500.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   129
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   130
    scr := scr scrolledView.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   131
    scr showDirectoryIndicator:true.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   132
    scr showLines:false.
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   133
    scr showRoot:false.
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   134
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   135
    scr directory:'/'.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   136
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   137
    scr action:[:anIndex| Transcript showCR:anIndex.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   138
                          Transcript showCR:scr selectedPathname.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   139
               ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   140
    top open
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   141
                                                                        [exEnd]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   142
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   143
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   144
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   145
    open a FileSelectionTree on root path; showing only files
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   146
                                                                        [exBegin]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   147
    |top scr|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   148
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   149
    top := StandardSystemView new label:'select'; extent:300@500.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   150
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   151
    scr := scr scrolledView.
787
bbd70842b40b reuse methods and instances defined
ca
parents: 698
diff changeset
   152
    scr itemClass:(FileSelectionItem filterClassForDirectoriesOnly).
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   153
    scr directory:'/'.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   154
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   155
    scr action:[:anIndex| Transcript showCR:anIndex.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   156
                          Transcript showCR:scr selectedPathname.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   157
               ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   158
    top open
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   159
                                                                        [exEnd]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   160
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   161
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   162
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   163
    open a FileSelectionTree on a specified path
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   164
                                                                        [exBegin]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   165
    |top scr|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   166
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   167
    top := StandardSystemView new label:'select'; extent:300@500.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   168
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   169
    scr := scr scrolledView.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   170
    scr directory:'/'.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   171
    scr showLines:false.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   172
    scr action:[:anIndex| Transcript showCR:scr selectedPathname ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   173
    scr doubleClickAction:[:anIndex| Transcript showCR:scr selectedPathname ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   174
    top open
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   175
                                                                        [exEnd]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   176
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   177
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   178
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   179
    open a FileSelectionTree on a specified path; show or hide
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   180
    lines on doubleClick on a file (not a directory)
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   181
                                                                        [exBegin]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   182
    |top scr|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   183
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   184
    top := StandardSystemView new label:'select'; extent:300@500.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   185
    scr := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(1.0 @ 1.0) in:top.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   186
    scr := scr scrolledView.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   187
    scr directory:'/'.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   188
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   189
    scr action:[:anIndex| Transcript showCR:anIndex.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   190
                          Transcript showCR:scr selectedPathname.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   191
               ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   192
    scr doubleClickAction:[:anIndex|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   193
        |fn|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   194
        fn := scr selectedPathname asFilename.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   195
        fn isDirectory ifFalse:[
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   196
            scr showLines:(scr showLines not)
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   197
        ]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   198
    ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   199
    top open
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   200
                                                                        [exEnd]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   201
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   202
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   203
492
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   204
    example associated with a FileSelectionList
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   205
                                                                        [exBegin]
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   206
    |top tree list field label|
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   207
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   208
    top   := StandardSystemView new label:'select'; extent:600@600.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   209
    tree  := HVScrollableView for:FileSelectionTree origin:(0.0 @ 0.0) corner:(0.5 @ 1.0) in:top.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   210
    list  := HVScrollableView for:FileSelectionList origin:(0.5 @  25) corner:(1.0 @ 1.0) in:top.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   211
    label := Label origin:(0.5 @ 2) in:top.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   212
    label label:'pattern:'.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   213
    field := EditField origin:0.5@2 in:top.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   214
    field leftInset:(label preferredExtent x) + 5.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   215
    field width:1.0.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   216
    field editValue:'*'.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   217
    field crAction:[list pattern:field editValue].
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   218
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   219
    tree  := tree scrolledView.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   220
    list  := list scrolledView.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   221
    list ignoreDirectories:true.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   222
    list pattern:(field editValue).
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   223
787
bbd70842b40b reuse methods and instances defined
ca
parents: 698
diff changeset
   224
    tree itemClass:(FileSelectionItem filterClassForDirectoriesOnly).
492
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   225
    tree directory:(Filename homeDirectory).
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   226
    tree showDirectoryIndicator:true.
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   227
    list directory:(tree directory).
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   228
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   229
    list action:[:index| Transcript showCR:'you selected: ' , list selectedPathname].
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   230
    tree action:[:anIndex|
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   231
        list directory:(tree selectedPathname).
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   232
    ].
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   233
    top open
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   234
                                                                        [exEnd]
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   235
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   236
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   237
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   238
    a more complex example
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   239
                                                                        [exBegin]
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   240
    |top listD listF field lbl inset|
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   241
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   242
    top   := StandardSystemView new label:'select'; extent:600@600.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   243
    inset := 26.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   244
    listD := HVScrollableView for:FileSelectionTree origin:(0.0 @ inset) corner:(0.5 @ 1.0) in:top.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   245
    listF := HVScrollableView for:FileSelectionTree origin:(0.5 @ 0.0) corner:(1.0 @ 1.0) in:top.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   246
    listD := listD scrolledView.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   247
    listF := listF scrolledView.
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   248
787
bbd70842b40b reuse methods and instances defined
ca
parents: 698
diff changeset
   249
    listD itemClass:(FileSelectionItem filterClassForDirectoriesOnly).
bbd70842b40b reuse methods and instances defined
ca
parents: 698
diff changeset
   250
    listF itemClass:(FileSelectionItem filterClassForFilesOnly).
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   251
    listD showDirectoryIndicator:true.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   252
    listD showLines:false.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   253
    listF showLines:false.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   254
    listF showRoot:false.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   255
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   256
    lbl := Label label:'directory:' in:top.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   257
    lbl origin:5 @ ((inset - lbl preferredExtent y) // 2).
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   258
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   259
    field := FilenameEditField in:top.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   260
    field origin:(4 + lbl corner x) @ ((inset - field preferredExtent y) // 2).
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   261
    field width:0.5.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   262
    field rightInset:(field origin x + 4).
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   263
    field directoriesOnly.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   264
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   265
    field crAction:[|dir|
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   266
        dir := field editValue asFilename.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   267
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   268
        (dir isDirectory and:[listD directory ~= dir pathName]) ifTrue:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   269
            listD changeDirectory:dir
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   270
        ]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   271
    ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   272
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   273
    listF action:[:anIndex||file|
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   274
        (file := listF selectedPathname) notNil ifTrue:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   275
            Transcript showCR:'selection: ', file
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   276
        ]
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   277
    ].
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   278
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   279
    listD directory:(Filename homeDirectory).
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   280
    field editValue:listD directory.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   281
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   282
    listD doubleClickAction:[:anIndex||path|
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   283
        path := listD selectedPathname.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   284
        listF directory:path.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   285
        path notNil ifTrue:[field editValue:path]
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   286
    ].
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   287
    top open
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   288
                                                                        [exEnd]
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   289
"
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   290
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   291
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   292
! !
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   293
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   294
!FileSelectionTree class methodsFor:'constants'!
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   295
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   296
monitoringDelayTime
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   297
    "default delay time of monitoring task in seconds
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   298
    "
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   299
    ^ 2
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   300
! !
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   301
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   302
!FileSelectionTree methodsFor:'accessing'!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   303
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   304
changeDirectory:aPathname
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   305
    "change the root directory; try to reuse old hierarchy list and
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   306
     the selection in case of a single selection. The pathname must
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   307
     be a directory otherwise the root directory is set to nil
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   308
    "
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   309
    |oldSel child loc oldPath oldFile newFile newPath node idx|
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   310
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   311
    newFile := self makeLegalFilename:aPathname.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   312
    oldPath := self directory.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   313
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   314
    (newFile notNil 
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   315
    and:[newFile isDirectory 
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   316
    and:[oldPath notNil]]) ifFalse:[
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   317
        ^ self directory:newFile
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   318
    ].
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   319
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   320
    (newPath := newFile pathName) = oldPath ifTrue:[
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   321
        ^ self
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   322
    ].
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   323
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   324
    oldFile := oldPath asFilename.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   325
    oldSel  := self selectedNode.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   326
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   327
    (newPath startsWith:oldPath) ifTrue:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   328
        node := self detectNode:[:aNode|aNode pathName = newPath].
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   329
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   330
        node isNil ifTrue:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   331
            ^ self directory:newFile
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   332
        ].
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   333
    ] ifFalse:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   334
        (oldPath startsWith:newPath) ifFalse:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   335
            ^ self directory:newFile
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   336
        ].
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   337
        child := model root.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   338
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   339
        [newPath = oldPath] whileFalse:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   340
            oldFile := oldFile directory.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   341
            node    := self itemClass pathName:oldFile.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   342
            node expand.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   343
            loc := node children.
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2719
diff changeset
   344
            idx := loc findFirst:[:el| el pathName = oldPath ].
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   345
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   346
            idx == 0 ifTrue:[
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   347
                ^ self directory:newFile
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   348
            ].
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   349
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   350
            loc at:idx put:child.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   351
            child parent:node.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   352
            child   := node.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   353
            oldPath := oldFile pathName.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   354
        ]
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   355
    ].
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   356
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   357
    node children size == 0 ifTrue:[
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   358
        oldSel := node.
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   359
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   360
        (node := node parent) isNil ifTrue:[
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   361
            ^ self directory:newFile
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   362
        ]
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   363
    ] ifFalse:[
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   364
        node isExpandable ifTrue:[
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   365
            ^ self directory:newFile
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   366
        ]
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   367
    ].
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   368
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   369
    selection := nil.        
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   370
    node parent:nil.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   371
    model root:node.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   372
    self  setSelection:(self indexOfNode:oldSel).
586
0679203515d2 bug fixes:
ca
parents: 573
diff changeset
   373
    model removeDependent:self.
0679203515d2 bug fixes:
ca
parents: 573
diff changeset
   374
    model selection:selection.
0679203515d2 bug fixes:
ca
parents: 573
diff changeset
   375
    model addDependent:self.
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   376
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   377
    "Modified: / 24.9.1998 / 13:00:09 / cg"
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   378
!
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   379
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   380
directory
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   381
    "get the full pathname of the root directory
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   382
    "
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   383
    |root|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   384
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   385
    (root := model root) notNil ifTrue:[
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   386
        ^ root pathName
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   387
    ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   388
  ^ nil
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   389
!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   390
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   391
directory:aPath
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   392
    "change the root directory of the selection tree to the full pathName,
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   393
     aPath. The pathname must be a directory otherwise the root directory
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   394
     is set to nil.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   395
    "
1142
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   396
    |root path isOK|
492
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   397
586
0679203515d2 bug fixes:
ca
parents: 573
diff changeset
   398
    model selection:(selection := nil).
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   399
    path := self makeLegalFilename:aPath.
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   400
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   401
    (path notNil 
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   402
    and:[path isDirectory 
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   403
    and:[path isExecutable]]) ifTrue:[
1142
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   404
        isOK := true.
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   405
    ] ifFalse:[
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   406
        "/ special for WIN32 / VMS
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   407
        isOK := path isVolumeAbsolute
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   408
    ].
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   409
    isOK ifTrue:[
495
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   410
        root := self itemClass pathName:path.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   411
        model root:root.
e34c13af578d directory indication, path selection and change root path
ca
parents: 492
diff changeset
   412
        model expand:root.
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   413
    ] ifFalse:[
1142
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   414
        model root:nil
586
0679203515d2 bug fixes:
ca
parents: 573
diff changeset
   415
    ].
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   416
1142
7b3334a7c658 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1140
diff changeset
   417
    "Modified: / 24.9.1998 / 17:43:11 / cg"
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   418
!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   419
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   420
itemClass:anItemClass
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   421
    "set itemClass to be used
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   422
    "
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   423
    |directory old new|
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   424
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   425
    old := self itemClass.
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   426
    super itemClass:anItemClass.
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   427
    new := self itemClass.
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   428
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   429
    (old ~~ new and:[new notNil and:[(directory := self directory) notNil]]) ifTrue:[
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   430
        self directory:directory "/ recompute list
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   431
    ].
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   432
492
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   433
!
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   434
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   435
pathnameAtIndex:anIndex
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   436
    "returns pathname at an index or nil
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   437
    "
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   438
    |node|
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   439
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   440
    (node := self nodeAtIndex:anIndex) notNil ifTrue:[
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   441
        ^ node pathName
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   442
    ].
0b6a6bc3f1cb set pathname ...
ca
parents: 488
diff changeset
   443
  ^ nil
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   444
! !
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   445
1818
fe99c5c721e9 category changes
Claus Gittinger <cg@exept.de>
parents: 1379
diff changeset
   446
!FileSelectionTree methodsFor:'accessing-monitoring'!
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   447
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   448
monitoring
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   449
    "returns true if monitor process is running
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   450
    "
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   451
    ^ triggerMonitorBlock notNil 
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   452
!
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   453
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   454
monitoring:aState
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   455
    "enable or disable monitoring
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   456
    "
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   457
    aState ifTrue:[
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   458
        triggerMonitorBlock notNil ifTrue:[^ self].
2400
f41d9fcbdaae monitoring: careful if sensor is not yet present
tm
parents: 2087
diff changeset
   459
        "/ triggerMonitorBlock := [self sensor pushUserEvent:#monitorCycle for:self].
f41d9fcbdaae monitoring: careful if sensor is not yet present
tm
parents: 2087
diff changeset
   460
        triggerMonitorBlock := [self pushEvent:#monitorCycle].
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   461
        Processor addTimedBlock:triggerMonitorBlock afterSeconds:(self monitoringDelayTime).
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   462
    ] ifFalse:[
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   463
        triggerMonitorBlock isNil ifTrue:[^ self].
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   464
        Processor removeTimedBlock:triggerMonitorBlock.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   465
        triggerMonitorBlock := nil.
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   466
    ].
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   467
!
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   468
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   469
monitoringDelayTime
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   470
    "delay time of monitoring task in seconds
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   471
    "
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   472
    ^ monitoringDelayTime
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   473
!
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   474
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   475
monitoringDelayTime:seconds
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   476
    "delay time of monitoring task in seconds
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   477
    "
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   478
    seconds > 0 ifTrue:[
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   479
        monitoringDelayTime := seconds
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   480
    ]
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   481
! !
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   482
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   483
!FileSelectionTree methodsFor:'drag & drop'!
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   484
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   485
dragObjectForNode:aNode
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   486
    "returns the dragable object for a node; could be redefined in subclass
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   487
    "
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   488
    ^ DropObject new:(aNode contents)
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   489
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   490
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   491
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   492
! !
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   493
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   494
!FileSelectionTree methodsFor:'initialization'!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   495
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   496
destroy
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   497
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   498
    triggerMonitorBlock notNil ifTrue:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   499
        Processor removeTimedBlock:triggerMonitorBlock.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   500
        triggerMonitorBlock := nil
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   501
    ].
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   502
    super destroy.
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   503
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   504
!
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   505
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   506
initialize
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   507
    "setup my model and set the default path to the current directory; on default
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   508
     multiple selection is disabled.
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   509
    "
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   510
    itemClass           := FileSelectionItem.
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   511
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   512
    super initialize.
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   513
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   514
    itemClass           := FileSelectionItem.
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   515
    monitoringDelayTime := self class monitoringDelayTime.
1173
fd8b36ca763f move itemClass to base class
ca
parents: 1143
diff changeset
   516
    supportsExpandAll   := false.
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   517
! !
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   518
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   519
!FileSelectionTree methodsFor:'model'!
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   520
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   521
rootFromModel
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   522
    "update hierarchical list from root model
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   523
    "
1269
f33ad4d38b5b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1233
diff changeset
   524
    |newPath|
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   525
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   526
    (newPath := rootHolder value) notNil ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   527
        newPath := newPath asString.
2087
7d3e66c0f7f3 *** empty log message ***
penk
parents: 1818
diff changeset
   528
        self directory = newPath ifFalse:[
7d3e66c0f7f3 *** empty log message ***
penk
parents: 1818
diff changeset
   529
            self changeDirectory:newPath
7d3e66c0f7f3 *** empty log message ***
penk
parents: 1818
diff changeset
   530
        ]
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   531
    ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   532
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   533
!
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   534
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   535
selectionFromModel
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   536
    "set the selection derived from the selectionHolder
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   537
    "
1269
f33ad4d38b5b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1233
diff changeset
   538
    |selection value size|
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   539
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   540
    selectionHolder isNil ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   541
        ^ self
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   542
    ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   543
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   544
    (value := selectionHolder value) isNil ifTrue:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   545
        ^ self deselect
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   546
    ].
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   547
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   548
    multipleSelectOk ifFalse:[
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   549
        (value isKindOf:TreeItem) ifTrue:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   550
            super selectionFromModel
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   551
        ] ifFalse:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   552
            value asFilename exists ifFalse:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   553
                selectionHolder value:nil
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   554
            ] ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   555
                self selectPathname:value
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   556
            ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   557
        ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   558
        ^ self
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   559
    ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   560
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   561
    value isEmpty ifTrue:[
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   562
        ^ self deselect
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   563
    ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   564
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   565
    (value first isKindOf:TreeItem) ifTrue:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   566
        ^ super selectionFromModel
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   567
    ].
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   568
    selection := value select:[:aPath| aPath asFilename exists ].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   569
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   570
    (size := selection size) ~~ value size ifTrue:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   571
        size ~~ 0 ifTrue:[selectionHolder value:selection]
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   572
                 ifFalse:[selectionHolder value:nil].
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   573
      ^ self
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   574
    ].
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   575
    selection := selection collect:[:aPath| self fileName2node:aPath ].
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   576
    model doMakeVisible:selection.
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   577
    selection := selection collect:[:el| listOfNodes identityIndexOf:el ].
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   578
    super selection:selection.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   579
!
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   580
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   581
selectionToModel
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   582
    "write selection to selection holder
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   583
    "
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   584
    |old new|
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   585
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   586
    old := selectionHolder value.
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   587
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   588
    multipleSelectOk ifFalse:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   589
        (new := self pathnameAtIndex:selection) = old ifFalse:[
1143
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   590
"/            selectionHolder value:new.
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   591
            selectionHolder value:new withoutNotifying:self.
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   592
        ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   593
    ] ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   594
        self numberOfSelections == 0 ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   595
            old size ~~ 0 ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   596
                selectionHolder value:nil
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   597
            ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   598
        ] ifFalse:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   599
            new := selection collect:[:i|(listOfNodes at:i) pathName].
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   600
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   601
            new size ~~ old size ifTrue:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   602
                selectionHolder value:new
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   603
            ] ifFalse:[
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   604
                new do:[:pN|
5060
8674d94ecbfb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4247
diff changeset
   605
                    (old includes:pN) ifFalse:[
8674d94ecbfb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4247
diff changeset
   606
                          ^ selectionHolder value:new
8674d94ecbfb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4247
diff changeset
   607
                      ]
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   608
                ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   609
            ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   610
        ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   611
    ]
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   612
1143
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   613
    "Modified: / 24.9.1998 / 19:25:55 / cg"
513
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   614
! !
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   615
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   616
!FileSelectionTree methodsFor:'private'!
fe060a9ba204 move functionality to base class
ca
parents: 495
diff changeset
   617
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   618
fileName2node:aFile
1269
f33ad4d38b5b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1233
diff changeset
   619
    |root file p1 p2|
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   620
2719
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   621
    root := model root.
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   622
    root isNil ifTrue:[ ^ nil ].
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   623
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   624
"/    file := self makeLegalFilename:aFile.
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   625
"/    file isNil ifTrue:[ ^ nil ].
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   626
aa4480ea0aab *** empty log message ***
ca
parents: 2400
diff changeset
   627
    file := aFile asFilename.
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   628
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   629
    p1 := root pathName.
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   630
    p2 := file pathName.
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   631
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   632
    (p2 startsWith:p1) ifFalse:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   633
        ^ nil
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   634
    ].
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   635
    p1 :=  Filename components:p1.
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   636
    p2 := (Filename components:p2) copyFrom:(p1 size).
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   637
5254
65e55bcab14c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 5060
diff changeset
   638
    "/ that's a kludge for network drives
3602
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   639
    (p2 first endsWith:$\) ifTrue:[
3609
973a607e6864 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3602
diff changeset
   640
        (p2 first endsWith:':\') ifFalse:[
973a607e6864 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3602
diff changeset
   641
            p2 := p2 copy.
4208
62cbffb9921d Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 3609
diff changeset
   642
            p2 at:1 put:(p2 first copyButLast:1).
3609
973a607e6864 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3602
diff changeset
   643
        ]
3602
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   644
    ].
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   645
1379
bc7f3700e933 care for caseless-filename-systems
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   646
    Filename isCaseSensitive ifFalse:[
bc7f3700e933 care for caseless-filename-systems
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   647
        ^ model 
3602
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   648
            detectItem:[:aNode :name |          
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   649
                            aNode name asLowercase = name asLowercase
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   650
                            or:[ aNode fileName name = name asLowercase ]
f5b68b5591c3 fixed entry callback and net-drive handling
Claus Gittinger <cg@exept.de>
parents: 2974
diff changeset
   651
                       ] 
1379
bc7f3700e933 care for caseless-filename-systems
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   652
            arguments:p2.
bc7f3700e933 care for caseless-filename-systems
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   653
    ].
bc7f3700e933 care for caseless-filename-systems
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   654
1143
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   655
    ^ model 
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   656
        detectItem:[:aNode :name | aNode name = name ] 
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   657
        arguments:p2.
48ead61ffc0d win32 volume fix;
Claus Gittinger <cg@exept.de>
parents: 1142
diff changeset
   658
1379
bc7f3700e933 care for caseless-filename-systems
Claus Gittinger <cg@exept.de>
parents: 1269
diff changeset
   659
    "Modified: / 18.5.1999 / 19:30:19 / cg"
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   660
!
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   661
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   662
makeLegalFilename:aFile
1269
f33ad4d38b5b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1233
diff changeset
   663
    |filename|
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   664
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   665
    aFile isNil ifTrue:[ ^ nil ].
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   666
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   667
    (filename := aFile asFilename) exists ifTrue:[
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   668
        filename isDirectory ifFalse:[
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   669
            ^ filename
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   670
        ]
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   671
    ].
1079
d793b0b568e1 use filenames makeLegalFilename (for win32)
Claus Gittinger <cg@exept.de>
parents: 856
diff changeset
   672
1269
f33ad4d38b5b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1233
diff changeset
   673
    ^ filename makeLegalFilename.
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   674
1140
58e8ac12750a fixes to work under WIN32
Claus Gittinger <cg@exept.de>
parents: 1122
diff changeset
   675
    "Modified: / 24.9.1998 / 12:41:29 / cg"
812
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   676
!
02765a35b0c3 async. reading of directory indicators
ca
parents: 791
diff changeset
   677
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   678
monitorCycle
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   679
    "run monitor cycle
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   680
    "
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   681
    |sz root sel new old|
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   682
4247
9fed12f67025 class: FileSelectionTree
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   683
    (root := model root) notNil ifTrue:[
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   684
        root hasObsoleteNodes ifTrue:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   685
            (root repairObsoleteNodes) ifTrue:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   686
                sz := self numberOfSelections.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   687
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   688
                sz ~~ 0 ifTrue:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   689
                    old := self selection.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   690
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   691
                    sz == 1 ifTrue:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   692
                        sel := self selectedNode
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   693
                    ] ifFalse:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   694
                        sel := OrderedCollection new.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   695
                        self selectionDo:[:i| sel add:(listOfNodes at:i) ].
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   696
                    ].
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   697
                    selection := nil.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   698
                ].
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   699
                selection := old.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   700
                model root:root.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   701
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   702
                sz ~~ 0 ifTrue:[
787
bbd70842b40b reuse methods and instances defined
ca
parents: 698
diff changeset
   703
                    sz == 1 ifTrue:[
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   704
                        self selectNode:sel.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   705
                    ] ifFalse:[
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   706
                        new := OrderedCollection new.
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   707
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   708
                        sel do:[:n||i|
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   709
                            (i := self indexOfNode:n) ~~ 0 ifTrue:[new add:i]
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   710
                        ].
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   711
                        self selection:new
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   712
                    ]
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   713
                ].
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   714
            ]
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   715
        ]
569
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   716
    ].
2a1014d6697c checkin from browser
ca
parents: 547
diff changeset
   717
573
f3df9326fdc4 monitoring process removed
ca
parents: 569
diff changeset
   718
    Processor addTimedBlock:triggerMonitorBlock afterSeconds:(self monitoringDelayTime).
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   719
! !
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   720
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   721
!FileSelectionTree methodsFor:'selection'!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   722
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   723
selectPathname:aPath
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   724
    "set selection to a path
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   725
    "
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   726
    self selectNode:(self fileName2node:aPath)
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   727
!
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   728
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   729
selectedNodeExpand:doExpand
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   730
    "collapse or expand selected node.
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   731
     Redefined to show a busy cursor while reading dirs"
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   732
856
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   733
    doExpand ifTrue:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   734
        self withWaitCursorDo:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   735
            super selectedNodeExpand:doExpand
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   736
        ]
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   737
    ] ifFalse:[
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   738
        super selectedNodeExpand:doExpand
e5241f829446 reuse methods provided by the model
ca
parents: 836
diff changeset
   739
    ]
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   740
!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   741
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   742
selectedPathname
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   743
    "if there is a single selection, the full pathname of the selected
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   744
     entry will be returned otherwise nil
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   745
    "
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   746
    |node|
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   747
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   748
    (node := self selectedNode) notNil ifTrue:[
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   749
        ^ node pathName
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   750
    ].
2973
297d9a8d7e19 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2832
diff changeset
   751
    ^ nil
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   752
! !
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   753
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   754
!FileSelectionTree class methodsFor:'documentation'!
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   755
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   756
version
5060
8674d94ecbfb #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4247
diff changeset
   757
    ^ '$Header$'
487
d031f77ada55 intitial checkin
ca
parents:
diff changeset
   758
! !
4208
62cbffb9921d Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 3609
diff changeset
   759