HierarchicalFileList.st
author Jan Vrany <jan.vrany@labware.com>
Fri, 02 Sep 2022 11:25:39 +0100
branchjv
changeset 6261 9b7eb7159d29
parent 5161 a0cf6ae46500
child 5650 cae2e4d6271f
permissions -rw-r--r--
Fix loong standing bug with some menus not being translated / resolved This has happened with browser "View" menu when sometimes it had the slice resolved and sometimes not. It turned out that it was because the code disabled resources (and therefore slices) resolution when processing shortcuts, so the menu was created and cached unresolved. This fixes the issue. eXept apparently run into the same problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
"
1780
867e59c91ff7 use icons derived from FileBrowser
ca
parents: 1582
diff changeset
    12
"{ Package: 'stx:libwidg2' }"
867e59c91ff7 use icons derived from FileBrowser
ca
parents: 1582
diff changeset
    13
4696
66a70b8e9514 class: HierarchicalFileList
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
    14
"{ NameSpace: Smalltalk }"
66a70b8e9514 class: HierarchicalFileList
Stefan Vogel <sv@exept.de>
parents: 4562
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
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
    38
	instanceVariableNames:'modificationTime makeIconGray quickChildrenInfo isInAccessible'
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
    39
	classVariableNames:'StateUnknown StateHasChildren StateHasNoChildren StateFetching'
2138
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
3170
c0e15c91bcc6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3160
diff changeset
    66
!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
2180
d01612ed451e get the icons from the FileBrowser now
penk
parents: 2140
diff changeset
    68
examples
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
    69
