AbstractVersionDiffBrowserItem subclass:#ClassItem
instanceVariableNames:'myClass isRegistered revisonColl revisionInfo'
classVariableNames:''
poolDictionaries:''
category:'Interface-Browsers'
!
!ClassItem class methodsFor:'protocol'!
expandableRevisionItemClass
^ExpandableRevisionItem
!
sourceRevisonItemClass
^SourceRevisionItem
!
versionRevisionItemClass
^VersionRevisionItem
! !
!ClassItem methodsFor:'accessing'!
loadedRevisionItem
^children detect:[:eachRevision | eachRevision isLoadedRevision]
!
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.!
needsChildren
"return the value of the instance variable 'isRegistered' (automatically generated)"
^ children size == 0
!
revisonColl
"return the value of the instance variable 'revisonColl' (automatically generated)"
^ revisonColl!
revisonColl:something
"set the value of the instance variable 'revisonColl' (automatically generated)"
revisonColl := something.! !
!ClassItem methodsFor:'initialization'!
initialize
"
initialize necessary things
<return: self>
"
super initialize.
isRegistered := false
! !
!ClassItem methodsFor:'private'!
addAllRevisionsBefore:anExpandableRevisonItem
|theChildrens theStartIndex theStopIndex theRevisionSize|
(theStartIndex := children size) <= (theRevisionSize := revisonColl size) ifTrue:[
theStopIndex := theRevisionSize.
theChildrens := revisonColl copyFrom:theStartIndex to:theStopIndex.
"remove expandable item"
self remove:anExpandableRevisonItem.
"add items"
self addAll:theChildrens.
]
!
addNewRevisionsBefore:anExpandableRevisonItem
|theChildrens theStartIndex theStopIndex|
(theStartIndex := children size) <= revisonColl size ifTrue:[
theStopIndex := (theStartIndex-1) * 2 + (theStartIndex-1).
theStopIndex := theStopIndex min:revisonColl size.
theChildrens := revisonColl copyFrom:theStartIndex to:theStopIndex.
"add items"
self addAll:theChildrens before:anExpandableRevisonItem.
"check if all revisions are shown, if true remove expandable item"
(theStopIndex = revisonColl size) ifTrue:[self remove:anExpandableRevisonItem].
]
!
setRevisionInfo:aRevisionInfo
aRevisionInfo removeKey:#revisions.
revisionInfo := aRevisionInfo
! !
!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: nil|List>
"
isRegistered ifFalse:[
isRegistered := true.
self application getRevisionInfoForClassItem:self.
self changed:#icon
].
^children
!
computeRevisions
|theClass theSourceCodeManager theRevisionLog|
theClass := self myClass.
(theSourceCodeManager := theClass sourceCodeManager) isNil
ifFalse:[theRevisionLog := theSourceCodeManager revisionLogOf:theClass].
self setRevisions:theRevisionLog
!
hasChildren
"a class items has always childs
<return: Boolean>
"
^true
!
icon
isRegistered ifFalse:[^#unloadedClassItem].
(isRegistered and:[children size ~~ 0]) ifTrue:[
^#loadedClassItem
].
^#loadingClassItem
!
label
^myClass name
!
newestRevision
revisionInfo ifNil:[^''].
^revisionInfo at:#newestRevision
!
setChildrensFromRevisionColl
|theChildrens|
revisonColl size > 5
ifTrue:[
theChildrens := revisonColl copyFrom:1 to:5.
theChildrens add:self class expandableRevisionItemClass new.
]
ifFalse:[theChildrens:=revisonColl].
self addAll:theChildrens
!
setRevisions:aRevisionInfo
aRevisionInfo isNil
ifTrue: [revisonColl := Array with:(self class sourceRevisonItemClass newForRevision:nil)]
ifFalse:[revisonColl := (aRevisionInfo at:#revisions) collect:[:eachRevision|
self class versionRevisionItemClass newForRevision:eachRevision].
self isMyClassChanged
ifTrue:[revisonColl addFirst:(self class sourceRevisonItemClass newForRevision:myClass revisionInfo)].
self setRevisionInfo:aRevisionInfo].
self setChildrensFromRevisionColl.
! !
!ClassItem methodsFor:'testing'!
isClassItem
"
Used for testing tree items. Define correct behaviour in subclasses
<return: Boolean>
"
^true
!
isMyClassChanged
^Project isClassChanged: myClass
! !
!ClassItem class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libtool/ClassItem.st,v 1.4 2000-01-14 14:09:49 ps Exp $'
! !