*** empty log message ***
authorps
Wed, 29 Dec 1999 15:49:10 +0100
changeset 2515 eacfc080e08f
parent 2514 539f34a1f791
child 2516 736908782aa1
*** empty log message ***
HierarchicalVersionDiffBrowser.st
--- a/HierarchicalVersionDiffBrowser.st	Wed Dec 29 11:40:09 1999 +0100
+++ b/HierarchicalVersionDiffBrowser.st	Wed Dec 29 15:49:10 1999 +0100
@@ -1,38 +1,10 @@
 ApplicationModel subclass:#HierarchicalVersionDiffBrowser
-	instanceVariableNames:'versionDiffBrowser'
+	instanceVariableNames:'versionDiffBrowser classTree treeSelectionHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Browsers'
 !
 
-HierarchicalItem subclass:#AbstractVersionDiffBrowserItem
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:HierarchicalVersionDiffBrowser
-!
-
-HierarchicalVersionDiffBrowser::AbstractVersionDiffBrowserItem subclass:#RevisionItem
-	instanceVariableNames:'revision'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:HierarchicalVersionDiffBrowser
-!
-
-HierarchicalVersionDiffBrowser::AbstractVersionDiffBrowserItem subclass:#ClassItemRoot
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:HierarchicalVersionDiffBrowser
-!
-
-HierarchicalVersionDiffBrowser::AbstractVersionDiffBrowserItem subclass:#ClassItem
-	instanceVariableNames:'myClass'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:HierarchicalVersionDiffBrowser
-!
-
 
 !HierarchicalVersionDiffBrowser class methodsFor:'interface specs'!
 
@@ -44,47 +16,47 @@
      the UIPainter may not be able to read the specification."
 
     "
-     UIPainter new openOnClass:HierarchicalVersionDiffBrowser andSelector:#contentsSpecVersionDiffBrowser
-     HierarchicalVersionDiffBrowser new openInterface:#contentsSpecVersionDiffBrowser
+     UIPainter new openOnClass:ClassRevisionTree andSelector:#contentsSpecVersionDiffBrowser
+     ClassRevisionTree new openInterface:#contentsSpecVersionDiffBrowser
     "
 
     <resource: #canvas>
 
     ^ 
      #(#FullSpec
-        #name: #contentsSpecVersionDiffBrowser
-        #window: 
+	#name: #contentsSpecVersionDiffBrowser
+	#window: 
        #(#WindowSpec
-          #label: 'Hierarchical Version DiffBrowser'
-          #name: 'Hierarchical Version DiffBrowser'
-          #min: #(#Point 10 10)
-          #max: #(#Point 9999 9999)
-          #bounds: #(#Rectangle 12 22 877 551)
-        )
-        #component: 
+	  #label: 'Hierarchical Version DiffBrowser'
+	  #name: 'Hierarchical Version DiffBrowser'
+	  #min: #(#Point 10 10)
+	  #max: #(#Point 9999 9999)
+	  #bounds: #(#Rectangle 12 22 877 551)
+	)
+	#component: 
        #(#SpecCollection
-          #collection: #(
-           #(#SubCanvasSpec
-              #name: 'VersionDiffBrowser'
-              #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0)
-              #hasHorizontalScrollBar: false
-              #hasVerticalScrollBar: false
-              #majorKey: #VersionDiffBrowser
-              #minorKey: #windowSpec
-              #clientKey: #versionDiffBrowser
-            )
-           #(#LabelSpec
-              #name: 'Label1'
-              #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 20 0)
-              #visibilityChannel: #''
-              #translateLabel: true
-              #labelChannel: #versionDiffModel
-              #resizeForLabel: false
-              #adjust: #left
-            )
-           )
+	  #collection: #(
+	   #(#SubCanvasSpec
+	      #name: 'VersionDiffBrowser'
+	      #layout: #(#LayoutFrame 0 0.0 30 0.0 0 1.0 0 1.0)
+	      #hasHorizontalScrollBar: false
+	      #hasVerticalScrollBar: false
+	      #majorKey: #VersionDiffBrowser
+	      #minorKey: #windowSpec
+	      #clientKey: #versionDiffBrowser
+	    )
+	   #(#LabelSpec
+	      #name: 'Label1'
+	      #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 20 0)
+	      #visibilityChannel: #''
+	      #translateLabel: true
+	      #labelChannel: #versionDiffModel
+	      #resizeForLabel: false
+	      #adjust: #left
+	    )
+	   )
          
-        )
+	)
       )
 !
 
@@ -135,18 +107,13 @@
               #component: 
              #(#SpecCollection
                 #collection: #(
