Further improvements in ChangeSetDiffTool jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 20 Mar 2012 12:36:40 +0000
branchjv
changeset 12200 807a52b94f2a
parent 12199 de37e205701f
child 12201 283826cb8bcc
Further improvements in ChangeSetDiffTool
Tools__ChangeSetDiffTool.st
Tools__ChangeSetSelectionDialog.st
Tools__ChangeSetSpec.st
extensions.st
--- a/Tools__ChangeSetDiffTool.st	Mon Mar 19 20:14:57 2012 +0000
+++ b/Tools__ChangeSetDiffTool.st	Tue Mar 20 12:36:40 2012 +0000
@@ -28,11 +28,12 @@
 "{ NameSpace: Tools }"
 
 ApplicationModel subclass:#ChangeSetDiffTool
-	instanceVariableNames:'listHolder singleSelectionHolder diffsetHolder titleHolder
-		firstColSelectionHolder navigatorPanelSpecHolder diffMenuHolder
-		diffsetHolderPrivate selectionHolder versionATextHolder
-		versionBTextHolder versionBaseTextHolder textDiffToolHolder
-		textDiffToolWindowSpecHolder mergeHolder mergeDataHolder'
+	instanceVariableNames:'diffInfoHolder listHolder singleSelectionHolder diffsetHolder
+		titleHolder firstColSelectionHolder navigatorPanelSpecHolder
+		diffMenuHolder diffsetHolderPrivate selectionHolder
+		versionATextHolder versionBTextHolder versionBaseTextHolder
+		textDiffToolHolder textDiffToolWindowSpecHolder mergeHolder
+		mergeDataHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Diff'
@@ -40,7 +41,8 @@
 
 SimpleDialog subclass:#OpenDialog
 	instanceVariableNames:'doAcceptEnabled changesetSpecAHolder changesetSpecBHolder
-		changesetSpecBaseHolder'
+		changesetSpecBaseHolder changesetSpecBaseEnabledHolder
+		changesetSpecMergedHolder changesetSpecMergedEnabledHolder'
 	classVariableNames:'LastDirectory'
 	poolDictionaries:''
 	privateIn:ChangeSetDiffTool
@@ -761,20 +763,6 @@
 
 !ChangeSetDiffTool methodsFor:'accessing'!
 
-beDiff3Tool
-
-    self mergeHolder value: false
-
-    "Created: / 17-03-2012 / 12:23:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-beMergeTool
-
-    self mergeHolder value: true
-
-    "Created: / 17-03-2012 / 12:23:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
 beSingleColumn
 
     self navigatorPanelSpecHolder value: #oneColumnNavigatorSpec
@@ -798,6 +786,13 @@
     "Created: / 20-11-2009 / 20:43:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+diffInfo
+
+    ^self diffInfoHolder value
+
+    "Created: / 20-03-2012 / 11:00:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 diffset
     
     ^self diffsetHolder value
@@ -906,6 +901,35 @@
 
 !ChangeSetDiffTool methodsFor:'aspects'!
 
+diffInfoHolder
+    "return/create the 'diffInfoHolder' value holder (automatically generated)"
+
+    diffInfoHolder isNil ifTrue:[
+        diffInfoHolder := ValueHolder new.
+        diffInfoHolder addDependent:self.
+    ].
+    ^ diffInfoHolder
+!
+
+diffInfoHolder:something
+    "set the 'diffInfoHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    diffInfoHolder notNil ifTrue:[
+        oldValue := diffInfoHolder value.
+        diffInfoHolder removeDependent:self.
+    ].
+    diffInfoHolder := something.
+    diffInfoHolder notNil ifTrue:[
+        diffInfoHolder addDependent:self.
+    ].
+    newValue := diffInfoHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:diffInfoHolder.
+    ].
+!
+
 diffListEntryLabelGeneratorAspect
 
     ^nil
@@ -1178,6 +1202,17 @@
 
 !ChangeSetDiffTool methodsFor:'change & update'!
 
+diffInfoChanged
+
+    | info |
+    info := self diffInfoHolder value.
+    info read.
+    self diffset: info diffset.
+    self updateViews
+
+    "Created: / 19-03-2012 / 23:40:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 diffsetChanged
 
     | ds |
@@ -1242,6 +1277,11 @@
         ^self.
     ].
 
+    sender == diffInfoHolder ifTrue:[
+        self diffInfoChanged.
+        ^self.
+    ].
+
     ^super update: aspect with: param from: sender
 
     "Created: / 05-12-2009 / 11:02:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1269,6 +1309,25 @@
                     enable
             ].
     ].
