FindFileApplication.st
branchjv
changeset 12229 5c129972b1fd
parent 12205 f210b6224ef0
child 12401 4714b9640528
child 12405 76f9a872362b
--- a/FindFileApplication.st	Wed Apr 11 17:14:22 2012 +0100
+++ b/FindFileApplication.st	Fri Apr 13 14:15:47 2012 +0100
@@ -20,7 +20,8 @@
 		rememberInCache searchOnlyInCache searchForSameContents
 		contentsInfoCache contentsInfoCacheAccessLock
 		fileSizeOperatorHolder fileSizeHolder enableFileSizeFilter
-		fileSizeUnitHolder'
+		fileSizeUnitHolder modificationTimeOperatorHolder
+		modificationTimeHolder enableModificationTimeFilter'
 	classVariableNames:'ContentsInfoCache ContentsInfoCacheAccessLock LastRememberInCache
 		LastSearchIgnoredCaseInContents LastSearchIgnoredCaseInFilename
 		SearchStringHistory LastSearchIgnoredCaseInExcludedFilename'
@@ -133,9 +134,11 @@
 #fileSize
 'Search for files with a specific size constraint ("~" means: +/- 10%)'
 
+#modificationTime
+'Search for files which are newer or older'
 )
 
-    "Modified: / 13-01-2012 / 14:40:34 / cg"
+    "Modified: / 28-03-2012 / 23:03:39 / cg"
 ! !
 
 !FindFileApplication class methodsFor:'history'!
@@ -181,7 +184,7 @@
           label: 'File Search'
           name: 'File Search'
           min: (Point 377 131)
-          bounds: (Rectangle 0 0 758 512)
+          bounds: (Rectangle 0 0 758 419)
         )
         component: 
        (SpecCollection
@@ -203,7 +206,7 @@
             )
            (ViewSpec
               name: 'Box1'
-              layout: (LayoutFrame 0 0.0 32 0 0 1.0 200 0)
+              layout: (LayoutFrame 0 0.0 32 0 0 1.0 231 0)
               component: 
              (SpecCollection
                 collection: (
@@ -348,7 +351,7 @@
                   )
                  (InputFieldSpec
                     name: 'FileSizeEntryField'
-                    layout: (LayoutFrame 219 0 148 0 -430 1 168 0)
+                    layout: (LayoutFrame 219 0 148 0 -349 1 168 0)
                     activeHelpKey: fileSize
                     enableChannel: enableFileSizeFilterAndNotSearchForSameContents
                     tabable: true
@@ -369,6 +372,49 @@
                     showLamp: false
                     lampColor: (Color 100.0 100.0 0.0)
                   )
+                 (LabelSpec
+                    label: 'Modified:'
+                    name: 'Label2'
+                    layout: (LayoutFrame 2 0 175 0 154 0 192 0)
+                    activeHelpKey: modificationTime
+                    translateLabel: true
+                    adjust: right
+                  )
+                 (PopUpListSpec
+                    label: 'PopUp List'
+                    name: 'PopUpList1'
+                    layout: (LayoutFrame 157 0 172 0 212 0 192 0)
+                    activeHelpKey: modificationTime
+                    tabable: true
+                    model: modificationTimeOperatorHolder
+                    enableChannel: enableModificationTimeFilter
+                    menu: 
+                   (Array
+                      ' before' ' after '
+                    )
+                  )
+                 (InputFieldSpec
+                    name: 'EntryField2'
+                    layout: (LayoutFrame 219 0 172 0 -349 1 192 0)
+                    activeHelpKey: modificationTime
+                    enableChannel: enableModificationTimeFilter
+                    tabable: true
+                    model: modificationTimeHolder
+                    type: timestamp
+                    immediateAccept: false
+                    acceptOnLeave: true
+                    acceptOnLostFocus: true
+                    acceptOnPointerLeave: true
+                  )
+                 (CheckToggleSpec
+                    name: 'CheckToggle1'
+                    layout: (LayoutOrigin -334 1 175 0)
+                    activeHelpKey: modificationTime
+                    model: enableModificationTimeFilter
+                    isTriggerOnDown: true
+                    showLamp: false
+                    lampColor: (Color 100.0 100.0 0.0)
+                  )
                  (CheckBoxSpec
                     label: 'Use ''locate'' Cmd'
                     name: 'UseLocateCheckBox'
@@ -468,7 +514,7 @@
             )
            (SequenceViewSpec
               name: 'List1'
-              layout: (LayoutFrame 0 0.0 210 0 0 1.0 0 1)
+              layout: (LayoutFrame 0 0.0 238 0 0 1.0 0 1)
               model: selectionHolder
               menu: menu
               hasHorizontalScrollBar: true
@@ -491,7 +537,6 @@
         )
       )
 
-    "Modified: / 13-01-2012 / 14:40:06 / cg"
 ! !
 
 !FindFileApplication class methodsFor:'menu specs'!
@@ -503,6 +548,7 @@
     "Do not manually edit this!! If it is corrupted,
      the MenuEditor may not be able to read the specification."
 
+
     "
      MenuEditor new openOnClass:FindFileApplication andSelector:#menu
      (Menu new fromLiteralArrayEncoding:(FindFileApplication menu)) startUp
@@ -553,16 +599,17 @@
             label: '-'
           )
          (MenuItem
-            enabled: hasListEntries
-            label: 'Delete all Files'
-            itemValue: deleteAllFiles
+            enabled: hasSelection
+            label: 'Delete Selected File(s)...'
+            itemValue: deleteSelectedFiles
             translateLabel: true
           )
          (MenuItem
-            enabled: hasSelection
-            label: 'Delete Selected Files'
-            itemValue: deleteSelectedFiles
+            enabled: hasListEntries
+            label: 'Delete all Files...'
+            itemValue: deleteAllFiles
             translateLabel: true
+            isVisible: false
           )
          (MenuItem
             label: '-'
@@ -600,8 +647,6 @@
         nil
         nil
       )
