FNmEdtFld.st
author claus
Thu, 07 Sep 1995 14:48:20 +0200
changeset 72 f17df5ea35ed
parent 71 9f9243f5813b
child 75 903e595b4cec
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
30f48431927b Initial revision
claus
parents:
diff changeset
     1
"
30f48431927b Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
     3
	      All Rights Reserved
12
30f48431927b Initial revision
claus
parents:
diff changeset
     4
30f48431927b Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
30f48431927b Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
30f48431927b Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
30f48431927b Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
30f48431927b Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
30f48431927b Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
30f48431927b Initial revision
claus
parents:
diff changeset
    11
"
30f48431927b Initial revision
claus
parents:
diff changeset
    12
30f48431927b Initial revision
claus
parents:
diff changeset
    13
EditField subclass:#FilenameEditField 
72
claus
parents: 71
diff changeset
    14
       instanceVariableNames:'directoriesOnly filesOnly directory'
12
30f48431927b Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:   ''
30f48431927b Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
30f48431927b Initial revision
claus
parents:
diff changeset
    17
       category:'Views-Text'
30f48431927b Initial revision
claus
parents:
diff changeset
    18
!
30f48431927b Initial revision
claus
parents:
diff changeset
    19
30f48431927b Initial revision
claus
parents:
diff changeset
    20
!FilenameEditField class methodsFor:'documentation'!
30f48431927b Initial revision
claus
parents:
diff changeset
    21
30f48431927b Initial revision
claus
parents:
diff changeset
    22
copyright
30f48431927b Initial revision
claus
parents:
diff changeset
    23
"
30f48431927b Initial revision
claus
parents:
diff changeset
    24
 COPYRIGHT (c) 1994 by Claus Gittinger
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
    25
	      All Rights Reserved
12
30f48431927b Initial revision
claus
parents:
diff changeset
    26
30f48431927b Initial revision
claus
parents:
diff changeset
    27
 This software is furnished under a license and may be used
30f48431927b Initial revision
claus
parents:
diff changeset
    28
 only in accordance with the terms of that license and with the
30f48431927b Initial revision
claus
parents:
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
30f48431927b Initial revision
claus
parents:
diff changeset
    30
 be provided or otherwise made available to, or used by, any
30f48431927b Initial revision
claus
parents:
diff changeset
    31
 other person.  No title to or ownership of the software is
30f48431927b Initial revision
claus
parents:
diff changeset
    32
 hereby transferred.
30f48431927b Initial revision
claus
parents:
diff changeset
    33
"
30f48431927b Initial revision
claus
parents:
diff changeset
    34
!
30f48431927b Initial revision
claus
parents:
diff changeset
    35
30f48431927b Initial revision
claus
parents:
diff changeset
    36
version
30f48431927b Initial revision
claus
parents:
diff changeset
    37
"
72
claus
parents: 71
diff changeset
    38
$Header: /cvs/stx/stx/libwidg2/Attic/FNmEdtFld.st,v 1.14 1995-09-07 12:47:59 claus Exp $
12
30f48431927b Initial revision
claus
parents:
diff changeset
    39
"
30f48431927b Initial revision
claus
parents:
diff changeset
    40
!
30f48431927b Initial revision
claus
parents:
diff changeset
    41
30f48431927b Initial revision
claus
parents:
diff changeset
    42
documentation
30f48431927b Initial revision
claus
parents:
diff changeset
    43
"
24
6704fad5eb7d *** empty log message ***
claus
parents: 16
diff changeset
    44
    like a normal editField, but does filename-completion on the last word of
6704fad5eb7d *** empty log message ***
claus
parents: 16
diff changeset
    45
    the contents, when TAB is pressed.
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    46
    Filename completion ignores regular files if directoriesOnly is true,
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    47
    and ignores directories, if filesOnly is true. Both default to false.
12
30f48431927b Initial revision
claus
parents:
diff changeset
    48
"
30f48431927b Initial revision
claus
parents:
diff changeset
    49
! !
30f48431927b Initial revision
claus
parents:
diff changeset
    50
72
claus
parents: 71
diff changeset
    51
!FilenameEditField class methodsFor:'defaults'!
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    52
72
claus
parents: 71
diff changeset
    53
filenameCompletionBlock 
claus
parents: 71
diff changeset
    54
    "return a block which can be used for fileName completion.
claus
parents: 71
diff changeset
    55
     This has been extracted into a separate method, to allow reuse of
claus
parents: 71
diff changeset
    56
     this code (for example, for use with regular editFields ..)"
67
claus
parents: 64
diff changeset
    57
