81 |
81 |
82 <resource: #canvas> |
82 <resource: #canvas> |
83 |
83 |
84 ^ |
84 ^ |
85 #(#FullSpec |
85 #(#FullSpec |
86 #name: #windowSpec |
86 #name: #windowSpec |
87 #window: |
87 #window: |
88 #(#WindowSpec |
88 #(#WindowSpec |
89 #label: 'ClassCategoryList' |
89 #label: 'ClassCategoryList' |
90 #name: 'ClassCategoryList' |
90 #name: 'ClassCategoryList' |
91 #min: #(#Point 0 0) |
91 #min: #(#Point 0 0) |
92 #max: #(#Point 1024 721) |
92 #max: #(#Point 1024 721) |
93 #bounds: #(#Rectangle 13 23 313 323) |
93 #bounds: #(#Rectangle 13 23 313 323) |
94 ) |
94 ) |
95 #component: |
95 #component: |
96 #(#SpecCollection |
96 #(#SpecCollection |
97 #collection: #( |
97 #collection: #( |
98 #(#SequenceViewSpec |
98 #(#SequenceViewSpec |
99 #name: 'List' |
99 #name: 'List' |
100 #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
100 #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
101 #tabable: true |
101 #tabable: true |
102 #model: #selectedCategories |
102 #model: #selectedCategories |
103 #menu: #menuHolder |
103 #menu: #menuHolder |
104 #hasHorizontalScrollBar: true |
104 #hasHorizontalScrollBar: true |
105 #hasVerticalScrollBar: true |
105 #hasVerticalScrollBar: true |
106 #miniScrollerHorizontal: true |
106 #miniScrollerHorizontal: true |
107 #isMultiSelect: true |
107 #isMultiSelect: true |
108 #valueChangeSelector: #selectionChangedByClick |
108 #valueChangeSelector: #selectionChangedByClick |
109 #useIndex: false |
109 #useIndex: false |
110 #sequenceList: #categoryList |
110 #sequenceList: #categoryList |
111 #doubleClickChannel: #doubleClickChannel |
111 #doubleClickChannel: #doubleClickChannel |
112 #properties: |
112 #properties: |
113 #(#PropertyListDictionary |
113 #(#PropertyListDictionary |
114 #dragArgument: nil |
114 #dragArgument: nil |
115 #dropArgument: nil |
115 #dropArgument: nil |
116 #canDropSelector: #canDrop: |
116 #canDropSelector: #canDrop: |
117 #dropSelector: #doDrop: |
117 #dropSelector: #doDrop: |
118 ) |
118 ) |
119 ) |
119 ) |
120 ) |
120 ) |
121 |
121 |
122 ) |
122 ) |
123 ) |
123 ) |
124 |
124 |
125 "Created: / 5.2.2000 / 13:42:11 / cg" |
125 "Created: / 5.2.2000 / 13:42:11 / cg" |
126 "Modified: / 18.8.2000 / 20:11:49 / cg" |
126 "Modified: / 18.8.2000 / 20:11:49 / cg" |
127 ! ! |
127 ! ! |
200 nameListEntryForALL categoryOfClass wg| |
200 nameListEntryForALL categoryOfClass wg| |
201 |
201 |
202 selectedCategories := self selectedCategoriesStrings. |
202 selectedCategories := self selectedCategoriesStrings. |
203 |
203 |
204 changedObject == Smalltalk ifTrue:[ |
204 changedObject == Smalltalk ifTrue:[ |
205 ((something == #classVariables) |
205 ((something == #classVariables) |
206 or:[something == #classDefinition]) ifTrue:[ |
206 or:[something == #classDefinition]) ifTrue:[ |
207 listValid == true ifTrue:[ |
207 listValid == true ifTrue:[ |
208 categoryOfClass := aParameter category. |
208 categoryOfClass := aParameter category. |
209 (categoryList value includes:categoryOfClass) ifFalse:[ |
209 (categoryList value includes:categoryOfClass) ifFalse:[ |
210 self invalidateList. |
210 self invalidateList. |
211 ]. |
211 ]. |
212 slaveMode value ~~ true ifTrue:[ |
212 slaveMode value ~~ true ifTrue:[ |
213 (selectedCategories includes:categoryOfClass) ifTrue:[ |
213 (selectedCategories includes:categoryOfClass) ifTrue:[ |
214 "/ a selected class has changed |
214 "/ a selected class has changed |
215 "/ in order to give others a chance to update their list before, |
215 "/ in order to give others a chance to update their list before, |
216 "/ this one is always enqueued for delayed update (even if immediateUpdate is true) |
216 "/ this one is always enqueued for delayed update (even if immediateUpdate is true) |
217 "/ self enqueueDelayedUpdateOutputGenerator |
217 "/ self enqueueDelayedUpdateOutputGenerator |
218 self enqueueMessage:#updateOutputGenerator for:self arguments:#() |
218 self enqueueMessage:#updateOutputGenerator for:self arguments:#() |
219 ]. |
219 ]. |
220 ]. |
220 ]. |
221 ]. |
221 ]. |
222 ^ self |
222 ^ self |
223 ]. |
223 ]. |
224 something == #newClass ifTrue:[ |
224 something == #newClass ifTrue:[ |
225 categoryOfClass := aParameter category. |
225 categoryOfClass := aParameter category. |
226 "/ listValid == true ifTrue:[ |
226 "/ listValid == true ifTrue:[ |
227 (categoryList value includes:categoryOfClass) ifFalse:[ |
227 (categoryList value includes:categoryOfClass) ifFalse:[ |
228 self invalidateList. |
228 self invalidateList. |
229 ]. |
229 ]. |
230 "/ ]. |
230 "/ ]. |
231 slaveMode value ~~ true ifTrue:[ |
231 slaveMode value ~~ true ifTrue:[ |
232 (selectedCategories includes:categoryOfClass) ifTrue:[ |
232 (selectedCategories includes:categoryOfClass) ifTrue:[ |
233 self enqueueDelayedUpdateOutputGenerator |
233 self enqueueDelayedUpdateOutputGenerator |
234 ]. |
234 ]. |
235 ]. |
235 ]. |
236 ^ self |
236 ^ self |
237 ]. |
237 ]. |
238 |
238 |
239 self invalidateList. |
239 self invalidateList. |
240 |
240 |
241 (something == #classRemove |
241 (something == #classRemove |
242 or:[something == #projectOrganization |
242 or:[something == #projectOrganization |
243 or:[something == #organization]]) ifTrue:[ |
243 or:[something == #organization]]) ifTrue:[ |
244 slaveMode value ~~ true ifTrue:[ |
244 slaveMode value ~~ true ifTrue:[ |
245 "/ sorry: cannot filter on category (already changed to #removed) |
245 "/ sorry: cannot filter on category (already changed to #removed) |
246 self enqueueDelayedUpdateOutputGenerator |
246 self enqueueDelayedUpdateOutputGenerator |
247 ]. |
247 ]. |
248 ]. |
248 ]. |
249 ^ self |
249 ^ self |
250 ]. |
250 ]. |
251 |
251 |
252 changedObject == ChangeSet ifTrue:[ |
252 changedObject == ChangeSet ifTrue:[ |
253 "/ remove all other change notifications from the eventQueue |
253 "/ remove all other change notifications from the eventQueue |
254 wg := self windowGroup. |
254 wg := self windowGroup. |
255 wg isNil ifTrue:[ |
255 wg isNil ifTrue:[ |
256 "/ oops - should no longer be dependent... |
256 "/ oops - should no longer be dependent... |
257 changedObject removeDependent:self. |
257 changedObject removeDependent:self. |
258 ] ifFalse:[ |
258 ] ifFalse:[ |
259 wg sensor |
259 wg sensor |
260 flushEventsFor:self |
260 flushEventsFor:self |
261 where:[:ev | ev isMessageSendEvent |
261 where:[:ev | ev isMessageSendEvent |
262 and:[ev selector == #delayedUpdate:with:from: |
262 and:[ev selector == #delayedUpdate:with:from: |
263 and:[(ev arguments at:3) == ChangeSet]]]. |
263 and:[(ev arguments at:3) == ChangeSet]]]. |
264 ]. |
264 ]. |
265 |
265 |
266 something == #addChange: ifTrue:[ |
266 something == #addChange: ifTrue:[ |
267 "/ only need to invalidate, if that change changes my emphasis |
267 "/ only need to invalidate, if that change changes my emphasis |
268 "/ (i.e. if its a new methodChange) |
268 "/ (i.e. if its a new methodChange) |
269 "/ self invalidateList. |
269 "/ self invalidateList. |
270 |
270 |
271 aParameter isMethodChange ifTrue:[ |
271 aParameter isMethodChange ifTrue:[ |
272 (ChangeSet current |
272 (ChangeSet current |
273 count:[:chg | chg notNil and:[chg isMethodChange |
273 count:[:chg | chg notNil and:[chg isMethodChange |
274 and:[ chg className = aParameter className ]]]) |
274 and:[ chg className = aParameter className ]]]) |
275 == 1 ifTrue:[ |
275 == 1 ifTrue:[ |
276 "/ that methodChange is the first for this method. |
276 "/ that methodChange is the first for this method. |
277 aParameter changeClass ifNotNil:[ |
277 aParameter changeClass ifNotNil:[ |
278 self colorizeCategoryAsChanged:(aParameter changeClass category). |
278 self colorizeCategoryAsChanged:(aParameter changeClass category). |
279 ] |
279 ] |
280 ] |
280 ] |
281 ]. |
281 ]. |
282 ^ self |
282 ^ self |
283 ]. |
283 ]. |
284 |
284 |
285 self invalidateList. |
285 self invalidateList. |
286 ^ self |
286 ^ self |
287 ]. |
287 ]. |
288 |
288 |
289 changedObject == nameSpaceFilter ifTrue:[ |
289 changedObject == nameSpaceFilter ifTrue:[ |
290 "/ all might be more or less than before ... |
290 "/ all might be more or less than before ... |
291 allSelected := false. |
291 allSelected := false. |
292 ]. |
292 ]. |
293 changedObject == packageFilter ifTrue:[ |
293 changedObject == packageFilter ifTrue:[ |
294 "/ all might be more or less than before ... |
294 "/ all might be more or less than before ... |
295 allSelected := false. |
295 allSelected := false. |
296 ]. |
296 ]. |
297 |
297 |
298 selectedCategoriesHolder := self selectedCategories. |
298 selectedCategoriesHolder := self selectedCategories. |
299 changedObject == selectedCategoriesHolder ifTrue:[ |
299 changedObject == selectedCategoriesHolder ifTrue:[ |
300 categoryList isNil ifTrue:[ |
300 categoryList isNil ifTrue:[ |
301 "/ oops - hurry up |
301 "/ oops - hurry up |
302 self invalidateList. |
302 self invalidateList. |
303 ]. |
303 ]. |
304 |
304 |
305 nameListEntryForALL := self class nameListEntryForALL. |
305 nameListEntryForALL := self class nameListEntryForALL. |
306 |
306 |
307 selectedCategories size > 1 ifTrue:[ |
307 selectedCategories size > 1 ifTrue:[ |
308 (selectedCategories includes:nameListEntryForALL) ifTrue:[ |
308 (selectedCategories includes:nameListEntryForALL) ifTrue:[ |
309 self makeSelectionOtherThanAllVisible. |
309 self makeSelectionOtherThanAllVisible. |
310 ] |
310 ] |
311 ]. |
311 ]. |
312 |
312 |
313 "/ if all selected before AND allSelected after, no need to update the output generator |
313 "/ if all selected before AND allSelected after, no need to update the output generator |
314 allSelectedBefore := allSelected ? false. |
314 allSelectedBefore := allSelected ? false. |
315 allSelected := selectedCategories includes:nameListEntryForALL. |
315 allSelected := selectedCategories includes:nameListEntryForALL. |
316 (allSelectedBefore and:[allSelected]) ifTrue:[ |
316 (allSelectedBefore and:[allSelected]) ifTrue:[ |
317 ^ self |
317 ^ self |
318 ]. |
318 ]. |
319 ]. |
319 ]. |
320 |
320 |
321 super delayedUpdate:something with:aParameter from:changedObject |
321 super delayedUpdate:something with:aParameter from:changedObject |
322 |
322 |
323 "Created: / 5.2.2000 / 13:42:12 / cg" |
323 "Created: / 5.2.2000 / 13:42:12 / cg" |