Tools__ChangeSetDiffTool.st
branchjv
changeset 12320 5b4ec70d83c1
parent 12318 1dda95be3d40
child 12321 13d791d84a47
--- a/Tools__ChangeSetDiffTool.st	Wed Jan 16 11:59:55 2013 +0000
+++ b/Tools__ChangeSetDiffTool.st	Thu Jan 17 17:16:17 2013 +0000
@@ -35,7 +35,8 @@
 		versionBaseTextHolder textDiffToolHolder
 		textDiffToolWindowSpecHolder mergeHolder mergeDataHolder
 		showVersionMethodDiffsHolder showCopyrightMethodDiffsHolder
-		highlightConflictsHolder hasDiffsetHolder mergeSavedHolder'
+		highlightConflictsHolder hasDiffsetHolder mergeSavedHolder list1
+		list2'
 	classVariableNames:'LastDiffInfo'
 	poolDictionaries:''
 	category:'Interface-Diff'
@@ -277,45 +278,45 @@
              (Array
                 
                (SubChannelInfoSpec
+                  subAspect: highlightConflictsHolder
+                  aspect: highlightConflictsHolder
+                ) 
+               (SubChannelInfoSpec
                   subAspect: inGeneratorHolder
                   aspect: diffsetHolderPrivate
-                ) 
+                )
+                
                (SubChannelInfoSpec
                   subAspect: listEntryLabelGenerator
                   aspect: diffListEntryLabelGeneratorAspect
-                )
-                
+                ) 
                (SubChannelInfoSpec
                   subAspect: menuHolder
                   aspect: listMenuHolder
-                ) 
+                )
+                
                (SubChannelInfoSpec
                   subAspect: outGeneratorHolder
                   aspect: selectionHolder
+                ) 
+               (SubChannelInfoSpec
+                  subAspect: showCopyrightMethodDiffsHolder
+                  aspect: showCopyrightMethodDiffsHolder
                 )
                 
                (SubChannelInfoSpec
                   subAspect: showVersionMethodDiffsHolder
                   aspect: showVersionMethodDiffsHolder
                 )
-               (SubChannelInfoSpec
-                  subAspect: showCopyrightMethodDiffsHolder
-                  aspect: showCopyrightMethodDiffsHolder
-                )
-                (SubChannelInfoSpec
-                  subAspect: highlightConflictsHolder
-                  aspect: highlightConflictsHolder
-                )
               )
               createNewApplication: true
               createNewBuilder: false
+              postBuildCallback: list1View:
             )
            )
          
         )
       )
-
-    "Modified: / 01-08-2012 / 17:05:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 twoColumnNavigatorSpec
@@ -352,7 +353,7 @@
              (SpecCollection
                 collection: (
                  (SubCanvasSpec
-                    name: 'FirstColumn'
+                    name: 'LeftList'
                     hasHorizontalScrollBar: false
                     hasVerticalScrollBar: false
                     majorKey: #'Tools::ChangeSetDiffList'
@@ -360,41 +361,43 @@
                    (Array
                       
                      (SubChannelInfoSpec
+                        subAspect: highlightConflictsHolder
+                        aspect: highlightConflictsHolder
+                      ) 
+                     (SubChannelInfoSpec
                         subAspect: inGeneratorHolder
                         aspect: diffsetHolderPrivate
-                      ) 
+                      )
+                      
                      (SubChannelInfoSpec
                         subAspect: listEntryLabelGenerator
                         aspect: diffListEntryLabelGeneratorAspect
-                      )
-                      
+                      ) 
                      (SubChannelInfoSpec
                         subAspect: menuHolder
                         aspect: listMenuHolder
-                      ) 
+                      )
+                      
                      (SubChannelInfoSpec
                         subAspect: outGeneratorHolder
                         aspect: firstColSelectionHolder
+                      ) 
+                     (SubChannelInfoSpec
+                        subAspect: showCopyrightMethodDiffsHolder
+                        aspect: showCopyrightMethodDiffsHolder
                       )
                       
                      (SubChannelInfoSpec
                         subAspect: showVersionMethodDiffsHolder
                         aspect: showVersionMethodDiffsHolder
                       )
-                      (SubChannelInfoSpec
-                  subAspect: showCopyrightMethodDiffsHolder
-                  aspect: showCopyrightMethodDiffsHolder
-                )
-                (SubChannelInfoSpec
-                  subAspect: highlightConflictsHolder
-                  aspect: highlightConflictsHolder
-                )
                     )
                     createNewApplication: true
                     createNewBuilder: true
