HierarchicalClassRevisionList.st
author Claus Gittinger <cg@exept.de>
Fri, 18 Feb 2000 15:02:06 +0100
changeset 2625 d70f0361a027
parent 2613 4dd07aefaf20
child 2626 4ee750caddab
permissions -rw-r--r--
doc; halts removed

HierarchicalList subclass:#HierarchicalClassRevisionList
	instanceVariableNames:'itemComputationList semaphoreCritical itemTask currentItemInTask
		dataColl'
	classVariableNames:'Lobby'
	poolDictionaries:''
	category:'Interface-Browsers-Support'
!

!HierarchicalClassRevisionList class methodsFor:'documentation'!

documentation
"
    This is not yet finished (work in progress) - do not use.

    [author:]
        Pierre Schwarz (ps@exept.de)

    [see also:]

    [instance variables:]

    [class variables:]
"

! !

!HierarchicalClassRevisionList class methodsFor:'instance creation'!

new

    ^ super new initialize
! !

!HierarchicalClassRevisionList methodsFor:'accessing'!

dataColl
    "return the value of the instance variable 'classRevisionColl' (automatically generated)"

    ^ dataColl
!

dataColl:something
    "set the value of the instance variable 'classRevisionColl' (automatically generated)"

    dataColl := something.
!

icons
"

<return: Dictionary of: Symbol->Image>
"
    |icons|

    icons := Dictionary new.
    icons at:#loadedRevision put:(Smalltalk imageFromFileNamed:'red_ball.xpm' forClass:self class).
    icons at:#unloadedRevision put:(Smalltalk imageFromFileNamed:'green_ball.xpm' forClass:self class).
    icons at:#unloadedClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow_grey1.xpm' forClass:self class).
    icons at:#loadingClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow_search.xpm' forClass:self class).
    icons at:#loadedClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow.xpm' forClass:self class).
    ^icons


!

itemComputationList

    ^ itemComputationList ifNil:[itemComputationList := IdentitySet new]

!

semaphoreCritical
    "return the value of the instance variable 'semaphoreCritical' (automatically generated)"

    ^ semaphoreCritical ifNil:[semaphoreCritical := RecursionLock new]

! !

!HierarchicalClassRevisionList methodsFor:'finalization'!

disposed

    self stopItemTask.    
    Lobby unregister:self.


! !

!HierarchicalClassRevisionList methodsFor:'initialization'!

initialize

    self showRoot:false.
    dataColl := OrderedCollection new.
    self root:ClassItemRootForRevision new.
    Lobby ifNil:[
        Lobby := Registry new.
    ].
    Lobby register:self.

! !

!HierarchicalClassRevisionList methodsFor:'protocol'!

getDataForItem: anItem

    self semaphoreCritical critical:[
        |theList|
        currentItemInTask == anItem ifTrue:[^self].
        (theList := self itemComputationList) removeIdentical:anItem ifAbsent:[nil].
        theList add:anItem.
        self startItemTask]

!

itemTaskCycle

    |theItem|

    [
        theItem := nil.
        self semaphoreCritical critical:[
            self itemComputationList notEmpty
                ifTrue:[theItem := self itemComputationList remove:(self itemComputationList last) ifAbsent:[nil]]
        ].
        (theItem notNil and:[theItem needsChildren])ifTrue:[
            currentItemInTask:=theItem.
            theItem computeRevisions.
            currentItemInTask:=nil
        ].
        theItem notNil
    ] whileTrue.

!

newData: aClassRevisionColl

    dataColl := aClassRevisionColl.
    self root:ClassItemRootForRevision new.


!

startItemTask

    self semaphoreCritical critical:[
        itemTask ifNil:[
            itemTask := Process for:[
                                            self itemTaskCycle
                                        ]
                               priority:(Processor userBackgroundPriority).
            itemTask addExitAction:[itemTask := nil].
            itemTask resume.
        ].
    ].

!

stopItemTask
    |task|

    self semaphoreCritical critical:[
        (task := itemTask) notNil ifTrue:[
            itemTask := nil.
            Exception handle:[:ex|] do:[
                task terminateWithAllSubprocesses.
                task waitUntilTerminated.
            ]
        ]
    ].


! !

!HierarchicalClassRevisionList class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libtool/HierarchicalClassRevisionList.st,v 1.2 2000-02-18 14:00:49 cg Exp $'
! !