DirectoryContentsBrowser.st
changeset 5475 b14874ad8460
parent 5474 c1f778c85ec1
child 5544 e5ccc9372d6b
equal deleted inserted replaced
5474:c1f778c85ec1 5475:b14874ad8460
    11 "
    11 "
    12 
    12 
    13 "{ Package: 'stx:libtool' }"
    13 "{ Package: 'stx:libtool' }"
    14 
    14 
    15 AbstractDirectoryBrowser subclass:#DirectoryContentsBrowser
    15 AbstractDirectoryBrowser subclass:#DirectoryContentsBrowser
    16 	instanceVariableNames:'modificationTime directory columnDescriptors iconIndex
    16         instanceVariableNames:'modificationTime directory columnDescriptors iconIndex
    17 		fileDescriptionIndex iconExtent tableColumns previewIndex
    17                 fileDescriptionIndex iconExtent tableColumns previewIndex
    18 		draggedItem viewBrowserMenu updateContentsSelection
    18                 draggedItem viewBrowserMenu updateContentsSelection
    19 		selectionInFileList browserItemList matchBlock updateTask
    19                 selectionInFileList browserItemList matchBlock updateTask
    20 		directoryChangeFlag directoryContentsChangeFlag filterChangeFlag
    20                 directoryChangeFlag directoryContentsChangeFlag filterChangeFlag
    21 		sortBlockChangeFlag isBusy changeSema filteredItems allItems
    21                 sortBlockChangeFlag isBusy changeSema filteredItems allItems
    22 		diskUsageInfo diskUsageUpdateProcess'
    22                 diskUsageInfo diskUsageUpdateProcess'
    23 	classVariableNames:''
    23         classVariableNames:''
    24 	poolDictionaries:''
    24         poolDictionaries:''
    25 	category:'Interface-Tools-File'
    25         category:'Interface-Tools-File'
    26 !
    26 !
    27 
    27 
    28 Object subclass:#DirectoryContentsItem
    28 Object subclass:#DirectoryContentsItem
    29 	instanceVariableNames:'fileName fileInfo icon fileType
    29         instanceVariableNames:'fileName fileInfo icon fileType
    30 		contentsBrowserChangeModificationTime suffix preview group owner
    30                 contentsBrowserChangeModificationTime suffix preview group owner
    31 		timeAndDate mimeType iconKey mimeTypeForContents'
    31                 timeAndDate mimeType iconKey mimeTypeForContents'
    32 	classVariableNames:'LastUIDToUserNameMapping LastGIDToGroupNameMapping'
    32         classVariableNames:'LastUIDToUserNameMapping LastGIDToGroupNameMapping'
    33 	poolDictionaries:''
    33         poolDictionaries:''
    34 	privateIn:DirectoryContentsBrowser
    34         privateIn:DirectoryContentsBrowser
    35 !
    35 !
    36 
    36 
    37 !DirectoryContentsBrowser class methodsFor:'documentation'!
    37 !DirectoryContentsBrowser class methodsFor:'documentation'!
    38 
    38 
    39 copyright
    39 copyright
   115 ! !
   115 ! !
   116 
   116 
   117 !DirectoryContentsBrowser class methodsFor:'constant'!
   117 !DirectoryContentsBrowser class methodsFor:'constant'!
   118 
   118 
   119 debug
   119 debug
   120 
       
   121     ^ false
   120     ^ false
   122 !
   121 !
   123 
   122 
   124 updateTaskCyleTime
   123 updateTaskCyleTime
   125     "time (in ms) to search for changed directories or changed columns"
   124     "time (in ms) to search for changed directories or changed columns"
  2012         anItem preview:(icon ? '').
  2011         anItem preview:(icon ? '').
  2013     ].
  2012     ].
  2014     ^ icon
  2013     ^ icon
  2015 !
  2014 !
  2016 
  2015 
  2017 updateChangesFor:anItem
       
  2018 
       
  2019     anItem resetItemForChanges.
       
  2020 !
       
  2021 
       
  2022 updateColumnsCycle
  2016 updateColumnsCycle
  2023     " update items in the foolowing order
  2017     " update items in the foolowing order
  2024         - update item if item properties are changed
  2018         - update item if item properties are changed
  2025         - update icon for visible items by suffix
  2019         - update icon for visible items by suffix
  2026         - update icon for visible items by contents
  2020         - update icon for visible items by contents
  2036 
  2030 
  2037     |desc mime icon type preview|
  2031     |desc mime icon type preview|
  2038 
  2032 
  2039     browserItemList notEmpty ifTrue:[
  2033     browserItemList notEmpty ifTrue:[
  2040         "/ update item if item properties are changed
  2034         "/ update item if item properties are changed
  2041         desc := self findNextVisibleItemFor:[:n| n hasBeenModified ].
  2035 "/        desc := self findNextVisibleItemFor:[:n| n accessFirstTime ].
  2042 
  2036 "/        desc notNil ifTrue:[
  2043         desc notNil ifTrue:[
  2037 "/            browser invalidateVisibleRow:desc.
  2044             self updateChangesFor:desc.
  2038 "/            self debugMessage:'item properties are changed ', desc baseName.
  2045             browser invalidateVisibleRow:desc.
  2039 "/            ^ true.
  2046             self debugMessage:'item properties are changed', desc baseName.
  2040 "/        ].
  2047             ^ true.
       
  2048         ].
       
  2049         "/ update icon for visible items by suffix
  2041         "/ update icon for visible items by suffix
  2050         desc := self findNextVisibleItemFor:[:n| n icon isNil ].
  2042         desc := self findNextVisibleItemFor:[:n| n icon isNil ].
  2051         desc notNil ifTrue:[  
  2043         desc notNil ifTrue:[  
  2052             icon := self getIconFor:desc.
  2044             icon := self getIconFor:desc.
  2053             desc icon:icon.
  2045             desc icon:icon.
  2054             (icon notNil and:[iconIndex ~~ 0]) ifTrue:[
  2046             (icon notNil and:[iconIndex ~~ 0]) ifTrue:[
  2055                 browser invalidateVisibleRow:desc colAt:iconIndex
  2047                 browser invalidateVisibleRow:desc colAt:iconIndex
  2056             ].
  2048             ].
  2057             self debugMessage:'icon for visible items by suffix', desc baseName.
  2049             self debugMessage:'icon for visible items ', desc baseName.
  2058             ^ true
  2050             ^ true
  2059         ].
  2051         ].
  2060         "/ update icon for visible items by contents
  2052         "/ update icon for visible items by contents
  2061         desc := self findNextVisibleItemFor:[:n| 
  2053         desc := self findNextVisibleItemFor:[:n| 
  2062             (n iconKey == #file 
  2054             (n iconKey == #file 
  2075         fileDescriptionIndex ~~ 0 ifTrue:[
  2067         fileDescriptionIndex ~~ 0 ifTrue:[
  2076             desc := self findNextVisibleItemFor:[:n| n fileType isEmpty ].
  2068             desc := self findNextVisibleItemFor:[:n| n fileType isEmpty ].
  2077             desc notNil ifTrue:[
  2069             desc notNil ifTrue:[
  2078                 type := self getFileInfoFor:desc.
  2070                 type := self getFileInfoFor:desc.
  2079                 type notNil ifTrue:[browser invalidateVisibleRow:desc colAt:fileDescriptionIndex].
  2071                 type notNil ifTrue:[browser invalidateVisibleRow:desc colAt:fileDescriptionIndex].
  2080                 self debugMessage:'file info for visible items if file info column is shown', desc baseName.
  2072                 self debugMessage:'file info for visible items if file info column is shown ', desc baseName.
  2081                 ^ true
  2073                 ^ true
  2082             ]
  2074             ]
  2083         ].
  2075         ].
  2084         "/ update preview for visible items if preview column is shown
  2076         "/ update preview for visible items if preview column is shown
  2085         previewIndex ~~ 0 ifTrue:[
  2077         previewIndex ~~ 0 ifTrue:[
  2087             desc notNil ifTrue:[
  2079             desc notNil ifTrue:[
  2088                 preview := self getPreviewFor:desc.
  2080                 preview := self getPreviewFor:desc.
  2089                 preview notNil ifTrue:[
  2081                 preview notNil ifTrue:[
  2090                     browser invalidateVisibleRow:desc colAt:previewIndex
  2082                     browser invalidateVisibleRow:desc colAt:previewIndex
  2091                 ].
  2083                 ].
  2092                 self debugMessage:'preview for visible items if preview column is shown', desc baseName.
  2084                 self debugMessage:'preview for visible items if preview column is shown ', desc baseName.
  2093                 ^ true
  2085                 ^ true
  2094             ]
  2086             ]
  2095         ].
  2087         ].
  2096     ].
  2088     ].
  2097 
  2089 
  2100         "/ update icon for invisible items by suffix
  2092         "/ update icon for invisible items by suffix
  2101         desc := self findNextItemFor:[:n| n icon isNil ].
  2093         desc := self findNextItemFor:[:n| n icon isNil ].
  2102         desc notNil ifTrue:[
  2094         desc notNil ifTrue:[
  2103             icon := self getIconFor:desc.
  2095             icon := self getIconFor:desc.
  2104             desc icon:icon.
  2096             desc icon:icon.
  2105             self debugMessage:'icon for invisible items by suffix', desc baseName.
  2097             self debugMessage:'icon for invisible items by suffix ', desc baseName.
  2106             ^ true
  2098             ^ true
  2107         ].
  2099         ].
  2108         "/ update icon for invisible items by contents
  2100         "/ update icon for invisible items by contents
  2109         desc := self findNextItemFor:[:n| (n iconKey == #file and:[n mimeTypeForContents ~= #unknown])].
  2101         desc := self findNextItemFor:[:n| (n iconKey == #file and:[n mimeTypeForContents ~= #unknown])].
  2110         desc notNil ifTrue:[
  2102         desc notNil ifTrue:[
  2111             icon := self getIconForMimeTypeByContents:desc.
  2103             icon := self getIconForMimeTypeByContents:desc.
  2112             desc icon:icon.
  2104             desc icon:icon.
  2113             self debugMessage:'icon for invisible items by contents', desc baseName.
  2105             self debugMessage:'icon for invisible items by contents ', desc baseName.
  2114             ^ true
  2106             ^ true
  2115         ].
  2107         ].
  2116         "/ update file info for invisible items if file info column is shown
  2108         "/ update file info for invisible items if file info column is shown
  2117         fileDescriptionIndex ~~ 0 ifTrue:[
  2109         fileDescriptionIndex ~~ 0 ifTrue:[
  2118             desc := self findNextItemFor:[:n| n fileType isNil ].
  2110             desc := self findNextItemFor:[:n| n fileType isNil ].
  2119             desc notNil ifTrue:[
  2111             desc notNil ifTrue:[
  2120                 self getFileInfoFor:desc.
  2112                 self getFileInfoFor:desc.
  2121                 self debugMessage:'update file info for invisible items if file info column is shown', desc baseName.
  2113                 self debugMessage:'update file info for invisible items if file info column is shown ', desc baseName.
  2122                 ^ true
  2114                 ^ true
  2123             ].
  2115             ].
  2124         ].
  2116         ].
  2125         "/ update preview for invisible items if preview column is shown 
  2117         "/ update preview for invisible items if preview column is shown 
  2126         previewIndex ~~ 0 ifTrue:[
  2118         previewIndex ~~ 0 ifTrue:[
  2127             desc := self findNextItemFor:[:n| n preview isNil ].
  2119             desc := self findNextItemFor:[:n| n preview isNil ].
  2128             desc notNil ifTrue:[
  2120             desc notNil ifTrue:[
  2129                 self getPreviewFor:desc.
  2121                 self getPreviewFor:desc.
  2130                 self debugMessage:'update preview for invisible items if preview column is shown:', desc baseName.
  2122                 self debugMessage:'update preview for invisible items if preview column is shown: ', desc baseName.
  2131                 ^ true
  2123                 ^ true
  2132             ].
  2124             ].
  2133         ].
  2125         ].
  2134         "/ update file info for invisible items if file info column is not shown
  2126         "/ update file info for invisible items if file info column is not shown
  2135         desc := self findNextItemFor:[:n| n fileType isNil ].
  2127         desc := self findNextItemFor:[:n| n fileType isNil ].
  2136         desc notNil ifTrue:[
  2128         desc notNil ifTrue:[
  2137             self getFileInfoFor:desc.
  2129             self getFileInfoFor:desc.
  2138             self debugMessage:'update file info for invisible items if file info column is not shown:', desc baseName.
  2130             self debugMessage:'update file info for invisible items if file info column is not shown: ', desc baseName.
  2139             ^ true
  2131             ^ true
  2140         ].
  2132         ].
  2141     ].
  2133     ].
  2142     ^ false
  2134     ^ false
  2143 ! !
  2135 ! !
  2144 
  2136 
  2145 !DirectoryContentsBrowser methodsFor:'update modification cycle'!
  2137 !DirectoryContentsBrowser methodsFor:'update modification cycle'!
  2146 
  2138 
  2147 modificationCycle
  2139 modificationCycle
  2148 
  2140 
  2149     | oldModificationTime |
  2141     | oldModificationTime  desc|
  2150     directory notNil ifTrue:[
  2142     directory notNil ifTrue:[
  2151         directory exists not ifTrue:[
  2143         directory exists not ifTrue:[
  2152             self directoryChangeFlag:true.
  2144             self directoryChangeFlag:true.
  2153             ^ self
  2145             ^ self
  2154         ].
  2146         ].
  2155         oldModificationTime := modificationTime.
  2147         oldModificationTime := modificationTime.
  2156         modificationTime := directory modificationTime.
  2148         modificationTime := directory modificationTime.
  2157         (directory notNil and:[oldModificationTime ~= directory modificationTime]) ifTrue:[
  2149         (directory notNil and:[oldModificationTime ~= directory modificationTime]) ifTrue:[
  2158             self wakeUpForDirectoryContentsChanged.
  2150             self wakeUpForDirectoryContentsChanged.
  2159         ].
  2151         ].
       
  2152     ].
       
  2153     desc := self findNextItemFor:[:n| n hasBeenModified ].
       
  2154     desc notNil ifTrue:[
       
  2155         desc resetItem.
       
  2156         browser invalidateVisibleRow:desc.
       
  2157         self debugMessage:'item is modified ', desc baseName.
       
  2158         ^ self.
  2160     ].
  2159     ].
  2161 ! !
  2160 ! !
  2162 
  2161 
  2163 !DirectoryContentsBrowser methodsFor:'update task'!
  2162 !DirectoryContentsBrowser methodsFor:'update task'!
  2164 
  2163 
  2332     ].
  2331     ].
  2333 !
  2332 !
  2334 
  2333 
  2335 updateStep
  2334 updateStep
  2336     AbortSignal handle:[
  2335     AbortSignal handle:[
       
  2336         "if directory changed all running update flags must be reset"
  2337         self debugMessage:'got an abort signal'.
  2337         self debugMessage:'got an abort signal'.
  2338         self directoryContentsChangeFlag:false.
  2338         self directoryContentsChangeFlag:false.
  2339         self filterChangeFlag:false.
  2339         self filterChangeFlag:false.
  2340         self sortBlockChangeFlag:false.
  2340         self sortBlockChangeFlag:false.
  2341     ] do:[
  2341     ] do:[
  2387             self modificationCycle
  2387             self modificationCycle
  2388         ].
  2388         ].
  2389         self updateColumnsCycle ifTrue:[
  2389         self updateColumnsCycle ifTrue:[
  2390             self debugMessage:'next time another columns update'.
  2390             self debugMessage:'next time another columns update'.
  2391             self changeSema signal
  2391             self changeSema signal
       
  2392         ] ifFalse:[
       
  2393             self debugMessage:'next time not another columns update'.
  2392         ].
  2394         ].
  2393     ] ensure:[
  2395     ] ensure:[
  2394         self isBusy:false.
  2396         self isBusy:false.
  2395     ].
  2397     ].
  2396 "/        Transcript showCR:'STOP'.
  2398 "/        Transcript showCR:'STOP'.
  2774     (mimeType notNil and:[ mimeType isImage]) ifTrue:[
  2776     (mimeType notNil and:[ mimeType isImage]) ifTrue:[
  2775         preview := nil
  2777         preview := nil
  2776     ]
  2778     ]
  2777 !
  2779 !
  2778 
  2780 
  2779 resetItemForChanges
  2781 resetItem
  2780 
  2782 
  2781     " dont know what someone else is doing with the file - read all item properties new "
  2783     " dont know what someone else is doing with the file - read all item properties new "
  2782     fileInfo := nil.
  2784     fileInfo := nil.
  2783     icon := nil.
  2785     icon := nil.
  2784     fileType := nil.
  2786     fileType := nil.
  2794 
  2796 
  2795 hasBeenModified
  2797 hasBeenModified
  2796 
  2798 
  2797     "check if item modification time is changed 
  2799     "check if item modification time is changed 
  2798     "
  2800     "
  2799     | time info|
  2801     | info|
  2800 
  2802 
  2801     self isRemoteDirectory ifTrue:[^ false].
  2803     self isRemoteDirectory ifTrue:[^ false].
  2802 
  2804 
  2803     info := fileName info.
  2805     fileInfo isNil ifTrue:[
  2804     info isNil ifTrue:[ ^ false].
  2806         "first time of invokation "
  2805     time := info modificationTime.
  2807         info := self getFileInfo.
  2806 
  2808         info isNil ifTrue:[ ^ false].
  2807     contentsBrowserChangeModificationTime isNil ifTrue:[
  2809         ^ true
  2808         contentsBrowserChangeModificationTime := time.
  2810     ].
  2809         fileInfo := nil.
  2811     self modificationTime  ~= fileName modificationTime ifTrue:[
  2810         ^ false.
       
  2811     ].
       
  2812     ((contentsBrowserChangeModificationTime = time) not) ifTrue:[
       
  2813         contentsBrowserChangeModificationTime := time.
       
  2814         fileInfo := nil.
       
  2815         ^ true
  2812         ^ true
  2816     ].
  2813     ].
  2817     ^ false
  2814     ^ false
  2818 ! !
  2815 ! !
  2819 
  2816 
  3099 ! !
  3096 ! !
  3100 
  3097 
  3101 !DirectoryContentsBrowser class methodsFor:'documentation'!
  3098 !DirectoryContentsBrowser class methodsFor:'documentation'!
  3102 
  3099 
  3103 version
  3100 version
  3104     ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.148 2004-02-02 16:10:58 ca Exp $'
  3101     ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.149 2004-02-02 16:29:14 penk Exp $'
  3105 ! !
  3102 ! !