-
-    "Modified: / 01-03-2007 / 22:56:59 / cg"
 !
 
 searchMenu
@@ -703,7 +748,9 @@
 
     files := self shownList copy.
     self deleteFiles:files confirm:true.
-    self clearShownList.
+    self removeFilesFromResultList:files
+
+    "Modified: / 29-03-2012 / 10:06:09 / cg"
 !
 
 deleteFiles:colOfFiles confirm:confirm
@@ -738,8 +785,10 @@
     files := sel collect:[:idx | self shownList at:idx].
     self deleteFiles:files confirm:true.
     result == true ifTrue:[
-        self removeSelectedFilesFromResultList.
+        self removeFilesFromResultList:files
     ].
+
+    "Modified: / 29-03-2012 / 10:05:39 / cg"
 !
 
 doSearch
@@ -858,16 +907,23 @@
     "Created: / 03-08-2011 / 18:19:20 / cg"
 !
 
-removeSelectedFilesFromResultList
-    |sel list|
+removeFilesFromResultList:listOfFiles 
+    |list|
 
-    sel := self selectionHolder value.
     list := self shownList.
-    (sel notEmptyOrNil) ifTrue:[
-        sel reverseDo:[: key |
+    (listOfFiles notEmptyOrNil) ifTrue:[
+        listOfFiles reverseDo:[: key |
             list removeAtIndex:key
         ]
     ].
+
+    "Created: / 29-03-2012 / 10:04:58 / cg"
+!
+
+removeSelectedFilesFromResultList
+    self removeFilesFromResultList:(self selectionHolder value)
+
+    "Modified: / 29-03-2012 / 10:05:11 / cg"
 !
 
 showMatchedFiles:aBoolean
@@ -920,6 +976,15 @@
     ^ BlockValue forLogical:self notSearchForSameContents and:self enableFileSizeFilter
 !
 
+enableModificationTimeFilter
+    enableModificationTimeFilter isNil ifTrue:[
+        enableModificationTimeFilter := false asValue.
+    ].
+    ^ enableModificationTimeFilter.
+
+    "Created: / 28-03-2012 / 23:11:58 / cg"
+!
+
 excludedNamePatternHolder
     excludedNamePatternHolder isNil ifTrue:[
         excludedNamePatternHolder := '' asValue.
@@ -993,6 +1058,24 @@
     ^ ignoreCaseInNotContents.
 !
 
+modificationTimeHolder
+    modificationTimeHolder isNil ifTrue:[
+        modificationTimeHolder := (Timestamp now subtractDays:1) asValue.
+    ].
+    ^ modificationTimeHolder.
+
+    "Created: / 28-03-2012 / 23:08:25 / cg"
+!
+
+modificationTimeOperatorHolder
+    modificationTimeOperatorHolder isNil ifTrue:[
+        modificationTimeOperatorHolder := 'after' asValue.
+    ].
+    ^ modificationTimeOperatorHolder.
+
+    "Created: / 28-03-2012 / 23:04:44 / cg"
+!
+
 namePatternHolder
 
     namePatternHolder isNil ifTrue:[
@@ -1190,7 +1273,8 @@
 
     |dir lines contentsToCompare resultList inStream
      doesFileMatch contentsString notContentsString check checkNot 
-     grepCommand nameMatch nameExcludedMatch realNameMatch fileSizesToSearchFor filesToSearchFor fileMD5sToSearchFor 
+     grepCommand nameMatch nameExcludedMatch realNameMatch 
+     fileSizesToSearchFor filesToSearchFor fileMD5sToSearchFor 
      setOfFilesToSearchFor remember cache fn dirSearchedRelative|
 
     contentsString := contentsStringArg.
@@ -1423,6 +1507,8 @@
         doesFileMatch := self fileSizeWrapperFor:doesFileMatch.
     ].
 
+    doesFileMatch := self modificationTimeWrapperFor:doesFileMatch.
+
     namePatterns isNil ifTrue:[
         nameMatch := [:fn | true]
     ] ifFalse:[
@@ -1620,6 +1706,33 @@
     ^ [:f | (sizeMatch value:f) and:[ aFileMatchBlock value:f ]]
 
     "Created: / 11-01-2012 / 23:17:02 / cg"
+!
+
+modificationTimeWrapperFor:aFileMatchBlock
+    "possibly wrap the search-match block into a modification time matcher"
+
+    |timeToCompare timeMatch op compare|
+
+    self enableModificationTimeFilter value ifFalse:[ ^ aFileMatchBlock ].
+
+    timeToCompare := self modificationTimeHolder value.
+    op := self modificationTimeOperatorHolder value withoutSeparators.
+    op = 'after' ifTrue:[
+        compare := [:t | t > timeToCompare ].
+    ] ifFalse:[
+        compare := [:t | t < timeToCompare ].
+    ].
+
+    timeMatch := [:f | 
+                    |t| 
+
+                    t := f modificationTime. 
+                    t notNil and:[ compare value:t ]
+                 ].
+
+    ^ [:f | (timeMatch value:f) and:[ aFileMatchBlock value:f ]]
+
+    "Created: / 28-03-2012 / 23:18:32 / cg"
 ! !
 
 !FindFileApplication methodsFor:'queries'!
@@ -1683,13 +1796,13 @@
 !FindFileApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/FindFileApplication.st,v 1.101 2012/03/16 09:10:56 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/FindFileApplication.st,v 1.103 2012/03/29 08:06:59 cg Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libtool/FindFileApplication.st,v 1.101 2012/03/16 09:10:56 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libtool/FindFileApplication.st,v 1.103 2012/03/29 08:06:59 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: FindFileApplication.st 7952 2012-03-21 17:50:14Z vranyj1 $'
+    ^ '$Id: FindFileApplication.st 7978 2012-04-13 13:15:47Z vranyj1 $'
 ! !