Tools__SmalltalkMergeTool.st
changeset 10019 77d6241ffc40
child 10113 7320bb4f033d
--- /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!