"
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    70
    open filebrowser without monitoring cycle
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    71
2180
d01612ed451e get the icons from the FileBrowser now
penk
parents: 2140
diff changeset
    72
                                                                    [exBegin]
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    73
    |top sel list directory|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    list := HierarchicalFileList new.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    list showRoot:false.
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
    77
    list matchBlock:[:fn :isDir| true ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    79
    directory := Filename currentDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    80
    directory := Filename homeDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    81
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    82
    list directory:(directory asAbsoluteFilename).
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    83
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    top := StandardSystemView new; extent:300@300.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
    sel := ScrollableView for:HierarchicalListView miniScroller:true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
                       origin:0.0@0.0 corner:1.0@1.0 in:top.
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    sel doubleClickAction:[:i| (list at:i) toggleExpand ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    sel   indicatorAction:[:i| (list at:i) toggleExpand ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
2296
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
    91
    sel hasConstantHeight:true.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    92
    sel list:list.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    93
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    top open.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
    95
                                                                [exEnd]
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    96
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    97
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    98
    open filebrowser and monitore contents
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
    99
                                                                    [exBegin]
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   100
    |top sel list directory|
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   101
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   102
    list := HierarchicalFileList new.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   103
    list showRoot:false.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   104
    list matchBlock:[:fn :isDir| true ].
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   105
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   106
    directory := Filename currentDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   107
    directory := Filename homeDirectory.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   108
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   109
    list directory:(directory asAbsoluteFilename).
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   110
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   111
    top := StandardSystemView new; extent:300@300.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   112
    sel := ScrollableView for:HierarchicalListView miniScroller:true
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   113
                       origin:0.0@0.0 corner:1.0@1.0 in:top.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   114
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   115
    sel doubleClickAction:[:i| (list at:i) toggleExpand ].
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   116
    sel   indicatorAction:[:i| (list at:i) toggleExpand ].
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   117
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   118
    sel hasConstantHeight:true.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   119
    sel list:list.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   120
    list monitoringTaskDelay:0.5.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   121
    top open.
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   122
                                                                [exEnd]
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   123
2180
d01612ed451e get the icons from the FileBrowser now
penk
parents: 2140
diff changeset
   124
"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   127
!HierarchicalFileList class methodsFor:'helpers'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   128
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   129
forInfoItem:aItem
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   130
    "instance creation helper
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   131
    "
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   132
    | info fileType retItem|
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   133
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   134
    info := aItem info.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   135
    fileType := aItem type.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   136
    retItem := self itemFor:aItem fileName fileType:fileType.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   137
    retItem fileInfo:info.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   138
    ^ retItem
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   139
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   140
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   141
itemFor:aFileOrDirectoryName fileType:fileType
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   142
    "instance creation helper
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   143
    "
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   144
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   145
    fileType == #directory ifTrue:[
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   146
        ^ Directory fileName:aFileOrDirectoryName.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   147
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   148
    fileType == #remoteDirectory ifTrue:[
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   149
        ^ RemoteDirectory fileName:aFileOrDirectoryName.
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   150
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   151
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   152
    ^ File fileName:aFileOrDirectoryName.
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
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
!HierarchicalFileList methodsFor:'accessing'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
directory
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   158
    "returns the root directory or nil"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   159
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    ^ root notNil ifTrue:[root fileName] ifFalse:[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
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
directory:aDirectory
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   164
    "set the root directory or nil"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   165
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   166
    self directory:aDirectory expand:true
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   167
!
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   168
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   169
directory:aDirectory expand:doExpand
5161
a0cf6ae46500 #OTHER by mawalch
mawalch
parents: 4771
diff changeset
   170
    "set the root directory or nil;
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   171
     reuse old items if existent"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   172
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   173
    |oldDir newDir oldRoot newRoot index changeToParent children|
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   174
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   175
    (     aDirectory isNil
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   176
     or:[(newDir := aDirectory asFilename) exists not]
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   177
    ) ifTrue:[
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   178
        self root:nil.
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   179
        ^ self
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    ].
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   181
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   182
    newDir isDirectory ifFalse:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   183
        newDir := newDir directory
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   184
    ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   185
    newDir := newDir asCanonicalizedFilename.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   186
    oldDir := self directory.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   187
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   188
    oldDir = newDir ifTrue:[^ self].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   189
    oldRoot := root.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   190
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   191
    changeToParent := false.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   192
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   193
    oldDir notNil ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   194
        oldDir directory = newDir ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   195
            changeToParent := true.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   196
        ] ifFalse:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   197
            "search for existing item
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   198
            "
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   199
            self do:[:el|
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   200
                el fileName = newDir ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   201
                    el parent:nil.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   202
                    self root:el.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   203
                    doExpand ifTrue:[ el expand ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   204
                    ^ self
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   205
                ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   206
            ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   207
        ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   208
    ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   209
    newRoot := HierarchicalFileItem fileName:newDir.
5161
a0cf6ae46500 #OTHER by mawalch
mawalch
parents: 4771
diff changeset
   210
    newRoot setExpanded:false.  "/ to suppress change notifications
2388
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   211
    self root:newRoot.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   212
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   213
    children := newRoot children ? #().
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   214
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   215
    "/ disable <cd ..> handling
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   216
    changeToParent := false.
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   217
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   218
    changeToParent ifTrue:[
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   219
        index := children findFirst:[:el| el fileName = oldDir ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   220
        index ~~ 0 ifTrue:[ newRoot at:index put:oldRoot ].
151c81f43733 *** empty log message ***
ca
parents: 2387
diff changeset
   221
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   222
    doExpand ifTrue:[ newRoot enforcedExpand ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   223
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   224
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   225
root:aRoot
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   226
    self criticalDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   227
        indicatorList notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   228
            indicatorList do:[:el| el resetFetchIndicator ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   229
            indicatorList removeAll.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   230
        ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   231
    ].
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   232
    aRoot notNil ifTrue:[
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   233
        self showRoot ifFalse:[aRoot setExpanded:true ]
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   234
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   235
    ^ super root:aRoot
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
!HierarchicalFileList methodsFor:'actions'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
matchBlock
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   241
    "set the matchBlock - if non-nil, it controls which files are visible."
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   242
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    ^ matchBlock
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
matchBlock:aBlock
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   247
    "set the matchBlock - if non-nil, it controls which files are visible."
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   248
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
    matchBlock := aBlock.
1866
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   250
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   251
    root notNil ifTrue:[
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   252
        self recursionLock critical:[
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   253
            self stopMonitoringTask.
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   254
            root matchBlockChanged.
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   255
        ].
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
   256
        self startMonitoringTask.
1866
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   257
    ].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   258
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   259
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   260
sortBlock
2296
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   261
    sortBlock notNil ifTrue:[ ^ sortBlock ].
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   262
3160
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   263
    sortBlock := [:a :b| |aIsDir entry1 entry2 ignoreCase|
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   264
        ignoreCase := Filename isCaseSensitive not.
2296
17f0578b247e fix example and sortBlock
ca
parents: 2294
diff changeset
   265
        aIsDir := a isDirectory.
3160
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   266
        aIsDir == b isDirectory  
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   267
            ifTrue:[
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   268
                entry1 := a fileName name.
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   269
                entry2 := b fileName name.
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   270
                ignoreCase ifTrue:[
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   271
                    entry1 := entry1 asLowercase.
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   272
                    entry2 := entry2 asLowercase.
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   273
                ].
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   274
                entry1 <= entry2.
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   275
            ]
2a14723d8b0c #sortBlock ignoring case according to Filename isCaseSensitive
fm
parents: 3145
diff changeset
   276
            ifFalse:[aIsDir].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   277
    ].
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   278
    ^ sortBlock
3174
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   279
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   280
    "Modified: / 13-12-2006 / 15:38:45 / User"
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   281
!
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
    sortBlock := aBlock.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   285
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   286
    root notNil ifTrue:[
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   287
        self recursionLock critical:[
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   288
            self stopMonitoringTask.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   289
            root recursiveSort:aBlock.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   290
        ].
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   291
        self startMonitoringTask.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   292
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
2493
8b70a26f1694 method category rename
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
   295
!HierarchicalFileList methodsFor:'private-monitoring task'!
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   296
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   297
monitoringCycle
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   298
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   299
    self monitoringCycle:false
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   300
!
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   301
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   302
monitoringCycle:update
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   303
    "the action performed by the monitoring task; 
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   304
     tests whether directory is expanded;
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   305
     otherwise we do not have to evaluate the directory contents.
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   306
     TODO: Think about remote file-systems"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   307
2380
df8d81cebb74 *** empty log message ***
ca
parents: 2306
diff changeset
   308
    |index item|
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   309
2429
b789b36dc069 access showRoot by method
ca
parents: 2428
diff changeset
   310
    item := root.
b789b36dc069 access showRoot by method
ca
parents: 2428
diff changeset
   311
    item isNil ifTrue:[^ self].
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   312
2429
b789b36dc069 access showRoot by method
ca
parents: 2428
diff changeset
   313
    self showRoot ifTrue:[ index := 2 ]         "/ root is  part of list (discard first entry)
b789b36dc069 access showRoot by method
ca
parents: 2428
diff changeset
   314
                 ifFalse:[ index := 1 ].        "/ root not part of list
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   315
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   316
    [item notNil] whileTrue:[
2380
df8d81cebb74 *** empty log message ***
ca
parents: 2306
diff changeset
   317
        dependents size == 0 ifTrue:[ ^ self ].
df8d81cebb74 *** empty log message ***
ca
parents: 2306
diff changeset
   318
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   319
        item isDirectory ifTrue:[
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   320
            update ifTrue:[
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   321
                item modificationTime:nil.
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   322
            ]. 
3831
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   323
            item monitoringCycle.
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   324
            Processor yield.
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   325
        ].
2429
b789b36dc069 access showRoot by method
ca
parents: 2428
diff changeset
   326
        item  := self at:index ifAbsent:nil.
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   327
        index := index + 1.
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   328
    ].
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   329
! !
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
   330
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
!HierarchicalFileList methodsFor:'protocol'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
childrenFor:anItem
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
    "returns all visible children derived from the physical
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   335
     directory contents."
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   336
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   337
    |contents list match|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
   339
    anItem isDirectory ifFalse:[^ #()].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
2248
528313883ea8 More speedup.
Stefan Vogel <sv@exept.de>
parents: 2243
diff changeset
   341
    contents := DirectoryContents directoryNamed:anItem fileName.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   343
    (contents isNil or:[contents isReadable not]) ifTrue:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   344
        anItem beInAccessible.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   345
    ] ifFalse:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   346
        contents notEmpty ifTrue:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   347
            match := self matchBlockFor:anItem.
3831
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   348
            match isNil ifTrue:[
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   349
                list := OrderedCollection withAll:contents.
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   350
            ] ifFalse:[
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   351
                list := OrderedCollection new.
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   352
                contents itemsDo:[:each|
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   353
                    (match value:(each fileName) value:(each isDirectory)) ifTrue:[
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   354
                        list add:(HierarchicalFileItem forContentsItem:each).
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   355
                    ]
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   356
                ].
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
   357
            ].
2130
8b64928cd378 sort children: directories first
ca
parents: 2128
diff changeset
   358
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   359
            list notEmpty ifTrue:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   360
                list sort:self sortBlock.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   361
                ^ list
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   362
            ].
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   363
        ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
    ].
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   365
    ^ #()
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
hasChildrenFor:anItem
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
    "returns true if the physical directory contains at least
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   370
     one visible item; otherwise false."
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   371
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
    |block|
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
    anItem isDirectory ifFalse:[
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
        ^ false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    (block := self matchBlockFor:anItem) isNil ifTrue:[
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
        block := [:aFilename :isDirectory| true ]
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    ].
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
    ^ DirectoryContents directoryNamed:(anItem fileName) detect:block
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
matchBlockFor:anItem
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
    "get the matchBlock - if non-nil, it controls which files are
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   386
     visible within the physical directory"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   387
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    ^ matchBlock        
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   389
!
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   390
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   391
updateList
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   392
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   393
    self monitoringCycle:true
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   396
!HierarchicalFileList methodsFor:'searching'!
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   397
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   398
findLastForFile:aPathOrFile
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   399
    "find last item which matches the path or file
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   400
     returns the item or nil if not contained in self"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   401
4072
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   402
    (aPathOrFile isNil or:[root isNil]) ifTrue:[
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   403
        ^ nil
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   404
    ].
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   405
4075
Claus Gittinger <cg@exept.de>
parents: 4074
diff changeset
   406
    ^ self findLastForFile:aPathOrFile inRoot:root directory:(root fileName asAbsoluteFilename)
4072
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   407
4075
Claus Gittinger <cg@exept.de>
parents: 4074
diff changeset
   408
    "Modified: / 08-09-2011 / 03:58:49 / cg"
4072
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   409
!
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   410
4075
Claus Gittinger <cg@exept.de>
parents: 4074
diff changeset
   411
findLastForFile:aPathOrFile inRoot:root directory:rootDir
4072
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   412
    "find last item which matches the path or file
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   413
     returns the item or nil if not contained in self"
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   414
27900655f254 added: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4029
diff changeset
   415
    |file searchItem rootComponents searchComponents|
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   416
4074
1e3e76541f13 changed: #findLastForFile:inRoot:
Claus Gittinger <cg@exept.de>
parents: 4072
diff changeset
   417
    (aPathOrFile isNil or:[rootDir isNil]) ifTrue:[
1582
bed19387e545 bug fix
ca
parents: 1581
diff changeset
   418
        ^ nil
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   419
    ].
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   420
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   421
    file := aPathOrFile asFilename.
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   422
    file exists ifFalse:[ ^ nil ].
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   423
2290
29e279812a45 search not for absoluteFilename in searchItem to get the link files
penk
parents: 2272
diff changeset
   424
"/    file    := file asAbsoluteFilename.
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   425
2290
29e279812a45 search not for absoluteFilename in searchItem to get the link files
penk
parents: 2272
diff changeset
   426
"/    (file pathName startsWith:(rootDir pathName)) ifFalse:[
3917
c5920feea6f7 changed: #findLastForFile:
Claus Gittinger <cg@exept.de>
parents: 3831
diff changeset
   427
    (file asString startsWith:(rootDir pathName,Filename separator)) ifFalse:[
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   428
        "not included"
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   429
        ^ nil
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   430
    ].
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   431
    rootComponents   := rootDir components.
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   432
    searchComponents := file asCanonicalizedFilename components.
4075
Claus Gittinger <cg@exept.de>
parents: 4074
diff changeset
   433
    searchItem       := root.
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   434
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   435
    searchComponents from:(rootComponents size + 1) do:[:aName| |child|
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   436
        child := searchItem detect:[:el| el baseName = aName ] ifNone:nil.
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   437
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   438
        child isNil ifTrue:[ ^ searchItem ].
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   439
        searchItem := child.
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   440
    ].
2272
a1a26c6f5f11 checkin from browser
penk
parents: 2271
diff changeset
   441
    ^ searchItem
3917
c5920feea6f7 changed: #findLastForFile:
Claus Gittinger <cg@exept.de>
parents: 3831
diff changeset
   442
4075
Claus Gittinger <cg@exept.de>
parents: 4074
diff changeset
   443
    "Created: / 08-09-2011 / 03:55:23 / cg"
1581
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   444
! !
5a8b7ce35090 detct item for a specific fileName
ca
parents: 1431
diff changeset
   445
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   446
!HierarchicalFileList methodsFor:'update'!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   447
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   448
startIndicatorValidationFor:anItem
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   449
    "an item will be registered for an indication update"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   450
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   451
    |prio|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   452
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   453
    self criticalDo:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   454
        indicatorList size == 0 ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   455
            indicatorList := OrderedCollection new.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   456
        ] ifFalse:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   457
            indicatorList removeIdentical:anItem ifAbsent:nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   458
        ].
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   459
        anItem isDirectory ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   460
            indicatorList add:anItem.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   461
        ] ifFalse:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   462
            "/ files are added during drawing....
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   463
            indicatorList addFirst:anItem.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   464
        ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   465
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   466
        indicatorTask isNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   467
            prio := Processor activePriority.
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   468
            indicatorTask := 
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   469
                [ 
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   470
                    self updateIndicatorCycle. 
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   471
                ] newProcess.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   472
            indicatorTask priorityRange:(prio-1 to:prio).
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   473
            indicatorTask resume.
2259
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
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   477
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   478
stopIndicatorValidationFor:anItem
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   479
    "stop the indicator validation for an item"
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   480
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   481
    self criticalDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   482
        indicatorList notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   483
            indicatorList removeIdentical:anItem ifAbsent:nil.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   484
            anItem resetFetchIndicator.
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
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   489
updateIndicatorCycle
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   490
    "run fetching indicator (hasChildren info) task cycle.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   491
     This is done in the background to avoid long startup
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   492
     delays, in case the indicator information takes long to
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   493
     gather (i.e. when reading remote directories)"
2510
ba2eed40ba9f Stream streamErrorSignal -> StreamError
Stefan Vogel <sv@exept.de>
parents: 2493
diff changeset
   494
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   495
    |repeat task item|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   496
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   497
    repeat := true.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   498
    task   := indicatorTask.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   499
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   500
    [ 
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   501
        [ task notNil ] whileTrue:[
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   502
            self criticalDo:[
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   503
                (     dependents    size ~~ 0       "/ no dependencies (stop task)
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   504
                 and:[indicatorList size ~~ 0]      "/ nothing to do
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   505
                ) ifTrue:[
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   506
                    item := indicatorList removeFirst.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   507
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   508
                    (self includesIdentical:item) ifFalse:[
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   509
                        "/ item is no longer visible
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   510
                        item resetFetchIndicator.
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   511
                        item := nil
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   512
                    ]
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   513
                ] ifFalse:[
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   514
                    item := indicatorTask := task := nil
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   515
                ]
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   516
            ].
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   517
            item notNil ifTrue:[
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   518
                item fetchIndicator.
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   519
            ].
3178
b758d4b057f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3174
diff changeset
   520
            Processor yield.
2806
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   521
        ]
511fea6ed7ed comments
Claus Gittinger <cg@exept.de>
parents: 2766
diff changeset
   522
    ] ifCurtailed:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   523
        task notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   524
            "/ oops, process terminated
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   525
            self criticalDo:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   526
                "/ test whether a new task already started
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   527
                indicatorTask == task ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   528
                    indicatorTask := nil
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   529
                ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   530
            ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   531
        ]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   532
    ].
3178
b758d4b057f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3174
diff changeset
   533
b758d4b057f6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3174
diff changeset
   534
    "Modified: / 27-02-2007 / 11:49:07 / cg"
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   535
! !
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   536
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   537
!HierarchicalFileList::HierarchicalFileItem class methodsFor:'instance creation'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   538
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   539
fileName:aFileName
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   540
    ^ self forContentsItem:(DirectoryContents contentsItemForFileName:aFileName)
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   541
!
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   542
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   543
forContentsItem:aContentsItem
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   544
    |item cls|
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   545
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   546
    cls := HierarchicalFileList::File.
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   547
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   548
    aContentsItem notNil ifTrue:[
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   549
        aContentsItem isRemoteDirectory ifTrue:[
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   550
            cls := HierarchicalFileList::RemoteDirectory
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   551
        ] ifFalse:[
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   552
            aContentsItem isDirectory ifTrue:[
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   553
                cls := HierarchicalFileList::Directory
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   554
            ]
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   555
        ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   556
    ].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   557
    item := cls basicNew initialize.
2299
345995779410 completion fixes (canon)
Claus Gittinger <cg@exept.de>
parents: 2298
diff changeset
   558
    item contentsItem:aContentsItem.
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   559
    ^ item
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   560
!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   562
new
4735
783272ebf6e1 class: HierarchicalFileList
Claus Gittinger <cg@exept.de>
parents: 4696
diff changeset
   563
    "instnces should not be created with new"
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   564
    self error.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   567
!HierarchicalFileList::HierarchicalFileItem methodsFor:'accessing'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
baseName
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   570
    ^ contentsItem fileName baseName.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   571
!
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   572
4126
5123b5c8dffe Added #contentsItem
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4075
diff changeset
   573
contentsItem
5123b5c8dffe Added #contentsItem
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4075
diff changeset
   574
    ^contentsItem
5123b5c8dffe Added #contentsItem
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4075
diff changeset
   575
5123b5c8dffe Added #contentsItem
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4075
diff changeset
   576
    "Created: / 08-05-2012 / 15:11:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5123b5c8dffe Added #contentsItem
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4075
diff changeset
   577
!
5123b5c8dffe Added #contentsItem
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4075
diff changeset
   578
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   579
contentsItem:aContentsItem
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   580
    contentsItem := aContentsItem
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   581
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   582
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
fileName
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   584
    ^ contentsItem fileName
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   587
fileName:aFilename
3584
f9cdd1fa3b75 Change #halt: to #shouldImplement or #assert:
Stefan Vogel <sv@exept.de>
parents: 3563
diff changeset
   588
    self shouldImplement.
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   589
    contentsItem :=  DirectoryContents contentsItemForFileName:aFilename
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   590
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   591
"/    fileName = aFilename ifFalse:[
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   592
"/        fileName := aFilename.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   593
"/        self changed:#label
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   594
"/    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   597
fileSize
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   598
    |fileInfo|
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 := contentsItem info.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   601
    fileInfo isNil ifTrue:[^ nil].
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   602
    ^ fileInfo fileSize
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   603
!
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   604
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   605
group
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   606
    "returns the printable group"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   607
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   608
    |fileInfo gid group|
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   609
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   610
    fileInfo := contentsItem info.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   611
    fileInfo notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   612
        gid := fileInfo gid.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   613
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   614
        gid notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   615
            (LastGIDToGroupNameMapping notNil and:[gid == LastGIDToGroupNameMapping key]) ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   616
                ^ LastGIDToGroupNameMapping value
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   617
            ].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   618
            group := OperatingSystem getGroupNameFromID:gid.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   619
            LastGIDToGroupNameMapping := gid -> group.
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   620
            ^ group
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   621
        ]
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   622
    ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   623
    ^ '???'
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   624
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   625
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   626
icon
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   627
    "returns the icon"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   628
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   629
    icon isNil ifTrue:[
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   630
        self isRemoteDirectory ifTrue:[
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   631
            icon := MIMETypeIconLibrary iconForKeyMatching:#directoryNetwork
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   632
        ] ifFalse:[
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   633
            icon := MIMETypeIconLibrary iconForFile:(self fileName).
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   634
        ]
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
    ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   636
    ^ icon.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   637
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   638
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   639
label
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   640
    "returns the printable name, the baseName"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   641
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   642
    ^ contentsItem fileName baseName
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   645
modificationTime
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   646
    "returns the absolute time of modification"
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   647
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   648
    |fileInfo|
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   649
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   650
    fileInfo := contentsItem info.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   651
    fileInfo isNil ifTrue:[^ nil].
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   652
    ^ fileInfo modificationTime
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   653
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   654
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   655
owner
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   656
    "returns the printable owner"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   657
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   658
    |fileInfo uid owner|
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   659
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   660
    fileInfo := contentsItem info.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   661
    fileInfo notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   662
        uid := fileInfo uid.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   663
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   664
        uid notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   665
            (LastUIDToUserNameMapping notNil and:[uid == LastUIDToUserNameMapping key]) ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   666
                ^ LastUIDToUserNameMapping value
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   667
            ].
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   668
            owner := OperatingSystem getUserNameFromID:uid.
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   669
            LastUIDToUserNameMapping := uid -> owner.
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   670
            ^ owner
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   671
        ]
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   672
    ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   673
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   674
    ^ '???'
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   675
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   676
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
pathName
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   678
    "returns the pathName"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   679
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   680
    ^ contentsItem fileName pathName
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   681
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   682
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   683
permissions
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   684
    "returns the permissions as printable string"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   685
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   686
    |fileInfo mode perms|
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   687
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   688
    fileInfo := contentsItem info.
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   689
    fileInfo notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   690
        mode := fileInfo mode.
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   691
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   692
        mode notNil ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   693
            perms := String new:9 withAll:$-.
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   694
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   695
            1 to:9 by:3 do:[:i|
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   696
                (mode bitAt:i    ) == 1 ifTrue:[perms at:10 - i put:$x].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   697
                (mode bitAt:i + 1) == 1 ifTrue:[perms at:9  - i put:$w].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   698
                (mode bitAt:i + 2) == 1 ifTrue:[perms at:8  - i put:$r].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   699
            ].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   700
            ^ perms
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   701
        ]
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   702
    ].
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   703
    ^ '???'
