Tools__ChangeSetDiffList.st
changeset 13863 481f2981e611
parent 13264 4a0cdaf356ec
child 14014 e58870fa0034
--- a/Tools__ChangeSetDiffList.st	Wed Feb 05 20:08:07 2014 +0100
+++ b/Tools__ChangeSetDiffList.st	Wed Feb 05 20:08:09 2014 +0100
@@ -28,7 +28,9 @@
 "{ NameSpace: Tools }"
 
 BrowserListWithFilter subclass:#ChangeSetDiffList
-	instanceVariableNames:'listHolder listEntryLabelGenerator listEntryIconGenerator'
+	instanceVariableNames:'listHolder listSelectionHolder listEntryLabelGenerator
+		listEntryIconGenerator showVersionMethodDiffsHolder
+		showCopyrightMethodDiffsHolder highlightConflictsHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Diff'
@@ -104,7 +106,7 @@
           collection: (
            (InputFieldSpec
               name: 'Filter'
-              layout: (LayoutFrame 0 0 0 0 0 1 25 0)
+              layout: (LayoutFrame 0 0 0 0 0 1 22 0)
               initiallyInvisible: true
               model: filterPatternHolder
               immediateAccept: true
@@ -113,14 +115,12 @@
               acceptOnTab: false
               acceptOnPointerLeave: false
               emptyFieldReplacementText: 'Search Filter...'
-              usePreferredHeight: true
-              useDynamicPreferredHeight: true
               postBuildCallback: postBuildFilterView:
             )
            (SelectionInListModelViewSpec
               name: 'List'
               layout: (LayoutFrame 0 0 0 0 0 1 0 1)
-              model: selectionHolder
+              model: listSelectionHolder
               menu: menuHolderWithShowFilter
               hasHorizontalScrollBar: true
               hasVerticalScrollBar: true
@@ -128,6 +128,8 @@
               multipleSelectOk: true
               useIndex: false
               highlightMode: line
+              ignoreReselect: false
+              postBuildCallback: postBuildListView:
             )
            )
          
@@ -149,11 +151,15 @@
      (if this app is embedded in a subCanvas)."
 
     ^ #(
+        #highlightConflictsHolder
         #inGeneratorHolder
         #listEntryIconGenerator
         #listEntryLabelGenerator
         #menuHolder
         #outGeneratorHolder
+        #showCopyrightMethodDiffsHolder
+        #showFilterHolder
+        #showVersionMethodDiffsHolder
       ).
 
 ! !
@@ -174,10 +180,49 @@
 
 listEntryLabelGenerator:aBlock
     listEntryLabelGenerator := aBlock.
+!
+
+selection: entry
+    self updateList.
+    self selectionHolder value: (Array with: entry).
+
+    "Created: / 17-01-2013 / 13:41:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 16:37:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffList methodsFor:'aspects'!
 
+highlightConflictsHolder
+    "return/create the 'highlightConflictsHolder' value holder (automatically generated)"
+
+    highlightConflictsHolder isNil ifTrue:[
+        highlightConflictsHolder := ValueHolder new.
+        highlightConflictsHolder addDependent:self.
+    ].
+    ^ highlightConflictsHolder
+
+    "Modified (format): / 03-08-2012 / 14:02:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+highlightConflictsHolder:something
+    "set the 'highlightConflictsHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    highlightConflictsHolder notNil ifTrue:[
+        oldValue := highlightConflictsHolder value.
+        highlightConflictsHolder removeDependent:self.
+    ].
+    highlightConflictsHolder := something.
+    highlightConflictsHolder notNil ifTrue:[
+        highlightConflictsHolder addDependent:self.
+    ].
+    newValue := highlightConflictsHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:highlightConflictsHolder.
+    ].
+!
+
 listHolder
     "return/create the 'difflistHolder' value holder (automatically generated)"
 
@@ -185,18 +230,167 @@
         listHolder := ValueHolder new.
     ].
     ^ listHolder
