support namespace override
authorClaus Gittinger <cg@exept.de>
Wed, 07 Sep 2011 14:04:54 +0200
changeset 472 bd20d42c186c
parent 471 6ade6cb144aa
child 473 a2892180d5fc
support namespace override
MCRepositoryBrowser.st
--- a/MCRepositoryBrowser.st	Wed Sep 07 14:04:38 2011 +0200
+++ b/MCRepositoryBrowser.st	Wed Sep 07 14:04:54 2011 +0200
@@ -3,7 +3,8 @@
 ApplicationModel subclass:#MCRepositoryBrowser
 	instanceVariableNames:'repositoriesHolder packagesHolder versionsHolder
 		selectedVersionHolder worker selectedVersionDetailsHolder
-		selectedRepositoryHolder'
+		selectedRepositoryHolder targetPackage targetNamespace
+		lastPackage'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Monticello-St/X UI'
@@ -20,15 +21,15 @@
      the UIPainter may not be able to read the specification."
 
     "
-     UIPainter new openOnClass:MCRepositoryBrowser andSelector:#psckageDetailsSpec
-     MCRepositoryBrowser new openInterface:#psckageDetailsSpec
+     UIPainter new openOnClass:MCRepositoryBrowser andSelector:#packageDetailsSpec
+     MCRepositoryBrowser new openInterface:#packageDetailsSpec
     "
 
     <resource: #canvas>
 
     ^ 
      #(FullSpec
-        name: psckageDetailsSpec
+        name: packageDetailsSpec
         window: 
        (WindowSpec
           label: 'MC Package Details'
@@ -48,19 +49,10 @@
               isReadOnly: true
               hasKeyboardFocusInitially: false
             )
-           (ActionButtonSpec
-              label: 'Load'
-              name: 'LoadButton'
-              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
-              translateLabel: true
-              model: versionLoad
-            )
            )
          
         )
       )
-
-    "Modified: / 26-10-2010 / 21:57:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 windowSpec
@@ -161,30 +153,48 @@
                           createNewApplication: true
                           createNewBuilder: true
                         )
-                       (SubCanvasSpec
-                          name: 'VersionList'
-                          hasHorizontalScrollBar: false
-                          hasVerticalScrollBar: false
-                          majorKey: MCVersionList
-                          subAspectHolders: 
-                         (Array
-                            
-                           (SubChannelInfoSpec
-                              subAspect: inGeneratorHolder
-                              aspect: versionsHolder
-                            ) 
-                           (SubChannelInfoSpec
-                              subAspect: menuHolder
-                              aspect: versionsMenu
-                            )
-                            
-                           (SubChannelInfoSpec
-                              subAspect: selectionHolder
-                              aspect: selectedVersionHolder
-                            )
+                       (ViewSpec
+                          name: 'Box1'
+                          component: 
+                         (SpecCollection
+                            collection: (
+                             (SubCanvasSpec
+                                name: 'VersionList'
+                                layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
+                                hasHorizontalScrollBar: false
+                                hasVerticalScrollBar: false
+                                majorKey: MCVersionList
+                                subAspectHolders: 
+                               (Array
+                                  
+                                 (SubChannelInfoSpec
+                                    subAspect: inGeneratorHolder
+                                    aspect: versionsHolder
+                                  ) 
+                                 (SubChannelInfoSpec
+                                    subAspect: menuHolder
+                                    aspect: versionsMenu
+                                  )
+                                  
+                                 (SubChannelInfoSpec
+                                    subAspect: selectionHolder
+                                    aspect: selectedVersionHolder
+                                  )
+                                )
+                                createNewApplication: true
+                                createNewBuilder: true
+                              )
+                             (ActionButtonSpec
+                                label: 'Load'
+                                name: 'LoadButton'
+                                layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
+                                translateLabel: true
+                                model: versionLoad
+                                enableChannel: hasVersionSelectedHolder
+                              )
+                             )
+                           
                           )
-                          createNewApplication: true
-                          createNewBuilder: true
                         )
                        )
                      
@@ -208,6 +218,40 @@
 
 !MCRepositoryBrowser class methodsFor:'menu specs'!
 
+loadingMenu
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+
+    "
+     MenuEditor new openOnClass:MCRepositoryBrowser andSelector:#loadingMenu
+     (Menu new fromLiteralArrayEncoding:(MCRepositoryBrowser loadingMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Set Target Package...'
+            itemValue: setTargetPackage
+            translateLabel: true
+          )
+         (MenuItem
+            label: 'Set Target Namespace...'
+            itemValue: setTargetNamespace
+            translateLabel: true
+          )
+         )
+        nil
+        nil
+      )
+!
+
 mainMenu
     "This resource specification was automatically generated
      by the MenuEditor of ST/X."