+                    postBuildCallback: list1View:
                   )
                  (SubCanvasSpec
-                    name: 'SecondColumn'
+                    name: 'RightList'
                     hasHorizontalScrollBar: false
                     hasVerticalScrollBar: false
                     majorKey: #'Tools::ChangeSetDiffList'
@@ -402,38 +405,40 @@
                    (Array
                       
                      (SubChannelInfoSpec
+                        subAspect: highlightConflictsHolder
+                        aspect: highlightConflictsHolder
+                      ) 
+                     (SubChannelInfoSpec
                         subAspect: inGeneratorHolder
                         aspect: firstColSelectionHolder
-                      ) 
+                      )
+                      
                      (SubChannelInfoSpec
                         subAspect: listEntryLabelGenerator
                         aspect: diffListEntryLabelGeneratorAspect
-                      )
-                      
+                      ) 
                      (SubChannelInfoSpec
                         subAspect: menuHolder
                         aspect: listMenuHolder
-                      ) 
+                      )
+                      
                      (SubChannelInfoSpec
                         subAspect: outGeneratorHolder
                         aspect: selectionHolder
+                      ) 
+                     (SubChannelInfoSpec
+                        subAspect: showCopyrightMethodDiffsHolder
+                        aspect: showCopyrightMethodDiffsHolder
                       )
                       
                      (SubChannelInfoSpec
                         subAspect: showVersionMethodDiffsHolder
                         aspect: showVersionMethodDiffsHolder
                       )
-                      (SubChannelInfoSpec
-                  subAspect: showCopyrightMethodDiffsHolder
-                  aspect: showCopyrightMethodDiffsHolder
-                )
-                (SubChannelInfoSpec
-                  subAspect: highlightConflictsHolder
-                  aspect: highlightConflictsHolder
-                )
                     )
                     createNewApplication: true
                     createNewBuilder: true
+                    postBuildCallback: list2View:
                   )
                  )
                
@@ -444,8 +449,6 @@
          
         )
       )
-
-    "Modified: / 01-08-2012 / 17:05:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 windowSpec
@@ -477,9 +480,15 @@
         component: 
        (SpecCollection
           collection: (
+           (MenuPanelSpec
+              name: 'ToolBar'
+              layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+              menu: toolbarMenu
+              textDefault: true
+            )
            (SubCanvasSpec
               name: 'InfoPanel'
-              layout: (LayoutFrame 0 0 0 0 0 1 40 0)
+              layout: (LayoutFrame 0 0 30 0 0 1 70 0)
               level: 0
               initiallyInvisible: true
               hasHorizontalScrollBar: false
@@ -489,14 +498,14 @@
             )
            (UISubSpecification
               name: 'Label'
-              layout: (LayoutFrame 0 0 0 0 0 1 56 0)
+              layout: (LayoutFrame 0 0 30 0 0 1 86 0)
               initiallyInvisible: true
               visibilityChannel: hasDiffsetHolder
               minorKey: labelSpec
             )
            (VariableVerticalPanelSpec
               name: 'Panel'
-              layout: (LayoutFrame 0 0 56 0 0 1 0 1)
+              layout: (LayoutFrame 0 0 86 0 0 1 0 1)
               initiallyInvisible: true
               visibilityChannel: hasDiffsetHolder
               showHandle: true
@@ -525,8 +534,6 @@
          
         )
       )
-
-    "Modified: / 15-01-2013 / 11:33:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool class methodsFor:'interface specs - labels'!
@@ -651,7 +658,7 @@
 
 !ChangeSetDiffTool class methodsFor:'menu specs'!
 
-listMenu
+listMenuDiff
     "This resource specification was automatically generated
      by the MenuEditor of ST/X."
 
@@ -732,6 +739,88 @@
         nil
         nil
       )
