SVN__WorkingCopyBrowser.st
changeset 9 c4040560b58d
child 210 7640b1431703
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SVN__WorkingCopyBrowser.st	Wed Sep 23 18:43:12 2009 +0200
@@ -0,0 +1,318 @@
+"{ Package: 'cvut:stx/goodies/libsvn' }"
+
+"{ NameSpace: SVN }"
+
+Browser subclass:#WorkingCopyBrowser
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SVN-UI-Browsers'
+!
+
+!WorkingCopyBrowser class methodsFor:'documentation'!
+
+version_SVN
+    ^'$Id$'
+! !
+
+!WorkingCopyBrowser class methodsFor:'interface specs'!
+
+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:SVN::WCStatusApp andSelector:#windowSpec
+     SVN::WCStatusApp new openInterface:#windowSpec
+     SVN::WCStatusApp open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: windowSpec
+        window: 
+       (WindowSpec
+          label: 'Working Copy Status'
+          name: 'Working Copy Status'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 300 300)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (DataSetSpec
+              name: 'WCEntryTable'
+              layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
+              model: selectionHolder
+              menu: workingCopyEntryMenu
+              hasHorizontalScrollBar: true
+              hasVerticalScrollBar: true
+              dataList: workingCopyEntriesAspect
+              useIndex: false
+              columnHolder: wcEntryTableColumns
+            )
+           (CheckBoxSpec
+              label: 'Show only changed etries'
+              name: 'ShowOnlyChanged'
+              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
+              model: showOnlyChanged
+              translateLabel: true
+            )
+           )
+         
+        )
+      )
+
+    "Modified: / 22-10-2008 / 11:30:58 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser class methodsFor:'menu specs'!
+
+workingCopyEntryMenu
+    "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:SVN::WCStatusApp andSelector:#workingCopyEntryMenu
+     (Menu new fromLiteralArrayEncoding:(SVN::WCStatusApp workingCopyEntryMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Show changes (against HEAD)'
+            itemValue: menuActionShowChangesAgainstHEAD
+            translateLabel: true
+            labelImage: (ResourceRetriever #'SVN::IconLibrary' compare 'Show changes (against HEAD)')
+          )
+         (MenuItem
+            label: 'Show changes'
+            itemValue: menuActionShowChanges
+            translateLabel: true
+            labelImage: (ResourceRetriever #'SVN::IconLibrary' compare 'Show changes')
+          )
+         )
+        nil
+        nil
+      )
+
+    "Modified: / 19-04-2008 / 13:13:43 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser class methodsFor:'plugIn spec'!
+
+aspectSelectors
+    "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."
+
+    "Return a description of exported aspects;
+     these can be connected to aspects of an embedding application
+     (if this app is embedded in a subCanvas)."
+
+    ^ #(
+        #model
+      ).
+
+    "Modified: / 21-10-2008 / 18:53:15 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser class methodsFor:'tableColumns specs'!
+
+wcEntryTableColumns
+    "This resource specification was automatically generated
+     by the DataSetBuilder of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the DataSetBuilder may not be able to read the specification."
+
+    "
+     DataSetBuilder new openOnClass:SVN::WorkingCopyStatusUI andSelector:#wcEntryTableColumns
+    "
+
+    <resource: #tableColumns>
+
+    ^#(
+      (DataSetColumnSpec
+         label: ''
+         activeHelpKey: ''
+         labelButtonType: Button
+         printSelector: statusIcon
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Container'
+         activeHelpKey: ''
+         labelButtonType: Button
+         printSelector: pathText
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Rev'
+         activeHelpKey: ''
+         labelButtonType: Button
+         printSelector: revision
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Author'
+         activeHelpKey: ''
+         labelButtonType: Button
+         printSelector: author
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      (DataSetColumnSpec
+         label: 'Date'
+         activeHelpKey: ''
+         labelButtonType: Button
+         printSelector: date
+         canSelect: false
+         showRowSeparator: false
+         showColSeparator: false
+       )
+      )
+
+    "Modified: / 18-08-2009 / 14:31:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser methodsFor:'accessing'!
+
+workingCopy
+
+    ^self model
+
+    "Created: / 11-04-2008 / 10:20:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 12-04-2008 / 21:02:26 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+workingCopy: aWorkingCopy
+
+    self model: aWorkingCopy
+
+    "Created: / 11-04-2008 / 10:20:22 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 12-04-2008 / 21:02:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser methodsFor:'aspects'!
+
+showOnlyChanged
+
+    |holder|
+
+    (holder := builder bindingAt:#showOnlyChanged) isNil ifTrue:[
+        holder := true asValue.
+        holder onChangeEvaluate:
+            [self model changed].
+        builder aspectAt:#showOnlyChanged put:holder.
+    ].
+    ^ holder.
+
+    "Created: / 21-10-2008 / 18:53:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+workingCopyEntriesAspect
+
+
+    |holder|
+
+    (holder := builder bindingAt:#workingCopyEntriesAspect) isNil ifTrue:[
+        holder := (PluggableAdaptor on: self modelHolder)
+                    getBlock:[:model|self workingCopyEntries]
+                    putBlock:[:model :value|self error:'Should never be sent']
+                    updateBlock:[:model :aspect :value|true].
+        builder aspectAt:#workingCopyEntriesAspect put:holder.
+    ].
+    ^ holder.
+
+    "Created: / 11-04-2008 / 10:24:40 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 21-10-2008 / 18:55:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser methodsFor:'hooks'!
+
+commonPostBuild
+
+    ^self model changed
+
+    "Created: / 11-04-2008 / 10:33:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 12-04-2008 / 21:05:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser methodsFor:'menu actions'!
+
+menuActionShowChanges
+
+    | entry log revision |
+    entry := self selection.
+    log := self model branch log: entry path.
+    revision := SVN::RevisionSelectionDialog openOn: log.
+    revision ifNotNil:
+        [self menuActionShowChangesAgainst: revision]
+
+    "Modified: / 22-10-2008 / 11:31:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+menuActionShowChangesAgainst: rev
+
+    | wc entry wcChangeSet repoChangeSet |
+    wc := self model.
+    entry := self selection.
+    wcChangeSet := wc changeSetForContainer: entry path.
+    repoChangeSet := wc branch changeSetForContainer: entry path revision: rev.
+    Tools::SmalltalkDiffTool
+        openOnDiffSet: (wcChangeSet diffSetsAgainst: repoChangeSet)
+        labelA: 'Working copy'
+        labelB: 'Revision ', rev printString
+        title: 'Changes for ', entry path
+
+    "Created: / 09-10-2008 / 20:14:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 09-08-2009 / 14:14:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+menuActionShowChangesAgainstHEAD
+
+    self menuActionShowChangesAgainst: SVN::Revision head
+
+    "Modified: / 09-10-2008 / 20:30:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser methodsFor:'private'!
+
+workingCopyEntries
+    | status |
+
+    status := self model status.
+    ^ self showOnlyChanged value 
+        ifTrue: [ status reject: [:entry | entry status isNormal ] ]
+        ifFalse: [ status ]
+
+    "Created: / 21-10-2008 / 18:55:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 18-08-2009 / 09:12:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!WorkingCopyBrowser class methodsFor:'documentation'!
+
+version
+    ^ '$Header$'
+! !