Tools__SmalltalkDiffTool.st
author fm
Wed, 30 Sep 2009 14:11:17 +0200
changeset 8820 1577041ef5a2
parent 8805 c5a11707730d
child 8875 ddee2038db1e
permissions -rw-r--r--
*** empty log message ***

"{ Package: 'cvut:stx/goodies/libtool3' }"

"{ NameSpace: Tools }"

ApplicationModel subclass:#SmalltalkDiffTool
	instanceVariableNames:'diffSetHolder changeSetA changeSetB selectionHolder titleHolder
		showMergingChangeSetHolder versionsViewHolder'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Diff & Merge tool'
!

Object subclass:#DiffItem
	instanceVariableNames:'versionA versionB'
	classVariableNames:''
	poolDictionaries:''
	privateIn:SmalltalkDiffTool
!


!SmalltalkDiffTool class methodsFor:'interface opening'!

openOnDiffSet:diffSet labelA:labelA labelB: labelB title: title

    ^self new
        diffSet: diffSet labelA: labelA labelB: labelB;
        title: title;
        open

    "Created: / 19-04-2008 / 12:52:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool 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:Tools::DiffTool andSelector:#conflictsListSpec
     Tools::DiffTool 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
              hasHorizontalScrollBar: true
              hasVerticalScrollBar: true
              listModel: conflictsListHolder
              useIndex: false
              highlightMode: line
            )
           )
         
        )
      )

    "Modified: / 21-05-2008 / 14:20:31 / 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
              hasHorizontalScrollBar: true
              hasVerticalScrollBar: true
              listModel: inAOnlyListHolder
              useIndex: false
              highlightMode: line
              postBuildCallback: postBuildVersionAListWidget:
            )
           )
         
        )
      )

    "Modified: / 11-12-2007 / 16:46:29 / janfrog"
    "Created: / 19-04-2008 / 12:52:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 21-05-2008 / 14:20:50 / 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
              hasHorizontalScrollBar: true
              hasVerticalScrollBar: true
              listModel: inBOnlyListHolder
              postBuildCallback: postBuildVersionBListWidget:
              useIndex: false
              highlightMode: line
            )
           )
         
        )
      )

    "Modified: / 11-12-2007 / 16:46:33 / janfrog"
    "Created: / 19-04-2008 / 12:52:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 21-05-2008 / 14:20:56 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

windowSpec
    "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:Tools::DiffTool andSelector:#windowSpec
     Tools::DiffTool new openInterface:#windowSpec
     Tools::DiffTool open
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: windowSpec
        window: 
       (WindowSpec
          label: 'MergeTool'
          name: 'MergeTool'
          labelChannel: titleHolder
          min: (Point 10 10)
          max: (Point 1024 768)
          bounds: (Rectangle 0 0 602 508)
          menu: mainMenu
        )
        component: 
       (SpecCollection
          collection: (
           (VariableVerticalPanelSpec
              name: 'ContentPanel'
              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
              showHandle: true
              snapMode: both
              component: 
             (SpecCollection
                collection: (
                 (VariableHorizontalPanelSpec
                    name: 'VersionListPanel'
                    component: 
                   (SpecCollection
                      collection: (
                       (UISubSpecification
                          name: 'VersionAOnlyListSpec'
                          minorKey: inAOnlyListSpec
                        )
                       (UISubSpecification
                          name: 'VersionBothListSpec'
                          minorKey: conflictsListSpec
                        )
                       (UISubSpecification
                          name: 'VersionBOnlyListSpec'
                          minorKey: inBOnlyListSpec
                        )
                       )
                     
                    )
                    handles: (Any 0.33333333333333 0.66666666666667 1.0)
                  )
                 (ArbitraryComponentSpec
                    name: 'ArbitraryComponent1'
                    hasBorder: false
                    viewChannel: versionsViewHolder
                  )
                 )
               
              )
              handles: (Any 0.5 1.0)
            )
           )
         
        )
      )

    "Modified: / 07-10-2008 / 11:03:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool class methodsFor:'plugIn spec'!

