--- 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 $'
! !