2293
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   704
!
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   705
f535bb1fb8ce add sortBlock for HierarchicalFileList
penk
parents: 2290
diff changeset
   706
suffix
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   707
    "returns the suffix of the file"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   708
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   709
    (OperatingSystem isUNIXlike and:[(self baseName at:1) == $.]) ifTrue:[
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   710
        ^ ''
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   711
    ].
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   712
    ^ contentsItem fileName suffix
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   713
! !
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   714
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   715
!HierarchicalFileList::HierarchicalFileItem methodsFor:'change & update'!
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   716
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   717
changed:aParameter
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   718
    "the item changed; send a change notification"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   719
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   720
    aParameter == #icon ifTrue:[ icon := nil ].
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   721
    super changed:aParameter.
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   722
! !
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   723
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   724
!HierarchicalFileList::HierarchicalFileItem methodsFor:'fetching'!
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   725
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   726
fetchIndicator
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   727
!
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   728
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   729
resetFetchIndicator
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   730
! !
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   731
2294
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   732
!HierarchicalFileList::HierarchicalFileItem methodsFor:'instance creation'!
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   733
7f45237a518c recursive sort children
ca
parents: 2293
diff changeset
   734
fileName:aFilename fileInfo:aFileInfoOrNil
3584
f9cdd1fa3b75 Change #halt: to #shouldImplement or #assert:
Stefan Vogel <sv@exept.de>
parents: 3563
diff changeset
   735
    self shouldImplement.
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   736
"/    fileName := aFilename.
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
   737
