Tools__ProjectList.st
branchjv
changeset 12650 e0f607754b9a
parent 12404 bf820ac5dfc8
child 13530 2269bce1636d
equal deleted inserted replaced
12630:18d06283743d 12650:e0f607754b9a
    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> $'