+!
+
+updateViews
+
+    self diffInfo isNil ifTrue:[ ^ self ].
+
+    self diffInfo isDiff3 ifTrue:[
+        textDiffToolHolder value isDiff3 ifFalse:[
+            textDiffToolHolder value: self textDiff3Tool.
+        ].
+        self mergeHolder value: self diffInfo isMerge.
+    ] ifFalse:[
+        textDiffToolHolder value isDiff2 ifFalse:[
+            textDiffToolHolder value: self textDiff2Tool.
+        ].
+        self mergeHolder value: false.
+    ]
+
+    "Created: / 20-03-2012 / 10:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool methodsFor:'initialization'!
@@ -1306,41 +1365,25 @@
 
 fileMenuOpen
 
-    | dlg a b base|
+    | dlg info |
     dlg := OpenDialog new.
     dlg open ifFalse:[^self].
-    a := dlg changeSetA.
-    b := dlg changeSetB.
-    base := dlg changeSetBase.
-    ^self fileMenuOpenOnDiffBetween: a and: b base: base.
-
-    "Modified: / 16-03-2012 / 13:51:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-fileMenuOpenOnDiffBetween: a and: b
-
-    ^self fileMenuOpenOnDiffBetween: a and: b base: nil.
-
-    "Modified: / 29-06-2011 / 08:10:17 / Jan Vrany <enter your email here>"
-    "Modified: / 06-07-2011 / 12:56:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Created: / 16-03-2012 / 14:07:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    info := ChangeSetDiffInfo new.
+    info specA: dlg changeSetASpec.
+    info specB: dlg changeSetBSpec.
+    info specBase: dlg changeSetBaseSpec.
+    info specMerge: dlg changeSetMergedSpec.
+
+    ^self fileMenuOpenOnDiffInfo: info
+
+    "Modified: / 20-03-2012 / 11:12:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-fileMenuOpenOnDiffBetween: a and: b base: base
-
-    self diffset: (ChangeSetDiff versionA: a versionB: b versionBase: base).
-    base notNil ifTrue:[
-        textDiffToolHolder value isDiff3 ifFalse:[
-            textDiffToolHolder value: self textDiff3Tool.
-        ].
-    ] ifFalse:[
-        textDiffToolHolder value isDiff2 ifFalse:[
-            textDiffToolHolder value: self textDiff2Tool.
-        ].
-    ]
-
-    "Modified: / 29-06-2011 / 08:10:17 / Jan Vrany <enter your email here>"
-    "Created: / 16-03-2012 / 13:49:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+fileMenuOpenOnDiffInfo: info
+
+    self diffInfoHolder value: info
+
+    "Created: / 20-03-2012 / 00:04:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fileMenuSaveAsPatch
@@ -1484,6 +1527,20 @@
     ^ToolbarIconLibrary versionB24x24
 
     "Created: / 24-03-2010 / 20:50:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionBase24x24
+
+    ^ToolbarIconLibrary versionBase24x24
+
+    "Created: / 19-03-2012 / 23:11:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionMerged24x24
+
+    ^ToolbarIconLibrary versionMerged24x24
+
+    "Created: / 19-03-2012 / 23:34:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool::OpenDialog class methodsFor:'interface specs'!
@@ -1496,6 +1553,228 @@
      the UIPainter may not be able to read the specification."
 
     "