"/    fileInfo := aFileInfoOrNil.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   739
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   740
!HierarchicalFileList::HierarchicalFileItem methodsFor:'invalidate'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   741
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   742
invalidate
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
    self invalidateRepairNow:false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   744
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   746
invalidateRepairNow
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   747
    self invalidateRepairNow:true
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   748
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   749
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   750
invalidateRepairNow:doRepair
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   751
    "invalidate the contents; dependent on the boolean
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   752
     do repair immediately
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   753
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   754
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   755
1866
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   756
!
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   757
2993c95f7f69 recompute list if matchBlock changed
ca
parents: 1780
diff changeset
   758
matchBlockChanged
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   759
    "called if the matchBlock changed"
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   760
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   761
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   762
!HierarchicalFileList::HierarchicalFileItem methodsFor:'printing'!
2127
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   763
2479
82e797682bf9 state stuff
Claus Gittinger <cg@exept.de>
parents: 2475
diff changeset
   764
printOn:aStream
82e797682bf9 state stuff
Claus Gittinger <cg@exept.de>
parents: 2475
diff changeset
   765
    super printOn:aStream.
82e797682bf9 state stuff
Claus Gittinger <cg@exept.de>
parents: 2475
diff changeset
   766
    ' for: ' printOn:aStream.
82e797682bf9 state stuff
Claus Gittinger <cg@exept.de>
parents: 2475
diff changeset
   767
    self fileName printOn:aStream
