AbstractFileBrowser.st
branchjv
changeset 12517 3a904476a8d2
parent 12435 1f1faf35be04
parent 12497 216e10b026ab
child 12626 7ae48abfedac
--- a/AbstractFileBrowser.st	Fri Mar 15 10:14:37 2013 +0000
+++ b/AbstractFileBrowser.st	Fri Mar 22 09:21:23 2013 +0000
@@ -1393,6 +1393,12 @@
             isVisible: systemIsDOS
           )
          (MenuItem
+            label: 'Open Finder'
+            itemValue: doOpenFinder
+            translateLabel: true
+            isVisible: systemIsOSX
+          )
+         (MenuItem
             label: 'C Browser'
             itemValue: doOpenCBrowser
             translateLabel: true
@@ -1669,6 +1675,7 @@
     "Do not manually edit this!! If it is corrupted,
      the MenuEditor may not be able to read the specification."
 
+
     "
      MenuEditor new openOnClass:AbstractFileBrowser andSelector:#fileMenu
      (Menu new fromLiteralArrayEncoding:(AbstractFileBrowser fileMenu)) startUp
@@ -1682,7 +1689,6 @@
          (MenuItem
             label: 'Open'
             itemValue: doShowFileContents
-            translateLabel: true
           )
          (MenuItem
             label: '-'
@@ -1691,20 +1697,22 @@
             enabled: hasFileSelection
             label: 'FileIn'
             itemValue: fileFileIn
-            translateLabel: true
           )
          (MenuItem
             enabled: hasFileSelection
             label: 'FileIn to Namespace...'
             itemValue: fileFileInToNameSpace
-            translateLabel: true
+          )
+         (MenuItem
+            enabled: hasPackageDirectorySelected
+            label: 'Load Package from Here'
+            itemValue: fileFileInPackage
           )
          (MenuItem
             label: '-'
           )
          (MenuItem
             label: 'New'
-            translateLabel: true
             submenuChannel: newMenu
             keepLinkedMenu: true
           )
@@ -1715,31 +1723,26 @@
             enabled: hasSelection
             label: 'Cut'
             itemValue: cutFiles
-            translateLabel: true
           )
          (MenuItem
             enabled: hasSelection
             label: 'Copy'
             itemValue: copyFiles
-            translateLabel: true
           )
          (MenuItem
             enabled: canPaste
             label: 'Paste'
             itemValue: pasteFiles
-            translateLabel: true
           )
          (MenuItem
             enabled: hasSelection
             label: 'Delete'
             itemValue: deleteFiles
-            translateLabel: true
           )
          (MenuItem
             enabled: hasSelection
             label: 'Erase'
             itemValue: eraseFiles
-            translateLabel: true
           )
          (MenuItem
             label: '-'
@@ -1748,26 +1751,22 @@
             enabled: hasSelection
             label: 'Rename...'
             itemValue: renameSelection
-            translateLabel: true
             shortcutKey: Rename
           )
          (MenuItem
             enabled: hasSelection
             label: 'Move To...'
             itemValue: moveSelectionTo
-            translateLabel: true
           )
          (MenuItem
             enabled: hasSelection
             label: 'Copy To...'
             itemValue: copySelectionTo
-            translateLabel: true
           )
          (MenuItem
             enabled: hasSelection
             label: 'Properties...'
             itemValue: doShowProperties
-            translateLabel: true
           )
          (MenuItem
             label: '-'
@@ -1776,25 +1775,21 @@
          (MenuItem
             enabled: canAddToClassPath
             label: 'Add to Java Class Path'
-            translateLabel: true
             isVisible: javaSupportLoaded
           )
          (MenuItem
             enabled: canRemoveFromClassPath
             label: 'Remove from Java Class Path'
-            translateLabel: true
             isVisible: javaSupportLoaded
           )
          (MenuItem
             enabled: canAddToSourcePath
             label: 'Add to Java Source Path'
-            translateLabel: true
             isVisible: javaSupportLoaded
           )
          (MenuItem
             enabled: canRemoveFromSourcePath
             label: 'Remove from Java Source Path'
-            translateLabel: true
             isVisible: javaSupportLoaded
           )
          (MenuItem
@@ -1803,15 +1798,12 @@
          (MenuItem
             enabled: enableFileHistory
             label: 'File History'
-            translateLabel: true
             submenuChannel: menuFileHistory
           )
          )
         nil
         nil
       )
