MCRepositoryBrowser.st
changeset 289 ac6dfc008bfc
child 291 60b7b4e6a0e9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCRepositoryBrowser.st	Sat Aug 20 14:05:44 2011 +0200
@@ -0,0 +1,480 @@
+"{ Package: 'stx:goodies/monticello' }"
+
+ApplicationModel subclass:#MCRepositoryBrowser
+	instanceVariableNames:'repositoriesHolder packagesHolder versionsHolder
+		selectedVersionHolder worker selectedVersionDetailsHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Monticello-St/X UI'
+!
+
+
+!MCRepositoryBrowser class methodsFor:'interface specs'!
+
+packageDetailsSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:MCRepositoryBrowser andSelector:#psckageDetailsSpec
+     MCRepositoryBrowser new openInterface:#psckageDetailsSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: psckageDetailsSpec
+        window: 
+       (WindowSpec
+          label: 'MC Package Details'
+          name: 'MC Package Details'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 533 326)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (TextEditorSpec
+              name: 'PackageDetails'
+              layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
+              model: selectedVersionDetailsHolder
+              hasHorizontalScrollBar: true
+              hasVerticalScrollBar: true
+              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
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:MCRepositoryBrowser andSelector:#windowSpec
+     MCRepositoryBrowser new openInterface:#windowSpec
+     MCRepositoryBrowser open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: windowSpec
+        window: 
+       (WindowSpec
+          label: 'MC Repository Browser'
+          name: 'MC Repository Browser'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 796 497)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (VariableVerticalPanelSpec
+              name: 'VariableVerticalPanel1'
+              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+              component: 
+             (SpecCollection
+                collection: (
+                 (VariableHorizontalPanelSpec
+                    name: 'VariableHorizontalPanel1'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (SubCanvasSpec
+                          name: 'RepositoryList'
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          majorKey: MCRepositoryList
+                          subAspectHolders: 
+                         (Array
+                            
+                           (SubChannelInfoSpec
+                              subAspect: inGeneratorHolder
+                              aspect: repositoriesHolder
+                            ) 
+                           (SubChannelInfoSpec
+                              subAspect: outGeneratorHolder
+                              aspect: packagesHolder
+                            )
+                          )
+                          createNewApplication: true
+                          createNewBuilder: true
+                        )
+                       (SubCanvasSpec
+                          name: 'PackageList'
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          majorKey: MCPackageList
+                          subAspectHolders: 
+                         (Array
+                            
+                           (SubChannelInfoSpec
+                              subAspect: inGeneratorHolder
+                              aspect: packagesHolder
+                            ) 
+                           (SubChannelInfoSpec
+                              subAspect: outGeneratorHolder
+                              aspect: versionsHolder
+                            )
+                          )
+                          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
+                            )
+                          )
+                          createNewApplication: true
+                          createNewBuilder: true
+                        )
+                       )
+                     
+                    )
+                    handles: (Any 0.333333333333333 0.666666666666667 1.0)
+                  )
+                 (UISubSpecification
+                    name: 'SubSpecification1'
+                    minorKey: packageDetailsSpec
+                  )
+                 )
+               
+              )
+              handles: (Any 0.5 1.0)
+            )
+           )
+         
+        )
+      )
+! !
+
+!MCRepositoryBrowser class methodsFor:'menu specs'!
+
+versionsMenu
+    "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:#versionsMenu
+     (Menu new fromLiteralArrayEncoding:(MCRepositoryBrowser versionsMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Load'
+            itemValue: versionLoad
+            translateLabel: true
+          )
+         (MenuItem
+            label: 'Load into package...'
+            itemValue: versionLoadIntoPackage
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            enabled: hasVersionSelectedHolder
+            label: 'Browse'
+            itemValue: versionBrowser
+            translateLabel: true
+          )
+         (MenuItem
+            label: 'Browse unloadable'
+            itemValue: versionBrowseUnloadable
+            translateLabel: true
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            enabled: hasVersionSelectedHolder
+            label: 'Inspect'
+            itemValue: versionInspect
+            translateLabel: true
+          )
+         )
+        nil
+        nil
+      )
+! !
+
+!MCRepositoryBrowser methodsFor:'accessing'!
+
+selectedVersion
+    "return the value in 'selectedVersionHolder'"
+
+    ^ self selectedVersionHolder value
+!
+
+selectedVersion: newValue
+    "set the value in 'selectedVersionHolder'"
+
+    self selectedVersionHolder value: newValue
+!
+
+selectedVersionAsMCVersion
+
+    | entry |
+    entry :=  self selectedVersionHolder value.
+    ^entry ifNil:[nil] ifNotNil:[entry asMCVersion].
+
+    "Created: / 13-10-2010 / 17:48:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCRepositoryBrowser methodsFor:'aspect-queries'!
+
+hasVersionSelectedHolder
+
+    ^[self selectedVersionHolder value notNil]
+
+    "Created: / 13-10-2010 / 17:08:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCRepositoryBrowser methodsFor:'aspects'!
+
+packagesHolder
+    "return/create the 'packagesHolder' value holder (automatically generated)"
+
+    packagesHolder isNil ifTrue:[
+        packagesHolder := ValueHolder new.
+    ].
+    ^ packagesHolder
+!
+
+packagesHolder:something
+    "set the 'packagesHolder' value holder (automatically generated)"
+
+    packagesHolder := something.
+!
+
+repositoriesHolder
+    "return/create the 'repositoriesHolder' value holder (automatically generated)"
+
+    repositoriesHolder isNil ifTrue:[
+        repositoriesHolder := ValueHolder with: MCRepositoryGroup default repositories.
+    ].
+    ^ repositoriesHolder
+
+    "Modified: / 16-09-2010 / 18:33:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+repositoriesHolder:something
+    "set the 'repositoriesHolder' value holder (automatically generated)"
+
+    repositoriesHolder := something.
+!
+
+selectedVersionDetailsHolder
+    <resource: #uiAspect>
+
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    selectedVersionDetailsHolder isNil ifTrue:[
+        selectedVersionDetailsHolder := '' asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       selectedPackageDetailsHolder addDependent:self.
+"/       selectedPackageDetailsHolder onChangeSend:#selectedPackageDetailsHolderChanged to:self.
+    ].
+    ^ selectedVersionDetailsHolder.
+
+    "Modified: / 17-09-2010 / 15:17:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selectedVersionHolder
+    "return/create the valueHolder 'selectedVersionHolder'"
+
+    selectedVersionHolder isNil ifTrue:[
+        selectedVersionHolder := ValueHolder with:nil "defaultValue here".
+        selectedVersionHolder onChangeSend: #updateVersionDetails to: self.        
+    ].
+    ^ selectedVersionHolder
+
+    "Modified: / 17-09-2010 / 15:23:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selectedVersionHolder:something
+    selectedVersionHolder := something.
+!
+
+versionsHolder
+    "return/create the 'versionsHolder' value holder (automatically generated)"
+
+    versionsHolder isNil ifTrue:[
+        versionsHolder := ValueHolder new.
+    ].
+    ^ versionsHolder
+!
+
+versionsHolder:something
+    "set the 'versionsHolder' value holder (automatically generated)"
+
+    versionsHolder := something.
+! !
+
+!MCRepositoryBrowser methodsFor:'menu actions'!
+
+versionBrowseUnloadable
+
+     | version snapshot loader unloadables |
+    version := self selectedVersionAsMCVersion.
+    version ifNil:[^self].
+    snapshot := version snapshot.
+    loader := MCPackageLoader new 
+                installSnapshot: snapshot;
+                yourself.
+    loader analyze.      
+    unloadables := ChangeSet withAll:
+        (loader unloadableDefinitions collect:
+            [:def|def asChange]).
+
+    (Tools::ChangeSetBrowser 
+        on: unloadables 
+        label: version info name  , ' (unloadable definitions)')
+        beTwoColumn;
+        open
+
+    "Modified: / 26-10-2010 / 23:04:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionBrowser
+
+    | version snapshot |
+    version := self selectedVersionAsMCVersion.
+    version ifNil:[^self].
+    snapshot := version snapshot.
+    (Tools::ChangeSetBrowser2 
+        on: snapshot asChangeSet
+        label: version info name)
+        beTwoColumn;
+        open
+
+    "Modified: / 04-08-2011 / 19:03:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionInspect
+
+    | v |
+    v := self selectedVersionAsMCVersion.
+    v ifNotNil:[v inspect]
+
+    "Modified: / 13-10-2010 / 17:48:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionLoad
+
+     | entry |
+    entry := self selectedVersionHolder value.
+    entry ifNotNil:[self versionLoad: entry asMCVersion into: PackageId noProjectID].
+
+    "Modified: / 09-11-2010 / 13:26:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionLoad: version into: package
+
+    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>"
+!
+
+versionLoadIntoPackage
+
+    | version package |
+    version := self selectedVersionAsMCVersion.
+    version ifNil:[^self].
+    package := Dialog 
+                requestProject:'Smalltalk/X package to load code into' 
+                initialAnswer:nil suggestions:#().    
+    package ifNil:[^self].
+    self versionLoad: version into: package
+
+    "Modified: / 09-11-2010 / 13:33:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCRepositoryBrowser methodsFor:'updating'!
+
+updateVersionDetails
+
+    |  versionEntry version |
+    worker ifNotNil:[worker terminate. worker := nil].
+    versionEntry := self selectedVersion.
+    versionEntry ifNil:[selectedVersionDetailsHolder value:'No version selected'. ^self].
+    worker := 
+        [[selectedVersionDetailsHolder value:'Reading ' , versionEntry name.
+        version := versionEntry asMCVersion.
+        version ifNotNil:
+            [selectedVersionDetailsHolder value: version summary]] ensure:[worker := nil]] newProcess.
+    worker resume.
+
+    "Created: / 17-09-2010 / 15:23:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 26-10-2010 / 22:08:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCRepositoryBrowser class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCRepositoryBrowser.st,v 1.1 2011-08-20 12:05:44 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCRepositoryBrowser.st,v 1.1 2011-08-20 12:05:44 cg Exp $'
+!
+
+version_SVN
+    ^ '§Id: MCRepositoryBrowser.st 34 2011-08-04 21:44:46Z vranyj1 §'
+! !