DirectoryContentsBrowser.st
changeset 5474 c1f778c85ec1
parent 5444 02b2cd0dfd69
child 5475 b14874ad8460
equal deleted inserted replaced
5473:543ceb69dc49 5474:c1f778c85ec1
  2217     ].
  2217     ].
  2218     newItems := self evaluateFilter:newAllItems.
  2218     newItems := self evaluateFilter:newAllItems.
  2219     oldItems := filteredItems copy.
  2219     oldItems := filteredItems copy.
  2220     addItems := OrderedCollection new.
  2220     addItems := OrderedCollection new.
  2221     remItems := OrderedCollection new.
  2221     remItems := OrderedCollection new.
  2222     filteredItems size == 0 ifTrue:[ 
  2222 
       
  2223     oldItems isEmptyOrNil ifTrue:[ 
  2223         remItems := oldItems. 
  2224         remItems := oldItems. 
  2224     ] ifFalse:[
  2225     ] ifFalse:[
  2225         "/ MERGE WITH CURRENT CONTENTS
  2226         "/ MERGE WITH CURRENT CONTENTS
  2226         oldItems copy do:[:anOldItem|
  2227         oldItems copy do:[:anOldItem|
  2227             "/ remove no longer valid files
  2228             "/ remove no longer valid files
  2228             (newItems detectLast:[:aNewItem| aNewItem = anOldItem] ifNone:nil) isNil ifTrue:[
  2229             (newItems includes:anOldItem) ifFalse:[
  2229                 remItems add:anOldItem.
  2230                 remItems add:anOldItem.
  2230                 oldItems removeIdentical:anOldItem
  2231                 oldItems removeIdentical:anOldItem
  2231             ]
  2232             ]
  2232         ].
  2233         ].
  2233     ].
  2234     ].
  2234     "/ add new files
  2235     "/ add new files
  2235     newItems do:[:aNewItem|
  2236     newItems do:[:aNewItem|
  2236         (oldItems detect:[:anOldItem| anOldItem = aNewItem] ifNone:nil) isNil ifTrue:[
  2237         (oldItems includes:aNewItem) ifFalse:[
  2237             addItems add:aNewItem.
  2238             addItems add:aNewItem.
  2238         ]
  2239         ]
  2239     ].
  2240     ].
  2240     theAllItems := self allItems.
  2241 "/    theAllItems := self allItems.
  2241     remItems notEmpty ifTrue:[
  2242 "/    remItems notEmpty ifTrue:[
  2242         theAllItems removeAll:remItems        
  2243 "/        theAllItems removeAll:remItems        
  2243     ].
  2244 "/    ].
  2244     addItems do:[: aNewItem |
  2245 "/    addItems do:[: aNewItem |
  2245         (theAllItems includes:aNewItem) not ifTrue:[
  2246 "/        (theAllItems includes:aNewItem) not ifTrue:[
  2246             theAllItems add:aNewItem.
  2247 "/            theAllItems add:aNewItem.
  2247         ]
  2248 "/        ]
  2248     ].
  2249 "/    ].
  2249 
  2250 
  2250     self
  2251     self
  2251         enqueueMessage:#value 
  2252         enqueueMessage:#value 
  2252         for:[ self browserItemListAdd:addItems remove:remItems. ]
  2253         for:[ self browserItemListAdd:addItems remove:remItems. ]
  2253         arguments:#().
  2254         arguments:#().
  2329     updateTask notNil ifTrue:[
  2330     updateTask notNil ifTrue:[
  2330         updateTask terminate.
  2331         updateTask terminate.
  2331     ].
  2332     ].
  2332 !
  2333 !
  2333 
  2334 
  2334 updateBlock
       
  2335 
       
  2336     ^ [ : timeOut | 
       
  2337 "/        Transcript showCR:'START'.
       
  2338         self isBusy:true.
       
  2339         [
       
  2340             self directoryChangeFlag ifTrue:[ 
       
  2341                 self directoryChangeFlag:false.
       
  2342                 self debugMessage:'directoryChanged'.
       
  2343                 self directoryChanged.
       
  2344             ].
       
  2345             self directoryContentsChangeFlag ifTrue:[
       
  2346                 self directoryContentsChangeFlag:false.
       
  2347                 self debugMessage:'directoryContentsChanged'.
       
  2348                 self directoryContentsChanged.
       
  2349             ].
       
  2350             self filterChangeFlag ifTrue:[
       
  2351                 self filterChangeFlag:false.
       
  2352                 self debugMessage:'filterChanged'.
       
  2353                 self filterChanged.
       
  2354             ].
       
  2355             self sortBlockChangeFlag ifTrue:[
       
  2356                 self sortBlockChangeFlag:false.
       
  2357                 self debugMessage:'sortBlockChanged'.
       
  2358                 self sortBlockChanged.
       
  2359             ].
       
  2360             timeOut ifTrue:[
       
  2361                 self debugMessage:'evaluate modification'.
       
  2362                 self modificationCycle
       
  2363             ].
       
  2364             self updateColumnsCycle ifTrue:[
       
  2365                 self debugMessage:'next time another columns update'.
       
  2366                 self changeSema signal
       
  2367             ].
       
  2368         ] ensure:[
       
  2369             self isBusy:false.
       
  2370         ].
       
  2371 "/        Transcript showCR:'STOP'.
       
  2372     ]
       
  2373 !
       
  2374 
       
  2375 updateStep
  2335 updateStep
  2376     AbortSignal handle:[
  2336     AbortSignal handle:[
  2377         self debugMessage:'got an abort signal'.
  2337         self debugMessage:'got an abort signal'.
  2378         self directoryContentsChangeFlag:false.
  2338         self directoryContentsChangeFlag:false.
  2379         self filterChangeFlag:false.
  2339         self filterChangeFlag:false.
  2387 
  2347 
  2388         (self filterChangeFlag 
  2348         (self filterChangeFlag 
  2389         or:[self sortBlockChangeFlag 
  2349         or:[self sortBlockChangeFlag 
  2390         or:[self directoryChangeFlag]]) ifTrue:[
  2350         or:[self directoryChangeFlag]]) ifTrue:[
  2391             self withCursor:Cursor execute do:[
  2351             self withCursor:Cursor execute do:[
  2392                 self updateBlock value:timedOut.
  2352                 self updateWithTimeout:timedOut.
  2393             ]
  2353             ]
  2394         ] ifFalse:[
  2354         ] ifFalse:[
  2395             self updateBlock value:timedOut.
  2355             self updateWithTimeout:timedOut.
  2396         ]
  2356         ]
  2397     ]
  2357     ]
       
  2358 !
       
  2359 
       
  2360 updateWithTimeout:timeOut
       
  2361 
       
  2362 "/        Transcript showCR:'START'.
       
  2363     self isBusy:true.
       
  2364     [
       
  2365         self directoryChangeFlag ifTrue:[ 
       
  2366             self directoryChangeFlag:false.
       
  2367             self debugMessage:'directoryChanged'.
       
  2368             self directoryChanged.
       
  2369         ].
       
  2370         self directoryContentsChangeFlag ifTrue:[
       
  2371             self directoryContentsChangeFlag:false.
       
  2372             self debugMessage:'directoryContentsChanged'.
       
  2373             self directoryContentsChanged.
       
  2374         ].
       
  2375         self filterChangeFlag ifTrue:[
       
  2376             self filterChangeFlag:false.
       
  2377             self debugMessage:'filterChanged'.
       
  2378             self filterChanged.
       
  2379         ].
       
  2380         self sortBlockChangeFlag ifTrue:[
       
  2381             self sortBlockChangeFlag:false.
       
  2382             self debugMessage:'sortBlockChanged'.
       
  2383             self sortBlockChanged.
       
  2384         ].
       
  2385         timeOut ifTrue:[
       
  2386             self debugMessage:'evaluate modification'.
       
  2387             self modificationCycle
       
  2388         ].
       
  2389         self updateColumnsCycle ifTrue:[
       
  2390             self debugMessage:'next time another columns update'.
       
  2391             self changeSema signal
       
  2392         ].
       
  2393     ] ensure:[
       
  2394         self isBusy:false.
       
  2395     ].
       
  2396 "/        Transcript showCR:'STOP'.
  2398 ! !
  2397 ! !
  2399 
  2398 
  2400 !DirectoryContentsBrowser methodsFor:'update task trigger'!
  2399 !DirectoryContentsBrowser methodsFor:'update task trigger'!
  2401 
  2400 
  2402 wakeUp
  2401 wakeUp
  2405 !
  2404 !
  2406 
  2405 
  2407 wakeUpForDirectoryChanged
  2406 wakeUpForDirectoryChanged
  2408 
  2407 
  2409     self isBusy ifTrue:[
  2408     self isBusy ifTrue:[
       
  2409         self isBusy:false.
  2410         updateTask interruptWith:[AbortSignal raise].
  2410         updateTask interruptWith:[AbortSignal raise].
  2411     ].
  2411     ].
  2412     self directoryChangeFlag:true.
  2412     self directoryChangeFlag:true.
  2413     self wakeUp.
  2413     self wakeUp.
  2414 !
  2414 !
  3099 ! !
  3099 ! !
  3100 
  3100 
  3101 !DirectoryContentsBrowser class methodsFor:'documentation'!
  3101 !DirectoryContentsBrowser class methodsFor:'documentation'!
  3102 
  3102 
  3103 version
  3103 version
  3104     ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.147 2004-01-20 11:18:41 penk Exp $'
  3104     ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.148 2004-02-02 16:10:58 ca Exp $'
  3105 ! !
  3105 ! !