+     UIPainter new openOnClass:Tools::ChangeSetDiffTool::OpenDialog andSelector:#windowSpec
+     Tools::ChangeSetDiffTool::OpenDialog new openInterface:#windowSpec
+     Tools::ChangeSetDiffTool::OpenDialog open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: windowSpec
+        window: 
+       (WindowSpec
+          label: 'Open...'
+          name: 'Open...'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 640 457)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (VerticalPanelViewSpec
+              name: 'VerticalPanel1'
+              layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
+              horizontalLayout: fit
+              verticalLayout: top
+              horizontalSpace: 3
+              verticalSpace: 3
+              component: 
+             (SpecCollection
+                collection: (
+                 (ViewSpec
+                    name: 'B'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (UISubSpecification
+                          name: 'SubSpecification2'
+                          layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+                          minorKey: versionBLabelSpec
+                        )
+                       (SubCanvasSpec
+                          name: 'SubCanvas1'
+                          layout: (LayoutFrame 30 0 30 0 0 1 0 1)
+                          level: 0
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          majorKey: #'Tools::ChangeSetSelectionDialog'
+                          minorKey: windowSpecForEmbedding
+                          subAspectHolders: 
+                         (Array
+                            
+                           (SubChannelInfoSpec
+                              subAspect: specHolder
+                              aspect: changesetSpecBHolder
+                            )
+                          )
+                          createNewApplication: true
+                          createNewBuilder: true
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 640 99)
+                  )
+                 (ViewSpec
+                    name: 'A'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (UISubSpecification
+                          name: 'SubSpecification1'
+                          layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+                          minorKey: versionALabelSpec
+                        )
+                       (SubCanvasSpec
+                          name: 'ChangesetASpec'
+                          layout: (LayoutFrame 30 0 30 0 0 1 0 1)
+                          level: 0
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          majorKey: #'Tools::ChangeSetSelectionDialog'
+                          minorKey: windowSpecForEmbedding
+                          subAspectHolders: 
+                         (Array
+                            
+                           (SubChannelInfoSpec
+                              subAspect: specHolder
+                              aspect: changesetSpecAHolder
+                            )
+                          )
+                          createNewApplication: true
+                          createNewBuilder: true
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 640 99)
+                  )
+                 (ViewSpec
+                    name: 'Base'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (UISubSpecification
+                          name: 'SubSpecification3'
+                          layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+                          minorKey: versionBaseLabelSpec
+                        )
+                       (SubCanvasSpec
+                          name: 'SubCanvas2'
+                          layout: (LayoutFrame 30 0 30 0 0 1 0 1)
+                          level: 0
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          majorKey: #'Tools::ChangeSetSelectionDialog'
+                          minorKey: windowSpecForEmbedding
+                          subAspectHolders: 
+                         (Array
+                            
+                           (SubChannelInfoSpec
+                              subAspect: enabledHolder
+                              aspect: changesetSpecBaseEnabledHolder
+                            ) 
+                           (SubChannelInfoSpec
+                              subAspect: specHolder
+                              aspect: changesetSpecBaseHolder
+                            )
+                          )
+                          createNewApplication: true
+                          createNewBuilder: true
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 640 98)
+                  )
+                 (ViewSpec
+                    name: 'Merge'
+                    component: 
+                   (SpecCollection
+                      collection: (
+                       (UISubSpecification
+                          name: 'SubSpecification4'
+                          layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+                          minorKey: versionMergedLabelSpec
+                        )
+                       (SubCanvasSpec
+                          name: 'SubCanvas3'
+                          layout: (LayoutFrame 30 0 30 0 0 1 0 1)
+                          level: 0
+                          hasHorizontalScrollBar: false
+                          hasVerticalScrollBar: false
+                          majorKey: #'Tools::ChangeSetSelectionDialog'
+                          minorKey: windowSpecForEmbedding
+                          subAspectHolders: 
+                         (Array
+                            
+                           (SubChannelInfoSpec
+                              subAspect: enabledHolder
+                              aspect: changesetSpecMergedEnabledHolder
+                            ) 
+                           (SubChannelInfoSpec
+                              subAspect: specHolder
+                              aspect: changesetSpecMergedHolder
+                            )
+                          )
+                          createNewApplication: true
+                          createNewBuilder: true
+                        )
+                       )
+                     
+                    )
+                    extent: (Point 640 97)
+                  )
+                 )
+               
+              )
+            )
+           (HorizontalPanelViewSpec
+              name: 'ButtonPanel'
+              layout: (LayoutFrame 3 0 -30 1 -3 1 0 1)
+              horizontalLayout: right
+              verticalLayout: center
+              horizontalSpace: 3
+              verticalSpace: 3
+              reverseOrderIfOKAtLeft: true
+              component: 
+             (SpecCollection
+                collection: (
+                 (ActionButtonSpec
+                    label: 'OK'
+                    name: 'Button1'
+                    translateLabel: true
+                    model: doAccept
+                    enableChannel: doAcceptEnabled
+                    extent: (Point 125 22)
+                  )
+                 (ActionButtonSpec
+                    label: 'Cancel'
+                    name: 'Button2'
+                    translateLabel: true
+                    model: doCancel
+                    extent: (Point 125 22)
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+!
+
+windowSpec_old
+    "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:Tools::ChangeSetDiffBrowser::OpenDialog andSelector:#windowSpec
      Tools::ChangeSetDiffBrowser::OpenDialog new openInterface:#windowSpec
      Tools::ChangeSetDiffBrowser::OpenDialog open
@@ -1629,6 +1908,7 @@
       )
 
     "Modified: / 06-07-2011 / 11:32:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 19-03-2012 / 22:21:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool::OpenDialog class methodsFor:'interface specs - labels'!
@@ -1670,7 +1950,7 @@
               translateLabel: true
             )
            (LabelSpec
-              label: 'Version A'
+              label: 'Version A (working copy)'
               name: 'VersionALabel'
               layout: (LayoutFrame 30 0 5 0 0 1 0 1)
               translateLabel: true
@@ -1682,7 +1962,7 @@
         )
       )
 
-    "Modified: / 06-07-2011 / 11:24:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 19-03-2012 / 22:15:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 versionBLabelSpec
@@ -1722,7 +2002,7 @@
               translateLabel: true
             )
            (LabelSpec
-              label: 'Version B'
+              label: 'Version B (to be merged)'
               name: 'VersionBLabel'
               layout: (LayoutFrame 30 0 5 0 97 0 0 1)
               translateLabel: true
@@ -1736,7 +2016,127 @@
         )
       )
 
