FileSelectionList.st
author claus
Sun, 07 Aug 1994 15:23:42 +0200
changeset 38 4b9b70b2cc87
parent 24 966098a893f8
child 45 e900c30938c8
permissions -rw-r--r--
2.10.3 pre-final version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     1
"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     4
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c47dbae39a71 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    11
"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    12
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    13
SelectionInListView subclass:#FileSelectionList
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'pattern directory timeStamp directoryId
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    15
                              directoryContents directoryFileTypes
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    16
                              fileTypes realAction matchBlock'
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    17
       classVariableNames:''
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    18
       poolDictionaries:''
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    19
       category:'Views-Text'
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    20
!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    21
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    22
FileSelectionList comment:'
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    23
COPYRIGHT (c) 1993 by Claus Gittinger
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    24
              All Rights Reserved
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    25
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    26
$Header: /cvs/stx/stx/libwidg/FileSelectionList.st,v 1.4 1994-08-07 13:21:47 claus Exp $
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    27
'!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    28
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    29
!FileSelectionList class methodsFor:'documentation'!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    30
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    31
copyright
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    32
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    33
 COPYRIGHT (c) 1993 by Claus Gittinger
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    34
              All Rights Reserved
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    35
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    36
 This software is furnished under a license and may be used
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    37
 only in accordance with the terms of that license and with the
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    38
 inclusion of the above copyright notice.   This software may not
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    39
 be provided or otherwise made available to, or used by, any
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    40
 other person.  No title to or ownership of the software is
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    41
 hereby transferred.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    42
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    43
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    44
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    45
version
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    46
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    47
$Header: /cvs/stx/stx/libwidg/FileSelectionList.st,v 1.4 1994-08-07 13:21:47 claus Exp $
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    48
"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    49
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    50
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    51
documentation
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    52
"
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    53
    this class implements file selection lists - its basically a
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    54
    selection in list, but adds some right-arrows to directories.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    55
    (and will soon remember the previous position when changing directories).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    56
    Only files matching a pattern (plus directories) are shown.
21
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
    57
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    58
    Instance variables:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    59
            pattern                 the matchpattern
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    60
            directory               the current directory
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    61
            timeStamp               the time, when directoryContents was last taken
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    62
            directoryId             the directories id (inode-nr) when it was taken
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    63
            directoryContents       contents of current directory
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    64
            directoryFileTypes      file types (symbols) of current directory
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    65
            fileTypes               file types as shown in list 
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    66
                                    (i.e only matching ones)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    67
            realAction              the action to perform when a file is selected
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    68
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    69
    Example use:
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    70
        FileSelectionLists are typically used in FileSelectionBoxes,
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    71
        or file-browser-like applications.
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    72
"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    73
! !
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    74
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    75
!FileSelectionList methodsFor:'initialization'!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    76
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    77
initialize
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    78
    directory := FileDirectory currentDirectory.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    79
    super initialize.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    80
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    81
    pattern := '*'.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    82
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    83
    "selections in list get forwarded to enterfield if not a directory;
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    84
     otherwise directory is changed"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    85
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    86
    actionBlock := [:lineNr |
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    87
        |entry ok|
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    88
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    89
        (self selection isKindOf:Collection) ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    90
            entry := self selectionValue.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    91
            (entry endsWith:' ...') ifTrue:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    92
                entry := entry copyTo:(entry size - 4).
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    93
            ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    94
            ((directory typeOf:entry) == #directory) ifTrue:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
    95
                ok := false.
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    96
                (directory isReadable:entry) ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    97
                    self warn:(resources string:'not allowed to read directory %1' with:entry)
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    98
                ] ifTrue:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
    99
                    (directory isExecutable:entry) ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   100
                        self warn:(resources string:'not allowed to change to directory %1' with:entry)
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   101
                    ] ifTrue:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   102
                        self directory:(directory pathName , Filename separator asString , entry).
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   103
                        ok := true.
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   104
                    ]
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   105
                ].
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   106
                ok ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   107
                    self deselect
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   108
                ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   109
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   110
            ] ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   111
                realAction notNil ifTrue:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   112
                    realAction value:lineNr
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   113
                ]
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   114
            ]
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   115
        ]
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   116
    ]
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   117
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   118
    "nontypical use ..."
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   119
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   120
     FileSelectionList new open
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   121
     (FileSelectionList new directory:'/etc') open
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   122
     (ScrollableView for:FileSelectionList) open
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   123
     (HVScrollableView for:FileSelectionList) open
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   124
    "
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   125
!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   126
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   127
reinitialize
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   128
    directory := FileDirectory currentDirectory.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   129
    super reinitialize
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   130
! !
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   131
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   132
!FileSelectionList methodsFor:'accessing'!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   133
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   134
action:aBlock
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   135
    "set the action to be performed on a selection"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   136
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   137
    realAction := aBlock
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   138
!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   139
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   140
directory
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   141
    "return the shown directory"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   142
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   143
    ^ directory
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   144
!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   145
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   146
directory:nameOrDirectory
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   147
    "set the lists contents to the filenames in the directory"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   148
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   149
    |oldPath name|
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   150
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   151
    nameOrDirectory isString ifTrue:[
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   152
        name := nameOrDirectory
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   153
    ] ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   154
        name := nameOrDirectory pathName
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   155
    ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   156
    oldPath := directory pathName.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   157
    directory pathName:name.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   158
    (directory pathName = oldPath) ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   159
        self updateList
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   160
    ]
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   161
!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   162
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   163
pattern:aPattern
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   164
    "set the pattern - if it changes, update the list."
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   165
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   166
    pattern ~= aPattern ifTrue:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   167
        pattern := aPattern.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   168
        realized ifTrue:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   169
            self updateList
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   170
        ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   171
    ].
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   172
!
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   173
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   174
matchBlock:aBlock
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   175
    "set the matchBlock - if non-nil, it controls which
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   176
     names are shown in the list."
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   177
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   178
    matchBlock := aBlock
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   179
! !
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   180
21
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   181
!FileSelectionList methodsFor:'drawing'!
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   182
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   183
redrawFromVisibleLine:startVisLineNr to:endVisLineNr
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   184
    "redefined to look for directory in every line"
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   185
24
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   186
    |l|
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   187
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   188
    "first, draw chunk of lines"
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   189
    super redrawFromVisibleLine:startVisLineNr to:endVisLineNr.
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   190
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   191
    "then draw marks"
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   192
    startVisLineNr to:endVisLineNr do:[:visLineNr |
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   193
        l := self visibleLineToListLine:visLineNr.
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   194
        l notNil ifTrue:[
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   195
            (fileTypes at:l) == #directory ifTrue:[
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   196
                self drawRightArrowInVisibleLine:visLineNr
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   197
            ]
966098a893f8 *** empty log message ***
claus
parents: 21
diff changeset
   198
        ]
