FileBrowser.st
author claus
Thu, 09 Mar 1995 04:31:23 +0100
changeset 79 d78f92a07d5d
parent 75 f6310cbc93b6
child 85 d9713a3ca092
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     1
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1991 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
     3
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     4
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    10
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    11
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    12
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    13
StandardSystemView subclass:#FileBrowser
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    14
	 instanceVariableNames:'labelView filterField fileListView subView 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    15
				currentDirectory
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    16
				fileList
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    17
				checkBlock checkDelta timeOfLastCheck
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    18
				showLongList showVeryLongList showDotFiles
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    19
				myName killButton compressTabs lockUpdate
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
    20
				previousDirectory currentFileName timeOfFileRead
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
    21
				tabSpec'
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
    22
	 classVariableNames:'DirectoryHistory DirectoryHistoryWhere HistorySize
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
    23
			     DefaultIcon'
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    24
	 poolDictionaries:''
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    25
	 category:'Interface-Browsers'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    26
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    27
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    28
FileBrowser comment:'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    29
COPYRIGHT (c) 1991 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    30
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    31
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
    32
$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.33 1995-03-09 03:31:04 claus Exp $
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    33
'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    34
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    35
!FileBrowser class methodsFor:'documentation'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    37
copyright
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    38
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    39
 COPYRIGHT (c) 1991 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    40
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    41
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    42
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    43
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    44
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    45
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    46
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    47
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    48
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    49
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    50
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    51
version
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    52
"
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
    53