72
claus
parents: 71
diff changeset
    58
    ^ [:field :inDirectory :directoriesOnly :filesOnly |
67
claus
parents: 64
diff changeset
    59
	|s f matchSet nMatch name words dir|
claus
parents: 64
diff changeset
    60
72
claus
parents: 71
diff changeset
    61
	s := field contents.
67
claus
parents: 64
diff changeset
    62
	"
claus
parents: 64
diff changeset
    63
	 find the last word ...
claus
parents: 64
diff changeset
    64
	"
claus
parents: 64
diff changeset
    65
	words := s asCollectionOfWords.
claus
parents: 64
diff changeset
    66
	f := words last asFilename.
72
claus
parents: 71
diff changeset
    67
	f isAbsolute ifFalse:[
claus
parents: 71
diff changeset
    68
	     inDirectory asString ~= '.' ifTrue:[
claus
parents: 71
diff changeset
    69
		 f := (inDirectory name asFilename construct:f) name asFilename
claus
parents: 71
diff changeset
    70
	     ].
claus
parents: 71
diff changeset
    71
	].
claus
parents: 71
diff changeset
    72
	f isAbsolute ifTrue:[
claus
parents: 71
diff changeset
    73
	    f := f pathName asFilename.
claus
parents: 71
diff changeset
    74
	].
claus
parents: 71
diff changeset
    75
67
claus
parents: 64
diff changeset
    76
	matchSet := f filenameCompletion.
claus
parents: 64
diff changeset
    77
	dir := f directory.
72
claus
parents: 71
diff changeset
    78
67
claus
parents: 64
diff changeset
    79
	directoriesOnly ifTrue:[
claus
parents: 64
diff changeset
    80
	    matchSet := matchSet select:[:aFilename |
claus
parents: 64
diff changeset
    81
		(dir construct:aFilename) isDirectory
claus
parents: 64
diff changeset
    82
	    ].
claus
parents: 64
diff changeset
    83
	] ifFalse:[
claus
parents: 64
diff changeset
    84
	    filesOnly ifTrue:[
claus
parents: 64
diff changeset
    85
		matchSet := matchSet select:[:aFilename |
claus
parents: 64
diff changeset
    86
		    (dir construct:aFilename) isDirectory not
claus
parents: 64
diff changeset
    87
		].
claus
parents: 64
diff changeset
    88
	    ]
claus
parents: 64
diff changeset
    89
	].
claus
parents: 64
diff changeset
    90
claus
parents: 64
diff changeset
    91
	(nMatch := matchSet size) ~~ 1 ifTrue:[
claus
parents: 64
diff changeset
    92
	    "
claus
parents: 64
diff changeset
    93
	     more than one possible completion -
claus
parents: 64
diff changeset
    94
	    "
72
claus
parents: 71
diff changeset
    95
	    field changed:#directory with:f directoryName.
claus
parents: 71
diff changeset
    96
	    field flash.
claus
parents: 71
diff changeset
    97
	    field device beep.
67
claus
parents: 64
diff changeset
    98
	].
claus
parents: 64
diff changeset
    99
	"
claus
parents: 64
diff changeset
   100
	 even with more than one possible completion,
claus
parents: 64
diff changeset
   101
	 f's name is now common prefix
claus
parents: 64
diff changeset
   102
	"
claus
parents: 64
diff changeset
   103
	name := f asString.
claus
parents: 64
diff changeset
   104
	nMatch == 1 ifTrue:[
claus
parents: 64
diff changeset
   105
	    "
claus
parents: 64
diff changeset
   106
	     exactly one possible completion -
claus
parents: 64
diff changeset
   107
	    "
72
claus
parents: 71
diff changeset
   108
"/            f := dir construct:matchSet first.
claus
parents: 71
diff changeset
   109
	    f := matchSet first asFilename.
67
claus
parents: 64
diff changeset
   110
claus
parents: 64
diff changeset
   111
	    directoriesOnly ifTrue:[
claus
parents: 64
diff changeset
   112
		name := f asString
claus
parents: 64
diff changeset
   113
	    ] ifFalse:[
claus
parents: 64
diff changeset
   114
		f isDirectory ifTrue:[
claus
parents: 64
diff changeset
   115
		    (name endsWith:(Filename separator)) ifFalse:[
72
claus
parents: 71
diff changeset
   116
			name := f asString , '/'
67
claus
parents: 64
diff changeset
   117
		    ].
claus
parents: 64
diff changeset
   118
		].
claus
parents: 64
diff changeset
   119
	    ]
claus
parents: 64
diff changeset
   120
	].
claus
parents: 64
diff changeset
   121
	"
claus
parents: 64
diff changeset
   122
	 construct new contents, by taking
claus
parents: 64
diff changeset
   123
	 last words completion
claus
parents: 64
diff changeset
   124
	"
claus
parents: 64
diff changeset
   125
	s := ''.
claus
parents: 64
diff changeset
   126
	1 to:(words size - 1) do:[:idx |
claus
parents: 64
diff changeset
   127
	    s := s , (words at:idx) , ' '
claus
parents: 64
diff changeset
   128
	].
claus
parents: 64
diff changeset
   129
	s := s , name.
72
claus
parents: 71
diff changeset
   130
	field contents:s.
claus
parents: 71
diff changeset
   131
	field cursorToEndOfLine.
67
claus
parents: 64
diff changeset
   132
    ].
72
claus
parents: 71
diff changeset
   133
! !
claus
parents: 71
diff changeset
   134
claus
parents: 71
diff changeset
   135
!FilenameEditField methodsFor:'initialization'!
claus
parents: 71
diff changeset
   136
claus
parents: 71
diff changeset
   137
