# HG changeset patch # User Jan Vrany # Date 1391626835 -3600 # Node ID 9013b43b8322397a6e540e854c96e9caac0152c3 # Parent 2e691a1ec8b2f3c5799a94b5f24150b311417472 Merged in jv's version diff -r 2e691a1ec8b2 -r 9013b43b8322 Tools__TextDiff2Tool.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Tools__TextDiff2Tool.st Wed Feb 05 20:00:35 2014 +0100 @@ -0,0 +1,619 @@ +" + COPYRIGHT (c) 2006 by eXept Software AG + All Rights Reserved + + This software is furnished under a license and may be used + only in accordance with the terms of that license and with the + inclusion of the above copyright notice. This software may not + be provided or otherwise made available to, or used by, any + other person. No title to or ownership of the software is + hereby transferred. +" +"{ Package: 'stx:libtool' }" + +"{ NameSpace: Tools }" + +TextDiffTool subclass:#TextDiff2Tool + instanceVariableNames:'showDiffHolder diffSpecHolder codeView' + classVariableNames:'' + poolDictionaries:'' + category:'Interface-Diff' +! + +!TextDiff2Tool class methodsFor:'documentation'! + +copyright +" + COPYRIGHT (c) 2006 by eXept Software AG + All Rights Reserved + + This software is furnished under a license and may be used + only in accordance with the terms of that license and with the + inclusion of the above copyright notice. This software may not + be provided or otherwise made available to, or used by, any + other person. No title to or ownership of the software is + hereby transferred. +" +! + +documentation +" + documentation to be added. + + [author:] + Jan Vrany + + [instance variables:] + + [class variables:] + + [see also:] + +" +! + +examples +" + [exBegin] + |text1 text2| + + text1 := 'hello world +here is some difference +more text +this line has been removed +more text +more text +'. + + text2 := 'hello world +where is the difference ? +more text +more text +more text +this line has been added +'. + + TextDiff2Tool openOn:text1 label:'text1' + and:text2 label:'text2' + [exEnd] +" +! ! + +!TextDiff2Tool class methodsFor:'interface opening'! + +openOn:textA label:labelA and: textB label: labelB + | app | + + app := self new. + app labelA: labelA; textA: textA. + app labelB: labelB; textB: textB. + app open + + "Created: / 16-03-2012 / 13:15:11 / Jan Vrany " +! ! + +!TextDiff2Tool class methodsFor:'interface specs'! + +diffSpec + "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::TextDiff2Tool andSelector:#diffSpec + Tools::TextDiff2Tool new openInterface:#diffSpec + " + + + + ^ + #(FullSpec + name: diffSpec + window: + (WindowSpec + label: 'Text Diff Tool (for embedding)' + name: 'Text Diff Tool (for embedding)' + min: (Point 10 10) + bounds: (Rectangle 0 0 782 506) + ) + component: + (SpecCollection + collection: ( + (ViewSpec + name: '2Labels' + layout: (LayoutFrame 0 0 0 0 -16 1 30 0) + component: + (SpecCollection + collection: ( + (UISubSpecification + name: 'VersionA' + layout: (LayoutFrame 0 0 0 0 0 0.5 30 0) + minorKey: versionALabelSpec + ) + (UISubSpecification + name: 'VersionB' + layout: (LayoutFrame 5 0.5 0 0 0 1 30 0) + minorKey: versionBLabelSpec + ) + ) + + ) + ) + (ArbitraryComponentSpec + name: 'Diff2TextView' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + hasHorizontalScrollBar: false + hasVerticalScrollBar: false + autoHideScrollBars: false + hasBorder: false + component: diffView + postBuildCallback: postBuildDiffView: + ) + ) + + ) + ) +! + +nothingSpec + "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::TextDiffTool andSelector:#nothingSpec + Tools::TextDiffTool new openInterface:#nothingSpec + " + + + + ^ + #(FullSpec + name: nothingSpec + window: + (WindowSpec + label: 'NewApplication' + name: 'NewApplication' + bounds: (Rectangle 0 0 300 300) + ) + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Nothing selected...' + name: 'Label1' + layout: (LayoutFrame 0 0 0 0 0 1 0 1) + translateLabel: true + ) + ) + + ) + ) +! + +textAViewSpec + "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::TextDiffTool andSelector:#textViewSpec + Tools::TextDiffTool new openInterface:#textViewSpec + " + + + + ^ + #(FullSpec + name: 'textAViewSpec' + window: + (WindowSpec + label: 'Text Only' + name: 'Text Only' + min: (Point 10 10) + bounds: (Rectangle 0 0 782 506) + ) + component: + (SpecCollection + collection: ( + (ArbitraryComponentSpec + name: 'CodeView' + layout: (LayoutFrame 0 0 0 0 0 1 0 1) + model: textAHolder + hasHorizontalScrollBar: false + hasVerticalScrollBar: false + autoHideScrollBars: false + hasBorder: false + component: #'Tools::CodeView2' + postBuildCallback: postBuildCodeView: + ) + ) + + ) + ) + + "Created: / 18-04-2012 / 18:43:09 / Jan Vrany " +! + +textBViewSpec + "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::TextDiffTool andSelector:#textViewSpec + Tools::TextDiffTool new openInterface:#textViewSpec + " + + + + ^ + #(FullSpec + name: 'textAViewSpec' + window: + (WindowSpec + label: 'Text Only' + name: 'Text Only' + min: (Point 10 10) + bounds: (Rectangle 0 0 782 506) + ) + component: + (SpecCollection + collection: ( + (ArbitraryComponentSpec + name: 'CodeView' + layout: (LayoutFrame 0 0 0 0 0 1 0 1) + model: textBHolder + hasHorizontalScrollBar: false + hasVerticalScrollBar: false + autoHideScrollBars: false + hasBorder: false + component: #'Tools::CodeView2' + postBuildCallback: postBuildCodeView: + ) + ) + + ) + ) + + "Created: / 18-04-2012 / 18:43:24 / Jan Vrany " +! + +versionAOnlySpec + "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::TextDiffTool andSelector:#versionAOnlySpec + Tools::TextDiffTool new openInterface:#versionAOnlySpec + " + + + + ^ + #(FullSpec + name: versionAOnlySpec + window: + (WindowSpec + label: 'Version A Only' + name: 'Version A Only' + min: (Point 10 10) + bounds: (Rectangle 0 0 782 506) + ) + component: + (SpecCollection + collection: ( + (UISubSpecification + name: 'VersionA' + layout: (LayoutFrame 0 0 0 0 0 1 30 0) + minorKey: versionALabelSpec + ) + (UISubSpecification + name: 'Text' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + minorKey: textAViewSpec + ) + ) + + ) + ) + + "Modified: / 18-04-2012 / 18:43:34 / Jan Vrany " +! + +versionBOnlySpec + "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::TextDiffTool andSelector:#versionBOnlySpec + Tools::TextDiffTool new openInterface:#versionBOnlySpec + " + + + + ^ + #(FullSpec + name: 'versionBOnlySpec' + window: + (WindowSpec + label: 'Version B Only' + name: 'Version B Only' + min: (Point 10 10) + bounds: (Rectangle 0 0 782 506) + ) + component: + (SpecCollection + collection: ( + (UISubSpecification + name: 'VersionB' + layout: (LayoutFrame 0 0 0 0 0 1 30 0) + minorKey: versionBLabelSpec + ) + (UISubSpecification + name: 'Text' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + minorKey: textBViewSpec + ) + ) + + ) + ) + + "Created: / 19-07-2011 / 10:06:52 / Jan Vrany " +! ! + +!TextDiff2Tool class methodsFor:'plugIn spec'! + +aspectSelectors + "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." + + "Return a description of exported aspects; + these can be connected to aspects of an embedding application + (if this app is embedded in a subCanvas)." + + ^ #( + #classHolder + #codeAspectHolder + #labelAHolder + #labelBHolde + #labelCHolder + #labelHolder + #languageHolder + #showDiffHolder + #textAHolder + #textBHolder + #textCHolder + ). + +! ! + +!TextDiff2Tool methodsFor:'accessing'! + +title: aString + + ^self label: aString + + "Created: / 30-08-2011 / 09:45:37 / Jan Vrany " +! ! + +!TextDiff2Tool methodsFor:'aspects'! + +showDiffHolder + "return/create the 'showDiffHolder' value holder (automatically generated)" + + showDiffHolder isNil ifTrue:[ + showDiffHolder := ValueHolder with: true. + showDiffHolder addDependent:self. + ]. + ^ showDiffHolder + + "Modified: / 30-06-2011 / 20:59:51 / Jan Vrany " +! + +showDiffHolder:something + "set the 'showDiffHolder' value holder (automatically generated)" + + |oldValue newValue| + + showDiffHolder notNil ifTrue:[ + oldValue := showDiffHolder value. + showDiffHolder removeDependent:self. + ]. + showDiffHolder := something. + showDiffHolder notNil ifTrue:[ + showDiffHolder addDependent:self. + ]. + newValue := showDiffHolder value. + oldValue ~~ newValue ifTrue:[ + self update:#value with:newValue from:showDiffHolder. + ]. +! ! + +!TextDiff2Tool methodsFor:'change & update'! + +codeAspect + + ^self codeAspectHolder value + + "Created: / 19-07-2011 / 19:07:27 / Jan Vrany " +! + +update:something with:aParameter from:changedObject + "Invoked when an object that I depend upon sends a change notification." + + (changedObject == showDiffHolder) ifTrue:[ + self updateViews. + ^self. + ]. + super update:something with:aParameter from:changedObject + + "Modified: / 16-03-2012 / 12:36:48 / Jan Vrany " +! + +updateAfterAorBorCChanged + + (textAChanged & textBChanged) ifTrue:[ + textAChanged := textBChanged := false. + self updateViews + ]. + + "Created: / 16-03-2012 / 12:37:17 / Jan Vrany " +! + +updateViews + + | a b | + a := self textAHolder value. + b := self textBHolder value. + + self showDiffHolder value ifFalse:[ + self showTextOnly. + ^ self + ]. + + (a notNil and:[b notNil]) ifTrue:[ + self showDiff. + ^self + ]. + a notNil ifTrue:[ + self showVersionA. + ^self + ]. + b notNil ifTrue:[ + self showVersionB. + ^self + ]. + + self showNothing. + + "Created: / 19-07-2011 / 11:29:55 / Jan Vrany " +! ! + +!TextDiff2Tool methodsFor:'hooks'! + +postBuildCodeView:aScrollableView + + codeView := aScrollableView. + codeView notNil ifTrue:[codeView languageHolder: self languageHolder]. + codeView notNil ifTrue:[codeView classHolder: self classHolder]. + + "Created: / 19-07-2011 / 10:17:06 / Jan Vrany " +! + +postBuildDiffView:aScrollableView + + super postBuildDiffView:aScrollableView. + diffView notNil ifTrue:[ + (self textAHolder value notNil and:[self textBHolder value notNil]) ifTrue:[ + diffView scrolledView + text1: self textAHolder value + text2: self textBHolder value + ] + + ]. + + "Created: / 16-03-2012 / 13:30:55 / Jan Vrany " +! ! + +!TextDiff2Tool methodsFor:'initialization'! + +initializeDiffView + "superclass Tools::TextDiffTool says that I am responsible to implement this method" + + ^ Tools::Diff2CodeView2 new + + "Modified: / 16-01-2013 / 11:58:07 / Jan Vrany " +! ! + +!TextDiff2Tool methodsFor:'private'! + +showDiff + |scrolledView| + + self contentSpecHolder value: #diffSpec. + + diffView isNil ifTrue:[^self]. + (scrolledView := diffView scrolledView) isNil ifTrue:[^self]. + scrolledView + text1: self textAHolder value + text2: self textBHolder value + + "Created: / 19-07-2011 / 10:22:39 / Jan Vrany " + "Modified: / 18-11-2011 / 15:01:12 / cg" + "Modified: / 16-03-2012 / 13:21:07 / Jan Vrany " +! + +showNothing + + self contentSpecHolder value: #nothingSpec + + "Created: / 19-07-2011 / 19:34:42 / Jan Vrany " +! + +showTextOnly + + self contentSpecHolder value: #textViewSpec + + "Created: / 19-07-2011 / 11:39:50 / Jan Vrany " +! + +showVersionA + + self contentSpecHolder value: #versionAOnlySpec + + "Created: / 19-07-2011 / 10:22:40 / Jan Vrany " +! + +showVersionB + + self contentSpecHolder value: #versionBOnlySpec + + "Created: / 19-07-2011 / 10:22:46 / Jan Vrany " +! ! + +!TextDiff2Tool methodsFor:'testing'! + +isDiff2 + ^true + + "Created: / 16-03-2012 / 15:21:25 / Jan Vrany " +! ! + +!TextDiff2Tool class methodsFor:'documentation'! + +version + ^ '$Id: Tools__TextDiff2Tool.st,v 1.1 2014-02-05 19:00:35 vrany Exp $' +! + +version_CVS + ^ '§Header: /cvs/stx/stx/libtool/Tools__TextDiffTool.st,v 1.6 2011/11/18 14:05:39 cg Exp §' +! + +version_HG + + ^ '$Changeset: $' +! + +version_SVN + ^ '$Id: Tools__TextDiff2Tool.st,v 1.1 2014-02-05 19:00:35 vrany Exp $' +! ! +