-                 #(#HierarchicalListViewSpec
-                    #name: 'HierarchicalItemListView'
-                    #model: #hierarchicalItemSelectionAspect
-                    #menu: #selectHierarchicalItemMenu
-                    #hasHorizontalScrollBar: true
-                    #hasVerticalScrollBar: true
-                    #listModel: #hierarchicalItemListModel
-                    #multipleSelectOk: true
-                    #highlightMode: #label
-                    #doubleClickSelector: #doubleClick:
-                    #selectConditionSelector: #isHierarchicalItemSelectable:
-                    #indicatorSelector: #doubleClick:
+                 #(#SubCanvasSpec
+                    #name: 'ClassTree'
+                    #hasHorizontalScrollBar: false
+                    #hasVerticalScrollBar: false
+                    #majorKey: #ClassRevisonTree
+                    #minorKey: #windowSpec
+                    #clientKey: #classTree
                   )
                  #(#UISubSpecification
                     #name: 'SubSpecification1'
@@ -156,7 +123,7 @@
                  )
                
               )
-              #handles: #(#Any 0.289017 1.0)
+              #handles: #(#Any 0.5 1.0)
             )
            )
          
@@ -164,51 +131,16 @@
       )
 ! !
 
-!HierarchicalVersionDiffBrowser class methodsFor:'menu specs'!
-
-resourceItemMenu
-    "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:HierarchicalVersionDiffBrowser andSelector:#resourceItemMenu
-     (Menu new fromLiteralArrayEncoding:(HierarchicalVersionDiffBrowser resourceItemMenu)) startUp
-    "
-
-    <resource: #menu>
-
-    ^ 
-     #(#Menu
-        #(
-         #(#MenuItem
-            #label: 'Compare Changes'
-            #translateLabel: true
-            #value: #menuActionCompareChanges
-          )
-         )
-        nil
-        nil
-      )
-! !
-
 !HierarchicalVersionDiffBrowser class methodsFor:'startup'!
 
 openOnClasses:aClassColl
-    |theBrowser theClassItemColl|
+    |theBrowser theTree|
 
     theBrowser := self new.
+    theBrowser classTree:ClassRevisionTree new.
     theBrowser allButOpen.
-    theClassItemColl := aClassColl collect:[:eachClass |
-        |theClassItem theClass|
-        theClassItem := ClassItem new.
-        theClass := Smalltalk resolveName:eachClass inClass:self.
-        theClassItem myClass:theClass.
-        theClassItem].
-     theBrowser hierarchicalItemList addAll: theClassItemColl.
-     theBrowser openWindow.
+    theBrowser classTree setupOnClasses:aClassColl withSelectionHolder:theBrowser treeSelectionHolder.
+    theBrowser openWindow.
 
 
 "
@@ -222,93 +154,25 @@
 
 !HierarchicalVersionDiffBrowser methodsFor:'accessing'!
 
-hierarchicalListItemForSelectionIndex: anIndex
-
-    ^self hierarchicalItemListModel at:anIndex ifAbsent:nil
-!
-
-hierarchicalListSelectionIndexColl
-
-    ^self hierarchicalItemSelectionAspect value
-!
-
-hierarchicalListSelectionIndexColl:anArray
+classTree
 
-    ^self hierarchicalItemSelectionAspect value:anArray
-! !
-
-!HierarchicalVersionDiffBrowser methodsFor:'actions'!
-
-doubleClick: anIndex
-    "automatically generated by UIPainter ..."
-
-    "*** the code below performs no action"
-    "*** (except for some feedback on the Transcript)"
-    "*** Please change as required and accept in the browser."
-
-    "action to be added ..."
-
-    (self hierarchicalItemListModel at: anIndex) toggleExpand  
+    ^ classTree 
 !
 
-isHierarchicalItemSelectable: anIndex
-
-    |theSelectionIndexColl theSelectionIndexSize theSelectedItem|
+classTree:something
+    "set the value of the instance variable 'classTree' (automatically generated)"
 
-    "nur eine Revision kann selektiert werden"
-    (theSelectedItem := self hierarchicalListItemForSelectionIndex: anIndex) isRevisionItem
-        ifFalse:[^false].
-    "ist keine selektiert ist alles ok -> mit true zurueck"
-    (theSelectionIndexColl := self hierarchicalListSelectionIndexColl) size == 0
-         ifTrue:[^true].
-    "wurde deselektiert"
-    (self window sensor ctrlDown)
-        ifTrue: [
-                "ist eine Rev selektiert und die Klassen sind nicht gleich, dann falsch"
-                (self hierarchicalListItemForSelectionIndex:theSelectionIndexColl first) parent myClass == theSelectedItem parent myClass
-                     ifFalse:[^false].
-                theSelectionIndexColl size ~~ 2
-                     ifTrue:[^true].
-                (theSelectionIndexColl includes:anIndex)
-                        ifTrue: [^true]
-                        ifFalse:[self hierarchicalListSelectionIndexColl:(Array with:theSelectionIndexColl first).
-                                ^true]]
-        ifFalse:[
-                (theSelectionIndexColl size == 2)
-                    ifTrue:[self hierarchicalListSelectionIndexColl:(Array with:anIndex)].
-                ^true]
-!
+    classTree := something.!
 