2127
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   768
! !
effea319e46b add printString method to see file for Item
penk
parents: 2104
diff changeset
   769
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   770
!HierarchicalFileList::HierarchicalFileItem methodsFor:'protocol'!
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   771
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   772
displayIcon:anIcon atX:x y:y on:aGC
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   773
    "called to draw the icon - if the item is inaccessible
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   774
     a red cross is drawn over thge item"
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   775
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   776
    |x0 y0 y1 w|
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   777
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   778
    anIcon displayOn:aGC x:x y:y.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   779
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   780
    self isInAccessible ifTrue:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   781
        aGC paint:(Color red).
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   782
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   783
        y0 := y + 1.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   784
        y1 := y + anIcon height - 2.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   785
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   786
        x0 := x - 1.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   787
        w  := anIcon width.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   788
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   789
        2 timesRepeat:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   790
            aGC displayLineFromX:x0 y:y0 toX:(x0 + w) y:y1.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   791
            aGC displayLineFromX:x0 y:y1 toX:(x0 + w) y:y0.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   792
            x0 := x0 + 1.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   793
        ].
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   794
    ].
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   795
!
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   796
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   797
flushChildren
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   798
    "flush the children (because node is not visible)
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   799
     Can be redefined by subclass"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   800
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   801
    children := nil.
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
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   804
!HierarchicalFileList::HierarchicalFileItem methodsFor:'queries'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   805
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   806
isDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   807
    ^ false
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   808
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   809
3174
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   810
isDirectoryItem
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   811
    ^ self isDirectory
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   812
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   813
    "Created: / 23-02-2007 / 12:04:37 / User"
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   814
!
d79b5f6416b4 *** empty log message ***
fm
parents: 3170
diff changeset
   815
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   816
isInAccessible
4696
66a70b8e9514 class: HierarchicalFileList
Stefan Vogel <sv@exept.de>
parents: 4562
diff changeset
   817
    "answer true if the underlaying file is not accessible - for example a directory
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   818
     than we will draw a red cross through the item..."
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   819
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   820
    ^ false
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   821
!
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   822
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   823
isRemoteDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   824
    ^ false
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   825
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   826
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   827
isWritable
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   828
    ^ self fileName isWritable
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   829
!
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   830
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   831
time
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   832
    ^ self valueAt:#modified
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   833
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   834
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   835
!HierarchicalFileList::File methodsFor:'accessing'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   836
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   837
children
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   838
    "always returns an empty list
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   839
    "
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   840
    ^ #()
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   841
!
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   842
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   843
defaultIcon
4029
e8233898cfaf set icon resource
Stefan Vogel <sv@exept.de>
parents: 3917
diff changeset
   844
     <resource: #programImage>
