FileSelectionBox.st
author claus
Fri, 16 Jul 1993 11:44:44 +0200
changeset 0 e6a541c1c0eb
child 3 9d7eefb5e69f
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1990-93 by Claus Gittinger
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
ListSelectionBox subclass:#FileSelectionBox
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'patternField directory timeStamp directoryId'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
       category:'Views-Interactors'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
FileSelectionBox comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    22
COPYRIGHT (c) 1990-93 by Claus Gittinger
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
this class implements file selection boxes. They show a list of
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
files, and perform an action block with the selected pathname as
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
argument when ok is clicked.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
%W% %E%
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
written Jan 90 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
!FileSelectionBox methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
    directory := FileDirectory currentDirectory.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
    "selections in list get forwarded to enterfield if not a directory;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
     otherwise directory is changed"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
    selectionList action:[:lineNr |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
        |entry|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
        entry := selectionList selectionValue.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
        ((directory typeOf:entry) == #directory) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
            self directory:(directory pathName , '/' , entry)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
            enterField contents:entry
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
    "FileSelectionBox new show"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
reinitialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
    directory := FileDirectory currentDirectory.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
    super reinitialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
!FileSelectionBox methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
directory:nameOrDirectory
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
    "set the lists contents to the filenames in the directory name"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
    |oldPath name|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
    (nameOrDirectory isKindOf:String) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
        name := nameOrDirectory
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
        name := nameOrDirectory pathName
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
    oldPath := directory pathName.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
    directory pathName:name.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
    (directory pathName = oldPath) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
        self updateList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
!FileSelectionBox methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
updateList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
    "set the lists contents to the filenames in the directory"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
    |oldCursor oldListCursor files|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
    oldCursor := cursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
    oldListCursor := selectionList cursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
    self cursor:(Cursor read).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
    selectionList cursor:(Cursor read).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
    timeStamp := directory timeOfLastChange.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
    directoryId := directory id.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
    files := directory asText sort.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
    ((files at:1) = '.') ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
        files removeIndex:1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    self list:files.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
    self cursor:oldCursor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
    selectionList cursor:oldListCursor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
!FileSelectionBox methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
show
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
    "make the box visible; redefined to check if directory is still 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
     valid (using timestamp and inode numbers) - reread if not"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
    (timeStamp isNil 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
     or:[(directory timeOfLastChange > timeStamp) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
     or:[(directoryId isNil)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
     or:[directoryId ~~ directory id]]]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
        self updateList
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
    super show
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
!FileSelectionBox methodsFor:'user interaction'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
okPressed
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
    "redefined, since action will be evaluated with full path as argument
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
     (instead of enterfields contents only as inherited by EnterBox"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
    self hideAndEvaluate:[:string |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
        okAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
            okAction value:(directory pathName , '/' , string)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
! !