aspectSelectors

    ^ #(
        #diffSetHolder
        #inAOnlyLabelHolder
        #inBOnlyLabelHolder
      ).

    "Created: / 02-04-2009 / 16:07:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-04-2009 / 09:19:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool methodsFor:'accessing'!

changeSetA
    ^ changeSetA

    "Created: / 07-10-2008 / 10:38:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

changeSetA:aChangeSet
    changeSetA := aChangeSet.

    "Created: / 07-10-2008 / 10:38:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

changeSetB
    ^ changeSetB

    "Created: / 07-10-2008 / 10:38:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

changeSetB:aChangeSet
    changeSetB := aChangeSet.
    self changeSetsChanged.

    "Created: / 07-10-2008 / 10:38:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffItemClass
    ^ SmalltalkDiffTool::DiffItem

    "Created: / 21-05-2008 / 14:38:26 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 09-08-2009 / 14:57:37 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffSet
    ^ diffSetHolder value

    "Created: / 07-10-2008 / 10:39:02 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 02-04-2009 / 16:10:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffSet:aDiffSet

    self diffSetHolder value: aDiffSet

    "Modified: / 07-12-2007 / 11:39:15 / janfrog"
    "Created: / 19-04-2008 / 12:58:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-04-2009 / 23:45:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffSet:aDiffSet labelA:labelA labelB:labelB 
    self onlyInALabel:labelA.
    self onlyInBLabel:labelB.
    self diffSet:aDiffSet

    "Modified: / 11-12-2007 / 17:10:49 / janfrog"
    "Created: / 19-04-2008 / 12:58:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:24:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

onlyInALabel:labelA 
    self inAOnlyLabelHolder value:'Only in ', labelA

    "Created: / 07-10-2008 / 10:24:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

onlyInBLabel:labelB 
    self inBOnlyLabelHolder value:'Only in ', labelB

    "Created: / 07-10-2008 / 10:24:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

selection

    ^self selectionHolder value asCollection

    "Created: / 21-10-2008 / 09:32:15 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

selectionIsNonEmpty

    ^[self selection isNilOrEmptyCollection not]

    "Created: / 19-04-2008 / 12:58:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 22-10-2008 / 13:14:47 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

selectionIsNonEmptyAndAllHasVersionA

    ^[self selection isNilOrEmptyCollection not
        and:[self selection allSatisfy:[:mergeItem|mergeItem hasVersionA]]]

    "Created: / 19-04-2008 / 12:58:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 22-10-2008 / 13:14:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

selectionIsNonEmptyAndAllHasVersionB

    ^[self selection isNilOrEmptyCollection not
        and:[self selection allSatisfy:[:mergeItem|mergeItem hasVersionB]]]

    "Created: / 19-04-2008 / 12:58:06 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 22-10-2008 / 13:14:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

title

    self titleHolder value

    "Created: / 19-04-2008 / 12:58:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

title: aString

    self titleHolder value: aString

    "Created: / 19-04-2008 / 12:58:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionAColor

    ^Color green lightened lightened

    "Created: / 19-04-2008 / 12:58:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionBColor

    ^Color red lightened lightened

    "Created: / 19-04-2008 / 12:58:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool methodsFor:'aspects'!

conflictsLabelHolder

    |holder|

    (holder := builder bindingAt:#conflictsLabelHolder) isNil ifTrue:[
        holder := 'Conflicts' asValue.
        builder aspectAt:#conflictsLabelHolder put:holder.
    ].
    ^ holder.

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:36:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

conflictsListHolder

    |holder|

    (holder := builder bindingAt:#conflictsListHolder) isNil ifTrue:[
        holder := #() asValue.
        builder aspectAt:#conflictsListHolder put:holder.
    ].
    ^ holder.

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:36:59 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffSetHolder

    diffSetHolder ifNil:
        [self diffSetHolder: ChangeSet::DiffSet new asValue].
    ^diffSetHolder

    "Created: / 02-04-2009 / 16:09:30 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 02-04-2009 / 18:01:37 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffSetHolder:aValueHolder
    diffSetHolder := aValueHolder.
    diffSetHolder onChangeSend: #diffSetChanged to: self

    "Modified: / 02-04-2009 / 18:01:23 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

