--- a/FileDialog.st Wed Aug 21 17:24:13 2019 +0200
+++ b/FileDialog.st Wed Aug 21 17:24:29 2019 +0200
@@ -23,7 +23,8 @@
appendButtonVisibleHolder appendWasPressed
buttonPanelVisibleHolder appendLabelHolder browseVisibleHolder
selectedDeviceDrive listOfDeviceDrives rootDirectoryHolder
- initialRoot verticalPanelView okLabelEnabled'
+ initialRoot verticalPanelView okLabelEnabled
+ searchInfoBoxVisibleHolder searchedDirectoryInfoHolder'
classVariableNames:'LastExtent LastFindPattern'
poolDictionaries:''
category:'Interface-Tools-File'
@@ -794,24 +795,20 @@
^
#(FullSpec
name: windowSpec
- uuid: '7a45b8ee-e9f6-11e8-8cdd-b8f6b1108e05'
+ uuid: 'b13cef1a-c417-11e9-a4e5-10ddb1cc5928'
window:
(WindowSpec
label: 'FileDialog'
name: 'FileDialog'
uuid: '686277b6-e9f6-11e8-8cdd-b8f6b1108e05'
- min: (Point 10 10)
- bounds: (Rectangle 0 0 460 482)
- menu: mainMenu
+ min: (Point 10 10) bounds: (Rectangle 0 0 460 482) menu: mainMenu
performer: treeBrowser
- )
- component:
+ ) component:
(SpecCollection
collection: (
(VerticalPanelViewSpec
name: 'FilePanel'
- layout: (LayoutFrame 0 0 0 0 0 1 -40 1)
- uuid: '6862e00c-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 0 0 0 0 0 1 -40 1) uuid: '6862e00c-e9f6-11e8-8cdd-b8f6b1108e05'
horizontalLayout: fit
verticalLayout: bottomFit
horizontalSpace: 0
@@ -828,16 +825,14 @@
collection: (
(MenuPanelSpec
name: 'ToolBar1'
- layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 40 0)
- uuid: '6862e46c-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 40 0) uuid: '6862e46c-e9f6-11e8-8cdd-b8f6b1108e05'
tabable: true
menu: toolBarMenu
textDefault: true
- )
+ )
(VariableHorizontalPanelSpec
name: 'DeviceAndFilterPanel'
- layout: (LayoutFrame 0 0 40 0 0 1 70 0)
- uuid: '6862e674-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 0 0 40 0 0 1 70 0) uuid: '6862e674-e9f6-11e8-8cdd-b8f6b1108e05'
level: 1
showHandle: true
component:
@@ -851,18 +846,16 @@
collection: (
(ComboListSpec
name: 'ComboList1'
- layout: (LayoutFrame 1 0 1 0.0 -1 1 -1 1)
- uuid: '6862e9e4-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 1 0 1 0.0 -1 1 -1 1) uuid: '6862e9e4-e9f6-11e8-8cdd-b8f6b1108e05'
visibilityChannel: driveSelectorVisible
model: selectedDeviceDrive
comboList: listOfDeviceDrives
useIndex: false
hidePullDownMenuButton: false
- )
)
-
- )
- )
+ )
+ )
+ )
(ViewSpec
name: 'Box2'
uuid: '6862ec82-e9f6-11e8-8cdd-b8f6b1108e05'
@@ -872,15 +865,13 @@
(LabelSpec
label: 'Filter:'
name: 'FilterLabel'
- layout: (LayoutFrame 1 0 2 0 59 0 -2 1)
- uuid: '6862ed9a-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 1 0 2 0 59 0 -2 1) uuid: '6862ed9a-e9f6-11e8-8cdd-b8f6b1108e05'
translateLabel: true
adjust: right
- )
+ )
(InputFieldSpec
name: 'FilterEntryField'
- layout: (LayoutFrame 60 0 -27 1 -2 1 -2 1)
- uuid: '6862ef8e-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 60 0 -27 1 -2 1 -2 1) uuid: '6862ef8e-e9f6-11e8-8cdd-b8f6b1108e05'
model: filterHolder
immediateAccept: true
acceptOnReturn: true
@@ -888,79 +879,89 @@
acceptOnLostFocus: true
acceptOnPointerLeave: false
postBuildCallback: postBuildFilterField:
- )
)
-
- )
- )
+ )
+ )
)
-
- )
- handles: (Any 0.29999999999999999 1.0)
- )
+ )
+ ) handles: (Any 0.29999999999999999 1.0)
+ )
(SubCanvasSpec
name: 'DirectoryTreeBrowser'
- layout: (LayoutFrame 0 0.0 70 0 0 1.0 -34 1)
- uuid: '6862f1d2-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 0 0.0 70 0 0 1.0 -34 1) uuid: '6862f1d2-e9f6-11e8-8cdd-b8f6b1108e05'
tabable: true
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
majorKey: DirectoryTreeBrowser
subAspectHolders:
- (Array
-
+ (Array
(SubChannelInfoSpec
subAspect: filterModel
aspect: filterHolder
- )
+ )
(SubChannelInfoSpec
subAspect: rootHolder
aspect: rootDirectoryHolder
- )
-
+ )
(SubChannelInfoSpec
subAspect: showHiddenFiles
aspect: showHiddenFiles
- )
- )
- createNewApplication: true
+ )
+ ) createNewApplication: true
createNewBuilder: true
postBuildCallback: postBuildTreeBrowser:
- )
+ )
(LabelSpec
label: 'Filename:'
name: 'FilenameLabel'
- layout: (LayoutFrame 3 0 -28 1 110 0 -1 1)
- uuid: '6862f5b0-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 3 0 -28 1 110 0 -1 1) uuid: '6862f5b0-e9f6-11e8-8cdd-b8f6b1108e05'
translateLabel: true
labelChannel: filenameLabelHolder
adjust: left
- )
+ )
(FilenameInputFieldSpec
name: 'FilenameEntryField'
- layout: (LayoutFrame 110 0 -28 1 -2 1 -1 1)
- uuid: '6862f6be-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 110 0 -28 1 -2 1 -1 1) uuid: '6862f6be-e9f6-11e8-8cdd-b8f6b1108e05'
tabable: true
model: filenameHolder
immediateAccept: false
acceptOnPointerLeave: true
hasKeyboardFocusInitially: true
postBuildCallback: postBuildFileNameField:
- )
)
-
- )
- extent: (Point 460 442)
- )
+ (ViewSpec
+ name: 'SearchInfoBox'
+ layout: (LayoutFrame 0 0 -30 1 0 1 0 1) uuid: 'efe63378-c414-11e9-a4e5-10ddb1cc5928'
+ visibilityChannel: searchInfoBoxVisibleHolder
+ component:
+ (SpecCollection
+ collection: (
+ (LabelSpec
+ label: 'Searching:'
+ name: 'Label1'
+ layout: (LayoutFrame 3 0 -28 1 110 0 -1 1) uuid: '6862f5b0-e9f6-11e8-8cdd-b8f6b1108e05'
+ translateLabel: true
+ adjust: left
+ )
+ (LabelSpec
+ name: 'Label2'
+ layout: (LayoutFrame 110 0 -28 1 0 1 -1 1) uuid: '6862f5b0-e9f6-11e8-8cdd-b8f6b1108e05'
+ translateLabel: false
+ labelChannel: searchedDirectoryInfoHolder
+ adjust: left
+ )
+ )
+ )
+ )
+ )
+ ) extent: (Point 460 442)
)
-
- )
- postBuildCallback: postBuildVerticalPanelView:
- )
+ )
+ ) postBuildCallback: postBuildVerticalPanelView:
+ )
(HorizontalPanelViewSpec
name: 'ButtonPanel'
- layout: (LayoutFrame 0 0.0 -34 1 -16 1 0 1)
- uuid: '6862f89e-e9f6-11e8-8cdd-b8f6b1108e05'
+ layout: (LayoutFrame 0 0.0 -34 1 -16 1 0 1) uuid: '6862f89e-e9f6-11e8-8cdd-b8f6b1108e05'
visibilityChannel: buttonPanelVisibleHolder
horizontalLayout: fitSpace
verticalLayout: center
@@ -979,7 +980,7 @@
tabable: true
model: doCancel
extent: (Point 143 30)
- )
+ )
(ActionButtonSpec
label: 'Append'
name: 'appendButton'
@@ -990,7 +991,7 @@
tabable: true
model: appendPressed
extent: (Point 144 30)
- )
+ )
(ActionButtonSpec
label: 'OK'
name: 'okButton'
@@ -1002,16 +1003,13 @@
enableChannel: okLabelEnabled
isDefault: true
extent: (Point 144 30)
- )
)
-
- )
- keepSpaceForOSXResizeHandleH: true
- )
+ )
+ ) keepSpaceForOSXResizeHandleH: true
)
-
- )
- )
+ )
+ )
+ )
! !
!FileDialog class methodsFor:'menu specs'!
@@ -1032,116 +1030,115 @@
<resource: #menu>
^
- #(Menu
- (
- (MenuItem
- label: 'Directory'
- submenu:
- (Menu
- (
- (MenuItem
- label: 'Up'
- itemValue: doGoDirectoryUp
- )
- (MenuItem
- label: '-'
- )
- (MenuItem
- activeHelpKey: directoryBack
- enabled: enableBack
- label: 'Back'
- itemValue: doBack
- )
- (MenuItem
- activeHelpKey: directoryBack
- enabled: enableForward
- label: 'Forward'
- itemValue: doForward
- )
- (MenuItem
- label: '-'
- )
- (MenuItem
- enabled: enableHome
- label: 'Home Directory'
- itemValue: doGotoHomeDirectory
- )
- (MenuItem
- enabled: enableGotoDesktopDirectory
- label: 'Desktop Directory'
- itemValue: doGotoDesktopDirectory
- )
- (MenuItem
- enabled: enableGotoDocuments
- label: 'Documents Directory'
- itemValue: doGotoDocumentsDirectory
- )
- (MenuItem
- enabled: enableGotoDownloads
- label: 'Downloads Directory'
- itemValue: doGotoDownloadsDirectory
- )
- (MenuItem
- label: 'Bookmarks'
- submenuChannel: bookmarksMenu
- )
- (MenuItem
- label: 'Visited Directories'
- submenuChannel: visitedDirectoriesMenu
- )
- )
- nil
- nil
- )
- )
- (MenuItem
- label: 'View'
- submenu:
- (Menu
- (
- (MenuItem
- label: 'Sort'
- submenuChannel: sortMenu
- )
- (MenuItem
- label: 'Show'
- submenuChannel: showMenuSpecForDialog
- )
- (MenuItem
- label: '-'
- )
- (MenuItem
- label: 'Update'
- itemValue: updateCurrentDirectory
- )
- )
- nil
- nil
- )
- )
- (MenuItem
- label: 'Find'
- submenu:
- (Menu
- (
- (MenuItem
- label: 'File...'
- itemValue: doFindAndSelectFile
- )
- (MenuItem
- label: 'Next...'
- itemValue: doFindAndSelectNextFile
- shortcutKey: FindNext
- )
- )
- nil
- nil
- )
- )
+ #(Menu
+ (MenuItem
+ label: 'Directory'
+ submenu:
+ (Menu
+ (MenuItem
+ label: 'Up'
+ itemValue: doGoDirectoryUp
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ activeHelpKey: directoryBack
+ enabled: enableBack
+ label: 'Back'
+ itemValue: doBack
+ )
+ (MenuItem
+ activeHelpKey: directoryBack
+ enabled: enableForward
+ label: 'Forward'
+ itemValue: doForward
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ enabled: enableHome
+ label: 'Home Directory'
+ itemValue: doGotoHomeDirectory
+ labelImage: (ResourceRetriever ToolbarIconLibrary homeIcon16x16 'Home Directory')
+ )
+ (MenuItem
+ enabled: enableGotoDesktopDirectory
+ label: 'Desktop Directory'
+ itemValue: doGotoDesktopDirectory
+ labelImage: (ResourceRetriever ToolbarIconLibrary desktop16x16Icon 'Desktop Directory')
+ )
+ (MenuItem
+ enabled: enableGotoDocuments
+ label: 'Documents Directory'
+ itemValue: doGotoDocumentsDirectory
+ )
+ (MenuItem
+ enabled: enableGotoDownloads
+ label: 'Downloads Directory'
+ itemValue: doGotoDownloadsDirectory
+ )
+ (MenuItem
+ label: 'Bookmarks'
+ submenuChannel: bookmarksMenu
+ labelImage: (ResourceRetriever ToolbarIconLibrary bookmarks14x14 'Bookmarks')
+ )
+ (MenuItem
+ label: 'Visited Directories'
+ submenuChannel: visitedDirectoriesMenu
+ )
)
- nil
- nil
- )
+ )
+ (MenuItem
+ label: 'View'
+ submenu:
+ (Menu
+ (MenuItem
+ label: 'Sort'
+ submenuChannel: sortMenu
+ )
+ (MenuItem
+ label: 'Show'
+ submenuChannel: showMenuSpecForDialog
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ label: 'Update'
+ itemValue: updateCurrentDirectory
+ )
+ )
+ )
+ (MenuItem
+ label: 'Tools'
+ submenu:
+ (Menu
+ (MenuItem
+ label: 'Terminal'
+ itemValue: openTerminal
+ labelImage: (ResourceRetriever ToolbarIconLibrary terminal16x16Icon 'Terminal')
+ )
+ )
+ )
+ (MenuItem
+ label: 'Find'
+ submenu:
+ (Menu
+ (MenuItem
+ label: 'File...'
+ itemValue: doFindAndSelectFile
+ labelImage: (ResourceRetriever ToolbarIconLibrary search16x16Icon 'File...')
+ )
+ (MenuItem
+ label: 'Next...'
+ itemValue: doFindAndSelectNextFile
+ shortcutKey: FindNext
+ )
+ )
+ )
+ )
!
toolBarMenu
@@ -1727,6 +1724,24 @@
rootDirectoryHolder := aHolder.
!
+searchInfoBoxVisibleHolder
+ "set during search-file operation"
+
+ searchInfoBoxVisibleHolder isNil ifTrue:[
+ searchInfoBoxVisibleHolder := false asValue.
+ ].
+ ^ searchInfoBoxVisibleHolder
+!
+
+searchedDirectoryInfoHolder
+ "updated during search-file operation"
+
+ searchedDirectoryInfoHolder isNil ifTrue:[
+ searchedDirectoryInfoHolder := nil asValue.
+ ].
+ ^ searchedDirectoryInfoHolder
+!
+
selectedDeviceDrive
selectedDeviceDrive isNil ifTrue:[
@@ -2223,19 +2238,49 @@
!
doFindAndSelectFile
- "search the next file matching a requested pattern"
+ "search for a file matching a requested pattern"
+
+ |fileNameInEditField initialSearchPattern patternAndTopDirectoryForSearch
+ searchPattern topDirectoryForSearch searchRoot list|
- |searchPattern|
+ (fileNameInEditField := filenameField contents) notEmptyOrNil ifTrue:[
+ initialSearchPattern := fileNameInEditField asFilename baseName.
+ ] ifFalse:[
+ initialSearchPattern := LastFindPattern ? '*.txt'
+ ].
- searchPattern := Dialog
+ patternAndTopDirectoryForSearch := Dialog
request:'Filename Pattern (match):'
- initialAnswer:(LastFindPattern ? '*.txt').
- searchPattern isEmptyOrNil ifTrue:[^ self].
+ initialAnswer:initialSearchPattern
+ and:'Search under:'
+ initialAnswer:(directory ? Filename currentDirectory) name
+ label:'Search File'.
+ patternAndTopDirectoryForSearch isEmptyOrNil ifTrue:[^ self].
+
+ searchPattern := patternAndTopDirectoryForSearch first.
+ topDirectoryForSearch := patternAndTopDirectoryForSearch second.
+
+ LastFindPattern := searchPattern.
+
+ list := HierarchicalFileList new.
+ searchRoot := HierarchicalFileList::HierarchicalFileItem fileName:topDirectoryForSearch.
+ list root:searchRoot.
self withWaitCursorDo:[
- treeBrowser findAndSelectNextFileMatching:searchPattern.
-"/ treeBrowser findAndSelectFilesMatching:searchPattern.
- LastFindPattern := searchPattern.
+ [
+ |dirHolder|
+
+ dirHolder := self searchedDirectoryInfoHolder.
+ self searchInfoBoxVisibleHolder value:true.
+ self windowGroup processExposeEvents.
+
+ treeBrowser
+ findAndSelectNextFileMatching:searchPattern
+ under:searchRoot
+ searchInfoInto:[:path | dirHolder value:path. self windowGroup processExposeEvents].
+ ] ensure:[
+ self searchInfoBoxVisibleHolder value:false
+ ]
].
"Created: / 17-07-2018 / 12:44:20 / Claus Gittinger"
@@ -2309,6 +2354,12 @@
self doAccept
!
+openTerminal
+ "forward to the treebrowser component, which already has this functionality"
+
+ ^ treeBrowser openTerminal
+!
+
updateCurrentDirectory
treeBrowser updateCurrentDirectory
! !