HierarchicalFileList.st
author ca
Thu, 21 Nov 2002 10:02:31 +0100
changeset 2388 151c81f43733
parent 2387 206662f654e4
child 2425 7421b8bb7d31
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     1
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     3
              All Rights Reserved
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     4
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     5
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     6
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     8
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
     9
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    10
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    11
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    12
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    13
1780
867e59c91ff7 use icons derived from FileBrowser
ca
parents: 1582
diff changeset
    14
"{ Package: 'stx:libwidg2' }"
867e59c91ff7 use icons derived from FileBrowser
ca
parents: 1582
diff changeset
    15
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
HierarchicalList subclass:#HierarchicalFileList
2298
22e95baad346 showCursor and mountPoints instance variables removed
penk
parents: 2297
diff changeset
    17
	instanceVariableNames:'matchBlock indicatorList indicatorTask sortBlock'
2138
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    18
	classVariableNames:''
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    19
	poolDictionaries:''
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    20
	category:'Views-Support'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    23
HierarchicalItem subclass:#HierarchicalFileItem
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
    24
	instanceVariableNames:'icon contentsItem'
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
    25
	classVariableNames:'LastUIDToUserNameMapping LastGIDToGroupNameMapping'
2138
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    26
	poolDictionaries:''
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    27
	privateIn:HierarchicalFileList
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    30
HierarchicalFileList::HierarchicalFileItem subclass:#File
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    31
	instanceVariableNames:''
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    32
	classVariableNames:''
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    33
	poolDictionaries:''
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    34
	privateIn:HierarchicalFileList
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    35
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    36
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    37
HierarchicalFileList::HierarchicalFileItem subclass:#Directory
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    38
	instanceVariableNames:'modificationTime fetchOperation'
2138
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    39
	classVariableNames:''
4175c127f9b8 removed baseName
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
    40
	poolDictionaries:''
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    41
	privateIn:HierarchicalFileList
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    42
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    43
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    44
HierarchicalFileList::Directory subclass:#RemoteDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    45
	instanceVariableNames:''
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    46
	classVariableNames:''
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    47
	poolDictionaries:''
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
    48
	privateIn:HierarchicalFileList
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
1431
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    51
!HierarchicalFileList class methodsFor:'documentation'!
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    52
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    53
copyright
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    54
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    55
 COPYRIGHT (c) 1999 by eXept Software AG
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    56
              All Rights Reserved
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    57
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    58
 This software is furnished under a license and may be used
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    59
 only in accordance with the terms of that license and with the
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    60
 inclusion of the above copyright notice.   This software may not
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    61
 be provided or otherwise made available to, or used by, any
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    62
 other person.  No title to or ownership of the software is
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    63
 hereby transferred.
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    64
"
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    65
0cc20a8f2f7c docu & copyright
Claus Gittinger <cg@exept.de>
parents: 1430
diff changeset
    66
! !
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!HierarchicalFileList class methodsFor:'examples'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
2180
d01612ed451e get the icons from the FileBrowser now
penk
parents: 2140
diff changeset
    70
examples
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
    71