inAOnlyLabelHolder

    |holder|

    (holder := builder bindingAt:#inAOnlyLabelHolder) isNil ifTrue:[
        holder := 'Only in A' asValue.
        builder aspectAt:#inAOnlyLabelHolder put:holder.
    ].
    ^ holder.

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:48:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

inAOnlyLabelHolder: anValueHolder

    builder aspectAt:#inAOnlyLabelHolder put:anValueHolder.

    "Created: / 09-04-2009 / 09:19:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

inAOnlyListHolder

    |holder|

    (holder := builder bindingAt:#inAOnlyListHolder) isNil ifTrue:[
        holder :=#() asValue.
        builder aspectAt:#inAOnlyListHolder put:holder.
    ].
    ^ holder.

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:48:37 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

inBOnlyLabelHolder

    |holder|

    (holder := builder bindingAt:#inBOnlyLabelHolder) isNil ifTrue:[
        holder := 'Only in B' asValue.
        builder aspectAt:#inBOnlyLabelHolder put:holder.
    ].
    ^ holder.

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:48:16 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

inBOnlyLabelHolder: anValueHolder

    builder aspectAt:#inBOnlyLabelHolder put:anValueHolder.

    "Created: / 09-04-2009 / 09:19:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

inBOnlyListHolder

    |holder|

    (holder := builder bindingAt:#inBOnlyListHolder) isNil ifTrue:[
        holder :=#() asValue.
        builder aspectAt:#inBOnlyListHolder put:holder.
    ].
    ^ holder.

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:48:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

