--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Tools__SmalltalkMergeTool.st Fri Jul 01 16:17:32 2011 +0200
@@ -0,0 +1,885 @@
+"{ Package: 'stx:libtool' }"
+
+"{ NameSpace: Tools }"
+
+SmalltalkDiffTool subclass:#SmalltalkMergeTool
+ instanceVariableNames:'resolvedHolder changeSetHolder'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Interface-Diff & Merge tool'
+!
+
+SmalltalkDiffTool::DiffItem subclass:#DiffItem
+ instanceVariableNames:'versionMerged state'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:SmalltalkMergeTool
+!
+
+!SmalltalkMergeTool class methodsFor:'documentation'!
+
+documentation
+"
+ documentation to be added.
+
+ [author:]
+ Jan Vrany (janfrog@bruxa)
+
+ [instance variables:]
+
+ [class variables:]
+
+ [see also:]
+
+"
+!
+
+examples
+"
+ Starting the application:
+ [exBegin]
+ MergeTool open
+
+ [exEnd]
+
+ more examples to be added:
+ [exBegin]
+ ... add code fragment for
+ ... executable example here ...
+ [exEnd]
+"
+!
+
+history
+ "Created: / 06-12-2007 / 11:00:54 / janfrog"
+! !
+
+!SmalltalkMergeTool class methodsFor:'initialization'!
+
+initialize
+
+ "self initialize"
+
+ |menuItem|
+
+ menuItem := (MenuItem label:'Merge tool')
+ nameKey:'MergeTool';
+ value:[SmalltalkMergeTool open];
+ isButton:false.
+
+
+ NewLauncher
+ addMenuItem:menuItem
+ from:self
+ in:'menu'
+ position:#(before startSmaCCParserGenerator)
+ space:false.
+
+ "Created: / 11-12-2007 / 19:12:08 / janfrog"
+ "Modified: / 09-08-2009 / 14:15:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool class methodsFor:'interface specs'!
+
+conflictsListSpec
+ "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:MergeTool andSelector:#conflictsListSpec
+ MergeTool new openInterface:#conflictsListSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(FullSpec
+ name: conflictsListSpec
+ window:
+ (WindowSpec
+ label: 'VersionBothListSpec'
+ name: 'VersionBothListSpec'
+ min: (Point 10 10)
+ bounds: (Rectangle 0 0 306 406)
+ )
+ component:
+ (SpecCollection
+ collection: (
+ (LabelSpec
+ label: 'Conflicts (present in both A and B)'
+ name: 'VersionBothLabel'
+ layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+ translateLabel: true
+ labelChannel: conflictsLabelHolder
+ )
+ (SelectionInListModelViewSpec
+ name: 'VersionBothList'
+ layout: (LayoutFrame 0 0 30 0 0 1 0 1)
+ model: selectionHolder
+ menu: resolveMenu
+ hasHorizontalScrollBar: true
+ hasVerticalScrollBar: true
+ listModel: conflictsListHolder
+ multipleSelectOk: true
+ useIndex: false
+ highlightMode: line
+ )
+ )
+
+ )
+ )
+
+ "Modified: / 11-12-2007 / 16:46:23 / janfrog"
+ "Created: / 19-04-2008 / 12:58:29 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+inAOnlyListSpec
+ "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:MergeTool andSelector:#inAOnlyListSpec
+ MergeTool new openInterface:#inAOnlyListSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(FullSpec
+ name: inAOnlyListSpec
+ window:
+ (WindowSpec
+ label: 'VersionAOnlyListSpec'
+ name: 'VersionAOnlyListSpec'
+ min: (Point 10 10)
+ bounds: (Rectangle 0 0 306 406)
+ )
+ component:
+ (SpecCollection
+ collection: (
+ (LabelSpec
+ label: 'In A only'
+ name: 'VersionAOnlyLabel'
+ layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+ translateLabel: true
+ labelChannel: inAOnlyLabelHolder
+ )
+ (SelectionInListModelViewSpec
+ name: 'VersionAOnlyList'
+ layout: (LayoutFrame 0 0 30 0 0 1 0 1)
+ model: selectionHolder
+ menu: resolveMenu
+ hasHorizontalScrollBar: true
+ hasVerticalScrollBar: true
+ listModel: inAOnlyListHolder
+ multipleSelectOk: true
+ useIndex: false
+ highlightMode: line
+ postBuildCallback: postBuildVersionAListWidget:
+ )
+ )
+
+ )
+ )
+
+ "Modified: / 11-12-2007 / 16:46:29 / janfrog"
+ "Created: / 19-04-2008 / 12:58:29 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+inBOnlyListSpec
+ "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:MergeTool andSelector:#inBOnlyListSpec
+ MergeTool new openInterface:#inBOnlyListSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(FullSpec
+ name: inBOnlyListSpec
+ window:
+ (WindowSpec
+ label: 'VersionBOnlyListSpec'
+ name: 'VersionBOnlyListSpec'
+ min: (Point 10 10)
+ bounds: (Rectangle 0 0 306 406)
+ )
+ component:
+ (SpecCollection
+ collection: (
+ (LabelSpec
+ label: 'In B only'
+ name: 'VersionBOnlyLabel'
+ layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+ translateLabel: true
+ labelChannel: inBOnlyLabelHolder
+ )
+ (SelectionInListModelViewSpec
+ name: 'VersionBOnlyList'
+ layout: (LayoutFrame 0 0 30 0 0 1 0 1)
+ model: selectionHolder
+ menu: resolveMenu
+ hasHorizontalScrollBar: true
+ hasVerticalScrollBar: true
+ listModel: inBOnlyListHolder
+ multipleSelectOk: true
+ postBuildCallback: postBuildVersionBListWidget:
+ useIndex: false
+ highlightMode: line
+ )
+ )
+
+ )
+ )
+
+ "Modified: / 11-12-2007 / 16:46:33 / janfrog"
+ "Created: / 19-04-2008 / 12:58:29 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool class methodsFor:'menu specs'!
+
+mainMenu
+ "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::MergeTool andSelector:#mainMenu
+ (Menu new fromLiteralArrayEncoding:(Tools::MergeTool mainMenu)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+ #(Menu
+ (
+ (MenuItem
+ label: 'File'
+ translateLabel: true
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ label: 'Open file'
+ itemValue: fileMenuMergeFileIntoImage
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ label: 'Apply resolved'
+ itemValue: fileMenuApplyResolved
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ label: 'Exit'
+ itemValue: closeRequest
+ translateLabel: true
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ label: 'Resolve'
+ translateLabel: true
+ submenuChannel: resolveMenu
+ )
+ (MenuItem
+ label: 'Help'
+ translateLabel: true
+ startGroup: right
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ label: 'About this Application...'
+ itemValue: openAboutThisApplication
+ translateLabel: true
+ )
+ )
+ nil
+ nil
+ )
+ )
+ )
+ nil
+ nil
+ )
+
+ "Modified: / 08-11-2008 / 11:09:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+resolveMenu
+ "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::MergeTool andSelector:#resolveMenu
+ (Menu new fromLiteralArrayEncoding:(Tools::MergeTool resolveMenu)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+ #(Menu
+ (
+ (MenuItem
+ enabled: selectionIsNonEmptyAndAllHasVersionA
+ label: 'Resolve using version A <-'
+ itemValue: resolveMenuResolveUsingA
+ translateLabel: true
+ )
+ (MenuItem
+ enabled: selectionIsNonEmptyAndAllHasVersionB
+ label: 'Resolve using version B ->'
+ itemValue: resolveMenuResolveUsingB
+ translateLabel: true
+ )
+ (MenuItem
+ enabled: selectionIsNonEmpty
+ label: 'Delete'
+ itemValue: resolveMenuDelete
+ translateLabel: true
+ )
+ (MenuItem
+ enabled: selectionIsNonEmpty
+ label: 'Unresolve'
+ itemValue: resolveMenuUnresolve
+ translateLabel: true
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ enabled: false
+ label: 'Show changeset'
+ translateLabel: true
+ indication: showMergingChangeSetHolder
+ )
+ )
+ nil
+ nil
+ )
+
+ "Modified: / 08-11-2008 / 11:06:43 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool class methodsFor:'plugIn spec'!
+
+aspectSelectors
+
+ ^super aspectSelectors,
+ #(
+
+ #resolvedHolder
+ #changeSetHolder
+ ).
+
+ "Created: / 02-04-2009 / 22:04:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 09-04-2009 / 09:21:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool methodsFor:'accessing'!
+
+diffItemClass
+
+ ^SmalltalkMergeTool::DiffItem
+
+ "Created: / 21-05-2008 / 14:39:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 09-08-2009 / 14:57:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool methodsFor:'aspects'!
+
+changeSetHolder
+ "return/create the 'changeSetHolder' value holder (automatically generated)"
+
+ changeSetHolder isNil ifTrue:[
+ changeSetHolder := ValueHolder new.
+ ].
+ ^ changeSetHolder
+!
+
+changeSetHolder:aValueHolder
+ "set the 'changeSetHolder' value holder (automatically generated)"
+
+ changeSetHolder := aValueHolder.
+!
+
+resolvedHolder
+
+ resolvedHolder ifNil:
+ [resolvedHolder := false asValue].
+ ^resolvedHolder
+
+ "Created: / 02-04-2009 / 21:53:19 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+selectionHolder
+
+ selectionHolder ifNil:
+ [selectionHolder := List new asValue.
+ selectionHolder
+ onChangeSend:#selectionChanged to: self].
+ ^selectionHolder
+
+ "Created: / 21-05-2008 / 19:30:59 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool methodsFor:'change & update'!
+
+resolutionChanged
+
+ super resolutionChanged.
+ self resolvedHolder value: self resolved.
+ self changeSetHolder value: self changeSet.
+
+ "Created: / 22-10-2008 / 10:50:35 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 02-04-2009 / 22:04:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool methodsFor:'menu actions'!
+
+fileMenuApplyResolved
+ (Dialog confirm:'Really apply resolved?') ifFalse:[
+ ^ self
+ ].
+ self inAOnlyListHolder
+ value:(self inAOnlyListHolder value reject:[:e | e isResolved ]).
+ self conflictsListHolder
+ value:(self conflictsListHolder value reject:[:e | e isResolved ]).
+ self inBOnlyListHolder
+ value:(self inBOnlyListHolder value reject:[:e | e isResolved ]).
+ self fileMenuApplyResolved:self changeSetToApply
+
+ "Modified: / 12-12-2007 / 08:37:21 / janfrog"
+ "Created: / 08-11-2008 / 11:08:34 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+fileMenuApplyResolved:aChangeSet
+ (Class updateChangeFileQuerySignal , Class updateChangeListQuerySignal)
+ answer:false
+ do:[ aChangeSet apply ]
+
+ "Modified: / 12-12-2007 / 08:36:04 / janfrog"
+ "Created: / 08-11-2008 / 11:08:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+fileMenuMergeFileIntoImage
+
+ |filename|
+
+ filename := Dialog requestFileName:'Enter fileout or change file' pattern:'*.st;*.cha'.
+ filename isNilOrEmptyCollection ifTrue:[^self].
+ filename := filename asFilename.
+ filename isRegularFile ifFalse:[^Dialog warn:'Selected file is not a regular file'].
+ filename isReadable ifFalse:[^Dialog warn:'Selected file is not readable'].
+
+ [
+ self
+ diffSet: (ChangeSet fromFile: filename) diffSetsAgainstImage labelA: filename components last
+ labelB: 'image'
+ ] on: Error do:[:ex|
+ Dialog warn: 'Error when reading changeset: ', ex description.
+ ex pass
+ ]
+
+ "Created: / 11-12-2007 / 16:59:04 / janfrog"
+ "Modified: / 12-12-2007 / 15:12:01 / janfrog"
+!
+
+resolveMenuDelete
+
+ self selection do:
+ [:mergeItem|mergeItem delete].
+ self resolutionChanged
+
+ "Modified: / 11-12-2007 / 16:54:51 / janfrog"
+!
+
+resolveMenuResolveUsingA
+
+ self selection do:
+ [:mergeItem|mergeItem resolveUsingA].
+ self resolutionChanged
+
+ "Modified: / 11-12-2007 / 16:54:56 / janfrog"
+!
+
+resolveMenuResolveUsingB
+
+ self selection do:
+ [:mergeItem|mergeItem resolveUsingB].
+ self resolutionChanged
+
+ "Modified: / 11-12-2007 / 16:55:01 / janfrog"
+!
+
+resolveMenuUnresolve
+
+ self selection do:
+ [:mergeItem|mergeItem unresolve].
+ self resolutionChanged
+
+ "Modified: / 11-12-2007 / 16:55:05 / janfrog"
+! !
+
+!SmalltalkMergeTool methodsFor:'private'!
+
+changeSet
+
+ ^ChangeSet withAll:
+ ((self inAOnlyListHolder value , self conflictsListHolder value, self inBOnlyListHolder value)
+ select:[:e|e isResolved] thenCollect:[:e|e versionMerged])
+
+ "Created: / 02-04-2009 / 22:03:25 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+resolved
+ ^ (self inAOnlyListHolder value allSatisfy:[:e | e isResolved ])
+ and:[
+ (self conflictsListHolder value allSatisfy:[:e | e isResolved ])
+ and:[ (self inBOnlyListHolder value allSatisfy:[:e | e isResolved ]) ]
+ ]
+
+ "Created: / 21-10-2008 / 09:51:03 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool::DiffItem class methodsFor:'documentation'!
+
+version
+ ^'$Id: Tools__SmalltalkMergeTool.st,v 1.1 2011-07-01 14:17:32 cg Exp $'
+! !
+
+!SmalltalkMergeTool::DiffItem class methodsFor:'image specs'!
+
+resolvedAsRemoveIcon
+ "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 resolvedAsRemoveIcon inspect
+ ImageEditor openOnClass:self andSelector:#resolvedAsRemoveIcon
+ Icon flushCachedIcons
+ "
+
+ <resource: #image>
+
+ ^Icon
+ constantNamed:'Tools::MergeTool::DiffItem class resolvedAsRemoveIcon'
+ ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@T@AP@EPAT@@UAT@@AUT@@@ET@@@AU@@@AUT@@ATEP@AT@U@@T@AP@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 0 0 170 170 170 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+?????<@C6A/\N<931>OC0<OC1>ON\=0;6A/@@?????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+
+ "Created: / 08-11-2008 / 10:58:51 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+resolvedAsVersionAIcon
+ <resource: #image>
+ "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 resolvedUsingVersionAIcon inspect
+ ImageEditor openOnClass:self andSelector:#resolvedUsingVersionAIcon
+ Icon flushCachedIcons"
+
+ ^ Icon
+ constantNamed:'Tools::MergeTool::DiffItem class resolvedUsingVersionAIcon'
+ ifAbsentPut:[
+ (Depth2Image new)
+ width:16;
+ height:16;
+ photometric:(#palette);
+ bitsPerSample:(#[ 2 ]);
+ samplesPerPixel:((1));
+ bits:(ByteArray
+ fromPackedString:'@@@@@@@@@@@EUUUPAUPUT@UTEU@ET@UPAU@ET@UAPU@EPTEPAPUPT@T@@E@D@@@PAAUTD@UUUU@@@@@@@@@@@@@a');
+ colorMapFromArray:#[ 0 0 0 191 255 191 30 255 30 255 255 255 ];
+ mask:((Depth1Image new)
+ width:16;
+ height:16;
+ photometric:(#blackIs0);
+ bitsPerSample:(#[ 1 ]);
+ samplesPerPixel:((1));
+ bits:(ByteArray
+ fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a');
+ yourself);
+ yourself
+ ]
+
+ "Created: / 08-11-2008 / 10:59:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+resolvedAsVersionBIcon
+ <resource: #image>
+ "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 resolvedUsingVersionBIcon inspect
+ ImageEditor openOnClass:self andSelector:#resolvedUsingVersionBIcon
+ Icon flushCachedIcons"
+
+ ^ Icon
+ constantNamed:'Tools::MergeTool::DiffItem class resolvedUsingVersionBIcon'
+ ifAbsentPut:[
+ (Depth2Image new)
+ width:16;
+ height:16;
+ photometric:(#palette);
+ bitsPerSample:(#[ 2 ]);
+ samplesPerPixel:((1));
+ bits:(ByteArray
+ fromPackedString:'@@@@@@@@@@@EUUUPAT@ET@UAPU@EPTEPATEAT@U@AU@EP@UPATEAT@UAPU@EPTEPAT@ET@UUUU@@@@@@@@@@@@@a');
+ colorMapFromArray:#[ 0 0 0 255 191 191 30 255 30 255 255 255 ];
+ mask:((Depth1Image new)
+ width:16;
+ height:16;
+ photometric:(#blackIs0);
+ bitsPerSample:(#[ 1 ]);
+ samplesPerPixel:((1));
+ bits:(ByteArray
+ fromPackedString:'
+??????????????????????????????????????????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a');
+ yourself);
+ yourself
+ ]
+
+ "Created: / 08-11-2008 / 10:59:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+unresolvedIcon
+ "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 unresolvedIcon inspect
+ ImageEditor openOnClass:self andSelector:#unresolvedIcon
+ Icon flushCachedIcons
+ "
+
+ <resource: #image>
+
+ ^Icon
+ constantNamed:'Tools::MergeTool::DiffItem class unresolvedIcon'
+ ifAbsentPut:[(Depth2Image new) width: 16; height: 16; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 84 84 84 170 170 170 255 255 255]; mask:((Depth1Image new) width: 16; height: 16; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
+?????<@C0@O@@<@C0@O@@<@C0@O@@<@C0@O@@?????<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; yourself); yourself]
+
+ "Created: / 08-11-2008 / 10:41:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool::DiffItem class methodsFor:'instance creation'!
+
+versionA: changeA
+
+ ^self new
+ versionA: changeA;
+ versionMerged: changeA;
+ state: #merged
+
+ "Created: / 21-05-2008 / 14:14:31 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+versionB: changeB
+
+ ^self new
+ versionB: changeB;
+ versionMerged: changeB;
+ state: #merged
+
+ "Created: / 21-05-2008 / 14:14:47 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool::DiffItem methodsFor:'accessing'!
+
+icon
+
+ state = #unresolved ifTrue:[^self class unresolvedIcon].
+ state = #deleted ifTrue:[^self class resolvedAsRemoveIcon].
+
+ versionMerged = versionA ifTrue:[^self class resolvedAsVersionAIcon].
+ versionMerged = versionB ifTrue:[^self class resolvedAsVersionBIcon].
+
+ ^self class unresolvedIcon
+
+ "Created: / 08-11-2008 / 10:59:37 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+state
+ ^ state ? #unresolved
+
+ "Modified: / 06-12-2007 / 20:55:20 / janfrog"
+ "Created: / 21-05-2008 / 11:52:59 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+state:aSymbol
+
+ self
+ assert:(#(unresolved deleted merged) includes: aSymbol).
+ state := aSymbol.
+
+ "Created: / 21-05-2008 / 11:52:59 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+version
+ ^ versionMerged ? versionA ? versionB
+
+ "Created: / 21-05-2008 / 11:52:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+versionMerged
+ ^ versionMerged
+
+ "Created: / 21-05-2008 / 11:52:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+versionMerged:aChange
+ versionMerged := aChange.
+
+ "Created: / 21-05-2008 / 11:52:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 21-05-2008 / 13:42:09 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+versionMergedSource
+ ^ versionMerged
+ ifNil:[nil]
+ ifNotNil:[versionMerged source]
+
+ "Created: / 21-05-2008 / 11:52:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool::DiffItem methodsFor:'displaying'!
+
+displayIconOn:aGC x:x y:y
+
+ self icon
+ displayOn:aGC
+ x:x
+ y:y - 14
+
+ "Created: / 21-05-2008 / 11:54:47 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 08-11-2008 / 11:03:00 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+displayOn: aGC x:x y:y
+
+ self displayIconOn: aGC x:x y:y.
+ self displayChangeOn: aGC x:x + 18 y:y.
+
+ "Created: / 21-05-2008 / 11:55:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool::DiffItem methodsFor:'resolution'!
+
+apply
+
+ ^self versionMerged apply
+
+ "Modified: / 11-12-2007 / 18:58:37 / janfrog"
+ "Created: / 21-05-2008 / 11:53:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+delete
+
+ self state: #deleted.
+ self isMethodChange ifTrue:
+ [versionMerged := MethodRemoveChange
+ class: self version changeClass
+ selector: self version changeSelector]
+
+ "Modified: / 11-12-2007 / 18:41:49 / janfrog"
+ "Created: / 21-05-2008 / 11:53:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+resolveUsingA
+
+ self state: #merged.
+ versionMerged := versionA
+
+ "Created: / 21-05-2008 / 11:53:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+resolveUsingB
+
+ self state: #merged.
+ versionMerged := versionB
+
+ "Created: / 21-05-2008 / 11:53:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+unresolve
+
+ self state: #unresolved
+
+ "Created: / 21-05-2008 / 11:53:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool::DiffItem methodsFor:'testing'!
+
+isMergedVersionDifferent
+
+ ^versionMerged notNil
+ and:[versionMerged ~= versionA
+ and:[versionMerged ~= versionB]]
+
+ "Created: / 21-05-2008 / 11:53:19 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+isResolved
+
+ ^self state ~= #unresolved
+
+ "Created: / 21-05-2008 / 11:53:22 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
+
+!SmalltalkMergeTool class methodsFor:'documentation'!
+
+version_CVS
+ ^ '$Header: /cvs/stx/stx/libtool/Tools__SmalltalkMergeTool.st,v 1.1 2011-07-01 14:17:32 cg Exp $'
+!
+
+version_SVN
+ ^ '§Id: Tools__SmalltalkMergeTool.st 7486 2009-10-26 22:06:24Z vranyj1 §'
+! !
+
+SmalltalkMergeTool initialize!