-    "Modified: / 06-07-2011 / 11:24:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 19-03-2012 / 22:15:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionBaseLabelSpec
+    "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:Tools::ChangeSetDiffTool::OpenDialog andSelector:#versionBaseLabelSpec
+     Tools::ChangeSetDiffTool::OpenDialog new openInterface:#versionBaseLabelSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: versionBaseLabelSpec
+        window: 
+       (WindowSpec
+          label: 'Version B'
+          name: 'Version B'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 300 30)
+          backgroundColor: (Color 57.2182803082322 81.2832837415122 91.0872053101396)
+          forceRecursiveBackground: true
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (LabelSpec
+              label: 'versionBase24x24'
+              name: 'VersionBaseIcon'
+              layout: (LayoutFrame 0 0 -12 0.5 27 0 12 0.5)
+              hasCharacterOrientedLabel: false
+              translateLabel: true
+            )
+           (LabelSpec
+              label: 'Base'
+              name: 'VersionBLabel'
+              layout: (LayoutFrame 30 0 5 0 68 0 0 1)
+              translateLabel: true
+              resizeForLabel: true
+              adjust: left
+              useDynamicPreferredWidth: true
+              usePreferredWidth: true
+            )
+           (CheckBoxSpec
+              label: ''
+              name: 'CheckBox1'
+              layout: (LayoutFrame -30 1 0 0 0 1 0 1)
+              model: changesetSpecBaseEnabledHolder
+              translateLabel: true
+            )
+           )
+         
+        )
+      )
+!
+
+versionMergedLabelSpec
+    "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:Tools::ChangeSetDiffTool::OpenDialog andSelector:#versionMergedLabelSpec
+     Tools::ChangeSetDiffTool::OpenDialog new openInterface:#versionMergedLabelSpec
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: versionMergedLabelSpec
+        window: 
+       (WindowSpec
+          label: 'Merge'
+          name: 'Merge'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 300 30)
+          backgroundColor: (Color 92.6909285114824 62.388036926833 93.2265201800565)
+          forceRecursiveBackground: true
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (LabelSpec
+              label: 'versionMerged24x24'
+              name: 'VersionMergedIcon'
+              layout: (LayoutFrame 0 0 -12 0.5 27 0 12 0.5)
+              hasCharacterOrientedLabel: false
+              translateLabel: true
+            )
+           (LabelSpec
+              label: 'Merge'
+              name: 'VersionBLabel'
+              layout: (LayoutFrame 30 0 5 0 68 0 0 1)
+              translateLabel: true
+              resizeForLabel: true
+              adjust: left
+              useDynamicPreferredWidth: true
+              usePreferredWidth: true
+            )
+           (CheckBoxSpec
+              label: ''
+              name: 'CheckBox1'
+              layout: (LayoutFrame -30 1 0 0 0 1 0 1)
+              model: changesetSpecMergedEnabledHolder
+              translateLabel: true
+            )
+           )
+         
+        )
+      )
+
+    "Modified: / 19-03-2012 / 23:36:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool::OpenDialog methodsFor:'accessing'!
@@ -1751,6 +2151,12 @@
     "Created: / 06-07-2011 / 11:36:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+changeSetASpec
+    ^self changesetSpecAHolder value.
+
+    "Created: / 20-03-2012 / 00:01:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 changeSetB
 
     | specB |
@@ -1761,6 +2167,12 @@
     "Created: / 06-07-2011 / 11:36:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+changeSetBSpec
+    ^self changesetSpecBHolder value.
+
+    "Created: / 20-03-2012 / 00:01:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 changeSetBase
 
     | specBase |
@@ -1769,6 +2181,28 @@
     ^specBase ifNil:[nil] ifNotNil:[specBase changeSet]
 
     "Created: / 16-03-2012 / 13:48:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changeSetBaseSpec
+    ^self changesetSpecBaseHolder value.
+
+    "Created: / 20-03-2012 / 00:01:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changeSetMerged
+
+    | specMerged |
+
+    specMerged := self changesetSpecMergedHolder value.
+    ^specMerged ifNil:[nil] ifNotNil:[specMerged changeSet]
+
+    "Created: / 20-03-2012 / 00:01:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changeSetMergedSpec
+    ^self changesetSpecMergedHolder value.
+
+    "Created: / 20-03-2012 / 00:01:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool::OpenDialog methodsFor:'aspects'!
@@ -1803,6 +2237,23 @@
     changesetSpecBHolder := something.
 !
 