+!
+
+listSelectionHolder
+    "return/create the 'listSelectionHolder' value holder (automatically generated)"
+
+    listSelectionHolder isNil ifTrue:[
+        listSelectionHolder := ValueHolder new.
+        listSelectionHolder addDependent:self.
+    ].
+    ^ listSelectionHolder
+
+    "Modified: / 17-01-2013 / 16:51:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+showCopyrightMethodDiffsHolder
+    "return/create the 'showCopyrightMethodDiffsHolder' value holder (automatically generated)"
+
+    showCopyrightMethodDiffsHolder isNil ifTrue:[
+        showCopyrightMethodDiffsHolder := ValueHolder new.
+        showCopyrightMethodDiffsHolder addDependent:self.
+    ].
+    ^ showCopyrightMethodDiffsHolder
+!
+
+showCopyrightMethodDiffsHolder:something
+    "set the 'showCopyrightMethodDiffsHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    showCopyrightMethodDiffsHolder notNil ifTrue:[
+        oldValue := showCopyrightMethodDiffsHolder value.
+        showCopyrightMethodDiffsHolder removeDependent:self.
+    ].
+    showCopyrightMethodDiffsHolder := something.
+    showCopyrightMethodDiffsHolder notNil ifTrue:[
+        showCopyrightMethodDiffsHolder addDependent:self.
+    ].
+    newValue := showCopyrightMethodDiffsHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:showCopyrightMethodDiffsHolder.
+    ].
+!
+
+showVersionMethodDiffsHolder
+    "return/create the 'showVersionMethodDiffsHolder' value holder (automatically generated)"
+
+    showVersionMethodDiffsHolder isNil ifTrue:[
+        showVersionMethodDiffsHolder := ValueHolder new.
+        showVersionMethodDiffsHolder addDependent:self.
+    ].
+    ^ showVersionMethodDiffsHolder
+!
+
+showVersionMethodDiffsHolder:something
+    "set the 'showVersionMethodDiffsHolder' value holder (automatically generated)"
+
+    |oldValue newValue|
+
+    showVersionMethodDiffsHolder notNil ifTrue:[
+        oldValue := showVersionMethodDiffsHolder value.
+        showVersionMethodDiffsHolder removeDependent:self.
+    ].
+    showVersionMethodDiffsHolder := something.
+    showVersionMethodDiffsHolder notNil ifTrue:[
+        showVersionMethodDiffsHolder addDependent:self.
+    ].
+    newValue := showVersionMethodDiffsHolder value.
+    oldValue ~~ newValue ifTrue:[
+        self update:#value with:newValue from:showVersionMethodDiffsHolder.
+    ].
 ! !
 
 !ChangeSetDiffList methodsFor:'change & update'!
 
+enqueueDelayedUpdate:something with:aParameter from:changedObject
+    immediateUpdate value ifTrue:[
+        self delayedUpdate:something with:aParameter from:changedObject
+    ] ifFalse:[
+        super enqueueDelayedUpdate:something with:aParameter from:changedObject
+    ]
+
+    "Created: / 17-01-2013 / 16:25:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+enqueueDelayedUpdateList
+    immediateUpdate value ifTrue:[
+        self updateList
+    ] ifFalse:[
+        super enqueueDelayedUpdateList
+    ].
+
+    "Created: / 17-01-2013 / 16:44:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+listSelectionChanged
+    | lsel |
+
+    lsel := listSelectionHolder value ? #().
+    self selectionHolder 
+        removeDependent: self;
+        value: (lsel collect:[:e | e model ]);
+        addDependent: self.
+    self enqueueDelayedUpdateOutputGenerator
+
+    "Created: / 17-01-2013 / 14:26:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 16:23:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selectionChanged
+    | sel lsel llist |
+
+    listSelectionHolder isNil ifTrue:[ ^ self ].
+
+    listSelectionHolder removeDependent: self.
+    sel := (self selectionHolder value) ? #().
+    llist := self listHolder value.
+    lsel := llist select:[:leach | sel includesIdentical: leach model].
+    listSelectionHolder value: lsel.
+    listSelectionHolder addDependent: self.
+
+    super selectionChanged.
+
+    "Created: / 17-01-2013 / 14:11:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 16:36:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 update: aspect with: param from: sender
 
     aspect == #resolution ifTrue:[^(self componentAt: #List) invalidateRepairNow: true].
+
+    sender == listSelectionHolder ifTrue:[
+        self listSelectionChanged.
+        ^self
+    ].
         
-    sender == selectionHolder ifTrue:[^self selectionChanged].
+    sender == selectionHolder ifTrue:[
+        self selectionChanged.
+        ^self.
+    ].
+    sender == showVersionMethodDiffsHolder ifTrue:[
+        ^self updateList.
+        self.
+    ].
+
+    sender == showCopyrightMethodDiffsHolder ifTrue:[
+        ^self updateList.
+        self.
+    ].
+
+    sender == highlightConflictsHolder ifTrue:[
+        listView notNil ifTrue:[
+            listView scrolledView invalidate.
+        ].
+        ^self.
+    ].
+
+
+
     super update: aspect with: param from: sender.
 