"
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    72
    open filebrowser without monitoring cycle
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    73
2180
d01612ed451e get the icons from the FileBrowser now
penk
parents: 2140
diff changeset
    74
                                                                    [exBegin]
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    75
    |top sel list directory|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    list := HierarchicalFileList new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    list showRoot:false.
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
    79
    list matchBlock:[:fn :isDir| true ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    81
    directory := Filename currentDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    82
    directory := Filename homeDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    83
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    84
    list directory:(directory asAbsoluteFilename).
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    85
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    top := StandardSystemView new; extent:300@300.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    sel := ScrollableView for:HierarchicalListView miniScroller:true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
                       origin:0.0@0.0 corner:1.0@1.0 in:top.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    sel doubleClickAction:[:i| (list at:i) toggleExpand ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    sel   indicatorAction:[:i| (list at:i) toggleExpand ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
2296
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
    93
    sel hasConstantHeight:true.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    94
    sel list:list.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    95
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    top open.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    97
                                                                [exEnd]
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    98
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    99
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   100
    open filebrowser and monitore contents
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   101
                                                                    [exBegin]
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   102
    |top sel list directory|
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   103
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   104
    list := HierarchicalFileList new.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   105
    list showRoot:false.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   106
    list matchBlock:[:fn :isDir| true ].
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   107
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   108
    directory := Filename currentDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   109
    directory := Filename homeDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   110
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   111
    list directory:(directory asAbsoluteFilename).
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   112
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   113
    top := StandardSystemView new; extent:300@300.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   114
    sel := ScrollableView for:HierarchicalListView miniScroller:true
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   115
                       origin:0.0@0.0 corner:1.0@1.0 in:top.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   116
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   117
    sel doubleClickAction:[:i| (list at:i) toggleExpand ].
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   118
    sel   indicatorAction:[:i| (list at:i) toggleExpand ].
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   119
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   120
    sel hasConstantHeight:true.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   121
    sel list:list.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   122
    list monitoringTaskDelay:0.5.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   123
    top open.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   124
                                                                [exEnd]
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   125
2180
d01612ed451e get the icons from the FileBrowser now
penk
parents: 2140
diff changeset
   126
"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   129
!HierarchicalFileList class methodsFor:'helpers'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   130
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   131
forInfoItem:aItem
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   132
    "instance creation helper
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   133
    "
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   134
    | info fileType retItem|
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   135
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   136
    info := aItem info.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   137
    fileType := aItem type.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   138
    retItem := self itemFor:aItem fileName fileType:fileType.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   139
    retItem fileInfo:info.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   140
    ^ retItem
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   141
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   142
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   143
itemFor:aFileOrDirectoryName fileType:fileType
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   144
    "instance creation helper
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   145
    "
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   146
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   147
    fileType == #directory ifTrue:[
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   148
        ^ Directory fileName:aFileOrDirectoryName.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   149
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   150
    fileType == #remoteDirectory ifTrue:[
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   151
        ^ RemoteDirectory fileName:aFileOrDirectoryName.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   152
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   153
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   154
    ^ File fileName:aFileOrDirectoryName.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   155
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   156
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
!HierarchicalFileList methodsFor:'accessing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
directory
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    "returns the root directory or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    ^ root notNil ifTrue:[root fileName] ifFalse:[nil]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
directory:aDirectory
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    "set the root directory or nil
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    "
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   169
    self directory:aDirectory expand:true
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   170
!
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   171
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   172
directory:aDirectory expand:doExpand
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   173
    "set the root directory or nil; reuse old
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   174
     items if existant
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   175
    "
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   176
    |oldDir newDir oldRoot newRoot index changeToParent children|
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   177
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   178
    (     aDirectory isNil
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   179
     or:[(newDir := aDirectory asFilename) exists not]
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   180
    ) ifTrue:[
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   181
        self root:nil.
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   182
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    ].
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   184
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   185
    newDir isDirectory ifFalse:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   186
        newDir := newDir directory
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   187
    ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   188
    newDir := newDir asCanonicalizedFilename.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   189
    oldDir := self directory.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   190
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   191
    oldDir = newDir ifTrue:[^ self].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   192
    oldRoot := root.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   193
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   194
    changeToParent := false.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   195
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   196
    oldDir notNil ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   197
        oldDir directory = newDir ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   198
            changeToParent := true.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   199
        ] ifFalse:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   200
            "search for existing item
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   201
            "
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   202
            self do:[:el|
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   203
                el fileName = newDir ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   204
                    el parent:nil.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   205
                    self root:el.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   206
                    doExpand ifTrue:[ el expand ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   207
                    ^ self
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   208
                ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   209
            ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   210
        ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   211
    ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   212
    newRoot := HierarchicalFileItem fileName:newDir.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   213
    newRoot setExpanded:false.  "/ to supress change notifications
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   214
    self root:newRoot.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   215
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   216
    children := newRoot children ? #().
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   217
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   218
    "/ disable <cd ..> handling
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   219
    changeToParent := false.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   220
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   221
    changeToParent ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   222
        index := children findFirst:[:el| el fileName = oldDir ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   223
        index ~~ 0 ifTrue:[ newRoot at:index put:oldRoot ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   224
    ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   225
    doExpand ifTrue:[ newRoot expand ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   226
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   227
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   228
root:aRoot
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   229
    "stop update-task
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   230
    "
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   231
    self criticalDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   232
        indicatorList notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   233
            indicatorList do:[:el| el resetFetchIndicator ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   234
            indicatorList removeAll.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   235
        ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   236
    ].
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   237
    aRoot notNil ifTrue:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   238
        self showRoot ifFalse:[aRoot setExpanded:true ]
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   239
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   240
    ^ super root:aRoot
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
!HierarchicalFileList methodsFor:'actions'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
matchBlock
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
    "set the matchBlock - if non-nil, it controls which files are visible.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
    ^ matchBlock
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
        
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
matchBlock:aBlock
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
    "set the matchBlock - if non-nil, it controls which files are visible.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
    matchBlock := aBlock.
1866
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   256
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   257
    root notNil ifTrue:[
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   258
        self recursionLock critical:[
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   259
            self stopMonitoringTask.
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   260
            root matchBlockChanged.
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   261
        ].
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   262
        self startMonitoringTask.
1866
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   263
    ].
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   264
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   265
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   266
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   267
sortBlock
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   268
    "set the matchBlock - if non-nil, it controls which files are visible.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   269
    "
2296
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   270
    sortBlock notNil ifTrue:[ ^ sortBlock ].
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   271
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   272
    sortBlock := [:a :b| |aIsDir|
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   273
        aIsDir := a isDirectory.
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   274
        aIsDir == b isDirectory  ifTrue:[a fileName name <= b fileName name]
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   275
                                ifFalse:[aIsDir].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   276
    ].
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   277
    ^ sortBlock
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   278
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   279
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   280
sortBlock:aBlock
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   281
    "set the matchBlock - if non-nil, it controls which files are visible.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   282
    "
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   283
    sortBlock := aBlock.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   284
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   285
    root notNil ifTrue:[
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   286
        self recursionLock critical:[
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   287
            self stopMonitoringTask.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   288
            root recursiveSort:aBlock.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   289
        ].
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   290
        self startMonitoringTask.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   291
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   294
!HierarchicalFileList methodsFor:'private monitoring task'!
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   295
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   296
monitoringCycle
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   297
    "the block evaluated by the monitoring task; test whether directory is expanded
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   298
     otherwise we have not to evaluate the directory contents.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   299
     think about remote file-systems
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   300
    "
2380
df8d81cebb74 *** empty log message ***
ca
parents: 2306
diff changeset
   301
    |index item|
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   302
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   303
    item  := root.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   304
    index := showRoot ifTrue:[1] ifFalse:[0].
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   305
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   306
    item isNil ifTrue:[
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   307
        item  := self at:index ifAbsent:nil.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   308
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   309
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   310
    [item notNil] whileTrue:[
2380
df8d81cebb74 *** empty log message ***
ca
parents: 2306
diff changeset
   311
        dependents size == 0 ifTrue:[ ^ self ].
df8d81cebb74 *** empty log message ***
ca
parents: 2306
diff changeset
   312
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   313
        item isDirectory ifTrue:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   314
            item monitoringCycle
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   315
        ].
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   316
        Processor yield.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   317
        index := index + 1.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   318
        item  := self at:index ifAbsent:nil.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   319
    ].
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   320
! !
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   321
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
!HierarchicalFileList methodsFor:'protocol'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
childrenFor:anItem
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
    "returns all visible children derived from the physical
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
     directory contents.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
    "
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   328
    |contents list matchBlock|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
   330
    anItem isDirectory ifFalse:[^ #()].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
2248
528313883ea8 More speedup.
Stefan Vogel <sv@exept.de>
parents: 2243
diff changeset
   332
    contents := DirectoryContents directoryNamed:anItem fileName.
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   333
    contents isNil ifTrue:[ ^ #() ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
2248
528313883ea8 More speedup.
Stefan Vogel <sv@exept.de>
parents: 2243
diff changeset
   335
    list := OrderedCollection new.
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   336
    matchBlock := self matchBlockFor:anItem.
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
   337
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   338
    contents itemsDo:[:anItem|
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   339
        (matchBlock isNil or:[matchBlock value:(anItem fileName) value:(anItem isDirectory)]) ifTrue:[
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   340
            list add:(HierarchicalFileItem forContentsItem:anItem).
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
        ]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
    ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   343
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
   344
    list isEmpty ifTrue:[^ #()].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   345
    list sort:self sortBlock.
2248
528313883ea8 More speedup.
Stefan Vogel <sv@exept.de>
parents: 2243
diff changeset
   346
    ^ list
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
hasChildrenFor:anItem
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    "returns true if the physical directory contains at least
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
     one visible item otherwise false.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
    |block|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
    anItem isDirectory ifFalse:[
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
        ^ false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
    (block := self matchBlockFor:anItem) isNil ifTrue:[
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
        block := [:aFilename :isDirectory| true ]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
    ^ DirectoryContents directoryNamed:(anItem fileName) detect:block
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
matchBlockFor:anItem
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
    "get the matchBlock - if non-nil, it controls which files are
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
     visible within the physical directory
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
    ^ matchBlock        
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   372
!HierarchicalFileList methodsFor:'searching'!
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   373
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   374
findLastForFile:aPathOrFile
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   375
    "find last item which matches the path or file
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   376
     returns the item or nil if not contained in self
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   377
    "
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   378
    |file searchItem rootDir rootComponents searchComponents|
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   379
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   380
    (aPathOrFile isNil or:[root isNil]) ifTrue:[
1582
bed19387e545 bug fix
ca
parents: 1581
diff changeset
   381
        ^ nil
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   382
    ].
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   383
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   384
    file := aPathOrFile asFilename.
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   385
    file exists ifFalse:[ ^ nil ].
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   386
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   387
    rootDir := root fileName asAbsoluteFilename.
2290
29e279812a45 search not for absoluteFilename in searchItem to get the link files
penk
parents: 2272
diff changeset
   388
"/    file    := file asAbsoluteFilename.
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   389
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   390
2290
29e279812a45 search not for absoluteFilename in searchItem to get the link files
penk
parents: 2272
diff changeset
   391
"/    (file pathName startsWith:(rootDir pathName)) ifFalse:[
29e279812a45 search not for absoluteFilename in searchItem to get the link files
penk
parents: 2272
diff changeset
   392
    (file asString startsWith:(rootDir pathName)) ifFalse:[
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   393
        "not included"
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   394
        ^ nil
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   395
    ].
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   396
    rootComponents   := rootDir components.
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   397
    searchComponents := file asCanonicalizedFilename components.
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   398
    searchItem       := root.
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   399
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   400
    searchComponents from:(rootComponents size + 1) do:[:aName| |child|
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   401
        child := searchItem detect:[:el| el baseName = aName ] ifNone:nil.
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   402
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   403
        child isNil ifTrue:[ ^ searchItem ].
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   404
        searchItem := child.
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   405
    ].
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   406
    ^ searchItem
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   407
! !
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   408
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   409
!HierarchicalFileList methodsFor:'update'!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   410
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   411
startIndicatorValidationFor:anItem
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   412
    "an item will be registered for an indication update
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   413
    "
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   414
    |prio|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   415
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   416
    self criticalDo:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   417
        indicatorList size == 0 ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   418
            indicatorList := OrderedCollection new.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   419
        ] ifFalse:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   420
            indicatorList removeIdentical:anItem ifAbsent:nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   421
        ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   422
        "/ indicatorList addFirst:anItem.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   423
        indicatorList add:anItem.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   424
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   425
        indicatorTask isNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   426
            prio := Processor activePriority.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   427
            indicatorTask := [ self updateIndicatorCycle. ] forkAt:(prio - 1).
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   428
            indicatorTask priorityRange:(prio-1 to:prio).
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   429
        ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   430
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   431
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   432
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   433
stopIndicatorValidationFor:anItem
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   434
    "stop the indicator validation for an item
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   435
    "
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   436
    self criticalDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   437
        indicatorList notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   438
            indicatorList removeIdentical:anItem ifAbsent:nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   439
            anItem resetFetchIndicator.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   440
        ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   441
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   442
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   443
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   444
updateIndicatorCycle
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   445
    "run fetching indicator task cycle.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   446
     This is done in the background to avoid long startup
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   447
     delays, in case the indicator information takes long to
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   448
     gather (i.e. when reading directories)
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   449
    "
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   450
    |repeat task item|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   451
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   452
    repeat := true.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   453
    task   := indicatorTask.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   454
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   455
    [ [ task notNil ] whileTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   456
        self criticalDo:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   457
            (     dependents    size ~~ 0       "/ no dependencies (stop task)
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   458
             and:[indicatorList size ~~ 0]      "/ nothing to do
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   459
            ) ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   460
                item := indicatorList removeFirst.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   461
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   462
                (self includesIdentical:item) ifFalse:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   463
                    "/ no longer visible
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   464
                    item resetFetchIndicator.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   465
                    item := nil
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   466
                ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   467
            ] ifFalse:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   468
                item := indicatorTask := task := nil
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   469
            ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   470
        ].
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   471
        item notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   472
            item fetchIndicator.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   473
            Processor yield.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   474
        ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   475
     ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   476
    ] valueNowOrOnUnwindDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   477
        task notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   478
            "/ oops, process terminated
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   479
            self criticalDo:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   480
                "/ test whether a new task already started
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   481
                indicatorTask == task ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   482
                    indicatorTask := nil
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   483
                ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   484
            ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   485
        ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   486
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   487
! !
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   488
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   489
!HierarchicalFileList::HierarchicalFileItem class methodsFor:'instance creation'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   490
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   491
fileName:aFileName
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   492
    ^ self forContentsItem:(DirectoryContents contentsItemForFileName:aFileName)
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   493
!
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   494
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   495
forContentsItem:aContentsItem
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   496
    |item cls|
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   497
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   498
    cls := HierarchicalFileList::File.
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   499
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   500
    aContentsItem notNil ifTrue:[
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   501
        aContentsItem isRemoteDirectory ifTrue:[
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   502
            cls := HierarchicalFileList::RemoteDirectory
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   503
        ] ifFalse:[
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   504
            aContentsItem isDirectory ifTrue:[
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   505
                cls := HierarchicalFileList::Directory
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   506
            ]
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   507
        ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   508
    ].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   509
    item := cls basicNew initialize.
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   510
    item contentsItem:aContentsItem.
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   511
    ^ item
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   512
!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   514
new
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   515
    self error.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   518
!HierarchicalFileList::HierarchicalFileItem methodsFor:'accessing'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
baseName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
    "returns the baseName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   523
    ^ contentsItem fileName baseName.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   524
!
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   525
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   526
contentsItem:aContentsItem
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   527
    contentsItem := aContentsItem
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   528
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   529
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
fileName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
    "returns the fileName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   533
    ^ contentsItem fileName
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   536
fileName:aFilename
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   537
self halt.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   538
    contentsItem :=  DirectoryContents contentsItemForFileName:aFilename
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   539
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   540
"/    fileName = aFilename ifFalse:[
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   541
"/        fileName := aFilename.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   542
"/        self changed:#label
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   543
"/    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   546
fileSize
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   547
    "returns the fileSize
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   548
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   549
    |fileInfo|
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   550
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   551
    fileInfo := contentsItem info.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   552
    fileInfo isNil ifTrue:[^ nil].
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   553
  ^ fileInfo fileSize
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   554
!
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   555
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   556
group
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   557
    "returns the printable group
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   558
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   559
    |fileInfo gid group|
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   560
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   561
    fileInfo := contentsItem info.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   562
    fileInfo notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   563
        gid := fileInfo gid.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   564
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   565
        gid notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   566
            (LastGIDToGroupNameMapping notNil and:[gid == LastGIDToGroupNameMapping key]) ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   567
                ^ LastGIDToGroupNameMapping value
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   568
            ].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   569
            group := OperatingSystem getGroupNameFromID:gid.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   570
            LastGIDToGroupNameMapping := gid -> group.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   571
          ^ group
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   572
        ]
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   573
    ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   574
    ^ '???'
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   575
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   576
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
icon
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
    "returns the icon key
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
    "
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   580
    icon isNil ifTrue:[
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   581
        self isRemoteDirectory ifTrue:[
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   582
            icon := FileBrowser iconForKeyMatching:#directoryNetwork
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   583
        ] ifFalse:[
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   584
            icon := FileBrowser iconForFile:(self fileName).
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   585
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
    ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   587
    ^ icon.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
label
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
    "returns the printable name, the baseName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   593
    ^ contentsItem fileName baseName
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   596
modificationTime
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   597
    "returns the absolute time of modification
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   598
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   599
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   600
    |fileInfo|
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   601
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   602
    fileInfo := contentsItem info.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   603
    fileInfo isNil ifTrue:[^ nil].
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   604
    ^ fileInfo modificationTime
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   605
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   606
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   607
owner
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   608
    "returns the printable owner
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   609
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   610
    |fileInfo uid owner|
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   611
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   612
    fileInfo := contentsItem info.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   613
    fileInfo notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   614
        uid := fileInfo uid.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   615
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   616
        uid notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   617
            (LastUIDToUserNameMapping notNil and:[uid == LastUIDToUserNameMapping key]) ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   618
                ^ LastUIDToUserNameMapping value
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   619
            ].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   620
            owner := OperatingSystem getUserNameFromID:uid.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   621
            LastUIDToUserNameMapping := uid -> owner.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   622
          ^ owner
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   623
        ]
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   624
    ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   625
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   626
    ^ '???'
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   627
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   628
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
pathName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   630
    "returns the pathName
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   632
    ^ contentsItem fileName pathName
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   633
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   634
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   635
permissions
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   636
    "returns the permissions as printable string
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   637
    "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   638
    |fileInfo mode perms|
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   639
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   640
    fileInfo := contentsItem info.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   641
    fileInfo notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   642
        mode := fileInfo mode.
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   643
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   644
        mode notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   645
            perms := String new:9 withAll:$-.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   646
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   647
            1 to:9 by:3 do:[:i|
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   648
                (mode bitAt:i    ) == 1 ifTrue:[perms at:10 - i put:$x].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   649
                (mode bitAt:i + 1) == 1 ifTrue:[perms at:9  - i put:$w].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   650
                (mode bitAt:i + 2) == 1 ifTrue:[perms at:8  - i put:$r].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   651
            ].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   652
            ^ perms
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   653
        ]
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   654
    ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   655
    ^ '???'
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   656
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   657
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   658
suffix
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   659
    "returns the suffix of the file
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   660
    "
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   661
    (OperatingSystem isUNIXlike and:[(self baseName at:1) == $.]) ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   662
        ^ ''
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   663
    ].
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   664
    ^ contentsItem fileName suffix
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   665
! !
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   666
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   667
!HierarchicalFileList::HierarchicalFileItem methodsFor:'change & update'!
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   668
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   669
changed:aParameter
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   670
    "the item changed; raise change notification
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   671
    "
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   672
    aParameter == #icon ifTrue:[ icon := nil ].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   673
    super changed:aParameter.
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   674
! !
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   675
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   676
!HierarchicalFileList::HierarchicalFileItem methodsFor:'instance creation'!
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   677
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   678
fileName:aFilename fileInfo:aFileInfoOrNil
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   679
self halt.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   680
"/    fileName := aFilename.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   681
"/    fileInfo := aFileInfoOrNil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   682
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   683
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   684
!HierarchicalFileList::HierarchicalFileItem methodsFor:'invalidate'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
invalidate
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
    "invalidate the contents
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   689
    self invalidateRepairNow:false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   693
invalidateRepairNow
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
    "invalidate the contents; repair now
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   696
    self invalidateRepairNow:true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   697
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   698
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   699
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   700
invalidateRepairNow:doRepair
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   701
    "invalidate the contents; dependent on the boolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   702
     do repair immediately
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
1866
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   706
!
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   707
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   708
matchBlockChanged
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   709
    "called if the matchBlock changed
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   710
    "
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   711
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   714
!HierarchicalFileList::HierarchicalFileItem methodsFor:'printing'!
2127
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   715
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   716
printString
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   717
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   718
    ^ super printString, ' for: ', self fileName asString
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   719
! !
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   720
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   721
!HierarchicalFileList::HierarchicalFileItem methodsFor:'protocol'!
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   722
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   723
flushChildren
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   724
    "flush the children because node not visible ....
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   725
     canbe redefined by subclass
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   726
    "
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   727
    children := nil.
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   728
! !
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   729
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   730
!HierarchicalFileList::HierarchicalFileItem methodsFor:'queries'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   731
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   732
isDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   733
    ^ false
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   734
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   735
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   736
isRemoteDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   737
    ^ false
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   738
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   739
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   740
time
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   741
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   742
    ^ self valueAt:#modified
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   743
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   744
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   745
!HierarchicalFileList::File methodsFor:'accessing'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   746
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   747
children
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   748
    "always returns an empty list
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   749
    "
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   750
    ^ #()
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   751
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   752
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
!HierarchicalFileList::File methodsFor:'queries'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
hasChildren
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   756
    "always returns false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   757
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   758
    ^ false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   759
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   760
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   761
!HierarchicalFileList::Directory class methodsFor:'documentation'!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   762
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   763
documentation
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   764
"
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   765
    [Instance variables:]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   766
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   767
        fetchOperation  <Symbol/Boolean>    nil             if children is nil, no information about has children
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   768
                                            #fetching       registered in list to be updated for indication
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   769
                                            #hasChildren    registered in list to be updated for indication
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   770
                                            #hasNoChildren  has children but children list might be nil (remote)
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   771
"
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   772
! !
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   773
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   774
!HierarchicalFileList::Directory methodsFor:'accessing'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   775
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   776
children
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   777
    "returns the list of children
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   778
    "
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   779
    |model|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   780
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   781
    children notNil ifTrue:[ ^ children ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   782
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   783
    model := self model.
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   784
    model isNil ifTrue:[ ^ nil ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   785
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   786
    model criticalDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   787
        children isNil ifTrue:[ self readChildren ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   788
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   789
    ^ children
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   790
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   791
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   792
flushChildren
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   793
    "flush the children because node not visible ....
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   794
    "
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   795
    children notNil ifTrue:[
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   796
        "keep hasChildren information
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   797
        "
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   798
        children size ~~ 0 ifTrue:[ fetchOperation := #hasChildren ]
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   799
                          ifFalse:[ fetchOperation := #hasNoChildren ].
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   800
        children := nil.
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   801
    ].
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   802
!
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   803
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   804
icon
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   805
    "returns the icon key
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   806
    "
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   807
    isExpanded ifTrue:[
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   808
        ^ FileBrowser iconForKeyMatching:#directoryOpen
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   809
    ].
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   810
    icon isNil ifTrue:[
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   811
        ^ super icon
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   812
    ].
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   813
    ^ icon
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   814
!
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   815
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   816
readChildren
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   817
    "reads the list of children
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   818
    "
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   819
    |model list hadChildren hasChildren|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   820
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   821
    model := self model.
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   822
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   823
    model isNil ifTrue:[
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   824
        "/ must reread later
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   825
        fetchOperation := modificationTime := children := nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   826
      ^ nil
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   827
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   828
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   829
    hadChildren := children size ~~ 0.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   830
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   831
    "/ set to suppress reading of children
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   832
    children := #().
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   833
    fetchOperation   := nil.
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   834
    modificationTime := self fileName modificationTime.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   835
    model stopIndicatorValidationFor:self.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   836
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   837
    list := model childrenFor:self.
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   838
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   839
    list size ~~ 0 ifTrue:[
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   840
        list do:[:aChild| aChild parent:self].
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   841
        children := list.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   842
    ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   843
    hasChildren := children size ~~ 0.
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   844
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   845
    hasChildren ~~ hadChildren ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   846
        self changed:#redraw
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   847
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   848
    ^ children
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   849
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   850
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   851
!HierarchicalFileList::Directory methodsFor:'accessing-hierarchy'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   852
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   853
collapse
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   854
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   855
    super collapse.
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   856
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   857
    children notNil ifTrue:[
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   858
        children do:[:el| el flushChildren ]
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   859
    ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   860
!
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   861
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   862
expand
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   863
    "expand children; must redefine to raise a notification
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   864
     if children are not yet initialized and after initialization empty.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   865
    "
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   866
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   867
    super expand.
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   868
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   869
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   870
recursiveCollapse
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   871
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   872
    super recursiveCollapse.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   873
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   874
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   875
recursiveExpand
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   876
    "redefined to expand
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   877
    "
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   878
    self expand
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   879
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   880
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   881
! !
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   882
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   883
!HierarchicalFileList::Directory methodsFor:'fetching'!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   884
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   885
basicFetchIndicator
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   886
    |hasChildren|
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   887
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   888
    hasChildren := DirectoryContents directoryNamed:self fileName detect:(self model matchBlock).
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   889
    hasChildren ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   890
        fetchOperation := #hasChildren
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   891
    ] ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   892
        fetchOperation := #hasNoChildren
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   893
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   894
    children isNil ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   895
        "setup modification time to suppress monitorCycle
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   896
        "
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   897
        modificationTime := self fileName modificationTime.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   898
    ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   899
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   900
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   901
fetchIndicator
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   902
    "fetch the indicator value which indicates whether children exists or not
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   903
     called by the list
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   904
    "
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   905
    children notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   906
        "/ children already read
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   907
        fetchOperation := nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   908
      ^ self
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   909
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   910
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   911
    fetchOperation ~~ #fetching ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   912
        "/ children will be updated ....
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   913
        ^ self
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   914
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   915
    "/ suppress restart of fetchIndicator
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   916
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   917
    self basicFetchIndicator.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   918
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   919
    children notNil ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   920
        fetchOperation := nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   921
        children notEmpty ifTrue:[ self changed:#redraw ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   922
    ] ifFalse:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   923
        "/ is a remote or very slow file system
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   924
        fetchOperation == #hasChildren ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   925
            self changed:#redraw
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   926
        ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   927
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   928
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   929
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   930
resetFetchIndicator
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   931
    "update indication cycle has deregistered the item
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   932
    "
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   933
    fetchOperation := nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   934
! !
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   935
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   936
!HierarchicalFileList::Directory methodsFor:'queries'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   937
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   938
hasChildren
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   939
    "returns true if children exists
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   940
    "
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   941
    |model|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   942
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   943
    children notNil ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   944
        fetchOperation := nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   945
      ^ children size ~~ 0
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   946
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   947
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   948
    fetchOperation notNil ifTrue:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   949
        ^ fetchOperation == #hasChildren
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   950
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   951
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   952
    model := self model.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   953
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   954
    model notNil ifTrue:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   955
        fetchOperation := #fetching.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   956
        model startIndicatorValidationFor:self.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   957
    ] ifFalse:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   958
        self error:'should not happen' mayProceed:true.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   959
        fetchOperation := nil
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   960
    ].
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   961
    ^ children size ~~ 0
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   962
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   963
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   964
isDirectory
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   965
    "always returns true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   966
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   967
    ^ true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   968
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   969
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   970
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   971
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   972
!HierarchicalFileList::Directory methodsFor:'validation'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   973
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   974
invalidateRepairNow:doRepair
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   975
    "invalidate contents
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   976
    "
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   977
    fetchOperation := modificationTime := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   978
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   979
    isExpanded ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   980
        children := nil
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   981
    ] ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   982
        doRepair ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   983
            self monitoringCycle
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   984
        ] ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   985
            children size == 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   986
                "/ expanded but no children added, thus can reset the children
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   987
                children := nil
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   988
            ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   989
        ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   990
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   991
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   992
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   993
matchBlockChanged
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   994
    "called if the matchBlock changed
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   995
    "
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   996
    modificationTime := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   997
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   998
    isExpanded ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   999
        fetchOperation := children := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1000
    ] ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1001
        self monitoringCycle.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1002
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1003
        children size ~~ 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1004
            children do:[:aChild| aChild matchBlockChanged ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1005
        ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1006
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1007
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1008
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1009
monitoringCycle
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1010
    "run monitoring cycle
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1011
        !!!!!!!! called by the HierarchicalList only !!!!!!!!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1012
    "
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1013
    |unusedDict addedItems mergedList size modifyTime model timeChanged|
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1014
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
  1015
    modifyTime := self fileName modificationTime.
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
  1016
    modifyTime isNil ifTrue:[^ self].
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1017
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1018
    timeChanged := (modificationTime isNil or:[modifyTime > modificationTime]).
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1019
    modificationTime := modifyTime.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1020
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
  1021
    children notNil ifTrue:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1022
        timeChanged ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1023
            ^ self
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1024
        ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1025
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1026
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1027
    isExpanded ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1028
        timeChanged ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1029
             fetchOperation := children := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1030
             self changed:#redraw.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1031
        ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1032
        ^ self
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1033
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1034
    model := self model.
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
  1035
    children isNil ifTrue:[ children := #() ].         "/ disable update during merge
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1036
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1037
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1038
    fetchOperation := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1039
    mergedList     := model childrenFor:self.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1040
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1041
    mergedList size == 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1042
        self removeAll.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1043
      ^ self
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1044
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1045
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1046
    size := children size.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1047
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1048
    size == 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1049
        self addAll:mergedList.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1050
      ^ self
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1051
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1052
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1053
    model criticalDo:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1054
        addedItems := OrderedCollection new:128.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1055
        unusedDict := Dictionary new:size.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1056
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1057
        children do:[:el| unusedDict at:(el fileName) put:el ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1058
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1059
        mergedList keysAndValuesDo:[:anIndex :anItem| |item|
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1060
            item := unusedDict removeKey:(anItem fileName) ifAbsent:nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1061
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1062
            item notNil ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1063
                mergedList at:anIndex put:item
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1064
            ] ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1065
                addedItems add:anItem.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1066
                anItem parent:self.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1067
            ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1068
        ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1069
        "/ 12 is hardcoded !!!!!!!!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1070
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1071
        (unusedDict size + addedItems size) > 12 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1072
            "/ generate two nofifications: collapse and expand
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1073
            self collapse.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1074
            children := mergedList.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1075
            self expand.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1076
        ] ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1077
            unusedDict do:[:el| self remove:el ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1078
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1079
            addedItems notEmpty ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1080
                self addAll:addedItems
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1081
            ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1082
            "/ children order changed test
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1083
            children := mergedList.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1084
            self childrenOrderChanged.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1085
        ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1086
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1087
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1088
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1089
!HierarchicalFileList::RemoteDirectory methodsFor:'queries'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1090
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1091
hasChildren
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1092
    "returns true if children exists
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1093
    "
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1094
    children notNil ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1095
        fetchOperation := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1096
        ^ children size ~~ 0
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1097
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1098
    fetchOperation := #hasChildren.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1099
  ^ true
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1100
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1101
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1102
isRemoteDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1103
    ^ true
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1104
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1105
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1106
!HierarchicalFileList class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1107
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1108
version
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
  1109
    ^ '$Header: /cvs/stx/stx/libwidg2/HierarchicalFileList.st,v 1.39 2002-11-21 09:02:31 ca Exp $'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1110
! !