e8233898cfaf set icon resource
Stefan Vogel <sv@exept.de>
parents: 3917
diff changeset
   845
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   846
   ^ MIMETypeIconLibrary iconForKeyMatching:#file
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   847
!
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   848
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   849
icon
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   850
    icon isNil ifTrue:[ ^ self defaultIcon ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   851
    ^ icon
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   852
! !
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   853
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   854
!HierarchicalFileList::File methodsFor:'fetching'!
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   855
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   856
fetchIndicator
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   857
    |newIcon|
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   858
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   859
    icon notNil ifTrue:[^ self ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   860
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   861
    "/ no longer fetching icon
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   862
    icon    := self defaultIcon.    
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   863
    newIcon := MIMETypeIconLibrary iconForFile:(self fileName).
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   864
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   865
    icon ~~ newIcon ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   866
        icon := newIcon.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   867
        self iconChanged.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   868
    ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   869
! !
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   870
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   871
!HierarchicalFileList::File methodsFor:'protocol'!
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   872
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   873
displayIcon:anIcon atX:x y:y on:aGC
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   874
    icon isNil ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   875
        self model startIndicatorValidationFor:self.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   876
    ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
   877
    super displayIcon:anIcon atX:x y:y on:aGC
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   878
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   879
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   880
!HierarchicalFileList::File methodsFor:'queries'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   881
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   882
hasChildren
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   883
    "always returns false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   884
    "
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   885
    ^ false
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   886
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   887
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   888
!HierarchicalFileList::Directory class methodsFor:'documentation'!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   889
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   890
documentation
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   891
"
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   892
    [Instance variables:]
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   893
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   894
        fetchOperation  <Symbol/Boolean>    nil             if children is nil, no information about has children
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   895
                                            #fetching       registered in list to be updated for indication
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   896
                                            #hasChildren    registered in list to be updated for indication
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
   897
                                            #hasNoChildren  has children but children list might be nil (remote)
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   898
"
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   899
! !
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   900
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   901
!HierarchicalFileList::Directory class methodsFor:'initialization'!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   902
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   903
initialize
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   904
    StateUnknown := nil.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   905
    StateHasChildren := #hasChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   906
    StateHasNoChildren := #hasNoChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   907
    StateFetching := #fetching
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   908
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   909
    "
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   910
     self initialize
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   911
    "
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   912
! !
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   913
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   914
!HierarchicalFileList::Directory methodsFor:'accessing'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   915
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   916
children
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   917
    "returns the collection of children or nil"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
   918
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   919
    |model|
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   920
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   921
    children notNil ifTrue:[ ^ children ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   922
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   923
    model := self model.
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   924
    model isNil ifTrue:[ ^ nil ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   925
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   926
    model criticalDo:[
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   927
        children isNil ifTrue:[ self readChildren ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   928
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   929
    ^ children
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   930
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   931
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   932
icon
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
   933
    "returns the icon"
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   934
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   935
    |nameKey filename|
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
   936
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   937
    isExpanded ifTrue:[
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   938
        makeIconGray == true ifTrue:[ nameKey := #directoryOpenGray ]
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   939
                            ifFalse:[ nameKey := #directoryOpen ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   940
    ] ifFalse:[
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   941
        makeIconGray == true ifTrue:[ nameKey := #directoryGray ]
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   942
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   943
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   944
    nameKey notNil ifTrue:[
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   945
        ^ MIMETypeIconLibrary iconForKeyMatching:nameKey
2428
6911eddb2c1d make icon for drop on directories in tree view gray
penk
parents: 2425
diff changeset
   946
    ].
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   947
    icon notNil ifTrue:[^ icon ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   948
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   949
    filename := contentsItem fileName.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   950
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   951
    self isRemoteDirectory ifTrue:[
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   952
        nameKey := MIMETypeIconLibrary iconKeyForRemoteDirectory:filename.
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   953
    ] ifFalse:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   954
        contentsItem isSymbolicLink ifTrue:[
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   955
            icon := MIMETypeIconLibrary iconForLinkedDirectory.
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   956
        ] ifFalse:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   957
            nameKey := filename mimeTypeFromName.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   958
            nameKey isNil ifTrue:[ nameKey := #directory ].
4562
93fd567fc8e7 Do not refer to FileBrowser methods
Stefan Vogel <sv@exept.de>
parents: 4252
diff changeset
   959
            icon := MIMETypeIconLibrary iconForKeyMatching:nameKey.
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
   960
        ].
2387
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   961
    ].
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   962
    ^ icon
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   963
!
206662f654e4 show open icon if expanded again
penk
parents: 2380
diff changeset
   964
2457
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   965
label
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   966
    "returns the printable name, the baseName
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   967
    "
2654
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   968
    parent isHierarchicalItem ifFalse:[
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   969
        "no parent exists, thus we have to test for rootDirectory
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   970
        "
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   971
        OperatingSystem isMSWINDOWSlike ifTrue:[
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   972
            contentsItem fileName isRootDirectory ifTrue:[
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   973
                ^ contentsItem fileName pathName
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   974
            ]
d6925414a41d optimize for windows
ca
parents: 2583
diff changeset
   975
        ].
2457
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   976
    ].
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   977
    ^ contentsItem fileName baseName
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   978
!
d1505cba8e39 changes for windows fileBrowser
penk
parents: 2429
diff changeset
   979
2428
6911eddb2c1d make icon for drop on directories in tree view gray
penk
parents: 2425
diff changeset
   980
makeIconGray:something
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   981
    "set/clear the flag which enforces the icon to be shown in grey"
2428
6911eddb2c1d make icon for drop on directories in tree view gray
penk
parents: 2425
diff changeset
   982
6911eddb2c1d make icon for drop on directories in tree view gray
penk
parents: 2425
diff changeset
   983
    makeIconGray := something.
6911eddb2c1d make icon for drop on directories in tree view gray
penk
parents: 2425
diff changeset
   984
!
6911eddb2c1d make icon for drop on directories in tree view gray
penk
parents: 2425
diff changeset
   985
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   986
modificationTime:something
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   987
    modificationTime := something.
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   988
!
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
   989
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   990
readChildren
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   991
    "reads the list of children
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   992
    "
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   993
    |model list hadChildren hasChildren|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   994
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   995
    self forgetAboutChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
   996
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
   997
    model := self model.
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
   998
    model isNil ifTrue:[
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
   999
        "/ must reread later
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1000
        modificationTime := children := nil.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1001
        ^ nil
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1002
    ].
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1003
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1004
    hadChildren := children size ~~ 0.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1005
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1006
    "/ set to suppress reading of children
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
  1007
    children := #().
2297
4440935a1fa2 only keep item
Claus Gittinger <cg@exept.de>
parents: 2296
diff changeset
  1008
    modificationTime := self fileName modificationTime.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1009
    model stopIndicatorValidationFor:self.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1010
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1011
    "/ set to false - will be set by my model during reading the contents
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1012
    isInAccessible := false.
1867
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
  1013
    list := model childrenFor:self.
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
  1014
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
  1015
    list size ~~ 0 ifTrue:[
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
  1016
        list do:[:aChild| aChild parent:self].
a50479cd3653 recompute list if matchBlock changed
ca
parents: 1866
diff changeset
  1017
        children := list.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1018
    ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1019
    hasChildren := children size ~~ 0.
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1020
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1021
    hasChildren ~~ hadChildren ifTrue:[
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1022
        self changed:#redraw
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1023
    ].
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1024
    ^ children
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1025
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1026
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1027
!HierarchicalFileList::Directory methodsFor:'accessing-hierarchy'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1028
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1029
collapse
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1030
    super collapse.
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
  1031
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
  1032
    children notNil ifTrue:[
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
  1033
        children do:[:el| el flushChildren ]
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
  1034
    ].
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1035
!
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
  1036
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
  1037
expand
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
  1038
    "expand children; must redefine to raise a notification
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1039
     if children are not yet initialized and after initialization empty."
2270
59eb4948cdec icon not set to nil anymore
penk
parents: 2267
diff changeset
  1040
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
  1041
    super expand.
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1042
!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1043
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1044
recursiveExpand
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1045
    "redefined to expand
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1046
    "
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1047
    self expand
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1048
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1049
2104
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
  1050
! !
327f2f77ec12 support remote file-systems (not reading contents of directory if not yet initialized)
ca
parents: 2095
diff changeset
  1051
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1052
!HierarchicalFileList::Directory methodsFor:'fetching'!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1053
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1054
basicFetchIndicator
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1055
    |linkName fileName hasChildren info fileItem model|
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1056
2583
02797ea5589d care for symbolic links
Claus Gittinger <cg@exept.de>
parents: 2536
diff changeset
  1057
    fileName := self fileName.
3611
fd548fa851ac *** empty log message ***
ca
parents: 3584
diff changeset
  1058
    fileItem := DirectoryContents contentsItemForFileName:fileName.
fd548fa851ac *** empty log message ***
ca
parents: 3584
diff changeset
  1059
fd548fa851ac *** empty log message ***
ca
parents: 3584
diff changeset
  1060
    fileItem notNil ifTrue:[
fd548fa851ac *** empty log message ***
ca
parents: 3584
diff changeset
  1061
        info  := fileItem info.
fd548fa851ac *** empty log message ***
ca
parents: 3584
diff changeset
  1062
    ].
fd548fa851ac *** empty log message ***
ca
parents: 3584
diff changeset
  1063
2734
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1064
    (info notNil and:[info isSymbolicLink]) ifTrue:[
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1065
        linkName := info path.
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1066
    ] ifFalse:[
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1067
        linkName := fileName name.
2583
02797ea5589d care for symbolic links
Claus Gittinger <cg@exept.de>
parents: 2536
diff changeset
  1068
    ].
2734
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1069
        
2766
04990ee7e604 dont automaticly fetch indicator for nfs mounted filesystems only
Michael Beyl <mb@exept.de>
parents: 2734
diff changeset
  1070
    (OperatingSystem mountPoints contains:[:mp | mp mountPointPath = linkName and:[mp isRemote]]) ifTrue:[
2583
02797ea5589d care for symbolic links
Claus Gittinger <cg@exept.de>
parents: 2536
diff changeset
  1071
        "do not follow mounted directories automatically (could be an NFS hardlink)"
02797ea5589d care for symbolic links
Claus Gittinger <cg@exept.de>
parents: 2536
diff changeset
  1072
        ^ self.
02797ea5589d care for symbolic links
Claus Gittinger <cg@exept.de>
parents: 2536
diff changeset
  1073
    ].
02797ea5589d care for symbolic links
Claus Gittinger <cg@exept.de>
parents: 2536
diff changeset
  1074
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1075
    (model := self model) notNil ifTrue:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1076
        isInAccessible := false.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1077
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1078
        hasChildren := DirectoryContents
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1079
                            directoryNamed:fileName
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1080
                            detect:(model matchBlock)
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1081
                            onOpenErrorDo:[:fn| isInAccessible := true ].
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1082
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1083
    ] ifFalse:[
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1084
        hasChildren := false.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1085
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1086
    self knownToHaveChildren:hasChildren.
2809
9cbf7668546a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2808
diff changeset
  1087
    "/ self assert:children isNil.
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1088
2734
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1089
    (children isNil and:[info notNil]) ifTrue:[
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1090
        "setup modification time to suppress monitorCycle"
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1091
        modificationTime := info modificationTime.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1092
    ].
3145
cc5bd0e8013d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2952
diff changeset
  1093
cc5bd0e8013d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2952
diff changeset
  1094
    "Modified: / 08-11-2006 / 17:31:16 / cg"
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1095
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1096
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1097
fetchIndicator
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1098
    "fetch the indicator value which indicates whether children exist or not.
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1099
     Called by the indocator update process."
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1100
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1101
    |stateBefore stateNow|
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1102
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
  1103
    children notNil ifTrue:[
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1104
        "/ children already read
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1105
        self knownToHaveChildren:(children size > 0).
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1106
        ^ self
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1107
    ].
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1108
    quickChildrenInfo == StateFetching ifFalse:[
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1109
        "/ children will be updated in a second....
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1110
        ^ self
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1111
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1112
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1113
    stateBefore := quickChildrenInfo.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1114
    self basicFetchIndicator.
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1115
    stateNow := quickChildrenInfo.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1116
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1117
    stateBefore ~~ stateNow ifTrue:[
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1118
        self changed:#redraw
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1119
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1120
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1121
"/    children notNil ifTrue:[
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1122
"/        self forgetAboutChildren.
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1123
"/        children notEmpty ifTrue:[ self changed:#redraw ].
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1124
"/    ] ifFalse:[
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1125
"/        "/ is a remote or very slow file system
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1126
"/        self isKnownToHaveChildren ifTrue:[
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1127
"/            self changed:#redraw
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1128
"/        ].
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1129
"/    ].
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1130
!
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1131
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1132
resetFetchIndicator
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1133
    "update indication cycle has deregistered the item
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1134
    "
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1135
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1136
    self forgetAboutChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1137
! !
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1138
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1139
!HierarchicalFileList::Directory methodsFor:'private'!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1140
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1141
flushChildren
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1142
    "flush the children because the node is going to be invisible."
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1143
2859
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1144
    children notNil ifTrue:[
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1145
        self knownToHaveChildren:(children size ~~ 0).
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1146
        children := nil.
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1147
    ] ifFalse:[
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1148
        "/ state is unknown
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1149
        self forgetAboutChildren.
f85df09584d5 A2606: DirTree im Filebrowser
ca
parents: 2832
diff changeset
  1150
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1151
! !
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1152
2493
8b70a26f1694 method category rename
Claus Gittinger <cg@exept.de>
parents: 2479
diff changeset
  1153
!HierarchicalFileList::Directory methodsFor:'private-quick children info'!
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1154
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1155
forgetAboutChildren
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1156
    quickChildrenInfo := StateUnknown
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1157
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1158
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1159
isChildrenInfoValid
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1160
    ^ quickChildrenInfo ~~ StateUnknown and:[quickChildrenInfo ~~ StateFetching]
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1161
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1162
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1163
isFetchingChildrenInfo
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1164
    ^ quickChildrenInfo == StateFetching
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1165
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1166
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1167
isKnownToHaveChildren
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1168
    ^ quickChildrenInfo == StateHasChildren
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1169
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1170
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1171
isKnownToHaveNoChildren
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1172
    ^ quickChildrenInfo == StateHasNoChildren
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1173
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1174
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1175
knownToHaveChildren:aBoolean
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1176
    aBoolean ifTrue:[
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1177
        quickChildrenInfo := StateHasChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1178
    ] ifFalse:[
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1179
        quickChildrenInfo := StateHasNoChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1180
    ].
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1181
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1182
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1183
setFetchingChildrenInfo
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1184
    quickChildrenInfo := StateFetching
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1185
! !
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1186
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1187
!HierarchicalFileList::Directory methodsFor:'queries'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1188
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1189
beInAccessible
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1190
    isInAccessible := true.
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1191
!
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1192
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1193
canExpand
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1194
    super canExpand ifTrue:[^ true].
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1195
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1196
    "/ in case we are currently fetching the subdirectory
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1197
"/    self isFetchingChildrenInfo ifTrue:[
2525
665656ed718a comment a halt in canExpand
penk
parents: 2510
diff changeset
  1198
"/self halt.  
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1199
"/    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1200
    
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1201
    ^ false
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1202
!
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1203
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1204
hasChildren
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1205
    "returns true if children exist"
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1206
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1207
    |model|
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1208
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1209
    children notNil ifTrue:[
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1210
        self forgetAboutChildren.
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1211
        children size ~~ 0 ifTrue:[
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1212
            ^ true
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1213
        ].
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1214
        isExpanded := false.
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1215
        children := #().
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1216
        ^ false
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1217
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1218
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1219
    self isFetchingChildrenInfo ifTrue:[
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1220
        ^ true.
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1221
        "/ ^ false.
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1222
    ].
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1223
    self isChildrenInfoValid ifTrue:[
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1224
        ^ self isKnownToHaveChildren
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1225
    ].
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1226
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1227
    model := self model.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1228
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1229
    model notNil ifTrue:[
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1230
        self setFetchingChildrenInfo.
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1231
        model startIndicatorValidationFor:self.
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1232
    ] ifFalse:[
4771
d1ef5de920b9 class: HierarchicalFileList
ca
parents: 4735
diff changeset
  1233
        "/ model canbe nil if an expose event is proccessed after my underlaying model is gone
d1ef5de920b9 class: HierarchicalFileList
ca
parents: 4735
diff changeset
  1234
        "/ self error:'should not happen' mayProceed:true.
d1ef5de920b9 class: HierarchicalFileList
ca
parents: 4735
diff changeset
  1235
        'HierarchicalFileList::Directory -> hasChildren : model is unspecified' printCR.
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1236
        self forgetAboutChildren
2259
0477cb4012dc *** empty log message ***
ca
parents: 2256
diff changeset
  1237
    ].
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1238
    children size ~~ 0 ifTrue:[ ^ true].
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1239
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1240
    self isFetchingChildrenInfo ifTrue:[
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1241
        ^ true.
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1242
        "/ ^ false.
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1243
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1244
    ^ false
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1245
!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1246
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1247
isDirectory
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1248
    "always true here"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1249
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1250
    ^ true
3616
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1251
!
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1252
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1253
isInAccessible
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1254
    "answer true if the directory is not accessible"
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1255
24e9cca2b5f6 optimized directories
ca
parents: 3611
diff changeset
  1256
    ^ isInAccessible ? false
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1257
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1258
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1259
!HierarchicalFileList::Directory methodsFor:'validation'!
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1260
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1261
invalidateRepairNow:doRepair
2832
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1262
    "invalidate contents"
e1f6a7c48552 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2809
diff changeset
  1263
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1264
    modificationTime := nil.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1265
    self forgetAboutChildren
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1266
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1267
    isExpanded ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1268
        children := nil
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1269
    ] ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1270
        doRepair ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1271
            self monitoringCycle
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1272
        ] ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1273
            children size == 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1274
                "/ expanded but no children added, thus can reset the children
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1275
                children := nil
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1276
            ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1277
        ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1278
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1279
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1280
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1281
matchBlockChanged
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1282
    "called if the matchBlock changed
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1283
    "
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1284
    modificationTime := nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1285
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1286
    isExpanded ifFalse:[
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1287
        children := nil.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1288
        self forgetAboutChildren
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1289
    ] ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1290
        self monitoringCycle.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1291
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1292
        children size ~~ 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1293
            children do:[:aChild| aChild matchBlockChanged ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1294
        ]
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1295
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1296
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1297
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1298
monitoringCycle
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1299
    "run monitoring cycle
2734
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1300
        !!!!!!!! called by the HierarchicalList only !!!!!!!!"
4934113dc4c0 #linkInfo now returns the info also for files that are not a symlink
Stefan Vogel <sv@exept.de>
parents: 2654
diff changeset
  1301
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1302
    |fileName directory fileInfo unusedDict addedItems mergedList size savedModifyTime
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1303
     model timeChanged|
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1304
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1305
    contentsItem resetInfo.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1306
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1307
    fileName  := contentsItem fileName.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1308
    fileInfo  := contentsItem info.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1309
    directory := fileName directory.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1310
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1311
    fileInfo isNil ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1312
        fileName exists ifFalse:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1313
            DirectoryContents flushCachedDirectoryFor:directory.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1314
            self collapse.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1315
            children := nil.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1316
            self forgetAboutChildren.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1317
            self changed:#hierarchy.            
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1318
        ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1319
        ^ self.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1320
    ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1321
    savedModifyTime  := modificationTime.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1322
    modificationTime := fileInfo modificationTime.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1323
    timeChanged      := (savedModifyTime ~= modificationTime).
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1324
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1325
    timeChanged ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1326
        |contents|
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1327
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1328
        "/ test whether the directory realy changed (rootDirectories...)
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1329
        "/ this also will flush obsolete directories....
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1330
        contents := DirectoryContents cachedDirectoryNamed:directory.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1331
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1332
        contents notNil ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1333
            savedModifyTime notNil ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1334
                timeChanged := (contents includesIdentical:contentsItem) not.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1335
            ].
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1336
        ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1337
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1338
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1339
    (children notNil and:[timeChanged not]) ifTrue:[
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1340
        ^ self.
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1341
    ].
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1342
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1343
    isExpanded ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1344
        timeChanged ifTrue:[
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1345
            children := nil.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1346
            self forgetAboutChildren.
3617
86ab45e1e77f optimized
ca
parents: 3616
diff changeset
  1347
            self changed:#hierarchy.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1348
        ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1349
        ^ self
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1350
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1351
2306
d25ae934c8d8 exchange #ifNotNil and #ifNil
ca
parents: 2299
diff changeset
  1352
    children isNil ifTrue:[ children := #() ].         "/ disable update during merge
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1353
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1354
    self forgetAboutChildren.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1355
    model := self model.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1356
    mergedList := model childrenFor:self.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1357
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1358
    mergedList size == 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1359
        self removeAll.
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1360
        ^ self
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1361
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1362
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1363
    size := children size.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1364
    size == 0 ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1365
        self addAll:mergedList.
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1366
        ^ self
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1367
    ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1368
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1369
    model criticalDo:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1370
        addedItems := OrderedCollection new:128.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1371
        unusedDict := Dictionary new:size.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1372
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1373
        children do:[:el| unusedDict at:(el fileName) put:el ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1374
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1375
        mergedList keysAndValuesDo:[:anIndex :anItem| |item|
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1376
            item := unusedDict removeKey:(anItem fileName) ifAbsent:nil.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1377
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1378
            item notNil ifTrue:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1379
                mergedList at:anIndex put:item
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1380
            ] ifFalse:[
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1381
                addedItems add:anItem.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1382
                anItem parent:self.
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1383
            ].
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1384
        ].
2952
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1385
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1386
        unusedDict do:[:el| self remove:el ].
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1387
2952
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1388
        addedItems notEmpty ifTrue:[
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1389
            self addAll:addedItems
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1390
        ].
2952
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1391
        "/ children order changed test
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1392
        children := mergedList.
10e34346944b avoid the \"return to original directory when filter changes\"
Claus Gittinger <cg@exept.de>
parents: 2937
diff changeset
  1393
        self childrenOrderChanged.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1394
    ].
2425
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1395
!
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1396
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1397
updateList
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1398
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1399
    modificationTime := nil.
7421b8bb7d31 reset modificationtime for updates to get the new files on remote systems where times are different
penk
parents: 2388
diff changeset
  1400
    self monitoringCycle.
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1401
! !
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1402
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1403
!HierarchicalFileList::RemoteDirectory methodsFor:'queries'!
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1404
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1405
hasChildren
2808
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1406
    "returns true if children exist"
2ee9a7008a6d update - StateUnknown is treated like \"hasChildren\".
Claus Gittinger <cg@exept.de>
parents: 2806
diff changeset
  1407
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1408
    children notNil ifTrue:[
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1409
        self forgetAboutChildren.
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1410
        ^ children size ~~ 0
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1411
    ].
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1412
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1413
    "/ assume that there are children;
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1414
    "/ this might be wrong and clicking on the expand-icon
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1415
    "/ will then not perform an expand, but remove the can-expand indicator.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1416
    self knownToHaveChildren:true.
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1417
    ^ true
2267
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1418
!
dad00a31733e checkin from browser
penk
parents: 2259
diff changeset
  1419
2223
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1420
isRemoteDirectory
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1421
    ^ true
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1422
! !
c34e7fd25e53 monitoring; delayed for directories; never for remoteDirectories
penk
parents: 2180
diff changeset
  1423
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1424
!HierarchicalFileList class methodsFor:'documentation'!
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1425
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1426
version
5161
a0cf6ae46500 #OTHER by mawalch
mawalch
parents: 4771
diff changeset
  1427
    ^ '$Header$'
3831
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
  1428
!
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
  1429
05c49d4b6f3b code cleanup
Claus Gittinger <cg@exept.de>
parents: 3617
diff changeset
  1430
version_CVS
5161
a0cf6ae46500 #OTHER by mawalch
mawalch
parents: 4771
diff changeset
  1431
    ^ '$Header$'
1390
62dc950b9140 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1432
! !
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1433
4252
91fb5a2b05b2 class: HierarchicalFileList
Claus Gittinger <cg@exept.de>
parents: 4126
diff changeset
  1434
2475
1f90c55c4f78 added enforcedExpand;
Claus Gittinger <cg@exept.de>
parents: 2457
diff changeset
  1435
HierarchicalFileList::Directory initialize!