-
-    "Modified: / 07-02-2007 / 18:44:54 / cg"
 !
 
 fileOpMenu
@@ -4279,7 +4271,7 @@
     directoryOrNil isNil ifTrue:[
         dir := self theSingleSelectedDirectoryOrNil.
         dir isNil ifTrue:[ 
-            Dialog warn:'Please select a single directory.'.
+            Dialog warn:(resources string:'Please select a single directory.').
             AbortSignal raise.
             ^ nil
         ].
@@ -5694,36 +5686,53 @@
     self killAllRunningBackgroundProcesses.
     toRemove := OrderedCollection new.
 
-    executionBlock := [ : stream |
-        |cmd logArg|
-
-        OperatingSystem isMSWINDOWSlike ifTrue:[
-            logArg := '-m "' , 'removed via FileBrowser' , '"'.
-        ] ifFalse:[
-            logArg := '-m ''' , 'removed via FileBrowser' , ''''.
-        ].
-
-        filesToRemove do:[:fileName |
-            OperatingSystem accessDeniedErrorSignal handle:[:ex|
-                "was not able to remove it"
-                | lastError msg |
-                lastError := OperatingSystem lastErrorString.
-                msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
-                lastError isNil ifFalse:[
-                    msg := msg , '\\(' , lastError , ')'
+    executionBlock := 
+        [:stream |
+            |cmd logArg prevDir prevFiles|
+
+            OperatingSystem isMSWINDOWSlike ifTrue:[
+                logArg := '-m "' , 'removed via FileBrowser' , '"'.
+            ] ifFalse:[
+                logArg := '-m ''' , 'removed via FileBrowser' , ''''.
+            ].
+            prevFiles := ''.
+
+            filesToRemove do:[:fileName |
+                |dir file|
+
+                dir := fileName directory.
+                (prevDir notNil and:[prevDir ~= dir]) ifTrue:[
+                    cmd := 'cvs commit -l ',logArg, ' ',prevFiles.
+                    "/ Transcript show:prevDir; space; showCR:cmd.
+                    (self getExecutionBlockForCommand:cmd inDirectory:prevDir) value:stream.
+                    prevFiles := ''.
                 ].
-                Dialog warn:msg withCRs
-            ] do:[
-                (fileName isSymbolicLink) ifFalse:[
-                    fileName remove.
-                    cmd := ('cvs remove -f "',fileName baseName,'"').
-                    (self getExecutionBlockForCommand:cmd) value:stream.
-                ]
+
+                OperatingSystem accessDeniedErrorSignal handle:[:ex|
+                    "was not able to remove it"
+                    | lastError msg |
+                    lastError := OperatingSystem lastErrorString.
+                    msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
+                    lastError isNil ifFalse:[
+                        msg := msg , '\\(' , lastError , ')'
+                    ].
+                    Dialog warn:msg withCRs
+                ] do:[
+                    (fileName isSymbolicLink) ifFalse:[
+                        fileName remove.
+                        file := fileName baseName.
+                        cmd := ('cvs remove -f "',file,'"').
+                        (self getExecutionBlockForCommand:cmd inDirectory:dir) value:stream.
+                        "/ Transcript show:dir; space; showCR:cmd.
+                    ]
+                ].
+                prevDir := dir.
+                prevFiles := prevFiles,' ',file.
             ].
-        ].
-        cmd := 'cvs commit -l ',logArg.
-        (self getExecutionBlockForCommand:cmd) value:stream.
-    ].
+            cmd := 'cvs commit -l ',logArg, ' ',prevFiles.
+            "/ Transcript show:prevDir; space; showCR:cmd.
+            (self getExecutionBlockForCommand:cmd inDirectory:prevDir) value:stream.
+        ].
     nameString := 'Command> cvs remove and commit ', filesToRemove first baseName.
     filesToRemove size > 1 ifTrue:[
         nameString := nameString, ' ...'.
@@ -5732,28 +5741,10 @@
 !
 
 cvsRemoveFileAndCVSContainer
-    |sel question aswer|
-
-    sel := self currentSelectedFiles copy.
-    sel size > 0 ifTrue:[
-        sel size > 1 ifTrue:[
-            question := resources string:'Remove %1 selected files and their CVS containers ?' with:(sel size)
-        ] ifFalse:[
-            question := resources string:'Remove ''%1'' and its CVS container ?' with:(sel first baseName allBold)
-        ].
-
-        aswer := Dialog 
-                confirm:question withCRs
-                yesLabel:(resources string:'Remove')
-                noLabel:(resources string:'Cancel').
-        aswer ifTrue:[
-            self withActivityIndicationDo:[
-                self cvsRemoveAndRemoveFromCVS:sel
-            ]
-        ]
-    ]
-
-    "Modified: / 25-07-2006 / 09:07:09 / cg"
+    |files|
+
+    files := self currentSelectedFiles copy.
+    self removeFilesAndCVSContainers:files
 !
 
 cvsRevisionLog
@@ -5850,6 +5841,29 @@
         stream nextPutAll:'" '.
     ].
     ^ stream contents.
+!
+
+removeFilesAndCVSContainers:files
+    |numFiles question aswer|
+
+    (numFiles := files size) > 0 ifTrue:[
+        numFiles > 1 ifTrue:[
+            question := resources string:'Remove %1 selected files and their CVS containers ?' with:numFiles
+        ] ifFalse:[
+            question := resources string:'Remove ''%1'' and its CVS container ?' with:(files first baseName allBold)
+        ].
+
+        aswer := Dialog 
+                confirm:question withCRs
+                yesLabel:(resources string:'Remove')
+                noLabel:(resources string:'Cancel').
+
+        aswer ifTrue:[
+            self withActivityIndicationDo:[
+                self cvsRemoveAndRemoveFromCVS:files
+            ]
+        ]
+    ]
 ! !
 
 
@@ -6418,6 +6432,12 @@
     "Modified: / 21-07-2012 / 12:28:36 / cg"
 !
 
+doOpenFinder
+    self currentDirectory asFilename openFinder
+
+    "Modified: / 21-07-2012 / 12:28:36 / cg"
+!
+
 doOpenSettings
     self openSettingsDialog
 !
@@ -6519,6 +6539,29 @@
     "Modified: / 20-09-2006 / 14:29:24 / cg"
 !
 
+fileFileInPackage
+    "assuming the current directory is a package directory, load it"
+
+    |packageDir dir path top packageID|
+
+    "/ find a reasonable package-id (walk up until we find stx)
+    path := ''.
+    dir := packageDir := self currentDirectory.
+
+    top := (Smalltalk projectDirectoryForPackage:'stx') asFilename.
+    [ (dir / 'stx') = top ] whileFalse:[
+        path := dir baseName , '/' , path.
+        dir := dir directory.
+        dir isNil ifTrue:[
+            Dialog warning:'Could not find a path from "stx" to the current directory.'.
+            "/ should ask the user for a packageID and proceed...
+            ^  self.
+        ].
+    ].
+    packageID := path copyWithoutLast:1.
+    Smalltalk loadPackage:packageID fromDirectory:packageDir asAutoloaded:true
+!
+
 fileFileInToNameSpace
     "fileIn the selected file(s)<into a nameSpace"
 
@@ -8548,6 +8591,11 @@
     ^ OperatingSystem isMSDOSlike
 !
 
+systemIsOSX
+
+    ^ OperatingSystem isOSXlike
+!
+
 systemIsUnix
     ^ OperatingSystem isUNIXlike
 ! !
@@ -8588,6 +8636,14 @@
     "Modified: / 04-12-2006 / 13:14:25 / cg"
 !
 
+compressTabsOnSave
+    "if true, compress leading spaces (multiples of 8) with a tab character
+     when saving.
+     Default is true"
+
+    ^ true
+!
+
 currentFilesAreInSameDirectory
 
     ^ self parentDirectoriesOfCurrentFiles size < 2
@@ -8709,6 +8765,15 @@
     ^ nil
 !
 
+hasPackageDirectorySelected
+    |dir|
+
+    dir := self currentDirectory.
+    ^  dir notNil
+    and:[ dir exists
+    and:[ (dir / 'abbrev.stc') exists ]]
+!
+
 parentDirectoriesOfCurrentFiles
     ^ self currentSelectedObjects 
         collect:[:file | file directory] as:Set
@@ -9278,11 +9343,11 @@
 !AbstractFileBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.512 2013-03-02 13:19:08 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.516 2013-03-21 11:50:39 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.512 2013-03-02 13:19:08 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.516 2013-03-21 11:50:39 cg Exp $'
 !
 
 version_HG