--- 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 $'
! !