13 |
13 |
14 "{ NameSpace: Tools }" |
14 "{ NameSpace: Tools }" |
15 |
15 |
16 BrowserList subclass:#ProjectList |
16 BrowserList subclass:#ProjectList |
17 instanceVariableNames:'projectList projectNameList selectionIndexHolder worker |
17 instanceVariableNames:'projectList projectNameList selectionIndexHolder worker |
18 workerQueue includedPseudoEntryForChanged' |
18 workerQueue includedPseudoEntryForChanged selectionIndexValid' |
19 classVariableNames:'AdditionalEmptyProjects HideModules' |
19 classVariableNames:'AdditionalEmptyProjects HideModules' |
20 poolDictionaries:'' |
20 poolDictionaries:'' |
21 category:'Interface-Browsers-New' |
21 category:'Interface-Browsers-New' |
22 ! |
22 ! |
23 |
23 |
225 ! ! |
225 ! ! |
226 |
226 |
227 !ProjectList methodsFor:'change & update'! |
227 !ProjectList methodsFor:'change & update'! |
228 |
228 |
229 delayedUpdate:something with:aParameter from:changedObject |
229 delayedUpdate:something with:aParameter from:changedObject |
230 |cls sel pkg mthd newSel allIdx| |
230 |cls sel pkg mthd newSel| |
231 |
231 |
232 self inSlaveModeOrInvisible |
232 self inSlaveModeOrInvisible |
233 "/ (self slaveMode value == true) |
233 "/ (self slaveMode value == true) |
234 ifTrue:[ |
234 ifTrue:[ |
235 (changedObject == Smalltalk |
235 (changedObject == Smalltalk |
236 or:[ something == #projectOrganization ]) ifTrue:[ |
236 or:[ something == #projectOrganization ]) ifTrue:[ |
|
237 listValid ifFalse:[ ^ self]. |
237 listValid := false |
238 listValid := false |
238 ]. |
239 ]. |
239 ^ self |
240 changedObject == self selectionHolder ifTrue:[ |
|
241 selectionIndexValid := false. |
|
242 ]. |
|
243 changedObject == inGeneratorHolder ifTrue:[ |
|
244 self invalidateList. |
|
245 self updateList. |
|
246 ]. |
|
247 "/ |
|
248 "/ self window shown ifFalse:[ ^ self ]. |
|
249 ]. |
|
250 |
|
251 (changedObject == self selectionHolder) ifTrue:[ |
|
252 self updateSelectionIndexFromSelection. |
|
253 "/ self enqueueDelayedUpdateOutputGenerator. |
|
254 ^ self. |
|
255 ]. |
|
256 |
|
257 selectionIndexValid ifFalse:[ |
|
258 self updateSelectionIndexFromSelection. |
240 ]. |
259 ]. |
241 |
260 |
242 changedObject == self selectionIndexHolder ifTrue:[ |
261 changedObject == self selectionIndexHolder ifTrue:[ |
243 listValid ifFalse:[ |
262 listValid ifFalse:[ |
244 self updateList. |
263 self updateList. |
245 ]. |
264 ]. |
|
265 changedObject value == 0 ifTrue:[ |
|
266 self selectionIndexHolder value:#() |
|
267 ]. |
246 newSel := changedObject value collect:[:idx | projectList value at:idx]. |
268 newSel := changedObject value collect:[:idx | projectList value at:idx]. |
247 newSel ~= self selectedProjects value ifTrue:[ |
269 newSel ~= self selectedProjects value ifTrue:[ |
248 self selectedProjects value:newSel. |
270 self selectedProjects value:newSel. |
249 ]. |
271 ]. |
250 ^ self. |
272 ^ self. |
251 ]. |
273 ]. |
252 changedObject == self selectionHolder ifTrue:[ |
|
253 listValid ifFalse:[ |
|
254 self updateList. |
|
255 ]. |
|
256 allIdx := projectList value indexOf:(self class nameListEntryForALL). |
|
257 newSel := changedObject value |
|
258 collect:[:val | |i| |
|
259 i := projectList value indexOf:val. |
|
260 i == 0 ifTrue:[allIdx] ifFalse:[i]] |
|
261 thenSelect:[:idx | idx ~~ 0]. |
|
262 newSel ~= self selectionIndexHolder value ifTrue:[ |
|
263 self selectionIndexHolder value:newSel |
|
264 ]. |
|
265 ]. |
|
266 |
274 |
267 changedObject == slaveMode ifTrue:[ |
275 changedObject == slaveMode ifTrue:[ |
268 listValid ~~ true ifTrue:[ |
276 listValid ~~ true ifTrue:[ |
269 self enqueueDelayedUpdateList |
277 self enqueueDelayedUpdateList |
270 ]. |
278 ]. |
277 ]. |
285 ]. |
278 |
286 |
279 changedObject == Smalltalk ifTrue:[ |
287 changedObject == Smalltalk ifTrue:[ |
280 something == #projectOrganization ifTrue:[ |
288 something == #projectOrganization ifTrue:[ |
281 self invalidateList. |
289 self invalidateList. |
282 self enqueueDelayedUpdateOutputGenerator. |
290 slaveMode value == true ifFalse:[ |
|
291 self enqueueDelayedUpdateOutputGenerator. |
|
292 ]. |
283 ^ self. |
293 ^ self. |
284 ]. |
294 ]. |
285 something == #methodInClass ifTrue:[ |
295 something == #methodInClass ifTrue:[ |
286 listValid == true ifTrue:[ |
296 listValid == true ifTrue:[ |
287 cls := aParameter at:1. |
297 cls := aParameter at:1. |
349 |
359 |
350 selectionChangedByClick |
360 selectionChangedByClick |
351 "we are not interested in that - get another notification |
361 "we are not interested in that - get another notification |
352 via the changed valueHolder" |
362 via the changed valueHolder" |
353 |
363 |
|
364 self enqueueDelayedUpdateOutputGenerator. |
|
365 |
354 "Created: / 17.2.2000 / 23:41:17 / cg" |
366 "Created: / 17.2.2000 / 23:41:17 / cg" |
355 ! |
367 ! |
356 |
368 |
357 update:something with:aParameter from:changedObject |
369 update:something with:aParameter from:changedObject |
358 |
|
359 (self builder isNil or:[self window topView realized not]) ifTrue:[ |
370 (self builder isNil or:[self window topView realized not]) ifTrue:[ |
360 self makeIndependent |
371 "/ ignore those changes while I am invisible |
|
372 "/ self makeIndependent. |
|
373 listValid := false. |
|
374 selectionIndexValid := false. |
|
375 ^ self |
361 ]. |
376 ]. |
362 |
377 |
363 changedObject == Smalltalk ifTrue:[ |
378 changedObject == Smalltalk ifTrue:[ |
364 something == #methodDictionary ifTrue:[ |
379 something == #methodDictionary ifTrue:[ |
365 ^ self |
380 ^ self |
384 ]. |
399 ]. |
385 ]. |
400 ]. |
386 super update:something with:aParameter from:changedObject |
401 super update:something with:aParameter from:changedObject |
387 |
402 |
388 "Modified: / 20-07-2011 / 18:54:39 / cg" |
403 "Modified: / 20-07-2011 / 18:54:39 / cg" |
|
404 ! |
|
405 |
|
406 updateSelectionIndexFromSelection |
|
407 |newSel allIdx| |
|
408 |
|
409 self selectionHolder value isNil ifTrue:[ |
|
410 self selectionIndexHolder value:0. |
|
411 ^ self. |
|
412 ]. |
|
413 |
|
414 listValid ifFalse:[ |
|
415 self updateList. |
|
416 ]. |
|
417 allIdx := projectList value indexOf:(self class nameListEntryForALL). |
|
418 |
|
419 newSel := self selectionHolder value |
|
420 collect:[:val | |i| |
|
421 i := projectList value indexOf:val. |
|
422 i == 0 ifTrue:[allIdx] ifFalse:[i]] |
|
423 thenSelect:[:idx | idx ~~ 0]. |
|
424 (newSel ~= self selectionIndexHolder value |
|
425 or:[ self selectionIndexHolder value == 0]) ifTrue:[ |
|
426 self selectionIndexHolder value:newSel |
|
427 ]. |
|
428 |
|
429 selectionIndexValid := true. |
389 ! ! |
430 ! ! |
390 |
431 |
391 !ProjectList methodsFor:'drag & drop'! |
432 !ProjectList methodsFor:'drag & drop'! |
392 |
433 |
393 canDropContext:aDropContext |
434 canDropContext:aDropContext |
603 commonPostBuild |
644 commonPostBuild |
604 super commonPostBuild. |
645 super commonPostBuild. |
605 listValid ifFalse:[ |
646 listValid ifFalse:[ |
606 self enqueueDelayedUpdateList. |
647 self enqueueDelayedUpdateList. |
607 ]. |
648 ]. |
608 "Make myself dependent. It might happen that I unsubscribe myself |
|
609 in #update:with:from: because the window was not shown. Now I'm |
|
610 shown again, so subscribe." |
|
611 self makeDependent. |
|
612 |
|
613 "Modified (comment): / 31-01-2013 / 13:37:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
614 ! |
649 ! |
615 |
650 |
616 commonPostOpen |
651 commonPostOpen |
617 super commonPostOpen. |
652 super commonPostOpen. |
618 listValid ifFalse:[ |
653 listValid ifFalse:[ |
619 self enqueueDelayedUpdateList. |
654 self enqueueDelayedUpdateList. |
620 ]. |
655 ]. |
621 "(Re)register myself as dependent to receive updates. |
|
622 Maybe I unregisterd myself un #update:with:from when |
|
623 not shown..." |
|
624 self makeDependent. |
|
625 |
|
626 "Modified (comment): / 25-01-2013 / 19:36:36 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
627 ! |
656 ! |
628 |
657 |
629 initialize |
658 initialize |
630 |
659 |
631 super initialize. |
660 super initialize. |
632 workerQueue := SharedQueue new. |
661 workerQueue := SharedQueue new. |
633 includedPseudoEntryForChanged := true. |
662 includedPseudoEntryForChanged := true. |
|
663 selectionIndexValid := false. |
634 |
664 |
635 "Created: / 14-12-2010 / 15:41:23 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
665 "Created: / 14-12-2010 / 15:41:23 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
636 ! |
666 ! |
637 |
667 |
638 release |
668 release |
898 "Modified: / 07-09-2011 / 10:45:05 / cg" |
928 "Modified: / 07-09-2011 / 10:45:05 / cg" |
899 "Modified: / 19-01-2012 / 10:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
929 "Modified: / 19-01-2012 / 10:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
900 ! |
930 ! |
901 |
931 |
902 startWorker |
932 startWorker |
903 |
933 worker |
904 worker ifNil: |
934 ifNil:[ |
905 [worker := |
935 worker := [ |
906 [[workerQueue notEmpty ] whileTrue: |
936 [ workerQueue notEmpty ] whileTrue:[ |
907 [| job | |
937 |job| |
908 job := workerQueue next. |
938 |
909 job value]. |
939 job := workerQueue next. |
910 worker := nil. |
940 job value |
911 ] newProcess. |
941 ]. |
912 worker resume]. |
942 worker := nil. |
|
943 ] newProcess. |
|
944 worker resume |
|
945 ]. |
913 |
946 |
914 "Created: / 14-12-2010 / 15:49:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
947 "Created: / 14-12-2010 / 15:49:57 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
915 "Modified: / 16-12-2010 / 17:35:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
948 "Modified: / 16-12-2010 / 17:35:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
916 ! |
949 ! |
917 |
950 |
930 "/ selectedProjectsHolder removeDependent:self. |
963 "/ selectedProjectsHolder removeDependent:self. |
931 "/ selectedProjectsHolder value:#(). |
964 "/ selectedProjectsHolder value:#(). |
932 "/ selectedProjectsHolder addDependent:self. |
965 "/ selectedProjectsHolder addDependent:self. |
933 "/ ]. |
966 "/ ]. |
934 |
967 |
935 self projectList value:newList. |
968 self projectList value ~= newList ifTrue:[ |
|
969 "Hack to avoid recursion" |
|
970 self projectList value:newList. |
|
971 ]. |
936 listValid := true. |
972 listValid := true. |
937 self projectNameList value:newNameList. |
973 self projectNameList value:newNameList. |
938 |
974 |
939 oldSelection size > 0 ifTrue:[ |
975 oldSelection size > 0 ifTrue:[ |
940 newSelection := oldSelection select:[:prj | newList includes:prj]. |
976 newSelection := oldSelection select:[:prj | newList includes:prj]. |
975 ! ! |
1011 ! ! |
976 |
1012 |
977 !ProjectList class methodsFor:'documentation'! |
1013 !ProjectList class methodsFor:'documentation'! |
978 |
1014 |
979 version |
1015 version |
980 ^ '$Header: /cvs/stx/stx/libtool/Tools_ProjectList.st,v 1.56 2012/12/13 18:39:32 cg Exp $' |
1016 ^ '$Header: /cvs/stx/stx/libtool/Tools_ProjectList.st,v 1.63 2013/03/26 16:29:25 cg Exp $' |
981 ! |
1017 ! |
982 |
1018 |
983 version_CVS |
1019 version_CVS |
984 ^ '§Header: /cvs/stx/stx/libtool/Tools_ProjectList.st,v 1.56 2012/12/13 18:39:32 cg Exp §' |
1020 ^ '$Header: /cvs/stx/stx/libtool/Tools_ProjectList.st,v 1.63 2013/03/26 16:29:25 cg Exp $' |
985 ! |
1021 ! |
986 |
1022 |
987 version_HG |
1023 version_HG |
988 |
1024 |
989 ^ '$Changeset: <not expanded> $' |
1025 ^ '$Changeset: <not expanded> $' |