-    "Modified: / 24-11-2009 / 18:34:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-01-2013 / 15:26:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffList methodsFor:'generators'!
@@ -206,9 +400,29 @@
     ^Iterator on:
         [:whatToDo|
         self selectionHolder value do:
-            [:each|each model do: whatToDo]]
+            [:each|each notNil ifTrue:[each do: whatToDo]]]
+
+    "Modified: / 17-01-2013 / 17:12:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ChangeSetDiffList methodsFor:'initialization'!
+
+initialize
+    "Invoked when a new instance is created."
 
-    "Modified: / 26-11-2009 / 17:23:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "/ please change as required (and remove this comment)
+    "/ listHolder := nil.
+    "/ listSelectionHolder := nil.
+    "/ listEntryLabelGenerator := nil.
+    "/ listEntryIconGenerator := nil.
+    "/ showVersionMethodDiffsHolder := nil.
+    "/ showCopyrightMethodDiffsHolder := nil.
+    "/ highlightConflictsHolder := nil.
+
+    super initialize.
+    immediateUpdate := true asValue.
+
+    "Modified: / 17-01-2013 / 16:51:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffList methodsFor:'private'!
@@ -266,6 +480,23 @@
     "Nothing to do"
 !
 
+shouldDisplayDiff: aDiffCompoment
+    "Return true if given diff component should be displayed"
+
+    (showVersionMethodDiffsHolder value not and:[aDiffCompoment isForVersionMethod])
+        ifTrue:[ ^ false ].
+
+    (showCopyrightMethodDiffsHolder value not and:[aDiffCompoment isForCopyrightMethod])
+        ifTrue:[ ^ false ].
+
+    aDiffCompoment isDiffSet 
+        ifTrue:[ ^ aDiffCompoment diffs anySatisfy:[:diff|self shouldDisplayDiff: diff]].
+
+    ^true
+
+    "Created: / 03-08-2012 / 14:38:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 updateList
     "Superclass Tools::BrowserList says that I am responsible to implement this method"
     
@@ -277,17 +508,19 @@
         [newDiffs := newDiffs diffs].
     newDiffs := self filterList: newDiffs.
     newList := OrderedCollection new.    
-    newDiffs do:
-        [:item|
-        newList add:(ListEntry model: item application: self).
-        item addDependent: self].
+    newDiffs do: [:item|
+        (self shouldDisplayDiff: item) ifTrue:[
+            newList add:(ListEntry model: item application: self).
+            item addDependent: self
+        ].
+    ].
 
     newList sort:[:a :b|a label < b label].
     self listHolder value:newList
 
     "Modified: / 07-07-2011 / 14:17:26 / jv"
-    "Modified: / 29-11-2011 / 16:08:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 30-07-2013 / 19:30:18 / cg"
+    "Modified: / 11-11-2013 / 11:00:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffList::ListEntry class methodsFor:'instance creation'!
@@ -342,20 +575,30 @@
 
 displayOn: aGC x: x y: y opaque: opaque
 
-    | icon  |
-    (icon := self icon) ifNotNil:[icon displayOn: aGC x: x y: y - icon height opaque: opaque].
-    self label displayOn: aGC x: x + 16 y:y opaque: opaque
+    | label icon oldPaint |
+    label := self label.
+"/    ((application topApplication askFor:#isMerge) and:[model isMerged not]) ifTrue:[
+    (application highlightConflictsHolder value and:[model "isConflict"isMerged not]) ifTrue:[
+        oldPaint := aGC paint.
+        aGC paint: TextDiff3Tool colorConflict.
+        '!!' displayOn: aGC x: x  y:y opaque: opaque.
+        aGC paint: oldPaint.
+        label := label asText allBold"/; colorizeAllWith: Color red darker.
+    ].
+    (icon := self icon) notNil ifTrue:[icon displayOn: aGC x: x + 10 y: y - icon height opaque: opaque].
+    label displayOn: aGC x: x + 10 + 16 y:y opaque: opaque
 
     "Created: / 24-11-2009 / 18:21:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-01-2013 / 11:35:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffList class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__ChangeSetDiffList.st,v 1.7 2013-07-30 17:35:29 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__ChangeSetDiffList.st,v 1.8 2014-02-05 19:08:09 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeSetDiffList.st,v 1.7 2013-07-30 17:35:29 cg Exp $'
+    ^ '$Id: Tools__ChangeSetDiffList.st,v 1.8 2014-02-05 19:08:09 cg Exp $'
 ! !