$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.33 1995-03-09 03:31:04 claus Exp $
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    54
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    55
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    56
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    57
documentation
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    58
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    59
    this used to be a very simple demo application,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    60
    but migrated into a quite nice tool, includes all kinds of 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    61
    warning and information boxes, background processes for directory-
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    62
    reading and internationalized strings. A good example for beginners,
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    63
    on how to do things .... (and maybe how not to do things ;-)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    64
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    65
    See additional information in 'doc/misc/fbrowser.doc'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    66
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    67
    WARNING: files edited with FileBrowser will have leading spaces (multiple-8)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    68
	     being replaced by tabs. If tabs are to be preserved at other
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    69
	     positions (for example, sendmail-config files) they will be
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    70
	     corrupt after being written.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    71
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    72
    instancevariables of interrest:
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    73
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    74
	checkDelta      <Integer>       number of seconds of check interval
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    75
					(looks ever so often if shown directory
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    76
					 has changed). You may make this number
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    77
					higher, if your network-times are
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    78
					incorrect and thus, the filebrowser
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    79
					checks too often.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    80
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    81
	compressTabs    <Boolean>       if true, leading spaces will be
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
    82
					replaced by tabs when saving text
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    83
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    84
    some of the defaults (long/short list etc.) can be set by the resource file;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    85
    see FileBrowser>>initialize for more details..
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    86
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    87
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    88
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    89
!FileBrowser class methodsFor:'instance creation'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    90
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    91
openOn:aDirectoryPath
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    92
    "start a new FileBrowser in a pathname"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    93
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    94
    ^ (self new currentDirectory:aDirectoryPath) open
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    95
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    96
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    97
     FileBrowser openOn:'aDirectoryPath'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    98
     FileBrowser openOn:'/etc'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    99
     FileBrowser openOn:'..'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   100
     FileBrowser openOn:'.'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   101
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   102
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   103
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   104
!FileBrowser class methodsFor:'defaults'!
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   105
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   106
defaultIcon
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   107
    DefaultIcon isNil ifTrue:[
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   108
	DefaultIcon := Form 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   109
			fromFile:(ClassResources at:'ICON_FILE' 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   110
					    default:'FBrowser.xbm')
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   111
			resolution:100.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   112
    ].
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   113
    ^ DefaultIcon
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   114
! !
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   115
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   116
!FileBrowser methodsFor:'initialization'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   117
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   118
initialize
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   119
    |frame spacing halfSpacing v topFrame labelFrame|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   120
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   121
    super initialize.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   122
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   123
    "if true, will replace leading spaces by tabs on
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   124
     file write. If false, they will be written as spaces
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   125
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   126
    compressTabs := resources at:'COMPRESS_TABS' default:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   127
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   128
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   129
     showing long or short by default
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   130
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   131
    showLongList := resources at:'LONG_LIST' default:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   132
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   133
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   134
     show type of contents (somwehat slow) or not ?
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   135
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   136
    showVeryLongList := resources at:'VERYLONG_LIST' default:true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   137
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   138
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   139
     show hidden files or not ?
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   140
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   141
    showDotFiles := resources at:'SHOW_DOT_FILES' default:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   142
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   143
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   144
    lockUpdate := false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   145
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   146
    DirectoryHistory isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   147
	DirectoryHistory := OrderedCollection new.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   148
	DirectoryHistoryWhere := OrderedCollection new.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   149
	HistorySize := 15.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   150
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   151
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   152
    myName := (resources string:self class name).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   153
    self label:myName.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   154
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   155
    labelFrame := View origin:(0.0 @ 0.0)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   156
		       corner:(1.0 @ (font height * 2))
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   157
			   in:self.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   158
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   159
    StyleSheet name = #st80 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   160
	labelFrame level:1
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   161
    ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   162
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   163
    spacing := ViewSpacing.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   164
    halfSpacing := spacing // 2.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   165
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   166
    checkBlock := [self checkIfDirectoryHasChanged].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   167
    checkDelta := resources at:'CHECK_DELTA' default:10.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   168
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   169
    currentDirectory := FileDirectory directoryNamed:'.'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   170
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   171
    filterField := EditField in:labelFrame.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   172
    filterField origin:[((width // 4 * 3) + halfSpacing) @ halfSpacing]
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   173
		corner:(1.0 @ filterField heightIncludingBorder).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   174
    filterField rightInset:ViewSpacing-halfSpacing.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   175
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   176
    self initializeFilterPattern.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   177
    filterField leaveAction:[:key | fileListView scrollToTop. self updateCurrentDirectory].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   178
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   179
    labelView := Label in:labelFrame.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   180
    labelView origin:(halfSpacing @ halfSpacing)
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   181
	      extent:[((width // 4 * 3) - spacing - borderWidth)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   182
		       @
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   183
		       (filterField heightIncludingBorder)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   184
		       "(font height + font descent)"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   185
		     ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   186
    labelView adjust:#right.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   187
    labelView borderWidth:0.
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   188
    labelView model:self; menu:#labelMenu.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   189
    labelFrame model:self; menu:#labelMenu.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   190
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   191
    killButton := Button label:(resources string:'kill') in:self.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   192
    killButton origin:(halfSpacing @ halfSpacing)
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   193
	       extent:(killButton width @ filterField height).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   194
    killButton hidden:true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   195
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   196
    frame := VariableVerticalPanel
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   197
		 origin:[frame borderWidth negated 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   198
			 @ 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   199
			 labelFrame height
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   200
			 "/ (labelView height + labelView origin y + spacing)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   201
			]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   202
		 corner:(1.0 @ 1.0)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   203
		     in:self.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   204
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   205
    topFrame := ScrollableView for:SelectionInListView in:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   206
    topFrame origin:(0.0 @ 0.0) corner:(1.0 @ 0.3).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   207
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   208
    fileListView := topFrame scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   209
    fileListView action:[:lineNr | self fileSelect:lineNr].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   210
    fileListView doubleClickAction:[:lineNr | self fileSelect:lineNr.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   211
					      self fileGet].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   212
    fileListView multipleSelectOk:true.
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   213
    fileListView model:self; menu:#fileListMenu.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   214
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   215
    v := self initializeSubViewIn:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   216
    v origin:(0.0 @ 0.3) corner:(1.0 @ 1.0).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   217
    subView := v scrolledView.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   218
    (subView respondsTo:#directoryForFileDialog:) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   219
	subView directoryForFileDialog:currentDirectory
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   220
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   221
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   222
    ObjectMemory addDependent:self.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   223
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   224
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   225
initEvents
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
   226
    super initEvents.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   227
    self enableEvent:#visibilityChange.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   228
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   229
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   230
initializeFilterPattern
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   231
    "set an initial matchpattern - can be redefined in subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   232
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   233
    filterField contents:'*'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   234
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   235
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   236
initializeSubViewIn:frame
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   237
    "set up the contents view - can be redefined in subclasses for
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   238
     different view types (SoundFileBrowser/ImageBrowsers etc.)"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   239
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   240
    ^ HVScrollableView for:CodeView miniScrollerH:true miniScrollerV:false in:frame.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   241
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   242
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   243
currentDirectory:aDirectoryPath
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   244
    "set the directory to be browsed"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   245
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   246
    currentDirectory := FileDirectory directoryNamed:aDirectoryPath.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   247
    (subView respondsTo:#directoryForFileDialog:) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   248
	subView directoryForFileDialog:currentDirectory
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   249
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   250
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   251
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
   252
focusSequence
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   253
    "return the sequence in which ALT-CursorRight steps focus"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   254
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
   255
    ^ Array with:filterField with:fileListView with:subView
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   256
! !
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   257
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   258
!FileBrowser methodsFor:'events'!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   259
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   260
mapped 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   261
    super mapped.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   262
    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   263
     whant to know about changed history
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   264
    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   265
    self updateCurrentDirectory
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   266
!
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   267
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   268
visibilityChange:how
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   269
    |wasVisible|
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   270
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   271
    wasVisible := shown.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   272
    super visibilityChange:how.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   273
    (wasVisible not and:[shown]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   274
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   275
	 start checking again
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   276
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   277
	Processor removeTimedBlock:checkBlock.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   278
	Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   279
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   280
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   281
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   282
!FileBrowser methodsFor:'private'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   283
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   284
showAlert:aString with:anErrorString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   285
    "show an alertbox, displaying the last Unix-error"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   286
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   287
    anErrorString isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   288
	self warn:aString withCRs
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   289
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   290
	self warn:(aString , '\\(' , anErrorString , ')' ) withCRs
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   291
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   292
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   293
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   294
ask:question yesButton:yesButtonText noButton:noButtonText action:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   295
    "common method to ask a yes/no question"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   296
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   297
    |yesNoBox|
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   298
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   299
    yesNoBox := YesNoBox 
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   300
		    title:question withCRs
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   301
		  yesText:(resources at:yesButtonText)
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   302
		   noText:(resources at:noButtonText).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   303
    yesNoBox okAction:aBlock.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   304
    yesNoBox showAtPointer
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   305
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   306
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   307
ask:question yesButton:yesButtonText
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   308
    "common method to ask a yes/no question; return true or false"
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   309
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   310
    self ask:question 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   311
	 yesButton:yesButtonText 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   312
	 noButton:'cancel' 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   313
	 action:[^ true].
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   314
    ^ false
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   315
!
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   316
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   317
askIfModified:question yesButton:yesButtonText
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   318
    "tell user, that code has been modified - let her confirm"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   319
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   320
    (subView modified not or:[subView contentsWasSaved]) ifTrue:[
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   321
	^ true
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   322
    ].
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
   323
    self ask:(resources string:question) withCRs
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   324
	 yesButton:yesButtonText
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   325
	 noButton:'cancel' 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   326
	 action:[^ true].
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   327
    ^ false
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   328
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   329
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   330
withoutHiddenFiles:aCollection
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   331
    "remove hidden files (i.e. those that start with '.') from
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   332
     the list in aCollection"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   333
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   334
    |newCollection|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   335
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   336
    newCollection := aCollection species new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   337
    aCollection do:[:fname |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   338
	((fname startsWith:'.') and:[(fname = '..') not]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   339
	    showDotFiles ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   340
		newCollection add:fname
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   341
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   342
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   343
	    newCollection add:fname
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   344
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   345
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   346
    ^ newCollection
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   347
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   348
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   349
getInfoFile
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   350
    "get filename of a description-file (.dir.info, README etc.);
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   351
     This file is automatically shown when a directory is enterred.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   352
     You can add more names below if you like."
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   353
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   354
    #( '.dir.info'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   355
       'README'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   356
       'ReadMe'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   357
       'Readme'
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   358
       'readme' 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   359
    ) do:[:f |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   360
	(currentDirectory isReadable:f) ifTrue:[^ f].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   361
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   362
    ^ nil
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   363
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   364
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   365
showInfo:info
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   366
    "show directory info when dir has changed"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   367
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   368
    info notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   369
	self show:(self readFile:info)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   370
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   371
	self show:nil.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   372
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   373
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   374
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   375
getSelectedFileName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   376
    "returns the currently selected file; shows an error if
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   377
     multiple files are selected"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   378
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   379
    |sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   380
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   381
    sel := fileListView selection.
63
59973f55dd11 *** empty log message ***
claus
parents: 61
diff changeset
   382
    sel isCollection ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   383
	self onlyOneSelection
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   384
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   385
	sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   386
	    ^ fileList at:sel
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   387
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   388
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   389
    ^ nil
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   390
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   391
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   392
getFileInfoString:longInfo
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   393
    "get stat info on selected file - return a string which can be
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   394
     shown in a box"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   395
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
   396
    |fileName fullPath text info fileOutput type modeBits modeString s|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   397
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   398
    fileName := self getSelectedFileName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   399
    fileName isNil ifTrue:[^ nil].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   400
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   401
    info := currentDirectory infoOf:fileName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   402
    info isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   403
	self showAlert:(resources string:'cannot get info of ''%1'' !!' with:fileName)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   404
		  with:(OperatingSystem lastErrorString).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   405
	^ nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   406
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   407
59
d8ff572dd357 Text eliminated
claus
parents: 58
diff changeset
   408
    text := StringCollection new.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   409
    type := info at:#type.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   410
    (longInfo and:[type == #regular]) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   411
	fullPath := currentDirectory pathName , '/' , fileName.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   412
	fileOutput := fullPath asFilename fileType.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   413
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   414
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   415
    s := (resources at:'type:   ').
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   416
    fileOutput isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   417
	s := s ,  type asString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   418
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   419
	s := s , 'regular (' , fileOutput , ')'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   420
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   421
    text add:s.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   422
    text add:(resources at:'size:   ') , (info at:#size) printString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   423
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   424
    modeBits := (info at:#mode).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   425
    modeString := self getModeString:modeBits.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   426
    longInfo ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   427
	text add:((resources at:'access: ')
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   428
		  , modeString 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   429
		  , ' (' , (modeBits printStringRadix:8), ')' )
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   430
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   431
	text add:(resources at:'access: ') , modeString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   432
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   433
    text add:(resources at:'owner:  ')
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   434
	     , (OperatingSystem getUserNameFromID:(info at:#uid)).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   435
    longInfo ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   436
      text add:(resources at:'group:  ')
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   437
	     , (OperatingSystem getGroupNameFromID:(info at:#gid)).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   438
      text add:(resources at:'last access:       ')
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   439
	     , (info at:#accessTime) asTime printString
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   440
	     , ' ' 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   441
	     , (info at:#accessTime) asDate printString.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   442
      text add:(resources at:'last modification: ')
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   443
	     , (info at:#modificationTime) asTime printString
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   444
	     , ' ' 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   445
	     , (info at:#modificationTime) asDate printString.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   446
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   447
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   448
    ^ text asString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   449
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   450
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   451
getModeString:modeBits with:texts
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   452
    "convert file-mode bits into a more user-friendly string.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   453
     This is wrong here - should be moved into OperatingSystem."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   454
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   455
    |bits modeString|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   456
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   457
    bits := modeBits bitAnd:8r777.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   458
    modeString := ''.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   459
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   460
    #( nil 8r400 8r200 8r100 nil 8r040 8r020 8r010 nil 8r004 8r002 8r001 ) 
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   461
    with: texts do:[:bitMask :access |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   462
	bitMask isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   463
	    modeString := modeString , (resources string:access)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   464
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   465
	    (bits bitAnd:bitMask) == 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   466
		modeString := modeString copyWith:$-
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   467
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   468
		modeString := modeString copyWith:access
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   469
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   470
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   471
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   472
    ^ modeString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   473
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   474
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   475
getModeString:modeBits
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   476
    "convert file-mode bits into a more user-friendly string.
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   477
     This is wrong here - should be moved into OperatingSystem."
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   478
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   479
    ^ self getModeString:modeBits 
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   480
		    with:#( 'owner:' $r $w $x 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   481
			    ' group:' $r $w $x 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   482
			    ' others:' $r $w $x )
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   483
!
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   484
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   485
checkIfDirectoryHasChanged
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   486
    "every checkDelta secs, check if directoy has changed and update the list if so.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   487
     Also, we check if the file shown has been touched in the meanwhile (for example,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   488
     from another browser) and say 'outdated' in the label if so. 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   489
     This avoids confusion if the same file is being edited by two browsers. (or other editors).
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   490
     If the text shown in the codeView has been edited, 'modified' is shown.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   491
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   492
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   493
    |oldSelection nOld here newState|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   494
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   495
    shown ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   496
	currentDirectory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   497
	    lockUpdate ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   498
		Processor removeTimedBlock:checkBlock.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   499
		Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   500
		^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   501
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   502
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   503
	    subView modified ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   504
		newState := ' (modified)'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   505
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   506
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   507
	    here := currentDirectory pathName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   508
	    (OperatingSystem isReadable:here) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   509
		Processor removeTimedBlock:checkBlock.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   510
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   511
		(currentDirectory timeOfLastChange > timeOfLastCheck) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   512
		    nOld := fileListView numberOfSelections.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   513
		    oldSelection := fileListView selectionValue.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   514
		    self updateCurrentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   515
		    nOld ~~ 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   516
			nOld > 1 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   517
			    oldSelection do:[:element  |
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   518
				fileListView addElementToSelection:element
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   519
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   520
			] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   521
			    fileListView selectElementWithoutScroll:oldSelection
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   522
			]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   523
		    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   524
		] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   525
		    Processor addTimedBlock:checkBlock afterSeconds:checkDelta
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   526
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   527
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   528
		currentFileName notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   529
		    (currentDirectory exists:currentFileName) ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   530
			newState := ' (removed)'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   531
		    ] ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   532
			(currentDirectory timeOfLastChange:currentFileName) > timeOfFileRead ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   533
			    newState := ' (outdated)'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   534
			    subView modified ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   535
				newState := ' (modified & outdated)'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   536
			    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   537
			].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   538
		    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   539
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   540
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   541
	    ] ifFalse:[         
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   542
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   543
		 if the directory has been deleted, or is not readable ...
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   544
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   545
		(OperatingSystem isValidPath:here) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   546
		    self warn:(resources string:'FileBrowser:\\directory %1 is gone ?!!?' with:here) withCRs
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   547
		] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   548
		    self warn:(resources string:'FileBrowser:\\directory %1 is no longer readable ?!!?' with:here) withCRs
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   549
		].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   550
		fileListView contents:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   551
		self label:(myName , ': directory is gone !!').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   552
		"/ Processor addTimedBlock:checkBlock afterSeconds:checkDelta
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   553
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   554
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   555
	    newState notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   556
		currentFileName isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   557
		    self label:myName ,  newState
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   558
		] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   559
		    self label:myName , ': ' , currentFileName , newState
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   560
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   561
	    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   562
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   563
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   564
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   565
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   566
sizePrintString:size
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   567
    "helper for update-directory to return a string with a files size.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   568
     This one gives the size in byte, Kb or Mb depending on size.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   569
     If you dont like this, just uncomment the first statement below."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   570
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   571
    |unitString sizeString|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   572
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   573
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   574
    ^ size printString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   575
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   576
    unitString := ''.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   577
    size < (500 * 1024) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   578
	size < (1024) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   579
	    sizeString := size printString
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   580
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   581
	    sizeString := (size * 10 // 1024 / 10.0) printString.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   582
	    unitString := ' Kb'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   583
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   584
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   585
	sizeString := (size * 10 // 1024 // 1024 / 10.0) printString.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   586
	unitString := ' Mb'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   587
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   588
    ^ (sizeString printStringLeftPaddedTo:5) , unitString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   589
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   590
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   591
defineTabulatorsForLongList
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   592
    "define the tabs for the long list"
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   593
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   594
    tabSpec := TabulatorSpecification new.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   595
    tabSpec unit:#inch.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   596
"/  tabSpec positions:#(0     2     2.3   4.3    5.3    6.0      6.5).
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   597
    tabSpec widths:   #(2     0.3   1.7     1      0.5  0.5      1"any").
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   598
    "                   name  type  mode  owner  group  size     type"
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   599
    tabSpec align:    #(#left #left #left #right #right #decimal #left).
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   600
    tabSpec addDependent:self
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   601
!
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   602
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   603
updateCurrentDirectory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   604
    "update listView with directory contents"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   605
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   606
    |files text len line info modeString typ
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   607
     prevUid prevGid nameString groupString matchPattern|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   608
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   609
    "the code below may look somewhat complex -
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   610
     it reads the directory first for the names,
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   611
     then (in a second sweep over the files) gets the
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   612
     files type and info. This makes the Filebrowsers
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   613
     list update seem faster, since the fileInfo (i.e. stat-calls)
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   614
     may take long - especially on NFS-mounted directories.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   615
     The file reading is done at lower priority, to let user continue
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   616
     his work in other views. However, to be fair to other fileBrowser,
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   617
     which may also read directories at low prio, give up the processor
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   618
     after every entry. This shares the cpu among all fileBrowsers, so
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   619
     that browsers reading short directories will finish first.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   620
     ST/X users love this behavior ;-)
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   621
    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   622
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   623
    self withCursor:(Cursor read) do:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   624
	Processor removeTimedBlock:checkBlock.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   625
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   626
	labelView label:(currentDirectory pathName).
58
43b7d463a7e5 *** empty log message ***
claus
parents: 57
diff changeset
   627
	timeOfLastCheck := AbsoluteTime now.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   628
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   629
	files := currentDirectory asOrderedCollection.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   630
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   631
	matchPattern := filterField contents.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   632
	(matchPattern notNil and:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   633
	 matchPattern isEmpty not and:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   634
	 matchPattern ~= '*']]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   635
	    files := files select:[:aName | 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   636
			 ((currentDirectory typeOf:aName) == #directory)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   637
			 or:[matchPattern match:aName]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   638
		     ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   639
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   640
	files sort.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   641
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   642
	files size == 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   643
	    self notify:('directory ', currentDirectory pathName, ' vanished').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   644
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   645
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   646
	files := self withoutHiddenFiles:files.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   647
	fileList := files copy.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   648
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   649
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   650
	 this is a time consuming operation (especially, if reading an
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   651
	 NFS-mounted directory); therefore lower my priority while getting
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   652
	 the files info ...
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   653
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   654
	Processor activeProcess withLowerPriorityDo:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   655
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   656
	    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   657
	     first show the names only - this is relatively fast
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   658
	    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   659
	    fileListView setList:files expandTabs:false.
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   660
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   661
	    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   662
	     then walk over the files, adding more info
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   663
	     (since we have to stat each file, this may take a while longer
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   664
	    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   665
	    showLongList ifTrue:[
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   666
		tabSpec isNil ifTrue:[self defineTabulatorsForLongList].
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   667
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   668
		text := OrderedCollection new.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   669
		files keysAndValuesDo:[:lineIndex :aFileName |
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   670
		    |entry col|
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   671
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   672
		    entry := MultiColListEntry new.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   673
		    entry tabulatorSpecification:tabSpec.
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   674
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   675
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   676
		     if multiple FileBrowsers are reading, let others
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   677
		     make some progress too
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   678
		    "
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   679
		    windowGroup notNil ifTrue:[windowGroup processExposeEvents].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   680
		    Processor yield.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   681
		    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   682
		     could be destroyed in the meanwhile ...
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   683
		    "
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   684
		    realized ifFalse:[^ self].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   685
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   686
		    len := aFileName size.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   687
		    (len < 20) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   688
			line := aFileName , (String new:(22 - len))
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   689
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   690
			"can happen on BSD only"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   691
			line := (aFileName copyTo:20) , '  '
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   692
		    ].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   693
		    entry colAt:1 put:line.
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
   694
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   695
		    info := currentDirectory infoOf:aFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   696
		    info isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   697
			"not accessable - usually a symlink,
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   698
			 to a nonexisting/nonreadable file
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   699
			"
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   700
			entry colAt:2 put:'?'.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   701
			entry colAt:3 put:'(bad symbolic link ?)'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   702
		    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   703
			typ := (info at:#type) at:1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   704
			(typ == $r) ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   705
			    entry colAt:2 put:typ asString.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   706
			] ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   707
			    entry colAt:2 put:' '.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   708
			].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   709
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   710
			modeString := self getModeString:(info at:#mode)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   711
						    with:#( '' $r $w $x 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   712
							    '  ' $r $w $x 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   713
							    '  ' $r $w $x ).
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   714
			entry colAt:3 put:modeString.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   715
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   716
			((info at:#uid) ~~ prevUid) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   717
			    prevUid := (info at:#uid).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   718
			    nameString := OperatingSystem getUserNameFromID:prevUid.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   719
			    nameString := nameString , (String new:(10 - nameString size))
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   720
			].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   721
			entry colAt:4 put:nameString withoutSpaces.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   722
			((info at:#gid) ~~ prevGid) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   723
			    prevGid := (info at:#gid).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   724
			    groupString := OperatingSystem getGroupNameFromID:prevGid.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   725
			    groupString := groupString , (String new:(10 - groupString size))
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   726
			].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   727
			entry colAt:5 put:groupString withoutSpaces.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   728
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   729
			(typ == $r) ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   730
			    entry colAt:6 put:(self sizePrintString:(info at:#size)).
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   731
			].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   732
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   733
			showVeryLongList ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   734
			    entry colAt:7 put:(currentDirectory asFilename:aFileName) fileType.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   735
			] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   736
			    entry colAt:7 put:((currentDirectory asFilename:aFileName) info at:#type)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   737
			].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   738
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   739
			text add:entry
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   740
		    ].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   741
		    fileListView at:lineIndex put:entry
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   742
		].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   743
	    ] ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   744
		files keysAndValuesDo:[:lineIndex :aName |
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   745
		    |entry|
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   746
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   747
		    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   748
		     if multiple FileBrowsers are reading, let others
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   749
		     make some progress too
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   750
		    "
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   751
		    windowGroup notNil ifTrue:[windowGroup processExposeEvents].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   752
		    Processor yield.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   753
		    realized ifFalse:[^ self].
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   754
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   755
		    (((currentDirectory typeOf:aName) == #directory) and:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   756
		    (aName ~= '..') and:[aName ~= '.']]) ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   757
			entry := aName , ' ...'
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   758
		    ] ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   759
			entry := aName
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   760
		    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   761
		    fileListView at:lineIndex put:entry
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   762
		].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   763
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   764
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   765
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   766
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   767
	 install a new check after some time
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   768
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   769
	Processor addTimedBlock:checkBlock afterSeconds:checkDelta
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   770
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   771
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   772
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   773
doChangeCurrentDirectoryTo:fileName updateHistory:updateHistory 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   774
    "verify argument is name of a readable & executable directory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   775
     and if so, go there"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   776
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   777
    |msg path idx|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   778
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   779
    self label:myName; iconLabel:myName.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   780
    fileName notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   781
	(currentDirectory isDirectory:fileName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   782
	    (currentDirectory isReadable:fileName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   783
		(currentDirectory isExecutable:fileName) ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   784
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   785
		    path := currentDirectory pathName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   786
		    previousDirectory := path.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   787
		    (labelView notNil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   788
		     and:[labelView middleButtonMenu notNil]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   789
			labelView middleButtonMenu enable:#changeToPreviousDirectory.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   790
		    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   791
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   792
		    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   793
		     remember where we are in the fileList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   794
		     (in case we want to return)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   795
		    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   796
		    idx := DirectoryHistory indexOf:path.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   797
		    idx ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   798
			DirectoryHistoryWhere at:idx put:fileListView firstLineShown
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   799
		    ].
47
94f7b0e07ff5 *** empty log message ***
claus
parents: 45
diff changeset
   800
94f7b0e07ff5 *** empty log message ***
claus
parents: 45
diff changeset
   801
		    self setCurrentDirectory:fileName.
94f7b0e07ff5 *** empty log message ***
claus
parents: 45
diff changeset
   802
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   803
		    path := currentDirectory pathName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   804
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   805
		    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   806
		     if we have already been there, look for the
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   807
		     position offset, and scroll the fileList
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   808
		    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   809
		    idx := DirectoryHistory indexOf:path.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   810
		    idx ~~ 0 ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   811
			|pos|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   812
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   813
			pos := DirectoryHistoryWhere at:idx.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   814
			pos notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   815
			    fileListView scrollToLine:pos
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   816
			]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   817
		    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   818
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   819
		    updateHistory ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   820
			|pos|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   821
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   822
			(DirectoryHistory includes:path) ifFalse:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   823
			    DirectoryHistory size >= HistorySize ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   824
				DirectoryHistory removeLast.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   825
				DirectoryHistoryWhere removeLast
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   826
			    ]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   827
			] ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   828
			    "already been there before; move the entry to
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   829
			     the beginning, so it will fall out later."
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
   830
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   831
			    idx := DirectoryHistory indexOf:path.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   832
			    DirectoryHistory removeIndex:idx.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   833
			    pos := DirectoryHistoryWhere at:idx.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   834
			    DirectoryHistoryWhere removeIndex:idx.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   835
			].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   836
			DirectoryHistory addFirst:path.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   837
			DirectoryHistoryWhere addFirst:pos.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   838
		    ].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   839
47
94f7b0e07ff5 *** empty log message ***
claus
parents: 45
diff changeset
   840
		    ^ self
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   841
		].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   842
		msg := 'cannot change directory to ''%1'' !!'
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   843
	    ] ifFalse:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   844
		msg := 'cannot read directory ''%1'' !!'
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   845
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   846
	] ifFalse:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   847
	    msg := '''%1'' is not a directory !!'
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   848
	].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   849
	self showAlert:(resources string:msg with:fileName) with:nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   850
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   851
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   852
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   853
doChangeToParentDirectory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   854
    "go to home directory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   855
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   856
    self doChangeCurrentDirectoryTo:'..' updateHistory:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   857
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   858
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   859
doChangeToHomeDirectory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   860
    "go to home directory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   861
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   862
    self doChangeCurrentDirectoryTo:(OperatingSystem getHomeDirectory) updateHistory:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   863
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   864
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   865
changeToPreviousDirectory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   866
    "if text was modified show a queryBox, 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   867
     otherwise change immediately to previous directory."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   868
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   869
    previousDirectory isNil ifTrue:[^ self].
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   870
    (self askIfModified:'contents has not been saved.\\Modifications will be lost when directory is changed.'
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   871
	      yesButton:'change') ifTrue:[
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   872
	self doChangeCurrentDirectoryTo:previousDirectory updateHistory:false 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
   873
    ]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   874
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   875
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   876
setCurrentDirectory:aPathName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   877
    "setup for another directory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   878
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   879
    |newDirectory info|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   880
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   881
    aPathName isEmpty ifTrue:[^ self].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   882
    (currentDirectory isDirectory:aPathName) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   883
	newDirectory := FileDirectory directoryNamed:aPathName in:currentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   884
	newDirectory notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   885
	    currentDirectory := newDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   886
	    fileListView contents:nil.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   887
	    currentFileName := nil.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   888
	    self updateCurrentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   889
	    info := self getInfoFile.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   890
	    self showInfo:info.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   891
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   892
	     tell my subview (whatever that is) to start its file-dialog
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   893
	     (i.e. save-as etc.) in that directory
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   894
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   895
	    (subView respondsTo:#directoryForFileDialog:) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   896
		subView directoryForFileDialog:currentDirectory
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   897
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   898
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   899
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   900
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   901
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   902
readFile:fileName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   903
    "read in the file, answer its contents as Text"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   904
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   905
    ^ self readFile:fileName lineDelimiter:Character cr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   906
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   907
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   908
readStream:aStream
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   909
    "read in from aStream, answer its contents as Text"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   910
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   911
    ^ self readStream:aStream lineDelimiter:Character cr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   912
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   913
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   914
readFile:fileName lineDelimiter:aCharacter 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   915
    "read in the file, answer its contents as Text. The files lines are delimited by aCharacter."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   916
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
   917
    |stream text msg sz|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   918
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   919
    stream := FileStream readonlyFileNamed:fileName in:currentDirectory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   920
    stream isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   921
	msg := (resources string:'cannot read file ''%1'' !!' with:fileName).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   922
	self showAlert:msg with:(FileStream lastErrorString).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   923
	^ nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   924
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   925
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   926
    "for very big files, give ObjectMemory a hint, to preallocate more"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   927
    (sz := stream size) > 1000000 ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   928
	Processor activeProcess withLowerPriorityDo:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   929
	    ObjectMemory announceSpaceNeed:(sz + (sz // 5)) "/ add 20% for tab expansion
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   930
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   931
"/        ObjectMemory moreOldSpace:(sz + (sz // 5)) "/ add 20% for tab expansion
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   932
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   933
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   934
    text := self readStream:stream lineDelimiter:aCharacter.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   935
    stream close.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   936
    ^ text
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   937
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   938
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   939
readStream:aStream lineDelimiter:aCharacter 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   940
    "read from aStream, answer its contents as Text. The files lines are delimited by aCharacter."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   941
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
   942
    |text line|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   943
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   944
    aCharacter == Character cr ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   945
	text := aStream contents
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   946
    ] ifFalse:[
59
d8ff572dd357 Text eliminated
claus
parents: 58
diff changeset
   947
	text := StringCollection new.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   948
	[aStream atEnd] whileFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   949
	    line := aStream upTo:aCharacter.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   950
	    text add:line
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   951
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   952
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   953
    ^ text
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   954
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   955
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   956
writeFile:fileName text:someText 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   957
    |stream msg startNr nLines string|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   958
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   959
    self withCursor:(Cursor write) do:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   960
	stream := FileStream newFileNamed:fileName in:currentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   961
	stream isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   962
	    msg := (resources string:'cannot write file ''%1'' !!' with:fileName).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   963
	    self showAlert:msg with:(FileStream lastErrorString)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   964
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   965
	    someText isString ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   966
		stream nextPutAll:someText.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   967
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   968
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   969
		 on some systems, writing linewise is very slow (via NFS)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   970
		 therefore we convert to a string and write it in chunks
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   971
		 to avoid creating huge strings, we do it in blocks of 1000 lines
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   972
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   973
		startNr := 1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   974
		nLines := someText size.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   975
		[startNr <= nLines] whileTrue:[
65
dd199ab603cf *** empty log message ***
claus
parents: 64
diff changeset
   976
		    string := someText asStringWithCRsFrom:startNr
dd199ab603cf *** empty log message ***
claus
parents: 64
diff changeset
   977
							to:((startNr + 1000) min:nLines)
dd199ab603cf *** empty log message ***
claus
parents: 64
diff changeset
   978
					      compressTabs:compressTabs.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   979
		    stream nextPutAll:string.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   980
		    startNr := startNr + 1000 + 1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   981
		].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   982
"/                someText do:[:line |
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   983
"/                  line notNil ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   984
"/                      stream nextPutAll:line.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   985
"/                  ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   986
"/                  stream cr.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   987
"/              ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   988
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   989
	    stream close.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   990
	    subView modified:false
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   991
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   992
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   993
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   994
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   995
doCreateDirectory:newName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   996
    (currentDirectory includes:newName) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   997
	self warn:'%1 already exists.' with:newName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
   998
	^ self
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   999
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1000
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1001
    (currentDirectory createDirectory:newName) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1002
	self updateCurrentDirectory
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1003
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1004
	self showAlert:(resources string:'cannot create directory ''%1'' !!' with:newName)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1005
		  with:(OperatingSystem lastErrorString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1006
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1007
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1008
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1009
doCreateFile:newName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1010
    |aStream box|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1011
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1012
    (currentDirectory includes:newName) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1013
	box := YesNoBox new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1014
	box title:(resources string:'%1 already exists\\truncate ?' with:newName) withCRs.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1015
	box okText:(resources string:'truncate').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1016
	box noText:(resources string:'cancel').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1017
	box noAction:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1018
	box showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1019
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1020
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1021
    aStream := FileStream newFileNamed:newName in:currentDirectory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1022
    aStream notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1023
	aStream close.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1024
	self updateCurrentDirectory
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1025
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1026
	self showAlert:(resources string:'cannot create file ''%1'' !!' with:newName)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1027
		  with:(FileStream lastErrorString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1028
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1029
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1030
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1031
binaryFileAction:aFilename
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1032
    "for some binary files, if double clicked, we can do some useful
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1033
     action ..."
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1034
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1035
    |isImage img|
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1036
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1037
    isImage := false.
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1038
    (aFilename endsWith:'.gif') ifTrue:[isImage := true].
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1039
    (aFilename endsWith:'.tiff') ifTrue:[isImage := true].
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1040
    (aFilename endsWith:'.pnm') ifTrue:[isImage := true].
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1041
    (aFilename endsWith:'.xbm') ifTrue:[isImage := true].
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1042
    isImage ifTrue:[
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1043
	img := Image fromFile:(currentDirectory pathName , '/' , aFilename).
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1044
	img notNil ifTrue:[
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1045
	    img inspect.
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1046
	    ^ true
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1047
	]
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1048
    ].
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1049
    ^ false
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1050
!
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1051
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1052
showFile:fileName insert:insert
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1053
    "show/insert contents of fileName in subView"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1054
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1055
    |buffer s n i ok convert text|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1056
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1057
    ((currentDirectory typeOf:fileName) == #regular) ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1058
	"clicked on something else - ignore it ..."
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1059
	self warn:(resources string:'''%1'' is not a regular file' with:fileName).
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1060
	^ self
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1061
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1062
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1063
     check if file is a text file
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1064
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1065
    s := FileStream readonlyFileNamed:fileName in:currentDirectory.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1066
    s isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1067
	self showAlert:(resources string:'cannot read file ''%1'' !!' with:fileName)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1068
		  with:(FileStream lastErrorString).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1069
	^ nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1070
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1071
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1072
    buffer := String new:300.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1073
    n := s nextBytes:300 into:buffer.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1074
    s close.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1075
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1076
    ok := true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1077
    1 to:n do:[:i |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1078
	(buffer at:i) isPrintable ifFalse:[ok := false].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1079
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1080
    ok ifFalse:[
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1081
	(self binaryFileAction:fileName) ifTrue:[^ self].
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1082
	(self confirm:(resources string:'''%1'' seems to be a binary file - continue anyway ?' with:fileName))
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1083
	ifFalse:[^ self]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1084
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1085
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1086
    convert := false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1087
    ok ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1088
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1089
	 check if line delimiter is a cr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1090
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1091
	i := buffer indexOf:Character cr.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1092
	i == 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1093
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1094
	     no newline found - try cr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1095
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1096
	    i := buffer indexOf:(Character value:13).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1097
	    i ~~ 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1098
		convert := self confirm:(resources string:'''%1'' seems to have CR as line delimiter - convert to NL ?' with:fileName).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1099
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1100
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1101
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1102
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1103
    insert ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1104
	"release old text first - we might need the memory in case of huge files
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1105
	 (helps if you have a 4Mb file in the view, and click on another biggy)"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1106
	subView contents:nil.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1107
    ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1108
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1109
    convert ifTrue:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1110
	text := self readFile:fileName lineDelimiter:(Character value:13)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1111
    ] ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1112
	text := self readFile:fileName.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1113
    ].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1114
    insert ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1115
	self show:text
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1116
    ] ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1117
	subView insertSelectedStringAtCursor:text asString
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1118
    ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1119
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1120
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1121
show:something
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1122
    "show something in subview and undef acceptAction"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1123
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1124
    subView contents:something.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1125
    subView acceptAction:nil.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1126
    subView modified:false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1127
    currentFileName := nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1128
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1129
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1130
doFileGet
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1131
    "get selected file - show contents in subView"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1132
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1133
    |fileName|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1134
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1135
    self withCursor:(Cursor read) do:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1136
	fileName := self getSelectedFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1137
	fileName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1138
	    (currentDirectory isDirectory:fileName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1139
		self doChangeCurrentDirectoryTo:fileName updateHistory:true.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1140
		self label:myName.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1141
		self iconLabel:myName
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1142
	    ] ifFalse:[
56
d0cb937cbcaa *** empty log message ***
claus
parents: 53
diff changeset
  1143
		(currentDirectory exists:fileName) ifFalse:[
d0cb937cbcaa *** empty log message ***
claus
parents: 53
diff changeset
  1144
		    self warn:(resources string:'oops, ''%1'' is gone' with:fileName).
d0cb937cbcaa *** empty log message ***
claus
parents: 53
diff changeset
  1145
		    ^ self
d0cb937cbcaa *** empty log message ***
claus
parents: 53
diff changeset
  1146
		].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1147
		timeOfFileRead := currentDirectory timeOfLastChange:fileName.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1148
		self showFile:fileName insert:false.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1149
		currentFileName := fileName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1150
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1151
		subView acceptAction:[:theCode |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1152
		    self writeFile:fileName text:theCode.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1153
		    timeOfFileRead := currentDirectory timeOfLastChange:fileName.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1154
		    self label:myName , ': ' , currentFileName
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1155
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1156
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1157
		(currentDirectory isWritable:fileName) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1158
		    self label:(myName , ': ' , fileName , ' (readonly)')
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1159
		] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1160
		    self label:(myName , ': ' , fileName)
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1161
		].
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1162
		self iconLabel:fileName
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1163
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1164
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1165
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1166
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1167
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1168
doExecuteCommand:command replace:replace
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1169
    "execute a unix command inserting the output of the command.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1170
     If replace is true, all text is replaced by the commands output;
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1171
     otherwise, its inserted as selected text at the cursor position."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1172
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1173
    |stream line lnr myProcess myPriority startLine startCol stopSignal
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1174
     access|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1175
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1176
    access := Semaphore forMutualExclusion.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1177
    stopSignal := Signal new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1178
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1179
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1180
     must take killButton out of my group
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1181
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1182
    windowGroup removeView:killButton.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1183
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1184
     bring it to front, and turn hidden-mode off
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1185
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1186
    killButton raise.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1187
    killButton hidden:false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1188
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1189
     it will make me raise stopSignal when pressed
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1190
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1191
    killButton action:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1192
	stream notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1193
	    access critical:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1194
		myProcess interruptWith:[stopSignal raise].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1195
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1196
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1197
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1198
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1199
     start it up under its own windowgroup
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1200
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1201
    killButton openAutonomous.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1202
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1203
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1204
     go fork a pipe and read it
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1205
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1206
    self label:(myName , ': executing ' , (command copyTo:(20 min:command size)) , ' ...').
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1207
    [
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1208
      self withWaitCursorDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1209
	stopSignal catch:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1210
	    startLine := subView cursorLine.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1211
	    startCol := subView cursorCol.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1212
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1213
	    stream := PipeStream readingFrom:('cd '
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1214
					      , currentDirectory pathName
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1215
					      , '; '
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1216
					      , command).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1217
	    stream notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1218
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1219
		 this can be a time consuming operation; therefore lower my priority
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1220
		"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1221
		myProcess := Processor activeProcess.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1222
		myPriority := myProcess priority.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1223
		myProcess priority:(Processor userBackgroundPriority).
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1224
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1225
		[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1226
		    replace ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1227
			subView list:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1228
			lnr := 1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1229
		    ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1230
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1231
		    [stream atEnd] whileFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1232
			(stream readWaitWithTimeout:0.5) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1233
			    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1234
			     data available
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1235
			    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1236
			    line := stream nextLine.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1237
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1238
			    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1239
			     need this critical section; otherwise,
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1240
			     we could get the signal while waiting for
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1241
			     an expose event ...
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1242
			    "
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1243
			    access critical:[                        
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1244
				line notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1245
				    replace ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1246
					subView at:lnr put:line.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1247
					lnr := lnr + 1.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1248
				    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1249
					subView insertStringAtCursor:line.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1250
					subView insertCharAtCursor:(Character cr).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1251
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1252
				].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1253
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1254
			].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1255
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1256
			shown ifTrue:[windowGroup processExposeEvents].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1257
			"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1258
			 give others running at same prio a chance too
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1259
			 (especially other FileBrowsers doing the same)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1260
			"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1261
			Processor yield
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1262
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1263
		] valueNowOrOnUnwindDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1264
		    stream close. stream := nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1265
		].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1266
		self updateCurrentDirectory
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1267
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1268
	    replace ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1269
		subView modified:false.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1270
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1271
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1272
      ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1273
    ] valueNowOrOnUnwindDo:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1274
	|wg|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1275
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1276
	self label:myName; iconLabel:myName.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1277
	myProcess notNil ifTrue:[myProcess priority:myPriority].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1278
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1279
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1280
	 remove the killButton from its group
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1281
	 (otherwise, it will be destroyed when we shut down the group)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1282
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1283
	wg := killButton windowGroup.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1284
	killButton windowGroup:nil.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1285
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1286
	 shut down the windowgroup
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1287
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1288
	wg notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1289
	    wg process terminate.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1290
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1291
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1292
	 hide the button, and make sure it will stay
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1293
	 hidden when we are realized again
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1294
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1295
	killButton unrealize.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1296
	killButton hidden:true.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1297
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1298
	 clear its action (actually not needed, but
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1299
	 releases reference to thisContext earlier)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1300
	"
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1301
	killButton action:nil.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1302
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1303
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1304
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1305
initialCommandFor:fileName into:aBox
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1306
    "set a useful initial command for execute box.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1307
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1308
     XXX should be changed to take stuff from a config file
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1309
     XXX or from resources."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1310
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1311
    ((currentDirectory typeOf:fileName) == #regular) ifTrue:[
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1312
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1313
	(currentDirectory isExecutable:fileName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1314
	    aBox initialText:(fileName , '<arguments>').
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1315
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1316
	].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1317
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1318
	"some heuristics - my personal preferences ...
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1319
	 (actually this should come from a configfile)"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1320
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1321
	(fileName endsWith:'akefile') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1322
	    aBox initialText:'make target' selectFrom:6 to:11.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1323
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1324
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1325
	(fileName endsWith:'.tar.Z') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1326
	    aBox initialText:'zcat ' , fileName , ' | tar tvf -'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1327
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1328
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1329
	(fileName endsWith:'.taz') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1330
	    aBox initialText:'zcat ' , fileName , ' | tar tvf -'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1331
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1332
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1333
	(fileName endsWith:'.tar') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1334
	    aBox initialText:'tar tvf ' , fileName selectFrom:1 to:7.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1335
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1336
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1337
	(fileName endsWith:'.zoo') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1338
	    aBox initialText:'zoo -list ' , fileName selectFrom:1 to:9.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1339
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1340
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1341
	(fileName endsWith:'.zip') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1342
	    aBox initialText:'unzip -l ' , fileName selectFrom:1 to:8.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1343
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1344
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1345
	(fileName endsWith:'.Z') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1346
	    aBox initialText:'uncompress ' , fileName selectFrom:1 to:10.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1347
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1348
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1349
	(fileName endsWith:'tar.gz') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1350
	    aBox initialText:('gunzip <' , fileName , ' | tar tvf -' ).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1351
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1352
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1353
	(fileName endsWith:'.gz') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1354
	    aBox initialText:('gunzip <' , fileName , ' >' , (fileName copyTo:(fileName size - 3))).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1355
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1356
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1357
	(fileName endsWith:'.html') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1358
	    aBox initialText:'chimera ' , fileName .
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1359
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1360
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1361
	(fileName endsWith:'.uue') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1362
	    aBox initialText:'uudecode ' , fileName selectFrom:1 to:8.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1363
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1364
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1365
	(fileName endsWith:'.c') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1366
	    aBox initialText:'cc -c ' , fileName selectFrom:1 to:5.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1367
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1368
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1369
	(fileName endsWith:'.cc') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1370
	    aBox initialText:'g++ -c ' , fileName selectFrom:1 to:6.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1371
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1372
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1373
	(fileName endsWith:'.C') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1374
	    aBox initialText:'g++ -c ' , fileName selectFrom:1 to:6.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1375
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1376
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1377
	(fileName endsWith:'.xbm') ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1378
	    aBox initialText:'bitmap ' , fileName selectFrom:1 to:6.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1379
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1380
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1381
	((fileName endsWith:'.ps') or:[fileName endsWith:'.PS']) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1382
	    aBox initialText:'ghostview ' , fileName selectFrom:1 to:9.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1383
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1384
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1385
	((fileName endsWith:'.1') 
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1386
	or:[fileName endsWith:'.man']) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1387
	    aBox initialText:'nroff -man ' , fileName selectFrom:1 to:10.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1388
	    ^ self
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1389
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1390
	aBox initialText:'<cmd> ' , fileName selectFrom:1 to:5
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1391
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1392
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1393
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1394
askForCommandThenDo:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1395
    "setup and launch a querybox to ask for unix command.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1396
     Then evaluate aBlock passing the command-string as argument."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1397
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1398
    |fileName sel box|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1399
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1400
    box := FilenameEnterBox 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1401
		title:(resources at:'execute unix command:')
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1402
	       okText:(resources at:'execute')
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1403
	       action:aBlock.
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1404
"/    box initialText:''.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1405
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1406
    sel := fileListView selection.
63
59973f55dd11 *** empty log message ***
claus
parents: 61
diff changeset
  1407
    sel isCollection ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1408
	sel notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1409
	    fileName := fileList at:sel
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1410
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1411
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1412
    fileName notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1413
	self initialCommandFor:fileName into:box.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1414
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1415
    box showAtPointer
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1416
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1417
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1418
selectedFilesDo:aBlock
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1419
    "evaluate aBlock on all selected files;
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1420
     show a wait cursor while doing this"
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1421
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1422
    |sel files|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1423
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1424
    sel := fileListView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1425
    sel notNil ifTrue:[
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1426
	self withWaitCursorDo:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1427
	    sel isCollection ifTrue:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1428
		files := sel collect:[:index | fileList at:index].
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1429
		files do:[:aFile |
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1430
		    aBlock value:aFile
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1431
		]
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1432
	    ] ifFalse:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1433
		aBlock value:(fileList at:sel)
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1434
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1435
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1436
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1437
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1438
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1439
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1440
doRename:oldName to:newName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1441
    (oldName notNil and:[newName notNil]) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1442
	(oldName isBlank or:[newName isBlank]) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1443
	    currentDirectory renameFile:oldName newName:newName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1444
	    self updateCurrentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1445
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1446
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1447
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1448
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1449
doRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1450
    "remove the selected file(s) - no questions asked"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1451
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1452
    |ok msg dir|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1453
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1454
    lockUpdate := true.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1455
    [
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1456
	self selectedFilesDo:[:fileName |
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1457
	    (currentDirectory isDirectory:fileName) ifTrue:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1458
		dir := FileDirectory directoryNamed:fileName in:currentDirectory.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1459
		dir isEmpty ifFalse:[
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1460
		    (self ask:(resources string:'directory ''%1'' is not empty\remove anyway ?' with:fileName)
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1461
			  yesButton:'remove') ifTrue:[
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1462
			 currentDirectory removeDirectory:fileName
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1463
		    ]
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1464
		] ifTrue:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1465
		    currentDirectory removeDirectory:fileName
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1466
		].
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1467
	    ] ifFalse:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1468
		ok := currentDirectory remove:fileName.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1469
		ok ifFalse:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1470
		    "was not able to remove it"
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1471
		    msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1472
		    self showAlert:msg with:(OperatingSystem lastErrorString)
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1473
		] ifTrue:[
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1474
"
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1475
		    self show:nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1476
"
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1477
		]
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1478
	    ]
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1479
	].
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1480
    ] valueNowOrOnUnwindDo:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1481
	lockUpdate := false.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1482
	fileListView deselect.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1483
	self updateCurrentDirectory.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1484
    ]                
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1485
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1486
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1487
onlyOneSelection
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1488
    "show a warning, that only one file must be selected for
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1489
     this operation"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1490
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1491
    self warn:'exactly one file must be selected !!'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1492
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1493
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1494
!FileBrowser methodsFor:'misc user interaction'!
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1495
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1496
terminate
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1497
    "exit FileBrowser"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1498
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1499
    (self askIfModified:'contents has not been saved.\\Modifications will be lost when FileBrowser is closed.'
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1500
	      yesButton:'close') ifTrue:[self destroy]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1501
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1502
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1503
destroy
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1504
    "destroy view and boxes"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1505
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1506
    ObjectMemory removeDependent:self.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1507
    Processor removeTimedBlock:checkBlock.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1508
    checkBlock := nil.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1509
    super destroy
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1510
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1511
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1512
update:what with:someArgument from:changedObject
64
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1513
    realized ifFalse:[^ self].
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1514
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1515
    (what == #aboutToExit) ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1516
	"system wants to shut down this
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1517
	 - if text was modified, pop up, and ask user and save if requested."
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1518
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1519
	(subView modified and:[subView contentsWasSaved not]) ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1520
	    shown ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1521
		self unrealize.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1522
		self realize
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1523
	    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1524
	    self raise.
64
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1525
"/            "
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1526
"/             mhmh: I dont like this - need some way to tell windowGroup to handle
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1527
"/             all pending exposures ...
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1528
"/            "
cea571d630e1 *** empty log message ***
claus
parents: 63
diff changeset
  1529
"/            self withAllSubViewsDo:[:view | view redraw].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1530
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1531
	    self ask:(resources at:'FileBrowser:\\contents has not been saved.\\Save before exiting ?') withCRs
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1532
		 yesButton:'save'
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1533
		 noButton:'don''t save'
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1534
		 action:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1535
			subView acceptAction notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1536
			    subView accept
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1537
			] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1538
			    subView save
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1539
			]
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1540
		    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1541
	].
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1542
	^ self
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1543
    ].
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
  1544
    changedObject == tabSpec ifTrue:[
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
  1545
	fileListView redraw
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
  1546
    ].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1547
! !
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1548
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1549
!FileBrowser methodsFor:'pathField user interaction'!
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1550
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1551
labelMenu
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1552
    |labels selectors args menu|
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1553
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1554
    labels := #(
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1555
		   'copy path'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1556
		   '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1557
		   'up'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1558
		   'back'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1559
		   'change to home-directory'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1560
		   'change directory ...'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1561
	       ).             
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1562
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1563
    selectors := #(
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1564
		    copyPath
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1565
		    nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1566
		    changeToParentDirectory
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1567
		    changeToPreviousDirectory
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1568
		    changeToHomeDirectory
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1569
		    changeCurrentDirectory
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1570
		  ).
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1571
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1572
    args := Array new:(labels size).
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1573
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1574
    DirectoryHistory size > 0 ifTrue:[
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1575
	labels := labels copyWith:'-'.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1576
	selectors := selectors copyWith:nil.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1577
	args := args copyWith:nil.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1578
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1579
	DirectoryHistory do:[:dirName |
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1580
	    labels := labels copyWith:dirName.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1581
	    selectors := selectors copyWith:#changeDirectoryTo:.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1582
	    args := args copyWith:dirName
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1583
	]
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1584
    ].
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1585
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1586
    menu := PopUpMenu 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1587
		labels:(resources array:labels)
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1588
		selectors:selectors
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1589
		args:args
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1590
		receiver:self.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1591
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1592
    previousDirectory isNil ifTrue:[
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1593
	menu disable:#changeToPreviousDirectory.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1594
    ].
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1595
    ^menu.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1596
!
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1597
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1598
copyPath
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1599
    "copy current path into cut & paste buffer"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1600
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1601
    Smalltalk at:#CopyBuffer put:currentDirectory pathName
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1602
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1603
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1604
changeDirectoryTo:aDirectoryName
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1605
    "sent from label menu to change back to a previous directory"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1606
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1607
    self doChangeCurrentDirectoryTo:aDirectoryName updateHistory:false
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1608
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1609
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1610
changeCurrentDirectory
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1611
    "if text was modified show a queryBox, 
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1612
     otherwise change immediately to directory"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1613
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1614
    (self askIfModified:'contents has not been saved.\\Modifications will be lost when directory is changed.'
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1615
	      yesButton:'change') ifTrue:[
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1616
	self queryForDirectoryToChange
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1617
    ]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1618
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1619
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1620
changeToParentDirectory
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1621
    "if text was modified show a queryBox, 
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1622
     otherwise change immediately to directory"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1623
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1624
    (self askIfModified:'contents has not been saved.\\Modifications will be lost when directory is changed.'
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1625
	      yesButton:'change') ifTrue:[
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1626
	 self doChangeToParentDirectory
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1627
    ]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1628
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1629
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1630
changeToHomeDirectory
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1631
    "if text was modified show a queryBox, 
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1632
     otherwise change immediately to directory"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1633
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1634
    (self askIfModified:'contents has not been saved.\\Modifications will be lost when directory is changed.'
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1635
	      yesButton:'change') ifTrue:[
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1636
	 self doChangeToHomeDirectory
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1637
    ]
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1638
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1639
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1640
queryForDirectoryToChange
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1641
    "query for new directory"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1642
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1643
    |queryBox|
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1644
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1645
    queryBox := FilenameEnterBox 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1646
		    title:(resources at:'change directory to:') withCRs
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1647
		    okText:(resources at:'change')
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1648
		    action:[:newName | self doChangeCurrentDirectoryTo:newName updateHistory:true].
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1649
"/    queryBox initialText:''.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1650
    queryBox showAtPointer
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1651
! !
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1652
57
36e13831b62d *** empty log message ***
claus
parents: 56
diff changeset
  1653
!FileBrowser methodsFor:'fileList user interaction'!
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1654
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1655
fileListMenu
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1656
    "return the menu to show in the fileList"
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1657
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1658
    |labels selectors m|
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1659
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1660
    labels := #(
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1661
		 'spawn'                   
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1662
		 '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1663
		 'get contents'                    
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1664
		 'insert contents'                    
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1665
		 'show info'             
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1666
		 'show full info'          
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1667
		 'fileIn'                 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1668
		 '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1669
		 'update'                 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1670
		 '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1671
		 'execute unix command ...'                
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1672
		 'st/x tools'                
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1673
		 '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1674
		 'remove'                 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1675
		 'rename ...'                 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1676
		 '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1677
		 'display long list'           
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1678
		 'show all files'           
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1679
		 '-'                               
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1680
		 'create directory ...'         
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1681
		 'create file ...'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1682
	       ).             
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1683
75
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1684
    showDotFiles ifTrue:[
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1685
	labels := labels copy.
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1686
	labels at:18 put:'hide hidden files'
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1687
    ].
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1688
    showLongList ifTrue:[
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1689
	labels := labels copy.
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1690
	labels at:17 put:'display short list'
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1691
    ].
f6310cbc93b6 *** empty log message ***
claus
parents: 73
diff changeset
  1692
73
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1693
    selectors := #(
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1694
		 fileSpawn
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1695
		 nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1696
		 fileGet
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1697
		 fileInsert
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1698
		 fileGetInfo
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1699
		 fileGetLongInfo
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1700
		 fileFileIn
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1701
		 nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1702
		 updateCurrentDirectory
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1703
		 nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1704
		 fileExecute
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1705
		 stxTools
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1706
		 nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1707
		 fileRemove
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1708
		 fileRename
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1709
		 nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1710
		 changeDisplayMode
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1711
		 changeDotFileVisibility
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1712
		 nil
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1713
		 newDirectory
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1714
		 newFile
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1715
		).
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1716
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1717
    m := PopUpMenu 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1718
	    labels:(resources array:labels)
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1719
	    selectors:selectors
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1720
	    receiver:self.
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1721
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1722
    m subMenuAt:#stxTools 
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1723
	    put:(PopUpMenu
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1724
		    labels:#(
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1725
			      'Changes browser'
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1726
			      'Editor '
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1727
			    )
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1728
		    selectors:#(
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1729
			      openChangesBrowser
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1730
			      openEditor
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1731
			      )
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1732
		    receiver:self).
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1733
    ^m
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1734
!
e332d9c71624 *** empty log message ***
claus
parents: 67
diff changeset
  1735
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1736
fileSpawn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1737
    "start another FileBrowser on the selected directory or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1738
     on the same directory if none is selected."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1739
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1740
    |any|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1741
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1742
    any := false.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1743
    self selectedFilesDo:[:fileName |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1744
	(currentDirectory isDirectory:fileName) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1745
	    self class openOn:(currentDirectory pathName , '/' , fileName).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1746
	    any := true
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1747
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1748
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1749
    any ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1750
	self class openOn:currentDirectory pathName
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1751
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1752
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1753
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1754
fileExecute
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1755
    "if text was modified show a queryBox,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1756
     otherwise pop up execute box immediately"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1757
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1758
    |action|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1759
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1760
    "
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1761
     this replaces everything by the commands output ...
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1762
    "
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1763
    action := [:command| self doExecuteCommand:command replace:true].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1764
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1765
    (self askIfModified:'contents has not been saved.\\Modifications will be lost when command is executed.'
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1766
	      yesButton:'execute') ifFalse:[^ self].
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1767
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1768
"/    "
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1769
"/     this inserts the commands output ...
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1770
"/    "
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1771
"/    action := [:command| self doExecuteCommand:command replace:false].
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1772
"/
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1773
    self askForCommandThenDo:action
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1774
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1775
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1776
openTool:aToolClass
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1777
    "open a tool on the selected file(s)"
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1778
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1779
    self selectedFilesDo:[:fileName |
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1780
	(currentDirectory isDirectory:fileName) ifFalse:[
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1781
	    aToolClass openOn:(currentDirectory pathName , '/' , fileName).
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1782
	]
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1783
    ].
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1784
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1785
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1786
openChangesBrowser
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1787
    "open a change browser on the selected file(s)"
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1788
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1789
    self openTool:ChangesBrowser
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1790
!
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1791
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1792
openEditor
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1793
    self openTool:EditTextView
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1794
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1795
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1796
fileSelect:lineNr
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1797
    "selected a file - do nothing here"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1798
    ^ self
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1799
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1800
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1801
fileInsert
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1802
    "insert contents of file at cursor"
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1803
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1804
    |fileName|
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1805
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1806
    fileName := self getSelectedFileName.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1807
    fileName notNil ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1808
	self showFile:fileName insert:true
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1809
    ]
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1810
!
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1811
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1812
fileGet
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1813
    "get contents of selected file into subView.
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1814
     If text was modified show a queryBox,
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1815
     otherwise get it immediately"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1816
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1817
    |fileName msg label|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1818
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1819
    (subView modified not or:[subView contentsWasSaved]) ifTrue:[^ self doFileGet].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1820
    fileName := self getSelectedFileName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1821
    fileName notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1822
	(currentDirectory isDirectory:fileName) ifTrue:[
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1823
	    msg := 'contents has not been saved.\\Modifications will be lost when directory is changed.'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1824
	    label := 'change'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1825
	] ifFalse:[
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1826
	    msg := 'contents has not been saved.\\Modifications will be lost when new file is read.'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1827
	    label := 'get'.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1828
	].
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1829
	(self ask:(resources at:msg) yesButton:label) ifTrue:[
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1830
	    self doFileGet
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1831
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1832
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1833
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1834
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1835
filePrint
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1836
    |fileName inStream printStream line|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1837
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1838
    self withCursor:(Cursor execute) do:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1839
	fileName := self getSelectedFileName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1840
	fileName notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1841
	    ((currentDirectory typeOf:fileName) == #regular) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1842
		inStream := FileStream readonlyFileNamed:fileName
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1843
						      in:currentDirectory.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1844
		inStream isNil ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1845
		    printStream := PrinterStream new.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1846
		    printStream notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1847
			[inStream atEnd] whileFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1848
			    line := inStream nextLine.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1849
			    printStream nextPutAll:line.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1850
			    printStream cr
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1851
			].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1852
			printStream close
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1853
		    ].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1854
		    inStream close
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1855
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1856
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1857
	].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1858
	0 "compiler hint"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1859
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1860
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1861
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1862
fileFileIn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1863
    "fileIn the selected file(s)"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1864
