HierarchicalClassRevisionList.st
changeset 2613 4dd07aefaf20
child 2625 d70f0361a027
equal deleted inserted replaced
2612:ce84f1d3dae9 2613:4dd07aefaf20
       
     1 HierarchicalList subclass:#HierarchicalClassRevisionList
       
     2 	instanceVariableNames:'itemComputationList semaphoreCritical itemTask currentItemInTask
       
     3 		dataColl'
       
     4 	classVariableNames:'Lobby'
       
     5 	poolDictionaries:''
       
     6 	category:'Interface-Browsers-Support'
       
     7 !
       
     8 
       
     9 
       
    10 !HierarchicalClassRevisionList class methodsFor:'instance creation'!
       
    11 
       
    12 new
       
    13 
       
    14     ^ super new initialize
       
    15 ! !
       
    16 
       
    17 !HierarchicalClassRevisionList methodsFor:'accessing'!
       
    18 
       
    19 dataColl
       
    20     "return the value of the instance variable 'classRevisionColl' (automatically generated)"
       
    21 
       
    22     ^ dataColl
       
    23 !
       
    24 
       
    25 dataColl:something
       
    26     "set the value of the instance variable 'classRevisionColl' (automatically generated)"
       
    27 
       
    28     dataColl := something.
       
    29 !
       
    30 
       
    31 icons
       
    32 "
       
    33 
       
    34 <return: Dictionary of: Symbol->Image>
       
    35 "
       
    36     |icons|
       
    37 
       
    38     icons := Dictionary new.
       
    39     icons at:#loadedRevision put:(Smalltalk imageFromFileNamed:'red_ball.xpm' forClass:self class).
       
    40     icons at:#unloadedRevision put:(Smalltalk imageFromFileNamed:'green_ball.xpm' forClass:self class).
       
    41     icons at:#unloadedClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow_grey1.xpm' forClass:self class).
       
    42     icons at:#loadingClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow_search.xpm' forClass:self class).
       
    43     icons at:#loadedClassItem put:(Smalltalk imageFromFileNamed:'small_folder_yellow.xpm' forClass:self class).
       
    44     ^icons
       
    45 
       
    46 
       
    47 !
       
    48 
       
    49 itemComputationList
       
    50 
       
    51     ^ itemComputationList ifNil:[itemComputationList := IdentitySet new]
       
    52 
       
    53 !
       
    54 
       
    55 semaphoreCritical
       
    56     "return the value of the instance variable 'semaphoreCritical' (automatically generated)"
       
    57 
       
    58     ^ semaphoreCritical ifNil:[semaphoreCritical := RecursionLock new]
       
    59 
       
    60 ! !
       
    61 
       
    62 !HierarchicalClassRevisionList methodsFor:'finalization'!
       
    63 
       
    64 disposed
       
    65 
       
    66     self stopItemTask.    
       
    67     Lobby unregister:self.
       
    68 
       
    69 
       
    70 ! !
       
    71 
       
    72 !HierarchicalClassRevisionList methodsFor:'initialization'!
       
    73 
       
    74 initialize
       
    75 
       
    76     self showRoot:false.
       
    77     dataColl := OrderedCollection new.
       
    78     self root:ClassItemRootForRevision new.
       
    79     Lobby ifNil:[
       
    80         Lobby := Registry new.
       
    81     ].
       
    82     Lobby register:self.
       
    83 
       
    84 ! !
       
    85 
       
    86 !HierarchicalClassRevisionList methodsFor:'protocol'!
       
    87 
       
    88 getDataForItem: anItem
       
    89 
       
    90     self semaphoreCritical critical:[
       
    91         |theList|
       
    92         currentItemInTask == anItem ifTrue:[^self].
       
    93         (theList := self itemComputationList) removeIdentical:anItem ifAbsent:[nil].
       
    94         theList add:anItem.
       
    95         self startItemTask]
       
    96 
       
    97 !
       
    98 
       
    99 itemTaskCycle
       
   100 
       
   101     |theItem|
       
   102 
       
   103     [
       
   104         theItem := nil.
       
   105         self semaphoreCritical critical:[
       
   106             self itemComputationList notEmpty
       
   107                 ifTrue:[theItem := self itemComputationList remove:(self itemComputationList last) ifAbsent:[nil]]
       
   108         ].
       
   109         (theItem notNil and:[theItem needsChildren])ifTrue:[
       
   110             currentItemInTask:=theItem.
       
   111             theItem computeRevisions.
       
   112             currentItemInTask:=nil
       
   113         ].
       
   114         theItem notNil
       
   115     ] whileTrue.
       
   116 
       
   117 !
       
   118 
       
   119 newData: aClassRevisionColl
       
   120 
       
   121     dataColl := aClassRevisionColl.
       
   122     self root:ClassItemRootForRevision new.
       
   123 
       
   124 
       
   125 !
       
   126 
       
   127 startItemTask
       
   128 
       
   129     self semaphoreCritical critical:[
       
   130         itemTask ifNil:[
       
   131             itemTask := Process for:[
       
   132                                             self itemTaskCycle
       
   133                                         ]
       
   134                                priority:(Processor userBackgroundPriority).
       
   135             itemTask addExitAction:[itemTask := nil].
       
   136             itemTask resume.
       
   137         ].
       
   138     ].
       
   139 
       
   140 !
       
   141 
       
   142 stopItemTask
       
   143     |task|
       
   144 
       
   145     self semaphoreCritical critical:[
       
   146         (task := itemTask) notNil ifTrue:[
       
   147             itemTask := nil.
       
   148             Exception handle:[:ex|] do:[
       
   149                 task terminateWithAllSubprocesses.
       
   150                 task waitUntilTerminated.
       
   151             ]
       
   152         ]
       
   153     ].
       
   154 
       
   155 
       
   156 ! !
       
   157 
       
   158 !HierarchicalClassRevisionList class methodsFor:'documentation'!
       
   159 
       
   160 version
       
   161     ^ '$Header: /cvs/stx/stx/libtool/HierarchicalClassRevisionList.st,v 1.1 2000-02-15 16:49:08 ps Exp $'
       
   162 ! !