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