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