selectionHolder

    selectionHolder ifNil:
        [selectionHolder := nil asValue.
        selectionHolder 
            onChangeSend:#selectionChanged to: self].
    ^selectionHolder

    "Created: / 19-04-2008 / 12:57:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 21-05-2008 / 19:30:49 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showMergingChangeSetHolder
    "return/create the 'showMergingChangeSetHolder' value holder (automatically generated)"

    showMergingChangeSetHolder isNil ifTrue:[
        showMergingChangeSetHolder := false asValue
    ].
    ^ showMergingChangeSetHolder

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

titleHolder
    "return/create the 'titleHolder' value holder (automatically generated)"

    titleHolder isNil ifTrue:[
        titleHolder := 'Merge tool' asValue
    ].
    ^ titleHolder

    "Created: / 19-04-2008 / 12:57:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionsViewHolder
    "return/create the 'versionsViewHolder' value holder (automatically generated)"

    versionsViewHolder isNil ifTrue:[
        versionsViewHolder := HVScrollableView new.
    ].
    ^ versionsViewHolder

    "Created: / 07-10-2008 / 08:58:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 06-11-2008 / 14:49:40 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool methodsFor:'change & update'!

changeSetsChanged

    self diffSet:
        ((changeSetA notNil and:[changeSetB notNil]) 
            ifTrue:[changeSetA diffSetsAgainst: changeSetB]
            ifFalse:[ChangeSet::DiffSet new])

    "Created: / 07-10-2008 / 10:42:33 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

diffSetChanged

    |onlyInA changed onlyInB|

    self builder ifNil:[^self].
    self diffSet ifNil:[^self].
    onlyInA := self diffSet onlyInReceiver ? #()
                collect:[:change | self diffItemClass versionA:change ].
    changed := self diffSet changed ? #()
                collect:[:changes | self diffItemClass versionA:changes first versionB:changes second ].
    onlyInB := self diffSet onlyInArg ? #()
                collect:[:change | self diffItemClass versionB:change ].
    self inAOnlyListHolder value:onlyInA.
    self conflictsListHolder value:changed.
    self inBOnlyListHolder value:onlyInB.
    self resolutionChanged

    "Created: / 07-10-2008 / 10:42:45 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 02-04-2009 / 16:43:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

resolutionChanged

    self inAOnlyListHolder changed.
    self conflictsListHolder changed.
    self inBOnlyListHolder changed.

    "Created: / 19-04-2008 / 12:57:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

selectionChanged

    self showVersionsFor: 
        (self selection size = 1 ifTrue:[self selection anyOne] ifFalse:[nil])

    "Created: / 19-04-2008 / 12:57:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 21-10-2008 / 09:31:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool methodsFor:'hooks'!

commonPostBuild

    self diffSetChanged

    "Created: / 07-10-2008 / 10:47:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

postBuildVersionAListWidget: widget

    widget scrolledView backgroundColor: self versionAColor

    "Created: / 19-04-2008 / 12:57:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

postBuildVersionBListWidget: widget

    widget scrolledView backgroundColor: self versionBColor

    "Created: / 19-04-2008 / 12:57:37 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool methodsFor:'initialization'!

initialize

    super initialize.
    self createBuilder.

    "Created: / 07-10-2008 / 10:57:27 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 02-04-2009 / 16:10:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool methodsFor:'private'!

showVersionAAndBAndMergedFor: mergeItem

    ^self showVersionAAndBFor: mergeItem

    "Created: / 19-04-2008 / 12:56:09 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showVersionAAndBFor: mergeItem

    | diffView |

    diffView := (self versionsView isKindOf:DiffTextView) 
                    ifFalse:[DiffTextView new]
                    ifTrue:[self versionsView].

    "/self diff2TextView initialize.
    diffView
        text1: mergeItem versionASource
        text2: mergeItem versionBSource.
    diffView leftTextView backgroundColor: self versionAColor.
    diffView rightTextView backgroundColor: self versionBColor.
    self versionsView: diffView

    "Modified: / 07-12-2007 / 21:31:12 / janfrog"
    "Created: / 19-04-2008 / 12:56:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:28:40 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showVersionAAndMergedFor: mergeItem

    ^self showVersionAFor: mergeItem

    "Created: / 19-04-2008 / 12:56:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showVersionAFor: aMergeItem

    | textView |

    textView := (self versionsView isKindOf:TextView) 
                    ifFalse:[TextView new]
                    ifTrue:[self versionsView].

    textView contents: aMergeItem versionASource.
    textView backgroundColor: self versionAColor.
    self versionsView: textView.

    "Created: / 19-04-2008 / 12:56:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:29:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showVersionBAndMergedFor: mergeItem

    ^self showVersionBFor: mergeItem

    "Created: / 19-04-2008 / 12:56:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showVersionBFor: aMergeItem

    | textView |

    textView := (self versionsView isKindOf:TextView) 
                    ifFalse:[TextView new]
                    ifTrue:[self versionsView].

    textView contents: aMergeItem versionBSource.
    textView backgroundColor: self versionBColor.
    self versionsView: textView.

    "Created: / 19-04-2008 / 12:56:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 10:29:33 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

showVersionsFor: mergeItem

    mergeItem ifNil:[^self versionsView: nil].
    mergeItem showVersionsIn: self.

    "Created: / 19-04-2008 / 12:56:08 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 09:03:12 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionsView

    ^self versionsViewHolder value scrolledView

    "Created: / 07-10-2008 / 09:59:52 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 11:05:26 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionsView: aView

    self versionsViewHolder value scrolledView:aView

    "Created: / 07-10-2008 / 08:58:48 / Jan Vrany <vranyj1@fel.cvut.cz>"
    "Modified: / 07-10-2008 / 11:05:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool::DiffItem class methodsFor:'instance creation'!

versionA: changeA

    ^self new 
        versionA: changeA

    "Created: / 06-12-2007 / 17:51:17 / janfrog"
    "Modified: / 06-12-2007 / 21:26:59 / janfrog"
    "Modified: / 21-05-2008 / 14:15:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionA: changeA versionB: changeB

    ^self new 
        versionA: changeA;
        versionB: changeB

    "Created: / 06-12-2007 / 17:51:31 / janfrog"
!

versionB: changeB

    ^self new 
        versionB: changeB

    "Created: / 06-12-2007 / 17:51:37 / janfrog"
    "Modified: / 06-12-2007 / 21:27:14 / janfrog"
    "Modified: / 21-05-2008 / 14:15:10 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool::DiffItem methodsFor:'accessing'!

version
    ^ versionA ? versionB

    "Created: / 21-05-2008 / 11:54:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

versionA
    ^ versionA

    "Created: / 06-12-2007 / 17:36:51 / janfrog"
!

versionA:something
    versionA := something.

    "Created: / 06-12-2007 / 17:36:51 / janfrog"
!

versionASource
    ^ versionA 
        ifNil:[nil]
        ifNotNil:[versionA source]

    "Created: / 07-12-2007 / 12:16:49 / janfrog"
!

versionB
    ^ versionB

    "Created: / 06-12-2007 / 17:36:51 / janfrog"
!

versionB:something
    versionB := something.

    "Created: / 06-12-2007 / 17:36:51 / janfrog"
!

versionBSource
    ^ versionB 
        ifNil:[nil]
        ifNotNil:[versionB source]

    "Created: / 07-12-2007 / 12:17:01 / janfrog"
! !

!SmalltalkDiffTool::DiffItem methodsFor:'displaying'!

displayChangeOn: aGC x:x y:y

    self displayString displayOn: aGC x:x y:y

    "Created: / 06-12-2007 / 21:06:18 / janfrog"
!

displayOn: aGC x:x y:y

    self displayChangeOn: aGC x:x y:y.

    "Created: / 21-05-2008 / 11:55:22 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

displayString

    ^self version printString

    "Created: / 06-12-2007 / 21:10:22 / janfrog"
    "Modified: / 12-12-2007 / 15:14:31 / janfrog"
    "Modified: / 08-11-2008 / 09:28:04 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !

!SmalltalkDiffTool::DiffItem methodsFor:'queries'!

hasVersionA

    ^versionA notNil

    "Created: / 11-12-2007 / 16:42:22 / janfrog"
!

hasVersionB

    ^versionB notNil

    "Created: / 11-12-2007 / 16:42:26 / janfrog"
! !

!SmalltalkDiffTool::DiffItem methodsFor:'testing'!

isMergedVersionDifferent

    ^false

    "Created: / 21-05-2008 / 14:17:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
!

isMethodChange

    "Created: / 11-12-2007 / 18:39:35 / janfrog"
! !

!SmalltalkDiffTool::DiffItem methodsFor:'ui support'!

showVersionAAndBAndMergedIn: aMergeTool

    self isMergedVersionDifferent
        ifTrue:[aMergeTool showVersionAAndBAndMergedFor: self]
        ifFalse:[aMergeTool showVersionAAndBFor: self]

    "Created: / 07-12-2007 / 13:05:45 / janfrog"
!

showVersionAAndMergedIn: aMergeTool

    self isMergedVersionDifferent
        ifTrue:[aMergeTool showVersionAAndMergedFor: self]
        ifFalse:[aMergeTool showVersionAFor: self]

    "Created: / 07-12-2007 / 13:03:05 / janfrog"
!

showVersionBAndMergedIn: aMergeTool

    self isMergedVersionDifferent
        ifTrue:[aMergeTool showVersionBAndMergedFor: self]
        ifFalse:[aMergeTool showVersionBFor: self]

    "Created: / 07-12-2007 / 13:03:05 / janfrog"
!

showVersionsIn: aMergeTool

    (versionA notNil and:[versionB isNil])
        ifTrue:[^self showVersionAAndMergedIn: aMergeTool].
    (versionA notNil and:[versionB notNil])
        ifTrue:[^self showVersionAAndBAndMergedIn: aMergeTool].
    (versionA isNil and:[versionB notNil])
        ifTrue:[^self showVersionBAndMergedIn: aMergeTool].

    "Created: / 07-12-2007 / 12:57:39 / janfrog"
! !

!SmalltalkDiffTool class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libtool/Tools__SmalltalkDiffTool.st,v 1.3 2009-09-30 12:11:17 fm Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/libtool/Tools__SmalltalkDiffTool.st,v 1.3 2009-09-30 12:11:17 fm Exp $'
!

version_SVN
    ^'Id: Tools__SmalltalkDiffTool.st 117 2009-08-09 13:16:11Z vranyj1 '
! !