+
+    "Created: / 16-01-2013 / 15:47:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+listMenuMerge
+    "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:Tools::ChangeSetDiffTool andSelector:#listMenuMerge
+     (Menu new fromLiteralArrayEncoding:(Tools::ChangeSetDiffTool listMenuMerge)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            enabled: hasSelection
+            label: 'Browse'
+            itemValue: listMenuBrowse
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            enabled: hasSelection
+            label: 'Merge using A'
+            itemValue: listMenuMergeUsingA
+            shortcutKey: Ctrl2
+          )
+         (MenuItem
+            enabled: hasSelection
+            label: 'Merge using B'
+            itemValue: listMenuMergeUsingB
+            shortcutKey: Ctrl3
+          )
+         (MenuItem
+            enabled: hasSelection
+            label: 'Merge using Base'
+            itemValue: listMenuMergeUsingBase
+            shortcutKey: Ctrl1
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            label: 'Open in...'
+            submenu: 
+           (Menu
+              (
+               (MenuItem
+                  enabled: hasSelection
+                  label: 'Inspector'
+                  itemValue: listMenuInspect
+                )
+               (MenuItem
+                  enabled: hasSelection
+                  label: 'kdiff3'
+                  itemValue: listMenuOpenInExternal:
+                  argument: 'kdiff3'
+                )
+               (MenuItem
+                  enabled: hasSelection
+                  label: 'meld'
+                  itemValue: listMenuOpenInExternal:
+                  argument: 'meld'
+                )
+               )
+              nil
+              nil
+            )
+          )
+         )
+        nil
+        nil
+      )
 !
 
 mainMenu
@@ -754,41 +843,35 @@
         (
          (MenuItem
             label: 'File'
-            translateLabel: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Open...'
                   itemValue: fileMenuOpen
-                  translateLabel: true
                   shortcutKey: Ctrlo
                 )
                (MenuItem
                   enabled: canSave
                   label: 'Save'
                   itemValue: fileMenuSave
-                  translateLabel: true
                   shortcutKey: Ctrls
                 )
                (MenuItem
                   enabled: canSaveAs
                   label: 'Save As...'
                   itemValue: fileMenuSaveAs
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: canSaveAsPatch
                   label: 'Save As Patch '
                   itemValue: fileMenuSaveAsPatch
-                  translateLabel: true
                   isVisible: false
                 )
                (MenuItem
                   enabled: canSaveMergedAs
                   label: 'Save Merged as... '
                   itemValue: fileMenuSaveMergedAs
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -796,7 +879,6 @@
                (MenuItem
                   label: 'Exit'
                   itemValue: closeRequest
-                  translateLabel: true
                   shortcutKey: Ctrlq
                 )
                )
@@ -806,7 +888,6 @@
           )
          (MenuItem
             label: 'Changeset'
-            translateLabel: true
             submenu: 
            (Menu
               (
@@ -814,25 +895,21 @@
                   enabled: isDiff2Or3
                   label: 'Browse changes (A)'
                   itemValue: changesetMenuBrowseA
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: isDiff2Or3
                   label: 'Browse changes (B)'
                   itemValue: changesetMenuBrowseB
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: isDiff3
                   label: 'Browse changes (Base)'
                   itemValue: changesetMenuBrowseBase
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: isMerge
                   label: 'Browse changes (Merge)'
                   itemValue: changesetMenuBrowseMerge
-                  translateLabel: true
                 )
                )
               nil
@@ -840,29 +917,24 @@
             )
           )
          (MenuItem
-            label: 'Diff'
-            translateLabel: true
+            label: 'Change'
             submenuChannel: listMenu
           )
          (MenuItem
             label: 'View'
-            translateLabel: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Show Diffs in Version Methods'
-                  translateLabel: true
                   indication: showVersionMethodDiffsHolder
                 )
                (MenuItem
                   label: 'Show Diff in #copyright Methods'
-                  translateLabel: true
                   indication: showCopyrightMethodDiffsHolder
                 )
                (MenuItem
                   label: 'Highlight Conflicts'
-                  translateLabel: true
                   indication: highlightConflictsHolder
                 )
                )
@@ -874,6 +946,91 @@
         nil
         nil
       )
