--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MCMergeBrowser.st Wed Nov 22 14:24:43 2006 +0100
@@ -0,0 +1,155 @@
+"{ Package: 'stx:goodies/monticello' }"
+
+MCPatchBrowser subclass:#MCMergeBrowser
+ instanceVariableNames:'conflicts merger ok'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Monticello-UI'
+!
+
+
+!MCMergeBrowser class methodsFor:'as yet unclassified'!
+
+resolveConflictsInMerger: aMerger
+ | inst |
+ inst _ self new merger: aMerger.
+ ^ inst showModally ifNil: [false]
+! !
+
+!MCMergeBrowser methodsFor:'as yet unclassified'!
+
+buttonSpecs
+ ^ #((Merge merge 'Proceed with the merge' canMerge)
+ (Cancel cancel 'Cancel the merge')
+ ('All Newer' chooseAllNewerConflicts 'Choose all newer conflict versions')
+ ('All Older' chooseAllOlderConflicts 'Choose all older conflict versions')
+ ('Rest Local' chooseAllUnchosenLocal 'Choose local versions of all remaining conflicts')
+ ('Rest Remote' chooseAllUnchosenRemote 'Choose remote versions of all remaining conflicts')
+)
+!
+
+canMerge
+ ^ merger isMerged
+!
+
+cancel
+ self answer: false
+!
+
+chooseAllNewerConflicts
+ conflicts do: [ :ea | ea chooseNewer ].
+ self changed: #text; changed: #list.
+!
+
+chooseAllOlderConflicts
+ conflicts do: [ :ea | ea chooseOlder ].
+ self changed: #text; changed: #list.
+!
+
+chooseAllUnchosenLocal
+ conflicts do: [ :ea | ea isResolved ifFalse: [ ea chooseLocal ] ].
+ self changed: #text; changed: #list.
+!
+
+chooseAllUnchosenRemote
+ conflicts do: [ :ea | ea isResolved ifFalse: [ ea chooseRemote ] ].
+ self changed: #text; changed: #list.
+!
+
+chooseLocal
+ self conflictSelectionDo:
+ [selection chooseLocal.
+ self changed: #text; changed: #list]
+!
+
+chooseRemote
+ self conflictSelectionDo:
+ [selection chooseRemote.
+ self changed: #text; changed: #list]
+!
+
+clearChoice
+ self conflictSelectionDo:
+ [selection clearChoice.
+ self changed: #text; changed: #list]
+!
+
+conflictSelectionDo: aBlock
+ self selectionIsConflicted
+ ifTrue: aBlock
+ ifFalse: [self inform: 'You must have a conflict selected']
+!
+
+defaultLabel
+ ^ 'Merge Browser'
+!
+
+getConflictMenu: aMenu
+ selection remoteChosen
+ ifTrue: [aMenu add: 'undo keep change' target: self selector: #clearChoice]
+ ifFalse: [aMenu add: 'keep change' target: self selector: #chooseRemote].
+ selection localChosen
+ ifTrue: [aMenu add: 'undo reject change' target: self selector: #clearChoice]
+ ifFalse: [aMenu add: 'reject change' target: self selector: #chooseLocal].
+ ^ aMenu
+!
+
+getMenu: aMenu
+ selection ifNil: [^ aMenu].
+ ^ self selectionIsConflicted
+ ifTrue: [self getConflictMenu: aMenu]
+ ifFalse: [self getOperationMenu: aMenu]
+!
+
+getOperationMenu: aMenu
+ ^ aMenu
+!
+
+innerButtonRow
+ ^ self buttonRow:
+ #((Keep chooseRemote 'keep the selected change' selectionIsConflicted)
+ (Reject chooseLocal 'reject the selected change' selectionIsConflicted))
+!
+
+items
+ ^ conflicts, items
+!
+
+merge
+ merger isMerged
+ ifFalse: [self inform: 'You must resolve all the conflicts first']
+ ifTrue: [self answer: true]
+!
+
+merger: aMerger
+ merger _ aMerger.
+ items _ aMerger operations asSortedCollection.
+ conflicts _ aMerger conflicts.
+!
+
+selectionIsConflicted
+ ^ selection isKindOf: MCConflict
+!
+
+widgetSpecs
+ Preferences annotationPanes ifFalse: [ ^#(
+ ((buttonRow) (0 0 1 0) (0 0 0 30))
+ ((listMorph:selection:menu: list selection methodListMenu:) (0 0 1 0.4) (0 30 0 0))
+ ((innerButtonRow) (0 0.4 1 0.4) (0 0 0 30))
+ ((textMorph: text) (0 0.4 1 1) (0 30 0 0))
+ )].
+
+ ^ #(
+ ((buttonRow) (0 0 1 0) (0 0 0 30))
+ ((listMorph:selection:menu: list selection methodListMenu:) (0 0 1 0.4) (0 30 0 0))
+ ((innerButtonRow) (0 0.4 1 0.4) (0 0 0 30))
+ ((textMorph: annotations) (0 0.4 1 0.4) (0 30 0 60))
+ ((textMorph: text) (0 0.4 1 1) (0 60 0 0))
+ )
+! !
+
+!MCMergeBrowser class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/goodies/monticello/MCMergeBrowser.st,v 1.1 2006-11-22 13:24:43 cg Exp $'
+! !