--- a/Tools__ChangeSetDiffTool.st Thu Jan 17 17:16:17 2013 +0000
+++ b/Tools__ChangeSetDiffTool.st Thu Jan 17 21:52:18 2013 +0000
@@ -33,11 +33,13 @@
navigatorPanelSpecHolder diffMenuHolder diffsetHolderPrivate
selectionHolder versionATextHolder versionBTextHolder
versionBaseTextHolder textDiffToolHolder
- textDiffToolWindowSpecHolder mergeHolder mergeDataHolder
- showVersionMethodDiffsHolder showCopyrightMethodDiffsHolder
- highlightConflictsHolder hasDiffsetHolder mergeSavedHolder list1
- list2'
- classVariableNames:'LastDiffInfo'
+ textDiffToolWindowSpecHolder mergeHolder mergeData
+ mergeDataHolder showVersionMethodDiffsHolder
+ showCopyrightMethodDiffsHolder highlightConflictsHolder
+ hasDiffsetHolder mergeSavedHolder canSaveHolder
+ autoMoveToNextConflictHolder textDiff2App textDiff3App list1App
+ list2App alreadyWarnedAboutUnsavedMerge'
+ classVariableNames:'LastDiffInfo AutoMoveToNextConflict'
poolDictionaries:''
category:'Interface-Diff'
!
@@ -141,6 +143,20 @@
"
! !
+!ChangeSetDiffTool class methodsFor:'accessing'!
+
+autoMoveToNextConflict
+ ^AutoMoveToNextConflict == true
+
+ "Created: / 17-01-2013 / 19:49:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+autoMoveToNextConflict: aBoolean
+ AutoMoveToNextConflict := aBoolean
+
+ "Created: / 17-01-2013 / 19:49:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!ChangeSetDiffTool class methodsFor:'accessing - defaults'!
versionAColor
@@ -496,39 +512,49 @@
clientKey: infoPanel
createNewBuilder: false
)
- (UISubSpecification
- name: 'Label'
- layout: (LayoutFrame 0 0 30 0 0 1 86 0)
- initiallyInvisible: true
- visibilityChannel: hasDiffsetHolder
- minorKey: labelSpec
- )
- (VariableVerticalPanelSpec
- name: 'Panel'
- layout: (LayoutFrame 0 0 86 0 0 1 0 1)
- initiallyInvisible: true
- visibilityChannel: hasDiffsetHolder
- showHandle: true
+ (ViewSpec
+ name: 'Content'
+ layout: (LayoutFrame 0 0 30 0 0 1 0 1)
component:
(SpecCollection
collection: (
- (SubCanvasSpec
- name: 'NavigatorPanel'
- hasHorizontalScrollBar: false
- hasVerticalScrollBar: false
- specHolder: navigatorPanelSpecHolder
- createNewBuilder: false
+ (UISubSpecification
+ name: 'Label'
+ layout: (LayoutFrame 0 0 0 0 0 1 56 0)
+ initiallyInvisible: true
+ visibilityChannel: hasDiffsetHolder
+ minorKey: labelSpec
)
- (SubCanvasSpec
- name: 'SubCanvas1'
- specHolder: textDiffToolWindowSpecHolder
- clientHolder: textDiffToolHolder
- createNewBuilder: false
+ (VariableVerticalPanelSpec
+ name: 'Panel'
+ layout: (LayoutFrame 0 0 56 0 0 1 0 1)
+ initiallyInvisible: true
+ visibilityChannel: hasDiffsetHolder
+ showHandle: true
+ component:
+ (SpecCollection
+ collection: (
+ (SubCanvasSpec
+ name: 'NavigatorPanel'
+ hasHorizontalScrollBar: false
+ hasVerticalScrollBar: false
+ specHolder: navigatorPanelSpecHolder
+ createNewBuilder: false
+ )
+ (SubCanvasSpec
+ name: 'SubCanvas1'
+ specHolder: textDiffToolWindowSpecHolder
+ clientHolder: textDiffToolHolder
+ createNewBuilder: false
+ )
+ )
+
+ )
+ handles: (Any 0.5 1.0)
)
)
)
- handles: (Any 0.3 1.0)
)
)
@@ -773,19 +799,19 @@
enabled: hasSelection
label: 'Merge using A'
itemValue: listMenuMergeUsingA
- shortcutKey: Ctrl2
+ shortcutKey: Cmd2
)
(MenuItem
enabled: hasSelection
label: 'Merge using B'
itemValue: listMenuMergeUsingB
- shortcutKey: Ctrl3
+ shortcutKey: Cmd3
)
(MenuItem
enabled: hasSelection
label: 'Merge using Base'
itemValue: listMenuMergeUsingBase
- shortcutKey: Ctrl1
+ shortcutKey: Cmd1
)
(MenuItem
label: '-'
@@ -917,6 +943,46 @@
)
)
(MenuItem
+ label: 'Movement'
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ label: 'Go to Previous Delta'
+ itemValue: menuMoveUp
+ )
+ (MenuItem
+ label: 'Go To Next Delta'
+ itemValue: menuMoveDown
+ )
+ (MenuItem
+ label: 'Go to Previous Conflict'
+ itemValue: menuMoveUpConflict
+ shortcutKey: AltUp
+ )
+ (MenuItem
+ label: 'Go to Previous Conflict'
+ itemValue: menuMoveUpConflict
+ shortcutKey: CmdCursorUp
+ )
+ (MenuItem
+ label: 'Go to Next Conflict'
+ itemValue: menuMoveDownConflict
+ shortcutKey: CmdCursorDown
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ label: 'Automatically Go to Next Conflict'
+ indication: autoMoveToNextConflictHolder
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
label: 'Change'
submenuChannel: listMenu
)
@@ -973,7 +1039,7 @@
labelImage: (ResourceRetriever ToolbarIconLibrary loadFromFile22x22Icon)
)
(MenuItem
- enabled: canSave
+ enabled: canSaveHolder
label: 'Save'
itemValue: fileMenuSave
isButton: true
@@ -983,25 +1049,25 @@
label: '-'
)
(MenuItem
- label: 'Move to Previous'
+ label: 'Go to Previous Delta'
itemValue: menuMoveUp
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergePrev24x24)
)
(MenuItem
- label: 'Move to Next'
+ label: 'Go To Next Delta'
itemValue: menuMoveDown
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergeNext24x24)
)
(MenuItem
- label: 'Move to Previous Conflict'
+ label: 'Go to Previous Conflict'
itemValue: menuMoveUpConflict
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergePrevConflict24x24)
)
(MenuItem
- label: 'Move to Next Conflict'
+ label: 'Go to Next Conflict'
itemValue: menuMoveDownConflict
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergeNextConflict24x24)
@@ -1011,19 +1077,19 @@
)
(MenuItem
label: 'Merge using Base'
- itemValue: menuMergeUsingBase
+ itemValue: listMenuMergeUsingBase
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergeUsingBase24x24)
)
(MenuItem
label: 'Merge using A'
- itemValue: menuMergeUsingA
+ itemValue: listMenuMergeUsingA
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergeUsingA24x24)
)
(MenuItem
label: 'Merge using B'
- itemValue: menuMergeUsingB
+ itemValue: listMenuMergeUsingB
isButton: true
labelImage: (ResourceRetriever ToolbarIconLibrary mergeUsingB24x24)
)
@@ -1031,6 +1097,8 @@
nil
nil
)
+
+ "Modified: / 17-01-2013 / 21:23:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ChangeSetDiffTool class methodsFor:'plugIn spec'!
@@ -1173,50 +1241,56 @@
!ChangeSetDiffTool methodsFor:'accessing - subapps'!
list1View: aView
- list1 := aView application.
+ list1App := aView application.
"Created: / 17-01-2013 / 13:44:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
list2View: aView
- list2 := aView application.
+ list2App := aView application.
"Created: / 17-01-2013 / 13:44:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
textDiff2Tool
-
- ^TextDiff2Tool new
- labelAHolder: self versionALabelHolder;
- textAHolder: self versionATextHolder;
-
- labelBHolder: self versionBLabelHolder;
- textBHolder: self versionBTextHolder;
-
- yourself
+ textDiff2App isNil ifTrue:[
+ textDiff2App := TextDiff2Tool new
+ labelAHolder: self versionALabelHolder;
+ textAHolder: self versionATextHolder;
+
+ labelBHolder: self versionBLabelHolder;
+ textBHolder: self versionBTextHolder;
+
+ yourself
+ ].
+ ^textDiff2App
"Created: / 16-03-2012 / 13:58:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 20:36:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
textDiff3Tool
-
- ^TextDiff3Tool new
- labelCHolder: self versionBaseLabelHolder;
- textCHolder: self versionBaseTextHolder;
-
- labelBHolder: self versionBLabelHolder;
- textBHolder: self versionBTextHolder;
-
-
- labelAHolder: self versionALabelHolder;
- textAHolder: self versionATextHolder;
-
- mergeHolder: self mergeHolder;
- mergeDataHolder: self mergeDataHolder;
-
- yourself
+ textDiff3App isNil ifTrue:[
+ textDiff3App := TextDiff3Tool new
+ mergeHolder: self mergeHolder;
+ mergeDataHolder: self mergeDataHolder;
+
+ labelCHolder: self versionBaseLabelHolder;
+ textCHolder: self versionBaseTextHolder;
+
+ labelBHolder: self versionBLabelHolder;
+ textBHolder: self versionBTextHolder;
+
+
+ labelAHolder: self versionALabelHolder;
+ textAHolder: self versionATextHolder;
+
+ yourself
+ ].
+ ^textDiff3App
"Created: / 16-03-2012 / 15:16:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 20:36:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ChangeSetDiffTool methodsFor:'accessing-menus'!
@@ -1236,17 +1310,17 @@
self isOneColumnBrowser ifTrue:[
- list1 selection: entry
+ list1App 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.
+ list1App selection: parent.
+ list1App updateOutputGenerator.
+ list2App updateList.
+ list2App selection: entry.
]
]
@@ -1281,6 +1355,28 @@
!ChangeSetDiffTool methodsFor:'aspects'!
+autoMoveToNextConflictHolder
+
+ autoMoveToNextConflictHolder isNil ifTrue:[
+ autoMoveToNextConflictHolder := AspectAdaptor forAspect: #autoMoveToNextConflict.
+ autoMoveToNextConflictHolder subject: self class.
+ ].
+ ^autoMoveToNextConflictHolder
+
+ "Created: / 17-01-2013 / 19:51:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+canSaveHolder
+ "return/create the 'canSaveHolder' value holder (automatically generated)"
+
+ canSaveHolder isNil ifTrue:[
+ canSaveHolder := false asValue
+ ].
+ ^ canSaveHolder
+
+ "Modified: / 17-01-2013 / 21:00:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
diffInfoHolder
"return/create the 'diffInfoHolder' value holder (automatically generated)"
@@ -1699,16 +1795,17 @@
info := self diffInfoHolder value.
self hasDiffsetHolder value: false.
self mergeSavedHolder value: false.
+ self canSaveHolder value: false.
info notNil ifTrue:[
self infoPanel showProgressLabeled: (resources string:'Reading changesets') while: [
info read.
self diffset: info diffset.
self updateViews.
].
- ]
+ ].
"Created: / 19-03-2012 / 23:40:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 15-01-2013 / 11:40:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 21:01:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
diffsetChanged
@@ -1722,24 +1819,46 @@
self beSingleColumn.
].
self hasDiffsetHolder value: ds notNil.
+ self canSaveHolder value: self canSave.
+ alreadyWarnedAboutUnsavedMerge := false.
+
self diffsetHolderPrivate value:
(self isOneColumnBrowser
ifTrue:[ds flattened sort]
ifFalse:[ds value sort]).
-
+ self autoMoveToNextConflictHolder value ifTrue:[
+ self menuMoveDownConflict.
+ ].
self versionALabelHolder value: ds versionALabel.
self versionBLabelHolder value: ds versionBLabel.
self versionBaseLabelHolder value: ds versionBaseLabel.
"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: / 17-01-2013 / 13:58:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 21:22:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
mergeDataChanged
+ "Resolution has been changed..."
+
+ self canSaveHolder value: self canSave.
+ alreadyWarnedAboutUnsavedMerge := false.
+ (self autoMoveToNextConflictHolder value and:[mergeData isMerged]) ifTrue:[
+ self menuMoveDownConflict
+ ]
+
+ "Created: / 17-01-2013 / 20:06:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 21:20:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+mergeDataHolderChanged
+ mergeData notNil ifTrue:[mergeData removeDependent: self].
+ mergeData := self mergeDataHolder value.
+ mergeData notNil ifTrue:[mergeData addDependent: self].
"Created: / 16-01-2013 / 09:24:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 20:06:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectionChanged
@@ -1792,6 +1911,12 @@
].
sender == mergeDataHolder ifTrue:[
+ self mergeDataHolderChanged.
+ ^self.
+ ].
+
+ sender == mergeData ifTrue:[
+ "Resolution has been changed..."
self mergeDataChanged.
^self.
].
@@ -1799,7 +1924,7 @@
^super update: aspect with: param from: sender
"Created: / 05-12-2009 / 11:02:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 16-01-2013 / 09:24:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (format): / 17-01-2013 / 20:06:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateListMenu
@@ -1831,18 +1956,18 @@
self diffInfo isNil ifTrue:[ ^ self ].
self diffInfo isDiff3 ifTrue:[
+ self mergeHolder value: self diffInfo isMerge.
self textDiffToolHolder value isDiff3 ifFalse:[
textDiffToolHolder value: self textDiff3Tool.
].
-
] ifFalse:[
self textDiffToolHolder value isDiff2 ifFalse:[
textDiffToolHolder value: self textDiff2Tool.
].
].
- self mergeHolder value: self diffInfo isMerge.
"Created: / 20-03-2012 / 10:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 20:16:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ChangeSetDiffTool methodsFor:'initialization'!
@@ -2139,13 +2264,10 @@
canSave
"Returns true, if a merged file can be saved"
- | info |
- info := self diffInfo.
- info isNil ifTrue:[^false].
- ^info isMerge and:[info specMerge isFile and:[info diffset notNil and:[info diffset isMerged]]]
+ ^self canSaveAs and:[self diffInfo specMerge isFile]
"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>"
+ "Modified: / 17-01-2013 / 21:09:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canSaveAs
@@ -2154,9 +2276,10 @@
| info |
info := self diffInfo.
info isNil ifTrue:[^false].
- ^info isMerge and:[info diffset isMerged]
+ ^info isMerge and:[info diffset notNil and:[info diffset isMerged]]
"Created: / 20-03-2012 / 15:03:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 17-01-2013 / 20:57:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
canSaveAsPatch
@@ -2184,6 +2307,30 @@
"Created: / 03-11-2009 / 10:48:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!ChangeSetDiffTool methodsFor:'startup & release'!
+
+closeRequest
+
+ "/Warn about unsaved merge..."
+ (alreadyWarnedAboutUnsavedMerge not and:[self canSave and:[mergeSavedHolder value not]]) ifTrue:[
+ alreadyWarnedAboutUnsavedMerge := true.
+ self infoPanel
+ reset;
+ beInformation;
+ message: (self resources string:'Output file (merge) has not been saved. Save?');
+ addButtonWithLabel: (self resources string:'Save') action: [
+ self fileMenuSave.
+ self closeDownViews.
+ ];
+ addButtonWithLabel: (self resources string:'Cancel') action:[self infoPanel hide];
+ show.
+ ^self.
+ ].
+ self closeDownViews.
+
+ "Created: / 17-01-2013 / 21:02:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!ChangeSetDiffTool methodsFor:'testing'!
isDiff2
@@ -3091,5 +3238,5 @@
!
version_SVN
- ^ '$Id: Tools__ChangeSetDiffTool.st 8089 2013-01-17 17:16:17Z vranyj1 $'
+ ^ '$Id: Tools__ChangeSetDiffTool.st 8090 2013-01-17 21:52:18Z vranyj1 $'
! !