MCRepositoryBrowser.st
author Claus Gittinger <cg@exept.de>
Sat, 20 Aug 2011 14:05:44 +0200
changeset 289 ac6dfc008bfc
child 291 60b7b4e6a0e9
permissions -rw-r--r--
initial checkin

"{ 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 §'
! !