-menuActionCompareChanges
-
-    |theSelectionIndexColl theFirstRevisionItem theSecondRevisionString theClass theFirstRevisionString|
+treeSelectionHolder
 
-    theSelectionIndexColl := self hierarchicalListSelectionIndexColl.
-    theFirstRevisionItem := (self hierarchicalListItemForSelectionIndex:theSelectionIndexColl first).
-    theClass := theFirstRevisionItem parent myClass.
-    theFirstRevisionString := theFirstRevisionItem revision.
-    theSecondRevisionString := (self hierarchicalListItemForSelectionIndex:theSelectionIndexColl last) revision.
-    self updateVersionDiffLabelForClass:theClass andVersionA:theFirstRevisionString andVersionB:theSecondRevisionString.    
-    self withWaitCursorDo:[
-        self versionDiffBrowser setupForClass:theClass versionA:theFirstRevisionString versionB:theSecondRevisionString.
-    ].
-!
-
-selectHierarchicalItemMenu
-"
-<return: Block>
-"
-
-    ^[|menu|
-      self checkIfTwoResourceItemsSelected
-        ifFalse:[menu := nil] 
-        ifTrue: [menu := Menu new fromLiteralArrayEncoding:(self class resourceItemMenu).
-                menu receiver:self].
-      menu
-    ]
+    ^treeSelectionHolder ifNil:[treeSelectionHolder:=ValueHolder new.
+                               treeSelectionHolder addDependent:self.
+                               treeSelectionHolder]
 !
 
 versionDiffBrowser