+!
+
+toolbarMenu
+    "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:Tools::ChangeSetDiffTool andSelector:#toolbarMenu
+     (Menu new fromLiteralArrayEncoding:(Tools::ChangeSetDiffTool toolbarMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Open'
+            itemValue: fileMenuOpen
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary loadFromFile22x22Icon)
+          )
+         (MenuItem
+            enabled: canSave
+            label: 'Save'
+            itemValue: fileMenuSave
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary saveImageIcon)
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            label: 'Move to Previous'
+            itemValue: menuMoveUp
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergePrev24x24)
+          )
+         (MenuItem
+            label: 'Move to Next'
+            itemValue: menuMoveDown
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergeNext24x24)
+          )
+         (MenuItem
+            label: 'Move to Previous Conflict'
+            itemValue: menuMoveUpConflict
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergePrevConflict24x24)
+          )
+         (MenuItem
+            label: 'Move to Next Conflict'
+            itemValue: menuMoveDownConflict
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergeNextConflict24x24)
+          )
+         (MenuItem
+            label: '-'
+          )
+         (MenuItem
+            label: 'Merge using Base'
+            itemValue: menuMergeUsingBase
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergeUsingBase24x24)
+          )
+         (MenuItem
+            label: 'Merge using A'
+            itemValue: menuMergeUsingA
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergeUsingA24x24)
+          )
+         (MenuItem
+            label: 'Merge using B'
+            itemValue: menuMergeUsingB
+            isButton: true
+            labelImage: (ResourceRetriever ToolbarIconLibrary mergeUsingB24x24)
+          )
+         )
+        nil
+        nil
+      )
 ! !
 
 !ChangeSetDiffTool class methodsFor:'plugIn spec'!
@@ -959,13 +1116,6 @@
     "Created: / 22-10-2008 / 11:30:03 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
-selection: selection
-
-    ^self selectionHolder value: selection
-
-    "Created: / 22-10-2008 / 11:30:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
 showCopyrightMethodDiffs
     ^self showCopyrightMethodDiffsHolder value
 
@@ -1022,6 +1172,18 @@
 
 !ChangeSetDiffTool methodsFor:'accessing - subapps'!
 
+list1View: aView
+    list1 := aView application.
+
+    "Created: / 17-01-2013 / 13:44:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+list2View: aView
+    list2 := aView application.
+
+    "Created: / 17-01-2013 / 13:44:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 textDiff2Tool
 
     ^TextDiff2Tool new
@@ -1057,6 +1219,66 @@
     "Created: / 16-03-2012 / 15:16:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ChangeSetDiffTool methodsFor:'accessing-menus'!
+
+listMenu
+    | spec |
+
+    spec := self isMerge ifTrue:[self class listMenuMerge] ifFalse:[self class listMenuDiff].
+    ^Menu decodeFromLiteralArray: spec.
+
+    "Created: / 16-01-2013 / 15:50:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ChangeSetDiffTool methodsFor:'accessing-selection'!
+
+selection: entry
+
+
+    self isOneColumnBrowser ifTrue:[
+        list1 selection: entry
+    ] ifFalse:[
+        | parent |
+
+        parent := self diffsetHolderPrivate value diffs 
+                    detect:[:each|each diffs includes: entry] ifNone:[nil].
+        parent notNil ifTrue:[
+            list1 selection: parent.
+            list1 updateOutputGenerator.
+            list2 updateList.
+            list2 selection: entry.
+
+        ]
+    ]
+
+    "Created: / 22-10-2008 / 11:30:11 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 17-01-2013 / 16:28:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+theFirstSelectedEntry
+    | selection |
+
+    selection := self selectionHolder value.
+    selection isNil ifTrue:[ ^ nil ].
+    selection := selection collect:[:e|e]. "/selection might be an Iterator
+    selection  isEmpty ifTrue:[ ^nil ].
+    ^selection first
+
+    "Created: / 17-01-2013 / 16:58:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+theLastSelectedEntry
+    | selection |
+
+    selection := self selectionHolder value.
+    selection isNil ifTrue:[ ^ nil ].
+    selection := selection collect:[:e|e]. "/selection might be an Iterator
+    selection  isEmpty ifTrue:[ ^nil ].
+    ^selection last
+
+    "Created: / 17-01-2013 / 13:22:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ChangeSetDiffTool methodsFor:'aspects'!
 
 diffInfoHolder
@@ -1215,13 +1437,14 @@
 
 listMenuHolder
     diffMenuHolder isNil ifTrue:[ 
-        diffMenuHolder := ValueHolder with:(Menu decodeFromLiteralArray: self class listMenu) 
+"/        diffMenuHolder := ValueHolder with:self listMenu 
+      diffMenuHolder := BlockValue with:[:v|self listMenu] argument: self mergeHolder
     ].
     ^ diffMenuHolder
 
     "Created: / 21-11-2009 / 18:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 09-12-2009 / 23:34:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 18-11-2011 / 14:57:47 / cg"
