--- a/DirectoryContentsBrowser.st Sat Jan 07 12:53:28 2012 +0100
+++ b/DirectoryContentsBrowser.st Sat Jan 07 18:09:40 2012 +0100
@@ -902,41 +902,44 @@
"change the current directory and read the items
"
- directory notNil ifTrue:[
- AbstractFileBrowser directoryHistory setPosition:(browser firstLineShown) for:(directory pathName).
- ].
- directory := aDirectory.
- self wakeUpForDirectoryChanged.
+ aDirectory ~= directory ifTrue:[
+ directory notNil ifTrue:[
+ AbstractFileBrowser directoryHistory setPosition:(browser firstLineShown) for:(directory pathName).
+ ].
+ directory := aDirectory.
+ self wakeUpForDirectoryChanged.
+ ]
+
+ "Modified: / 07-01-2012 / 16:41:20 / cg"
!
directoryChangeFlag
- directoryChangeFlag isNil ifTrue:[
- directoryChangeFlag := false.
- ].
^ directoryChangeFlag
- "Modified: / 01-10-2007 / 19:22:31 / cg"
+ "Modified: / 07-01-2012 / 16:34:39 / cg"
!
-directoryChangeFlag:something
- directoryChangeFlag := something.
+directoryChangeFlag:aBoolean
+ directoryChangeFlag := aBoolean.
"Modified: / 01-10-2007 / 19:22:35 / cg"
+ "Modified (format): / 07-01-2012 / 16:34:46 / cg"
!
directoryContentsChangeFlag
"return the value of the instance variable 'directoryContentsChangeFlag' (automatically generated)"
- directoryContentsChangeFlag isNil ifTrue:[
- directoryContentsChangeFlag := false.
- ].
^ directoryContentsChangeFlag
+
+ "Modified: / 07-01-2012 / 16:34:51 / cg"
!
-directoryContentsChangeFlag:something
+directoryContentsChangeFlag:aBoolean
"set the value of the instance variable 'directoryContentsChangeFlag' (automatically generated)"
- directoryContentsChangeFlag := something.
+ directoryContentsChangeFlag := aBoolean.
+
+ "Modified (format): / 07-01-2012 / 16:35:01 / cg"
!
doubleClickAction
@@ -954,16 +957,17 @@
filterChangeFlag
"return the value of the instance variable 'filterChangeFlag' (automatically generated)"
- filterChangeFlag isNil ifTrue:[
- filterChangeFlag := false.
- ].
^ filterChangeFlag
+
+ "Modified: / 07-01-2012 / 16:35:07 / cg"
!
-filterChangeFlag:something
+filterChangeFlag:aBoolean
"set the value of the instance variable 'filterChangeFlag' (automatically generated)"
- filterChangeFlag := something.
+ filterChangeFlag := aBoolean.
+
+ "Modified (format): / 07-01-2012 / 16:35:12 / cg"
!
isBusy
@@ -1007,16 +1011,17 @@
sortBlockChangeFlag
"return the value of the instance variable 'sortBlockChangeFlag' (automatically generated)"
- sortBlockChangeFlag isNil ifTrue:[
- sortBlockChangeFlag := false.
- ].
^ sortBlockChangeFlag
+
+ "Modified: / 07-01-2012 / 16:35:20 / cg"
!
-sortBlockChangeFlag:something
+sortBlockChangeFlag:aBoolean
"set the value of the instance variable 'sortBlockChangeFlag' (automatically generated)"
- sortBlockChangeFlag := something.
+ sortBlockChangeFlag := aBoolean.
+
+ "Modified (format): / 07-01-2012 / 16:35:25 / cg"
!
updateContentsSelection
@@ -1790,9 +1795,15 @@
changeSema := Semaphore new.
updateCycleSemaphore := Semaphore new.
accessLock := RecursionLock new.
+
+ filterChangeFlag := false.
+ sortBlockChangeFlag := false.
+ directoryChangeFlag := false.
+ directoryContentsChangeFlag := false.
+
super initialize.
- "Modified: / 12-12-2006 / 17:10:05 / cg"
+ "Modified: / 07-01-2012 / 16:34:25 / cg"
! !
!DirectoryContentsBrowser methodsFor:'menu accessing'!
@@ -2188,25 +2199,30 @@
desc notNil ifTrue:[
icon := self getIconFor:desc.
icon notNil ifTrue:[
+ icon ~= desc icon ifTrue:[
+ desc icon:icon.
+ (iconIndex ~~ 0) ifTrue:[
+ browser invalidateVisibleRow:desc colAt:iconIndex
+ ].
+ self debugMessage:'icon for visible items ', desc baseName.
+ ].
+ ].
+ ^ true
+ ].
+ "/ update icon for visible items by contents
+ desc := self findNextVisibleItemFor:
+ [:n|
+ (n iconKey == #file
+ and:[(mime := n mimeTypeForContents asSymbol) ~= #unknown])
+ ].
+ desc notNil ifTrue:[
+ icon := self getIconForMimeType:mime for:desc.
+"/ icon := self getIconForMimeTypeByContents:desc.
+ icon ~= desc icon ifTrue:[
desc icon:icon.
(icon notNil and:[iconIndex ~~ 0]) ifTrue:[
browser invalidateVisibleRow:desc colAt:iconIndex
].
- self debugMessage:'icon for visible items ', desc baseName.
- ^ true
- ].
- ].
- "/ update icon for visible items by contents
- desc := self findNextVisibleItemFor:[:n|
- (n iconKey == #file
- and:[(mime := n mimeTypeForContents asSymbol) ~= #unknown])
- ].
- desc notNil ifTrue:[
- icon := self getIconForMimeType:mime for:desc.
-"/ icon := self getIconForMimeTypeByContents:desc.
- desc icon:icon.
- (icon notNil and:[iconIndex ~~ 0]) ifTrue:[
- browser invalidateVisibleRow:desc colAt:iconIndex
].
^ true
].
@@ -2285,18 +2301,20 @@
].
].
^ false
+
+ "Modified: / 07-01-2012 / 16:39:12 / cg"
! !
!DirectoryContentsBrowser methodsFor:'update modification cycle'!
modificationCycle
-
| oldModificationTime desc|
directory isNil ifTrue:[^ self].
directory exists ifFalse:[
- self directoryChangeFlag:true.
+ "/ directory vanished
+ directoryContentsChangeFlag := true.
^ self
].
directory isRootDirectory ifTrue:[
@@ -2307,7 +2325,8 @@
modificationTime := directory modificationTime.
oldModificationTime ~= modificationTime ifTrue:[
- self wakeUpForDirectoryContentsChanged.
+ directoryContentsChangeFlag := true.
+"/ self wakeUpForDirectoryContentsChanged.
^ self
].
@@ -2319,6 +2338,8 @@
self debugMessage:'item is modified ', desc baseName.
^ self.
].
+
+ "Modified: / 07-01-2012 / 16:42:40 / cg"
! !
!DirectoryContentsBrowser methodsFor:'update task'!
@@ -2348,10 +2369,16 @@
!
debugMessage:aString
-
Debug == true ifTrue:[
Transcript showCR:aString
].
+
+ "
+ Debug := true
+ Debug := false
+ "
+
+ "Modified (comment): / 07-01-2012 / 16:30:25 / cg"
!
directoryChanged
@@ -2523,68 +2550,28 @@
].
!
-updateStep
- |timedOut sensor|
-
- "/ Processor yield.
-
- sensor := self windowGroup sensor.
- (sensor anyButtonPressed or:[sensor shiftDown]) ifTrue:[
- Processor yield.
-
- "/ no update while scrolling
- timedOut := ( changeSema waitWithTimeoutMs:(self class updateTaskCyleTime) ) isNil.
- timedOut ifFalse:[changeSema signal].
- ^ self
- ].
-
- AbortOperationRequest handle:[
- "if directory changed all running update flags must be reset"
-
- self debugMessage:'got an abort signal'.
- self directoryContentsChangeFlag:false.
- self filterChangeFlag:false.
- self sortBlockChangeFlag:false.
- ] do:[
- self debugMessage:'sema wait'.
- timedOut := (changeSema waitWithTimeoutMs:(self class updateTaskCyleTime)) isNil.
- self debugMessage:'timedOut:', timedOut asString.
-
- (self filterChangeFlag
- or:[self sortBlockChangeFlag
- or:[self directoryChangeFlag
- or:[self directoryContentsChangeFlag]]]) ifTrue:[
- accessLock critical:[
- self updateWithTimeout:timedOut.
- ].
- ].
- ].
-
- "Modified: / 02-03-2011 / 23:00:02 / cg"
-!
-
-updateWithTimeout:timeOut
+updateAfterTimeout:timeOut
"/ Transcript showCR:'START'.
self isBusy:true.
[
- self directoryChangeFlag ifTrue:[
- self directoryChangeFlag:false.
+ directoryChangeFlag ifTrue:[
+ directoryChangeFlag := false.
self debugMessage:'directoryChanged'.
self directoryChanged.
].
- self directoryContentsChangeFlag ifTrue:[
- self directoryContentsChangeFlag:false.
+ directoryContentsChangeFlag ifTrue:[
+ directoryContentsChangeFlag := false.
self debugMessage:'directoryContentsChanged'.
self directoryContentsChanged.
].
- self filterChangeFlag ifTrue:[
- self filterChangeFlag:false.
+ filterChangeFlag ifTrue:[
+ filterChangeFlag := false.
self debugMessage:'filterChanged'.
self filterChanged.
].
- self sortBlockChangeFlag ifTrue:[
- self sortBlockChangeFlag:false.
+ sortBlockChangeFlag ifTrue:[
+ sortBlockChangeFlag := false.
self debugMessage:'sortBlockChanged'.
self sortBlockChanged.
].
@@ -2603,6 +2590,47 @@
updateCycleSemaphore signalIf
].
"/ Transcript showCR:'STOP'.
+
+ "Created: / 07-01-2012 / 16:27:50 / cg"
+!
+
+updateStep
+ |timedOut sensor|
+
+ "/ Processor yield.
+
+ sensor := self windowGroup sensor.
+ (sensor anyButtonPressed or:[sensor shiftDown]) ifTrue:[
+ Processor yield.
+
+ "/ no update while scrolling
+ timedOut := ( changeSema waitWithTimeoutMs:(self class updateTaskCyleTime) ) isNil.
+ timedOut ifFalse:[changeSema signal].
+ ^ self
+ ].
+
+ AbortOperationRequest handle:[
+ "/ to get out of a debugger loop...
+ self debugMessage:'got an abort signal'.
+ self directoryContentsChangeFlag:false.
+ self filterChangeFlag:false.
+ self sortBlockChangeFlag:false.
+ ] do:[
+ self debugMessage:'sema wait'.
+ timedOut := (changeSema waitWithTimeoutMs:(self class updateTaskCyleTime)) isNil.
+ self debugMessage:'timedOut:', timedOut asString.
+
+ (filterChangeFlag
+ or:[ sortBlockChangeFlag
+ or:[ directoryChangeFlag
+ or:[ directoryContentsChangeFlag ]]]) ifTrue:[
+ accessLock critical:[
+ self updateAfterTimeout:timedOut.
+ ].
+ ].
+ ].
+
+ "Modified: / 07-01-2012 / 16:36:53 / cg"
! !
!DirectoryContentsBrowser methodsFor:'update task trigger'!
@@ -2618,13 +2646,14 @@
!
wakeUpForDirectoryChanged
-
self isBusy ifTrue:[
self isBusy:false.
updateTask interruptWith:[AbortSignal raise].
].
- self directoryChangeFlag:true.
+ directoryChangeFlag := true.
self wakeUp.
+
+ "Modified: / 07-01-2012 / 16:43:12 / cg"
!
wakeUpForDirectoryContentsChanged
@@ -3343,9 +3372,9 @@
!DirectoryContentsBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.240 2011-08-09 16:21:14 vrany Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.241 2012-01-07 17:09:40 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.240 2011-08-09 16:21:14 vrany Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.241 2012-01-07 17:09:40 cg Exp $'
! !