+
     versionDiffBrowser isNil ifTrue:[
         versionDiffBrowser := VersionDiffBrowser new.
         versionDiffBrowser masterApplication:self.
@@ -318,60 +182,6 @@
 
 !HierarchicalVersionDiffBrowser methodsFor:'aspects'!
 
-hierarchicalItemList
-    "automatically generated by UIPainter ..."
-
-    "*** the code below creates a default model when invoked."
-    "*** (which may not be the one you wanted)"
-    "*** Please change as required and accept it in the browser."
-
-    ^ self hierarchicalItemListModel root
-
-
-
-
-
-!
-
-hierarchicalItemListModel
-    "automatically generated by UIPainter ..."
-
-    "*** the code below creates a default model when invoked."
-    "*** (which may not be the one you wanted)"
-    "*** Please change as required and accept it in the browser."
-
-    |holder|
-
-    (holder := builder bindingAt:#hierarchicalItemListModel) isNil ifTrue:[
-        holder := HierarchicalList new.
-        holder root:(ClassItemRoot new).
-        holder showRoot:false.
-        builder aspectAt:#hierarchicalItemListModel put:holder.
-        holder application:self.
-    ].
-
-    ^ holder.
-
-!
-
-hierarchicalItemSelectionAspect
-    "automatically generated by UIPainter ..."
-
-    "*** the code below creates a default model when invoked."
-    "*** (which may not be the one you wanted)"
-    "*** Please change as required and accept it in the browser."
-
-    |holder|
-
-    (holder := builder bindingAt:#hierarchicalItemSelectionAspect) isNil ifTrue:[
-        holder := ValueHolder new.
-        builder aspectAt:#hierarchicalItemSelectionAspect put:holder.
-        holder addDependent: self.
-    ].
-    ^ holder.
-
-!
-
 versionDiffModel
     "automatically generated by UIPainter ..."
 
@@ -388,33 +198,42 @@
     ^ holder.
 ! !
 
-!HierarchicalVersionDiffBrowser methodsFor:'interface opening'!
-
-postOpenWith: aBuilder
+!HierarchicalVersionDiffBrowser methodsFor:'change & update'!
 
-
-    super postOpenWith: aBuilder.
-    self hierarchicalItemList expand.
-! !
+update:something with:aParameter from:changedObject
 
-!HierarchicalVersionDiffBrowser methodsFor:'testing'!
-
-checkIfTwoResourceItemsSelected
-
-    |theSelectionIndexColl|
+     changedObject == self treeSelectionHolder
+        ifTrue:[self updateVersionDiffBrowser]
 
-    ((theSelectionIndexColl := self hierarchicalListSelectionIndexColl) isNil or:
-        [theSelectionIndexColl size ~~ 2])
-            ifTrue:[^false].
-    ^((self hierarchicalListItemForSelectionIndex:theSelectionIndexColl first) isRevisionItem
-        and:[(self hierarchicalListItemForSelectionIndex:theSelectionIndexColl last) isRevisionItem])
 ! !
 
 !HierarchicalVersionDiffBrowser methodsFor:'update'!
 
-updateVersionDiffLabelForClass:aClass andVersionA:aVersionA andVersionB:aVersionB    
+updateVersionDiffBrowser
+"
+
+<return: self>
+"
+    |theFirstTreeItem theSecondTreeItem theClass theFirstRevisionString theSecondRevisionString|
 
+    theFirstTreeItem := self treeSelectionHolder value first.
+    theSecondTreeItem := self treeSelectionHolder value last.
+    theClass := theFirstTreeItem myClass.
+    theFirstRevisionString := theFirstTreeItem revisionString.
+    theSecondRevisionString := theSecondTreeItem revisionString.
+    self updateVersionDiffLabelForClass:theClass andVersionA:theFirstRevisionString andVersionB:theSecondRevisionString.    
+    self versionDiffBrowser setupForClass:theClass 
+                            labelA:theFirstRevisionString
+                            sourceA:theFirstTreeItem sourceStream
+                            labelB:theSecondRevisionString 
+                            sourceB:theSecondTreeItem sourceStream
+!
 
+updateVersionDiffLabelForClass:aClass andVersionA:aVersionA andVersionB:aVersionB    
+"
+
+<return: self>
+"
     |theStream|
 
     theStream := WriteStream on:#String.
@@ -428,153 +247,8 @@
     self versionDiffModel value:theStream contents
 ! !
 
-!HierarchicalVersionDiffBrowser::AbstractVersionDiffBrowserItem methodsFor:'protocol'!
-
-children
-    "returns list of children
-     *** to optimize:redefine by subClass
-    "
-    children isNil ifTrue:[
-        children := #()
-    ].
-    ^ children
-
-
-
-
-
-
-!
-
-icon
-   ^ nil
-
-
-!
-
-label
-    ^ nil
-
-!
-
-middleButtonMenu
-    "returns the middleButtonMenu or nil if no menu is defined
-    "
-    ^ nil
-
-! !
-
-!HierarchicalVersionDiffBrowser::AbstractVersionDiffBrowserItem methodsFor:'testing'!
-
-isClassItem
-
-    ^false
-!
-
-isRevisionItem
-
-    ^false
-! !
-
-!HierarchicalVersionDiffBrowser::RevisionItem methodsFor:'accessing'!
-
-revision
-    "return the value of the instance variable 'revision' (automatically generated)"
-
-    ^ revision!
-
-revision:something
-    "set the value of the instance variable 'revision' (automatically generated)"
-
-    revision := something.! !
-
-!HierarchicalVersionDiffBrowser::RevisionItem methodsFor:'protocol'!
-
-label
-
-
-    ^revision
-
-
-! !
-
-!HierarchicalVersionDiffBrowser::RevisionItem methodsFor:'testing'!
-
-isRevisionItem
-
-    ^true
-
-! !
-
-!HierarchicalVersionDiffBrowser::ClassItemRoot methodsFor:'initialization'!
-
-initialize
-    super initialize.
-
-    children   := OrderedCollection new.
-    isExpanded := true.
-
-
-! !
-
-!HierarchicalVersionDiffBrowser::ClassItem methodsFor:'accessing'!
-
-myClass
-    "return the value of the instance variable 'myClass' (automatically generated)"
-
-    ^ myClass!
-
-myClass:something
-    "set the value of the instance variable 'myClass' (automatically generated)"
-
-    myClass := something.! !
-
-!HierarchicalVersionDiffBrowser::ClassItem methodsFor:'protocol'!
-
-children
-"returns list of children. The revision for the class myClass
-are computed via the sourcecode manager. Only when the childrens
-are needed, they are calculated.
-
-<return: List>
-"
-
-    children ifNil:[
-        self application withWaitCursorDo:[
-            |theRevisionItemColl|
-            theRevisionItemColl := (myClass sourceCodeManager revisionsOf:myClass) collect:[:eachRevision|
-                |theRevisionItem|
-                theRevisionItem := HierarchicalVersionDiffBrowser::RevisionItem new.
-                theRevisionItem revision:eachRevision.
-                theRevisionItem].
-             children:=theRevisionItemColl.
-             children do:[:aChild| aChild parent:self]]].
-    ^children
-!
-
-hasChildren
-    children ifNil:[^ true].
-  ^ children size ~~ 0
-!
-
-label
-
-   ^myClass name
-
-
-! !
-
-!HierarchicalVersionDiffBrowser::ClassItem methodsFor:'testing'!
-
-isClassItem
-
-    ^true
-
-
-! !
-
 !HierarchicalVersionDiffBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/HierarchicalVersionDiffBrowser.st,v 1.3 1999-12-27 15:36:19 ps Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/HierarchicalVersionDiffBrowser.st,v 1.4 1999-12-29 14:49:10 ps Exp $'
 ! !