FNmEdtFld.st
author claus
Mon, 03 Jul 1995 04:35:33 +0200
changeset 64 10910b8b003a
parent 49 4dd0f5c3353e
child 67 0b0757a83da8
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 
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    14
       instanceVariableNames:'directoriesOnly filesOnly'
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 comment:'
30f48431927b Initial revision
claus
parents:
diff changeset
    21
COPYRIGHT (c) 1994 by Claus Gittinger
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
    22
	      All Rights Reserved
12
30f48431927b Initial revision
claus
parents:
diff changeset
    23
64
claus
parents: 49
diff changeset
    24
$Header: /cvs/stx/stx/libwidg2/Attic/FNmEdtFld.st,v 1.11 1995-07-03 02:34:42 claus Exp $
12
30f48431927b Initial revision
claus
parents:
diff changeset
    25
'!
30f48431927b Initial revision
claus
parents:
diff changeset
    26
30f48431927b Initial revision
claus
parents:
diff changeset
    27
!FilenameEditField class methodsFor:'documentation'!
30f48431927b Initial revision
claus
parents:
diff changeset
    28
30f48431927b Initial revision
claus
parents:
diff changeset
    29
copyright
30f48431927b Initial revision
claus
parents:
diff changeset
    30
"
30f48431927b Initial revision
claus
parents:
diff changeset
    31
 COPYRIGHT (c) 1994 by Claus Gittinger
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
    32
	      All Rights Reserved
12
30f48431927b Initial revision
claus
parents:
diff changeset
    33
30f48431927b Initial revision
claus
parents:
diff changeset
    34
 This software is furnished under a license and may be used
30f48431927b Initial revision
claus
parents:
diff changeset
    35
 only in accordance with the terms of that license and with the
30f48431927b Initial revision
claus
parents:
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
30f48431927b Initial revision
claus
parents:
diff changeset
    37
 be provided or otherwise made available to, or used by, any
30f48431927b Initial revision
claus
parents:
diff changeset
    38
 other person.  No title to or ownership of the software is
30f48431927b Initial revision
claus
parents:
diff changeset
    39
 hereby transferred.
30f48431927b Initial revision
claus
parents:
diff changeset
    40
"
30f48431927b Initial revision
claus
parents:
diff changeset
    41
!
30f48431927b Initial revision
claus
parents:
diff changeset
    42
30f48431927b Initial revision
claus
parents:
diff changeset
    43
version
30f48431927b Initial revision
claus
parents:
diff changeset
    44
"
64
claus
parents: 49
diff changeset
    45
$Header: /cvs/stx/stx/libwidg2/Attic/FNmEdtFld.st,v 1.11 1995-07-03 02:34:42 claus Exp $
12
30f48431927b Initial revision
claus
parents:
diff changeset
    46
"
30f48431927b Initial revision
claus
parents:
diff changeset
    47
!
30f48431927b Initial revision
claus
parents:
diff changeset
    48
30f48431927b Initial revision
claus
parents:
diff changeset
    49
documentation
30f48431927b Initial revision
claus
parents:
diff changeset
    50
"
24
6704fad5eb7d *** empty log message ***
claus
parents: 16
diff changeset
    51
    like a normal editField, but does filename-completion on the last word of
6704fad5eb7d *** empty log message ***
claus
parents: 16
diff changeset
    52
    the contents, when TAB is pressed.
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    53
    Filename completion ignores regular files if directoriesOnly is true,
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    54
    and ignores directories, if filesOnly is true. Both default to false.
12
30f48431927b Initial revision
claus
parents:
diff changeset
    55
"
30f48431927b Initial revision
claus
parents:
diff changeset
    56
! !
30f48431927b Initial revision
claus
parents:
diff changeset
    57
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    58
!FilenameEditField methodsFor:'initialization'!
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    59
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    60
initialize
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    61
    super initialize.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    62
    directoriesOnly := filesOnly := false.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    63
!
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    64
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    65
realize
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    66
    "move the cursor to the end - thats the most interresting part of
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    67
     a filename
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    68
    "
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    69
    super realize.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    70
    self cursorToEndOfLine.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    71
! !
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    72
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    73
!FilenameEditField methodsFor:'accessing'!
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    74
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    75
directoriesOnly
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    76
    "set to expand names for directories only"
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    77
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    78
    directoriesOnly := true.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    79