+    "Modified: / 16-01-2013 / 15:59:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 mergeDataHolder
@@ -1300,6 +1523,14 @@
     "Modified: / 20-11-2009 / 20:12:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+secondColSelectionHolder
+    "return/create the valueHolder 'firstColSelectionHolder'"
+
+    ^self selectionHolder
+
+    "Created: / 17-01-2013 / 12:49:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 selectionHolder
     "return/create the 'selectionHolder' value holder (automatically generated)"
 
@@ -1494,8 +1725,8 @@
 
     self diffsetHolderPrivate value: 
         (self isOneColumnBrowser 
-            ifTrue:[ds flattened]
-            ifFalse:[ds value]).
+            ifTrue:[ds flattened sort]
+            ifFalse:[ds value sort]).
 
     self versionALabelHolder value: ds versionALabel.
     self versionBLabelHolder value: ds versionBLabel.
@@ -1503,7 +1734,7 @@
 
     "Created: / 05-12-2009 / 11:03:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 29-06-2011 / 08:24:18 / Jan Vrany <enter your email here>"
-    "Modified: / 15-01-2013 / 11:30:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 13:58:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 mergeDataChanged
@@ -1792,6 +2023,24 @@
     "Modified: / 09-12-2009 / 23:10:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+listMenuMergeUsingA
+    self textDiffToolHolder value doMergeAllUsingA
+
+    "Modified: / 16-01-2013 / 15:57:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+listMenuMergeUsingB
+    self textDiffToolHolder value doMergeAllUsingB
+
+    "Created: / 16-01-2013 / 15:57:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+listMenuMergeUsingBase
+    self textDiffToolHolder value doMergeAllUsingBase
+
+    "Created: / 16-01-2013 / 15:57:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 listMenuOpenInExternal: command
 
     (OperatingSystem canExecuteCommand: command) ifFalse:[
@@ -1821,6 +2070,57 @@
     ]
 
     "Modified: / 17-03-2012 / 08:55:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveDown
+    self menuMoveDownToSuchThat: [:entry|true]
+
+    "Modified: / 17-01-2013 / 16:53:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveDownConflict
+    self menuMoveDownToSuchThat: [:entry|entry isMerged not]
+
+    "Modified: / 17-01-2013 / 16:53:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveDownToSuchThat: aBlock
+    | oldSel newSel |
+    oldSel := self theLastSelectedEntry.
+    newSel := self diffsetHolderPrivate value nextEntryAfter: oldSel suchThat: aBlock.
+    self menuMoveTo: newSel.
+
+    "Created: / 17-01-2013 / 16:52:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveTo: entry
+
+"/    self window sensor pushUserEvent:#selection: for: self withArgument: entry
+    self selection: entry.
+
+    "Created: / 17-01-2013 / 13:03:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 16:27:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveUp
+    self menuMoveUpToSuchThat: [:entry|true]
+
+    "Created: / 17-01-2013 / 16:58:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveUpConflict
+    self menuMoveUpToSuchThat: [:entry|entry isMerged not]
+
+    "Created: / 17-01-2013 / 17:00:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+menuMoveUpToSuchThat: aBlock
+    | oldSel newSel |
+    oldSel := self theFirstSelectedEntry.
+    newSel := self diffsetHolderPrivate value nextEntryBefore: oldSel suchThat: aBlock.
+    self menuMoveTo: newSel.
+
+    "Created: / 17-01-2013 / 16:58:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool methodsFor:'queries'!
@@ -1842,9 +2142,10 @@
     | info |
     info := self diffInfo.
     info isNil ifTrue:[^false].
-    ^info isMerge and:[info specMerge isFile and:[info diffset isMerged]]
+    ^info isMerge and:[info specMerge isFile and:[info diffset notNil and:[info diffset isMerged]]]
 
     "Created: / 20-03-2012 / 15:00:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 12:25:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 canSaveAs
@@ -2790,5 +3091,5 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeSetDiffTool.st 8087 2013-01-16 11:53:38Z vranyj1 $'
+    ^ '$Id: Tools__ChangeSetDiffTool.st 8089 2013-01-17 17:16:17Z vranyj1 $'
 ! !