+changesetSpecBaseEnabledHolder
+    "return/create the 'changesetSpecBaseEnabledHolder' value holder (automatically generated)"
+
+    changesetSpecBaseEnabledHolder isNil ifTrue:[
+        changesetSpecBaseEnabledHolder := false asValue
+    ].
+    ^ changesetSpecBaseEnabledHolder
+
+    "Modified: / 19-03-2012 / 23:20:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changesetSpecBaseEnabledHolder:something
+    "set the 'changesetSpecBaseEnabledHolder' value holder (automatically generated)"
+
+    changesetSpecBaseEnabledHolder := something.
+!
+
 changesetSpecBaseHolder
     "return/create the 'changesetSpecBHolder' value holder (automatically generated)"
 
@@ -1822,6 +2273,38 @@
     "Created: / 16-03-2012 / 13:49:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+changesetSpecMergedEnabledHolder
+    "return/create the 'changesetSpecMergedEnabledHolder' value holder (automatically generated)"
+
+    changesetSpecMergedEnabledHolder isNil ifTrue:[
+        changesetSpecMergedEnabledHolder := false asValue
+    ].
+    ^ changesetSpecMergedEnabledHolder
+
+    "Modified: / 19-03-2012 / 23:20:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changesetSpecMergedEnabledHolder:something
+    "set the 'changesetSpecMergedEnabledHolder' value holder (automatically generated)"
+
+    changesetSpecMergedEnabledHolder := something.
+!
+
+changesetSpecMergedHolder
+    "return/create the 'changesetSpecMergedHolder' value holder (automatically generated)"
+
+    changesetSpecMergedHolder isNil ifTrue:[
+        changesetSpecMergedHolder := ValueHolder new.
+    ].
+    ^ changesetSpecMergedHolder
+!
+
+changesetSpecMergedHolder:something
+    "set the 'changesetSpecMergedHolder' value holder (automatically generated)"
+
+    changesetSpecMergedHolder := something.
+!
+
 doAcceptEnabled
     <resource: #uiAspect>
 
@@ -1849,5 +2332,5 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeSetDiffTool.st 7944 2012-03-19 15:32:45Z vranyj1 $'
+    ^ '$Id: Tools__ChangeSetDiffTool.st 7946 2012-03-20 12:36:40Z vranyj1 $'
 ! !
--- a/Tools__ChangeSetSelectionDialog.st	Mon Mar 19 20:14:57 2012 +0000
+++ b/Tools__ChangeSetSelectionDialog.st	Tue Mar 20 12:36:40 2012 +0000
@@ -14,7 +14,7 @@
 "{ NameSpace: Tools }"
 
 SimpleDialog subclass:#ChangeSetSelectionDialog
-	instanceVariableNames:'specHolder specLabelList specLabelIndexHolder
+	instanceVariableNames:'enabledHolder specHolder specLabelList specLabelIndexHolder
 		specEditorSpecHolder'
 	classVariableNames:''
 	poolDictionaries:''
@@ -161,12 +161,14 @@
               layout: (LayoutFrame 103 0 3 0 -3 1 25 0)
               tabable: true
               model: specLabelIndexHolder
+              enableChannel: enabledHolder
               menu: specLabelList
               useIndex: true
             )
            (SubCanvasSpec
               name: 'SubCanvas1'
               layout: (LayoutFrame 3 0 30 0 -3 1 0 1)
+              level: 0
               hasHorizontalScrollBar: false
               hasVerticalScrollBar: false
               specHolder: specEditorSpecHolder
@@ -210,6 +212,7 @@
            (FilenameInputFieldSpec
               name: 'Directory'
               layout: (LayoutFrame 103 0 0 0 0 1 22 0)
+              enableChannel: enabledHolder
               model: directoryAspect
               acceptOnPointerLeave: true
               viewClassName: FilenameWidgetWithHistory
@@ -227,6 +230,56 @@
       )
 !
 
+editorSpecForFile
+    "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:Tools::ChangeSetSelectionDialog andSelector:#editorSpecForFile
+     Tools::ChangeSetSelectionDialog new openInterface:#editorSpecForFile
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(FullSpec
+        name: editorSpecForFile
+        window: 
+       (WindowSpec
+          label: 'Directory Spec Editor'
+          name: 'Directory Spec Editor'
+          min: (Point 10 10)
+          bounds: (Rectangle 0 0 441 310)
+        )
+        component: 
+       (SpecCollection
+          collection: (
+           (FilenameInputFieldSpec
+              name: 'Directory'
+              layout: (LayoutFrame 103 0 0 0 0 1 22 0)
+              enableChannel: enabledHolder
+              model: fileAspect
+              acceptOnPointerLeave: true
+              viewClassName: FilenameWidgetWithHistory
+            )
+           (LabelSpec
+              label: 'File:'
+              name: 'FileLabel'
+              layout: (LayoutFrame 0 0 3 0 100 0 22 0)
+              translateLabel: true
+              adjust: left
+            )
+           )
+         
+        )
+      )
+
+    "Modified: / 20-03-2012 / 11:13:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 editorSpecForPackage
     "This resource specification was automatically generated
      by the UIPainter of ST/X."
@@ -243,7 +296,7 @@
 
     ^ 
      #(FullSpec
-        name: 'editorSpecForPackage'
+        name: editorSpecForPackage
         window: 
        (WindowSpec
           label: 'Package Spec Editor'
@@ -264,6 +317,7 @@
            (InputFieldSpec
               name: 'EntryField1'
               layout: (LayoutFrame 103 0 0 0 -25 1 25 0)
+              enableChannel: enabledHolder
               model: packageAspect
               acceptOnReturn: true
               acceptOnTab: true
@@ -276,6 +330,7 @@
               layout: (LayoutFrame -25 1 0 0 0 1 25 0)
               translateLabel: true
               model: selectPackage
+              enableChannel: enabledHolder
             )
            )
          
@@ -298,9 +353,10 @@
 
     ^ #(
         #specHolder
+        #enabledHolder
       ).
 