!
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    80
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    81
filesOnly
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    82
    "set to expand names for files only"
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    83
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    84
    filesOnly := true.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    85
!
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    86
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    87
initialText:aString selected:aBoolean
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    88
    "move the cursor to the end - thats the most interresting part of
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    89
     a filename
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    90
    "
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    91
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    92
    super initialText:aString selected:aBoolean.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    93
    self cursorToEndOfLine.
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    94
! !
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
    95
32
1cca9793eb39 *** empty log message ***
claus
parents: 25
diff changeset
    96
!FilenameEditField methodsFor:'event handling'!
12
30f48431927b Initial revision
claus
parents:
diff changeset
    97
30f48431927b Initial revision
claus
parents:
diff changeset
    98
keyPress:key x:x y:y
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
    99
    "handle tab for filename completion.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   100
     Bug: it completes the last word; it should complete the
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   101
	  word before the cursor."
12
30f48431927b Initial revision
claus
parents:
diff changeset
   102
64
claus
parents: 49
diff changeset
   103
    <resource: #keyboard ( #FilenameCompletion ) >
claus
parents: 49
diff changeset
   104
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   105
    |s f matchSet nMatch name words dir|
12
30f48431927b Initial revision
claus
parents:
diff changeset
   106
30f48431927b Initial revision
claus
parents:
diff changeset
   107
    enabled ifTrue:[
45
7f209befb75b *** empty log message ***
claus
parents: 43
diff changeset
   108
	((key == #Tab)
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   109
	or:[key == #FilenameCompletion]) ifTrue:[
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   110
	    s := self contents.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   111
	    "
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   112
	     find the last word ...
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   113
	    "
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   114
	    words := s asCollectionOfWords.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   115
	    f := words last asFilename.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   116
	    matchSet := f filenameCompletion.
49
claus
parents: 45
diff changeset
   117
	    dir := f directory.
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   118
	    directoriesOnly ifTrue:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   119
		matchSet := matchSet select:[:aFilename |
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   120
		    (dir construct:aFilename) isDirectory
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   121
		].
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   122
	    ] ifFalse:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   123
		filesOnly ifTrue:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   124
		    matchSet := matchSet select:[:aFilename |
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   125
			(dir construct:aFilename) isDirectory not
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   126
		    ].
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   127
		]
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   128
	    ].
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   129
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   130
	    (nMatch := matchSet size) ~~ 1 ifTrue:[
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   131
		"
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   132
		 more than one possible completion -
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   133
		"
49
claus
parents: 45
diff changeset
   134
		self changed:#directory with:f directoryName.
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   135
		device beep
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   136
	    ].
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   137
	    "
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   138
	     even with more than one possible completion,
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   139
	     f's name is now common prefix
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   140
	    "
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   141
	    name := f asString.
34
159147b254e1 *** empty log message ***
claus
parents: 32
diff changeset
   142
	    nMatch == 1 ifTrue:[
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   143
		"
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   144
		 exactly one possible completion -
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   145
		"
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   146
		f := dir construct:matchSet first.
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   147
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   148
		directoriesOnly ifTrue:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   149
		    name := f asString
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   150
		] ifFalse:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   151
		    f isDirectory ifTrue:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   152
			(name endsWith:(Filename separator)) ifFalse:[
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   153
			    name := (f construct:'') asString
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   154
			].
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   155
		    ].
43
3bbd1b494273 *** empty log message ***
claus
parents: 34
diff changeset
   156
		]
25
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   157
	    ].
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   158
	    "
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   159
	     construct new contents, by taking
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   160
	     last words completion
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   161
	    "
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   162
	    s := ''.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   163
	    1 to:(words size - 1) do:[:idx |
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   164
		s := s , (words at:idx) , ' '
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   165
	    ].
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   166
	    s := s , name.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   167
	    self contents:s.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   168
	    self cursorToEndOfLine.
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   169
	    ^ self
e07adf47d209 *** empty log message ***
claus
parents: 24
diff changeset
   170
	].
12
30f48431927b Initial revision
claus
parents:
diff changeset
   171
    ].
30f48431927b Initial revision
claus
parents:
diff changeset
   172
    ^ super keyPress:key x:x y:y.
30f48431927b Initial revision
claus
parents:
diff changeset
   173
! !