initialize
claus
parents: 71
diff changeset
   138
    super initialize.
claus
parents: 71
diff changeset
   139
    directoriesOnly := filesOnly := false.
claus
parents: 71
diff changeset
   140
    directory := '.' asFilename.
claus
parents: 71
diff changeset
   141
claus
parents: 71
diff changeset
   142
    entryCompletionBlock := [
claus
parents: 71
diff changeset
   143
	self class 
claus
parents: 71
diff changeset
   144
	    filenameCompletionBlock 
claus
parents: 71
diff changeset
   145
		value:self 
claus
parents: 71
diff changeset
   146
		value:directory
claus
parents: 71
diff changeset
   147
		value:directoriesOnly
claus
parents: 71
diff changeset
   148
		value:filesOnly
claus
parents: 71
diff changeset
   149
    ].
claus
parents: 71
diff changeset
   150
claus
parents: 71
diff changeset
   151
    "Modified: 7.9.1995 / 10:20:46 / claus"
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   152
!
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   153
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   154
realize
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   155
    "move the cursor to the end - thats the most interresting part of
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   156
     a filename
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   157
    "
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   158
    super realize.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   159
    self cursorToEndOfLine.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   160
! !
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   161
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   162
!FilenameEditField methodsFor:'accessing'!
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   163
72
claus
parents: 71
diff changeset
   164
directory
claus
parents: 71
diff changeset
   165
    ^ directory
claus
parents: 71
diff changeset
   166
claus
parents: 71
diff changeset
   167
    "Modified: 7.9.1995 / 10:12:40 / claus"
claus
parents: 71
diff changeset
   168
!
claus
parents: 71
diff changeset
   169
claus
parents: 71
diff changeset
   170
directory:aFilename
claus
parents: 71
diff changeset
   171
    directory := aFilename asFilename
claus
parents: 71
diff changeset
   172
claus
parents: 71
diff changeset
   173
    "Modified: 7.9.1995 / 10:12:55 / claus"
claus
parents: 71
diff changeset
   174
!
claus
parents: 71
diff changeset
   175
claus
parents: 71
diff changeset
   176
showsDirectoriesOnly
claus
parents: 71
diff changeset
   177
    "return if expanding names for directories only"
claus
parents: 71
diff changeset
   178
claus
parents: 71
diff changeset
   179
    ^ directoriesOnly
claus
parents: 71
diff changeset
   180
claus
parents: 71
diff changeset
   181
    "Modified: 6.9.1995 / 20:35:30 / claus"
claus
parents: 71
diff changeset
   182
!
claus
parents: 71
diff changeset
   183
claus
parents: 71
diff changeset
   184
showsFilesOnly
claus
parents: 71
diff changeset
   185
    "return if expanding names for files only"
claus
parents: 71
diff changeset
   186
claus
parents: 71
diff changeset
   187
    ^ filesOnly
claus
parents: 71
diff changeset
   188
claus
parents: 71
diff changeset
   189
    "Modified: 6.9.1995 / 20:34:57 / claus"
claus
parents: 71
diff changeset
   190
!
claus
parents: 71
diff changeset
   191
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   192
directoriesOnly
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   193
    "set to expand names for directories only"
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   194
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   195
    directoriesOnly := true.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   196
!
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   197
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   198
filesOnly
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   199
    "set to expand names for files only"
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   200
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   201
    filesOnly := true.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   202
!
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   203
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   204
initialText:aString selected:aBoolean
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   205
    "move the cursor to the end - thats the most interresting part of
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   206
     a filename
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   207
    "
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   208
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   209
    super initialText:aString selected:aBoolean.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   210
    self cursorToEndOfLine.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   211
! !
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   212
32
1cca9793eb39 *** empty log message ***
claus
parents: 25
diff changeset
   213
!FilenameEditField methodsFor:'event handling'!
12
30f48431927b Initial revision
claus
parents:
diff changeset
   214
30f48431927b Initial revision
claus
parents:
diff changeset
   215
keyPress:key x:x y:y
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   216
    "handle tab for filename completion.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   217
     Bug: it completes the last word; it should complete the
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   218
	  word before the cursor."
12
30f48431927b Initial revision
claus
parents:
diff changeset
   219
64
claus
parents: 49
diff changeset
   220
    <resource: #keyboard ( #FilenameCompletion ) >
claus
parents: 49
diff changeset
   221
12
30f48431927b Initial revision
claus
parents:
diff changeset
   222
    enabled ifTrue:[
45
7f209befb75b *** empty log message ***
claus
parents: 43
diff changeset
   223
	((key == #Tab)
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   224
	or:[key == #FilenameCompletion]) ifTrue:[
67
claus
parents: 64
diff changeset
   225
	    entryCompletionBlock value.
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   226
	    ^ self
67
claus
parents: 64
diff changeset
   227
	]
12
30f48431927b Initial revision
claus
parents:
diff changeset
   228
    ].
30f48431927b Initial revision
claus
parents:
diff changeset
   229
    ^ super keyPress:key x:x y:y.
30f48431927b Initial revision
claus
parents:
diff changeset
   230
! !