21
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   199
    ]
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   200
!
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   201
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   202
redrawVisibleLine:visLineNr
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   203
    "if the line is one for a directory, draw a right arrow"
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   204
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   205
    |l|
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   206
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   207
    super redrawVisibleLine:visLineNr.
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   208
    l := self visibleLineToListLine:visLineNr.
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   209
    l notNil ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   210
        (fileTypes at:l) == #directory ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   211
            self drawRightArrowInVisibleLine:visLineNr
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   212
        ]
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   213
    ]
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   214
! !
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   215
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   216
!FileSelectionList methodsFor:'private'!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   217
21
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   218
visibleLineNeedsSpecialCare:visLineNr
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   219
    |l|
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   220
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   221
    l := self visibleLineToListLine:visLineNr.
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   222
    l notNil ifTrue:[
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   223
        (fileTypes at:l) == #directory ifTrue:[^ true].
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   224
        ^ super visibleLineNeedsSpecialCare:visLineNr
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   225
    ].
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   226
    ^ false
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   227
!
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   228
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   229
widthForScrollBetween:firstLine and:lastLine
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   230
    "return the width in pixels for a scroll between firstLine and lastLine
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   231
     - return full width here since there might be directory marks"
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   232
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   233
    ^ (width - margin - margin)
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   234
!
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   235
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   236
updateList
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   237
    "set the lists contents to the filenames in the directory"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   238
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   239
    |oldCursor files newList index|
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   240
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   241
    oldCursor := cursor.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   242
    self cursor:(Cursor read).
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   243
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   244
    "
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   245
     if the directory-id changed, MUST update.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   246
     (can happen after a restart, when a file is no longer
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   247
      there, has moved or is NFS-mounted differently)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   248
    "
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   249
    directoryId == directory id ifFalse:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   250
        timeStamp := directory timeOfLastChange.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   251
        directoryId := directory id.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   252
        directoryContents := directory asText sort.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   253
        directoryFileTypes := OrderedCollection new.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   254
        directoryContents do:[:name | directoryFileTypes add:(directory typeOf:name)].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   255
    ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   256
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   257
    files := directoryContents.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   258
    newList := OrderedCollection new.
21
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   259
    fileTypes := OrderedCollection new.
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   260
    index := 1.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   261
    files do:[:name |
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   262
        (matchBlock isNil or:[matchBlock value:name]) ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   263
            (directoryFileTypes at:index) == #directory ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   264
                name = '..' ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   265
                    newList add:name.
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   266
                    fileTypes add:(directoryFileTypes at:index)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   267
                ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   268
                    name = '.' ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   269
                        "ignore"
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   270
                    ] ifFalse:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   271
                        newList add:(name ", ' ...'").
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   272
                        fileTypes add:(directoryFileTypes at:index)
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   273
                    ]
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   274
                ]
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   275
            ] ifFalse:[
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   276
                (pattern isNil or:[pattern isEmpty or:[pattern = '*' or:[pattern match:name]]]) ifTrue:[
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   277
                    newList add:name.
21
9ef599238fea *** empty log message ***
claus
parents: 11
diff changeset
   278
                    fileTypes add:(directoryFileTypes at:index)
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   279
                ]
38
4b9b70b2cc87 2.10.3 pre-final version
claus
parents: 24
diff changeset
   280
            ].
11
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   281
        ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   282
        index := index + 1
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   283
    ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   284
    super list:newList.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   285
    self cursor:oldCursor.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   286
! !
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   287
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   288
!FileSelectionList methodsFor:'realization'!
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   289
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   290
realize
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   291
    "make the view visible; redefined to check if directory is still 
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   292
     valid (using timestamp and inode numbers) - reread if not"
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   293
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   294
    (timeStamp isNil 
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   295
     or:[(directory timeOfLastChange > timeStamp) 
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   296
     or:[(directoryId isNil)
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   297
     or:[directoryId ~~ directory id]]]) ifTrue:[
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   298
        directoryId := nil.
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   299
        self updateList
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   300
    ].
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   301
    super realize
c47dbae39a71 Initial revision
claus
parents:
diff changeset
   302
! !