61
cb5e3560bd82 *** empty log message ***
claus
parents: 59
diff changeset
  1865
    |aStream upd here|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1866
67
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1867
    self selectedFilesDo:[:fileName |
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1868
	((currentDirectory typeOf:fileName) == #regular) ifTrue:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1869
	    here := currentDirectory pathName.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1870
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1871
	    ((fileName endsWith:'.o') 
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1872
	    or:[(fileName endsWith:'.so')
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1873
	    or:[fileName endsWith:'.obj']]) ifTrue:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1874
		Object abortSignal catch:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1875
		    ObjectFileLoader loadObjectFile:(here , '/' ,fileName)
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1876
		]
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1877
	    ] ifFalse:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1878
		aStream := FileStream readonlyFileNamed:fileName in:currentDirectory.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1879
		aStream isNil ifFalse:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1880
		    upd := Class updateChanges:false.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1881
		    [
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1882
			Smalltalk systemPath addFirst:here.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1883
			aStream fileIn.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1884
		    ] valueNowOrOnUnwindDo:[
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1885
			Smalltalk systemPath removeFirst.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1886
			Class updateChanges:upd.
09f1a9ed55ac *** empty log message ***
claus
parents: 65
diff changeset
  1887
			aStream close
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1888
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1889
		]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1890
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1891
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1892
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1893
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1894
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1895
fileRemove
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1896
    "remove the selected file(s).
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1897
     Query if user really wants to remove the file.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1898
     - should be enhanced, to look for a ~/.trash directory 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1899
     and move files there if it exists (without asking in this case)."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1900
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1901
    |sel q|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1902
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1903
    sel := fileListView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1904
    sel notNil ifTrue:[
63
59973f55dd11 *** empty log message ***
claus
parents: 61
diff changeset
  1905
	sel isCollection ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1906
	    q := resources string:'remove selected files ?'
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1907
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1908
	    q := resources string:'remove ''%1'' ?' with:(fileList at:sel)
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1909
	].
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1910
	(self ask:q yesButton:'remove') ifTrue:[self doRemove]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1911
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1912
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1913
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1914
newDirectory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1915
    "ask for and create a new directory"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1916
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
  1917
    |queryBox|
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
  1918
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1919
    queryBox := FilenameEnterBox 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1920
		    title:(resources at:'create new directory:') withCRs
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1921
		    okText:(resources at:'create')
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1922
		    action:[:newName | self doCreateDirectory:newName].
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1923
"/    queryBox initialText:''.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1924
    queryBox showAtPointer
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1925
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1926
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1927
newFile
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1928
    "ask for and create a new file"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1929
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
  1930
    |sel queryBox|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1931
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1932
    queryBox := FilenameEnterBox 
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1933
		    title:(resources at:'create new file:') withCRs
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1934
		    okText:(resources at:'create')
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1935
		    action:[:newName | self doCreateFile:newName].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1936
    sel := subView selection.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1937
    sel notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1938
	queryBox initialText:(sel asString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1939
    ] ifFalse:[
79
d78f92a07d5d *** empty log message ***
claus
parents: 75
diff changeset
  1940
"/        queryBox initialText:''
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1941
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1942
    queryBox showAtPointer
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1943
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1944
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1945
fileRename
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1946
    "rename the selected file(s)"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1947
37
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
  1948
    |queryBox|
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
  1949
50f59bad66b1 *** empty log message ***
claus
parents: 36
diff changeset
  1950
    queryBox := FilenameEnterBox new.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1951
    queryBox okText:(resources at:'rename').
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1952
    self selectedFilesDo:[:oldName |
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1953
	queryBox title:(resources string:'rename ''%1'' to:' with:oldName).
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1954
	queryBox initialText:oldName.
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1955
	queryBox action:[:newName | self doRename:oldName to:newName].
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1956
	queryBox showAtPointer
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1957
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1958
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1959
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1960
fileGetInfo:longInfo
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1961
    "get info on selected file - show it in a box"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1962
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1963
    |string|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1964
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1965
    string := self getFileInfoString:longInfo.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1966
    string notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 37
diff changeset
  1967
	self information:string
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1968
    ]
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1969
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1970
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1971
fileGetLongInfo
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1972
    "show long stat (file)-info"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1973
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1974
    self fileGetInfo:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1975
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1976
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1977
fileGetInfo
49
6fe62433cfa3 *** empty log message ***
claus
parents: 47
diff changeset
  1978
    "show short file (stat)-info"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1979
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1980
    self fileGetInfo:false
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1981
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1982
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1983
changeDisplayMode
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1984
    "toggle from long to short listing (and vice-versa)"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1985
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1986
    showLongList := showLongList not.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1987
    self updateCurrentDirectory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1988
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1989
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1990
changeDotFileVisibility
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1991
    "turn on/off visibility of files whose name starts with '.'"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1992
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1993
    showDotFiles := showDotFiles not.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1994
    self updateCurrentDirectory
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1995
! !