-    "Modified: / 06-07-2011 / 10:57:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 19-03-2012 / 23:22:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetSelectionDialog methodsFor:'actions'!
@@ -334,6 +390,23 @@
     "Created: / 06-07-2011 / 10:48:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+enabledHolder
+    "return/create the 'enabledHolder' value holder (automatically generated)"
+
+    enabledHolder isNil ifTrue:[
+        enabledHolder := true asValue
+    ].
+    ^ enabledHolder
+
+    "Modified: / 19-03-2012 / 23:25:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+enabledHolder:something
+    "set the 'enabledHolder' value holder (automatically generated)"
+
+    enabledHolder := something.
+!
+
 specEditorSpecHolder
     "return/create the 'specEditorSpecHolder' value holder (automatically generated)"
 
@@ -439,6 +512,22 @@
     "Modified: / 06-07-2011 / 10:28:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+fileAspect
+    <resource: #uiAspect>
+
+    |holder|
+
+    (holder := builder bindingAt:#fileAspect) isNil ifTrue:[
+        holder := (AspectAdaptor forAspect:#file)
+                    subjectChannel: self specHolder.
+        builder aspectAt:#fileAspect put:holder.
+    ].
+    ^ holder.
+
+    "Modified: / 06-07-2011 / 10:28:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 19-03-2012 / 22:07:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 packageAspect
     <resource: #uiAspect>
 
@@ -511,5 +600,5 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeSetSelectionDialog.st 7854 2012-01-30 17:49:41Z vranyj1 $'
+    ^ '$Id: Tools__ChangeSetSelectionDialog.st 7946 2012-03-20 12:36:40Z vranyj1 $'
 ! !
--- a/Tools__ChangeSetSpec.st	Mon Mar 19 20:14:57 2012 +0000
+++ b/Tools__ChangeSetSpec.st	Tue Mar 20 12:36:40 2012 +0000
@@ -27,6 +27,20 @@
 	privateIn:ChangeSetSpec
 !
 
+ChangeSetSpec subclass:#Explicit
+	instanceVariableNames:'changeSet'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ChangeSetSpec
+!
+
+ChangeSetSpec subclass:#File
+	instanceVariableNames:'file'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:ChangeSetSpec
+!
+
 ChangeSetSpec subclass:#Package
 	instanceVariableNames:'package'
 	classVariableNames:''
@@ -50,6 +64,36 @@
 "
 ! !
 
+!ChangeSetSpec class methodsFor:'instance creation'!
+
+changeSet: changeset
+
+    ^Explicit new changeSet: changeset
+
+    "Created: / 19-03-2012 / 23:59:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+directory: directory
+
+    ^Directory new package: directory
+
+    "Created: / 19-03-2012 / 23:59:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+file: file
+
+    ^File new file: file
+
+    "Created: / 19-03-2012 / 23:58:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+package: package
+
+    ^Package new package: package
+
+    "Created: / 19-03-2012 / 23:58:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ChangeSetSpec class methodsFor:'accessing'!
 
 editorSpecSelector
@@ -68,9 +112,10 @@
 
 specClasses
 
-    ^self allSubclasses
+    ^self allSubclasses reject:[:e|e == Explicit]
 
     "Created: / 05-07-2011 / 23:30:45 / jv"
+    "Modified: / 19-03-2012 / 23:57:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetSpec methodsFor:'accessing'!
@@ -82,11 +127,29 @@
     "Created: / 05-07-2011 / 23:13:35 / jv"
 !
 
+directory
+    ^'N/A'
+
+    "Created: / 19-03-2012 / 23:31:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 editorSpecSelector
 
     ^self class editorSpecSelector
 
     "Created: / 06-07-2011 / 09:57:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+file
+    ^'N/A'
+
+    "Created: / 19-03-2012 / 23:31:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+package
+    ^'N/A'
+
+    "Created: / 19-03-2012 / 23:31:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetSpec::Directory class methodsFor:'accessing'!
@@ -132,6 +195,73 @@
     directory := aStringOrFilename.
 ! !
 
+!ChangeSetSpec::Explicit class methodsFor:'accessing'!
+
+editorSpecSelector
+    "superclass Tools::ChangeSetSpec class says that I am responsible to implement this method"
+
+    ^ self shouldImplement
+!
+
+label
+    "superclass Tools::ChangeSetSpec class says that I am responsible to implement this method"
+
+    ^ 'Explictly specified changeset'
+
+    "Modified: / 19-03-2012 / 23:57:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ChangeSetSpec::Explicit methodsFor:'accessing'!
+
+changeSet
+    "superclass Tools::ChangeSetSpec says that I am responsible to implement this method"
+
+    ^ self shouldImplement
+! !
+
+!ChangeSetSpec::File class methodsFor:'accessing'!
+
+editorSpecSelector
+    "superclass Tools::ChangeSetSpec class says that I am responsible to implement this method"
+
+    ^ #editorSpecForFile
+
+    "Modified: / 19-03-2012 / 22:04:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+label
+    "superclass Tools::ChangeSetSpec class says that I am responsible to implement this method"
+
+    ^ 'File'
+
+    "Modified: / 19-03-2012 / 22:04:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ChangeSetSpec::File methodsFor:'accessing'!
+
+changeSet
+    "superclass Tools::ChangeSetSpec says that I am responsible to implement this method"
+
+    | name |
+    name := file asString.
+    name size > 50 ifTrue:[
+        name := '...' , (name copyFrom: name size - 47)
+    ].
+
+    ^(ChangeSet fromFile: self file)
+        name: name
+
+    "Modified: / 20-03-2012 / 11:31:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+file
+    ^ file
+!
+
+file:something
+    file := something.
+! !
+
 !ChangeSetSpec::Package class methodsFor:'accessing'!
 
 editorSpecSelector
@@ -176,5 +306,5 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeSetSpec.st 7854 2012-01-30 17:49:41Z vranyj1 $'
+    ^ '$Id: Tools__ChangeSetSpec.st 7946 2012-03-20 12:36:40Z vranyj1 $'
 ! !
--- a/extensions.st	Mon Mar 19 20:14:57 2012 +0000
+++ b/extensions.st	Tue Mar 20 12:36:40 2012 +0000
@@ -753,6 +753,35 @@
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@_@C>@_<A?0G?0_? ?>C?<G?0_?!!?>G?8O?@G<@@@b') ; yourself); yourself]
 ! !
 
+!GenericToolbarIconLibrary class methodsFor:'image specs-versions'!
+
+versionMerged24x24
+    "This resource specification was automatically generated
+     by the ImageEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the ImageEditor may not be able to read the specification."
+
+    "
+     self versionMerged24x24 inspect
+     ImageEditor openOnClass:self andSelector:#versionMerged24x24
+     Icon flushCachedIcons
+    "
+
+    <resource: #image>
+
+    ^Icon
+        constantNamed:'GenericToolbarIconLibrary class versionMerged24x24'
+        ifAbsentPut:[(Depth8Image new) width: 24; height: 24; photometric:(#palette); bitsPerSample:(#(8)); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+@!!LNDADQE!!XVF!!0_H2D$H2@ H18"H!!8AO=SZ6]''\7^C"8.[&9.#*;N?2;_W6>]HXU^''.;.;.<OS4=OS4=?_8>O#;?O;=?>\RTMOM3L3K2<3M3<?Q5=/^8^W)
+9.[1:=T]Q<N:.[&8.K?A/\GA1LSG1<+J5-#$7<8VR*:.,+N6-+&9.[2<0LC@0LC@0<#B4L$ON:J*****+:.+*;N1-[V5-;.;0LB=1+8VN*J\)JF!!)JR#*J"+
+*:6-,[V5-+&9/;@MNIBQ$)JY$)JY''):^(:N#*J"/)+J/-I4LNXNK#H.N!!)JT$)JR%).[&Y.&)*J&*YLTM6&H"H"H"H.N#(:N#9BP$IZV&*JZ&8(UMU5,\8E9
+ V=2^XRH"8.K"8:O#9*V%''4UMT%HV6I1\WE1\W9/^XNC (NH"H.K#G@YM$EAP45_W&11[7E1^GM8\7M: (M3"VLULDMCRDMAP45[V6I"X&I"[F1,X''91_5 K
+LDMQUEEMRDMCPUQTW6!!+]&I,[HE5[D0KLU)ST5M(W5)TTT5MTUEQUE)SW6-SYC4JL65ST5MST5MST5MSS$9NS$9HQD9DRC8JLVI1[FI"X&I WE1ST5M[ZF!!_
+UEQNS30GLFI,\V11\W!!,X&I"Y&I!!W%9^T5MSWS0HLH]:^&93[798[G9/\V1,X&I!!WFA\Y30EMIF,%9RK_G%9\&=/[6=1[&91[GV@]DHDJ9>6+)2P"8"A!!7=?
+_7=?_7=?\7Q.^4@CA"X-I2\''I2</JR$)JR (JB (K"4,J"T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[28 1 19 26 0 23 36 0 35 57 0 48 55 1 50 58 0 51 61 0 54 57 3 52 56 0 54 63 0 57 64 0 58 63 0 62 67 3 66 66 0 68 69 5 67 70 6 68 70 0 72 71 0 73 57 15 60 65 17 63 72 9 70 79 0 77 70 0 74 72 0 75 61 25 59 81 2 79 74 13 71 74 1 77 76 4 79 70 15 72 66 23 68 78 7 81 75 19 76 81 12 83 61 25 67 75 21 77 78 23 79 91 5 94 114 6 111 122 0 119 124 0 121 130 0 123 118 0 120 110 25 104 119 0 122 119 17 114 120 0 123 125 20 115 129 2 127 135 0 131 137 0 134 139 0 136 125 26 118 138 1 141 137 22 130 142 9 143 138 16 142 139 31 136 142 22 145 145 26 147 147 16 155 154 0 166 159 22 161 128 73 126 148 48 147 186 0 187 155 40 156 187 0 189 196 0 193 188 0 190 188 0 191 156 31 162 189 0 192 180 0 187 157 32 163 198 0 197 164 20 172 191 4 193 200 0 200 182 3 189 156 57 155 193 9 194 202 0 202 203 0 204 196 13 195 152 66 152 194 0 199 205 0 206 164 41 168 206 0 207 197 17 195 195 0 201 207 0 208 188 16 192 196 0 202 198 20 195 207 0 209 196 0 203 197 0 204 167 45 171 199 23 196 198 0 205 208 0 211 192 23 194 200 26 196 189 0 201 199 2 206 201 29 196 203 7 208 202 31 197 192 5 203 200 0 210 173 52 176 206 13 209 201 0 211 195 11 204 199 33 198 214 18 211 204 36 198 201 0 212 208 17 210 202 0 213 197 15 205 190 33 195 203 0 214 184 47 187 210 21 211 202 39 200 208 41 201 211 24 212 200 22 207 202 25 208 214 28 214 204 28 209 198 1 216 207 47 203 207 31 211 200 45 202 185 65 187 208 33 212 198 32 208 209 35 213 210 38 214 212 40 215 213 42 216 207 55 208 202 40 211 193 73 194 214 44 217 205 42 213 216 46 218 213 28 223 206 44 214 208 47 215 220 49 221 214 62 214 221 51 222 192 87 193 210 50 217 206 83 201 215 64 215 211 51 218 224 55 224 213 53 219 217 67 217 227 58 226 218 68 218 215 56 221 218 58 223 213 80 212 220 71 220 219 60 224 229 62 229 220 61 225 231 64 230 223 74 222 201 96 202 222 63 226 224 75 223 225 76 224 218 85 217 224 65 228 226 78 224 224 67 229 218 77 222 228 80 226 229 82 227 226 70 231 230 83 228 223 81 226 211 105 211 225 92 223 233 85 230 226 93 224 224 84 228 231 75 235 227 95 225 234 87 232 219 94 223 230 98 228 228 89 232 217 106 222 234 102 232 225 100 229 226 101 230 228 104 232 213 116 219 229 105 233 231 107 235 224 114 229 199 149 203 242 102 244 216 137 220 205 135 215 237 113 241 234 128 234 238 114 242 223 126 229 226 134 228 236 130 236 225 128 231 229 131 234 240 134 239 233 117 242 230 133 236 239 128 243 236 143 238 238 145 239 238 123 247 243 133 247 238 146 240 215 161 223 241 148 243 250 144 249 235 156 239 225 155 235 237 158 241 229 163 235 249 142 255 242 161 245 247 149 252 238 154 246 246 170 245 249 151 254 249 153 255 238 170 243 230 176 238 245 161 253 247 163 255 236 181 244 245 166 255 243 172 253 245 190 253 243 184 254 246 193 255 238 193 253]; yourself]
+! !
+
 !Image methodsFor:'inspecting'!
 
 inspector2TabImage
@@ -1899,5 +1928,5 @@
 !stx_libtool class methodsFor:'documentation'!
 
 extensionsVersion_SVN
-    ^ '$Id: extensions.st 7890 2012-02-14 17:08:43Z vranyj1 $'
+    ^ '$Id: extensions.st 7946 2012-03-20 12:36:40Z vranyj1 $'
 ! !
\ No newline at end of file