@@ -258,6 +302,11 @@
             submenuChannel: versionsMenu
           )
          (MenuItem
+            label: 'Loading'
+            translateLabel: true
+            submenuChannel: loadingMenu
+          )
+         (MenuItem
             label: 'Help'
             translateLabel: true
             startGroup: conditionalRight
@@ -376,11 +425,13 @@
      #(Menu
         (
          (MenuItem
+            enabled: hasVersionSelectedHolder
             label: 'Load'
             itemValue: versionLoad
             translateLabel: true
           )
          (MenuItem
+            enabled: hasVersionSelectedHolder
             label: 'Load into Package...'
             itemValue: versionLoadIntoPackage
             translateLabel: true
@@ -395,6 +446,7 @@
             translateLabel: true
           )
          (MenuItem
+            enabled: hasVersionSelectedHolder
             label: 'Browse Unloadable'
             itemValue: versionBrowseUnloadable
             translateLabel: true
@@ -418,8 +470,6 @@
         nil
         nil
       )
-
-    "Modified: / 07-09-2011 / 11:44:59 / cg"
 ! !
 
 !MCRepositoryBrowser methodsFor:'accessing'!
@@ -455,10 +505,12 @@
 !
 
 hasVersionSelectedHolder
-
-    ^[self selectedVersionHolder value notNil]
+    ^ BlockValue
+        with:[:h | h value notNil]
+        argument:(self selectedVersionHolder)
 
     "Created: / 13-10-2010 / 17:08:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2011 / 13:14:17 / cg"
 !
 
 repositoryIsDirectory
@@ -620,19 +672,52 @@
     "Created: / 31-08-2011 / 09:16:33 / cg"
 !
 
+setTargetNamespace
+    "specify an st/x namespace to be used as default"
+
+    | nsName |
+
+    nsName := Dialog 
+                requestNameSpace:'Namepace to load code into:' 
+                initialAnswer:targetNamespace.    
+    nsName isEmptyOrNil ifTrue:[^self].
+
+    targetNamespace := nsName.
+
+    "Created: / 07-09-2011 / 12:49:42 / cg"
+!
+
+setTargetPackage
+    "specify an st/x package identifier to be used as default"
+
+    | package |
+
+    package := Dialog 
+                requestProject:'Default Smalltalk/X package to load code into:' 
+                initialAnswer:targetPackage
+                suggestions:#().    
+    package ifNil:[^self].
+
+    targetPackage := lastPackage := package.
+
+    "Created: / 07-09-2011 / 12:47:15 / cg"
+!
+
 showPackageInWinZip
     | entry tempFile fileStream|
 
     tempFile := Filename newTemporary withSuffix:'zip'.
 
-    entry :=  self selectedVersionHolder value.
-    entry repository
-        readStreamForFileNamed:entry name do:[:s |
-            fileStream := tempFile writeStream.
-            s reset.
-            s copyToEndInto:fileStream.
-            fileStream close.
-        ].
+    self withReadCursorDo:[
+        entry :=  self selectedVersionHolder value.
+        entry repository
+            readStreamForFileNamed:entry name do:[:s |
+                fileStream := tempFile writeStream.
+                s reset.
+                s copyToEndInto:fileStream.
+                fileStream close.
+            ].
+    ].
 
     Win32OperatingSystem
         openApplicationForDocument:tempFile operation:#open
@@ -693,43 +778,59 @@
 !
 
 versionLoad
+    "load into the default (or previously set) package"
 
     | entry |
 
     entry := self selectedVersionHolder value.
-    entry ifNotNil:[self versionLoad: entry asMCVersion into: PackageId noProjectID].
+    entry notNil ifTrue:[
+        self versionLoad: entry asMCVersion into:(targetPackage ? PackageId noProjectID)
+    ].
 
     "Modified: / 09-11-2010 / 13:26:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-08-2011 / 08:22:17 / cg"
+    "Modified (comment): / 07-09-2011 / 12:45:31 / cg"
 !
 
 versionLoad: version into: package
 
     self withWaitCursorDo:[
-        MCStXPackageQuery answer: package do: [
-            MCInteractiveLoadingQuery answer: true do:[
-                version load
-            ]
-        ].
+        MCStXNamespaceQuery 
+            answer:(NameSpace name:targetNamespace)   
+            do: [
+                MCStXPackageQuery 
+                    answer: package   
+                    do: [
+                        MCInteractiveLoadingQuery answer: true do:[
+                            version load
+                        ]
+                    ].
+            ].
     ].
 
     "Created: / 09-11-2010 / 13:25:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 06-03-2011 / 20:44:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 29-08-2011 / 08:22:30 / cg"
+    "Modified: / 07-09-2011 / 12:50:06 / cg"
 !
 
 versionLoadIntoPackage
+    "specify an st/x package identifier"
 
     | version package |
+
     version := self selectedVersionAsMCVersion.
     version ifNil:[^self].
+
     package := Dialog 
                 requestProject:'Smalltalk/X package to load code into' 
-                initialAnswer:nil suggestions:#().    
+                initialAnswer:lastPackage
+                suggestions:#().    
     package ifNil:[^self].
+
+    lastPackage := package.
     self versionLoad: version into: package
 
     "Modified: / 09-11-2010 / 13:33:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2011 / 12:47:51 / cg"
 ! !
 
 !MCRepositoryBrowser methodsFor:'updating'!
@@ -754,11 +855,11 @@
 !MCRepositoryBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCRepositoryBrowser.st,v 1.8 2011-09-07 10:29:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCRepositoryBrowser.st,v 1.9 2011-09-07 12:04:54 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCRepositoryBrowser.st,v 1.8 2011-09-07 10:29:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCRepositoryBrowser.st,v 1.9 2011-09-07 12:04:54 cg Exp $'
 !
 
 version_SVN