PureBasicRecentfilesTool

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

PureBasicRecentfilesTool

Beitrag von Kiffi »

Habe hier grade noch einen Code gefunden, den ich Euch nicht
vorenthalten möchte. Es handelt sich hierbei um ein kleines Tool,
welches die Recentfileliste von PureBasic in einer übersichtlichen
Liste anzeigt (übersichtlicher, als in der Menüzeile der IDE (IMO))

Die Liste lässt sich Filtern und auch eine Suche in den Dateien ist
möglich. Mit Doppelklick oder <Return> wird der Eintrag der IDE
übergeben. Nicht vorhandene Dateien werden rot markiert.

Bild

Code: Alles auswählen

EnableExplicit

Structure sRecentFile
  ID.s
  Fullname.s
  Filename.s
  PathName.s
  FileExists.i
  DateCreatedRaw.i
  DateCreated.s
  DateAccessedRaw.i
  DateAccessed.s
  DateModifiedRaw.i
  DateModified.s
EndStructure

Structure sPureBasicPrefs
  Filename.s
  MD5.s
  HistorySize.s
  List RecentFile.sRecentFile()
EndStructure

Global PureBasicPrefs.sPureBasicPrefs

#AppName = "PureBasicRecentfilesTool"

Enumeration ; Windows
  #frmMain
EndEnumeration

Enumeration ; Gadgets
  #frmMain_lblFilter
  #frmMain_txtFilter
  #frmMain_cmdDeleteFilter
  #frmMain_cboSort
  #frmMain_RecentFiles
  #frmMain_lblSearchInFiles
  #frmMain_txtSearchInFiles
  #frmMain_cmdSearchInFiles
EndEnumeration

Enumeration ; Menu/Toolbar-Items
  #frmMain_Shortcut_Return
EndEnumeration

Declare frmMain_cmdDeleteFilter_Click()

Procedure StartsWith(String.s, StartString.s)
  If Left(String, Len(StartString)) = StartString
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure frmMain_Resize()
  
  ResizeGadget(#frmMain_cboSort,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_cboSort) - 8,
               #PB_Ignore,
               #PB_Ignore,
               #PB_Ignore)
  
  ResizeGadget(#frmMain_txtFilter,
               GadgetX(#frmMain_lblFilter) + GadgetWidth(#frmMain_lblFilter), 
               #PB_Ignore,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_cboSort) - GadgetWidth(#frmMain_lblFilter) - GadgetWidth(#frmMain_cmdDeleteFilter) - 8 - 8 - 8 - 8,
               #PB_Ignore)
  
  ResizeGadget(#frmMain_cmdDeleteFilter,
               GadgetX(#frmMain_txtFilter) + GadgetWidth(#frmMain_txtFilter) + 4, 
               #PB_Ignore,
               #PB_Ignore,
               #PB_Ignore)
  
  ResizeGadget(#frmMain_RecentFiles,
               #PB_Ignore,
               #PB_Ignore,
               WindowWidth(#frmMain) - 8 - 8,
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_lblFilter) - 8  - GadgetHeight(#frmMain_lblSearchInFiles) - 8 - 8 - 8)
  
  ResizeGadget(#frmMain_lblSearchInFiles,
               8,
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_lblSearchInFiles) - 5,
               #PB_Ignore,
               #PB_Ignore)
  
  ResizeGadget(#frmMain_txtSearchInFiles, 
               GadgetX(#frmMain_lblSearchInFiles) + GadgetWidth(#frmMain_lblSearchInFiles), 
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_txtSearchInFiles) - 8,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_lblSearchInFiles) - GadgetWidth(#frmMain_cmdSearchInFiles) - 8 - 8 - 8,
               #PB_Ignore)
  
  ResizeGadget(#frmMain_cmdSearchInFiles, 
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_cmdSearchInFiles) - 8,
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_lblSearchInFiles) - 8,
               #PB_Ignore,
               #PB_Ignore)
  
EndProcedure

Procedure.s LoadTextFile(TextFilename.s)
  
  Protected FF, StringFormat
  Protected ReturnValue.s
  Protected TextBuffer, TextBufferSize
  
  If FileSize(TextFilename) <= 0 : ProcedureReturn "" : EndIf
  FF = ReadFile(#PB_Any, TextFilename)
  If FF = 0 : ProcedureReturn "" : EndIf
  StringFormat = ReadStringFormat(FF)
  TextBufferSize = Lof(FF)
  TextBuffer = AllocateMemory(TextBufferSize)
  If TextBuffer = 0 : CloseFile(FF) : ProcedureReturn "" : EndIf
  ReadData(FF, TextBuffer, TextBufferSize)
  CloseFile(FF)
  ReturnValue = PeekS(TextBuffer, TextBufferSize, StringFormat)
  FreeMemory(TextBuffer)
  
  ProcedureReturn ReturnValue
  
EndProcedure

Procedure DoFileSearch()
  
  Protected FileContent.s
  Protected StringToFind.s
  Protected Found, Counter
  
  frmMain_cmdDeleteFilter_Click()
  
  NewList FilesToSearch.sRecentFile()
  
  For Counter = 0 To CountGadgetItems(#frmMain_RecentFiles) - 1
  	
  	AddElement(FilesToSearch())
  	
	  FilesToSearch()\Filename = GetGadgetItemText(#frmMain_RecentFiles, Counter, 0)
	  FilesToSearch()\Pathname = GetGadgetItemText(#frmMain_RecentFiles, Counter, 1)
	  FilesToSearch()\Fullname = FilesToSearch()\Pathname + "\" + FilesToSearch()\Filename
	  FilesToSearch()\DateCreated = GetGadgetItemText(#frmMain_RecentFiles, Counter, 2)
	  FilesToSearch()\DateModified = GetGadgetItemText(#frmMain_RecentFiles, Counter, 3)
	  FilesToSearch()\DateAccessed = GetGadgetItemText(#frmMain_RecentFiles, Counter, 4)
  	
  Next
  
  ClearGadgetItems(#frmMain_RecentFiles)
  
  ForEach FilesToSearch()
    
    Found = #False
    
    If GetGadgetText(#frmMain_txtSearchInFiles) = ""
      Found = #True
    Else
      
      FileContent = LoadTextFile(FilesToSearch()\Fullname)
      
      If FileContent <> ""
      
      If FindString(LCase(FileContent), LCase(GetGadgetText(#frmMain_txtSearchInFiles)))
        Found = #True
      EndIf
      
      EndIf
      
    EndIf
    
    If Found
    	
    	AddGadgetItem(#frmMain_RecentFiles, -1,
    	              FilesToSearch()\Filename + #LF$ + 
    	              FilesToSearch()\Pathname + #LF$ + 
    	              FilesToSearch()\DateCreated + #LF$ +
    	              FilesToSearch()\DateModified + #LF$ + 
    	              FilesToSearch()\DateAccessed)
    	
    EndIf
    
  Next
  
  ClearList(FilesToSearch())
  
  SetGadgetState(#frmMain_RecentFiles, 0)  
  
  SetActiveGadget(#frmMain_txtSearchInFiles)
  
EndProcedure

Procedure RefillList()
  
  Protected Found
  
  ClearGadgetItems(#frmMain_RecentFiles)
  
  ForEach PureBasicPrefs\RecentFile()
    
    Found = #False
    
    If GetGadgetText(#frmMain_txtFilter) = ""
      Found = #True
    Else
      
      If FindString(LCase(PureBasicPrefs\RecentFile()\Filename + #LF$ + PureBasicPrefs\RecentFile()\Pathname), LCase(GetGadgetText(#frmMain_txtFilter)))
        Found = #True
      EndIf
      
    EndIf
    
    If Found
    	
    	AddGadgetItem(#frmMain_RecentFiles, -1, PureBasicPrefs\RecentFile()\Filename + #LF$ +
    	                                        PureBasicPrefs\RecentFile()\Pathname + #LF$ +
    	                                        PureBasicPrefs\RecentFile()\DateCreated + #LF$ +
    	                                        PureBasicPrefs\RecentFile()\DateModified + #LF$ +
    	                                        PureBasicPrefs\RecentFile()\DateAccessed)
      
      If Not PureBasicPrefs\RecentFile()\FileExists
        SetGadgetItemColor(#frmMain_RecentFiles, CountGadgetItems(#frmMain_RecentFiles) - 1, #PB_Gadget_FrontColor, #Red)
      EndIf
      
    EndIf
    
  Next
  
  SetGadgetState(#frmMain_RecentFiles, 0)
  
EndProcedure

Procedure DoSort()
	
	Select GetGadgetState(#frmMain_cboSort)
			
		Case 0 ; Keine Sortierung
			SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\ID), #PB_Integer)
			
		Case 1 ; Dateiname
			SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\Filename), #PB_String)
			
		Case 2 ; Pfadname
			SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\PathName), #PB_String)
			
		Case 3 ; Erstellungsdatum
			SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateCreatedRaw), #PB_Integer)
			
		Case 4 ; Änderungsdatum
			SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateModifiedRaw), #PB_Integer)
			
		Case 5 ; Zugriffsdatum
			SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateAccessedRaw), #PB_Integer)
			
	EndSelect
	
	RefillList()
	
	SetActiveGadget(#frmMain_RecentFiles)
	
EndProcedure

Procedure frmMain_cmdDeleteFilter_Click()
	
	SetGadgetText(#frmMain_txtFilter, "")
	RefillList()
	SetActiveGadget(#frmMain_txtFilter)
	
EndProcedure

Procedure frmMain_Open()
  
  Protected WindowFlags
  Protected ListIconGadgetFlags
  
  WindowFlags | #PB_Window_SystemMenu
  WindowFlags | #PB_Window_SizeGadget
  WindowFlags | #PB_Window_ScreenCentered
  WindowFlags | #PB_Window_MinimizeGadget
  WindowFlags | #PB_Window_MaximizeGadget
  
  ListIconGadgetFlags | #PB_ListIcon_AlwaysShowSelection
  ListIconGadgetFlags | #PB_ListIcon_FullRowSelect
  ListIconGadgetFlags | #PB_ListIcon_GridLines
  
  OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 800, 600, #AppName, WindowFlags)
  
  TextGadget(#frmMain_lblFilter,    8, 12, 30, 20, "Filter:")
  StringGadget(#frmMain_txtFilter,  0,  8,  0, 20, "")
  ButtonGadget(#frmMain_cmdDeleteFilter, 0, 8, 20, 20, "x")
  GadgetToolTip(#frmMain_cmdDeleteFilter, "Filter löschen")
  BindGadgetEvent(#frmMain_cmdDeleteFilter, @frmMain_cmdDeleteFilter_Click(), #PB_EventType_LeftClick)
  
  ComboBoxGadget(#frmMain_cboSort, 0, 6, 120, 20)
  AddGadgetItem(#frmMain_cboSort, -1, "Keine Sortierung")
  AddGadgetItem(#frmMain_cboSort, -1, "Dateiname")
  AddGadgetItem(#frmMain_cboSort, -1, "Pfad")
  AddGadgetItem(#frmMain_cboSort, -1, "Erstellungsdatum")
  AddGadgetItem(#frmMain_cboSort, -1, "Änderungsdatum")
  AddGadgetItem(#frmMain_cboSort, -1, "Zugriffsdatum")
  SetGadgetState(#frmMain_cboSort, 0)
  
  ListIconGadget(#frmMain_RecentFiles, 8, 36, 0, 0, "Dateiname", 150, ListIconGadgetFlags)
  AddGadgetColumn(#frmMain_RecentFiles, 1, "Pfad", 250)
  AddGadgetColumn(#frmMain_RecentFiles, 2, "Erstellt", 120)
  AddGadgetColumn(#frmMain_RecentFiles, 3, "Geändert", 120)
  AddGadgetColumn(#frmMain_RecentFiles, 4, "Letzter Zugriff", 120)
  
  TextGadget  (#frmMain_lblSearchInFiles, 0, 0,  100, 20, "Suchen in Dateien:")
  StringGadget(#frmMain_txtSearchInFiles, 0, 0,    0, 20, "")
  ButtonGadget(#frmMain_cmdSearchInFiles, 0, 0,   80, 20, "Suchen")
  
  BindGadgetEvent(#frmMain_cmdSearchInFiles, @DoFileSearch(), #PB_EventType_LeftClick)
  BindGadgetEvent(#frmMain_cboSort, @DoSort())
  
  AddKeyboardShortcut(#frmMain, #PB_Shortcut_Return, #frmMain_Shortcut_Return)
  
  WindowBounds(#frmMain, 300, 200, #PB_Ignore, #PB_Ignore)
  
  frmMain_Resize()
  
EndProcedure

Procedure ReadPreferences()
  
  PureBasicPrefs\Filename =  GetEnvironmentVariable("APPDATA") + "\PureBasic\PureBasic.prefs"
  
  PureBasicPrefs\MD5 = MD5FileFingerprint(PureBasicPrefs\Filename)
  
  OpenPreferences(PureBasicPrefs\Filename)
  
  ExaminePreferenceGroups()
  
  While NextPreferenceGroup()
    
    If PreferenceGroupName() = "RecentFiles"
      
      ExaminePreferenceKeys()
      
      While NextPreferenceKey()
        
        If PreferenceKeyName() = "HistorySize"
          PureBasicPrefs\HistorySize = PreferenceKeyValue()
        EndIf
        
        If StartsWith(PreferenceKeyName(), "RecentFile_")
          
          AddElement(PureBasicPrefs\RecentFile())
          
          PureBasicPrefs\RecentFile()\ID = Str(ListSize(PureBasicPrefs\RecentFile()))
          
          PureBasicPrefs\RecentFile()\Fullname = PreferenceKeyValue()
          PureBasicPrefs\RecentFile()\Filename = GetFilePart(PureBasicPrefs\RecentFile()\Fullname)
          PureBasicPrefs\RecentFile()\Pathname = GetPathPart(PureBasicPrefs\RecentFile()\Fullname)
          
          If FileSize(PureBasicPrefs\RecentFile()\Fullname) = -1
            PureBasicPrefs\RecentFile()\FileExists = #False
          Else
            PureBasicPrefs\RecentFile()\FileExists = #True
          EndIf
          
          PureBasicPrefs\RecentFile()\DateCreated  = "--"
          PureBasicPrefs\RecentFile()\DateModified = "--"
          PureBasicPrefs\RecentFile()\DateAccessed = "--"
          
          If PureBasicPrefs\RecentFile()\FileExists
            
            PureBasicPrefs\RecentFile()\DateCreatedRaw  = GetFileDate(PureBasicPrefs\RecentFile()\Fullname, #PB_Date_Created)
            PureBasicPrefs\RecentFile()\DateCreated     = FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", PureBasicPrefs\RecentFile()\DateCreatedRaw)
            
            PureBasicPrefs\RecentFile()\DateModifiedRaw = GetFileDate(PureBasicPrefs\RecentFile()\Fullname, #PB_Date_Modified)
            PureBasicPrefs\RecentFile()\DateModified    = FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", PureBasicPrefs\RecentFile()\DateModifiedRaw)
            
            PureBasicPrefs\RecentFile()\DateAccessedRaw = GetFileDate(PureBasicPrefs\RecentFile()\Fullname, #PB_Date_Accessed)
            PureBasicPrefs\RecentFile()\DateAccessed    = FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", PureBasicPrefs\RecentFile()\DateAccessedRaw)
            
          EndIf
          
        EndIf
        
      Wend
      
      Break
      
    EndIf
    
  Wend
  
  ClosePreferences()
  
EndProcedure

Procedure Main()
  
  Protected WWE, Quit, SelectedItem
  
  ReadPreferences()
  
  frmMain_Open()
  
  SetActiveGadget(#frmMain_txtFilter)
  
  RefillList()
  
  Repeat
    
    WWE = WaitWindowEvent()
    
    Select WWE
        
      Case #PB_Event_Menu
        
        Select EventMenu()
            
          Case #frmMain_Shortcut_Return
            
            Select GetActiveGadget()
                
              Case #frmMain_txtFilter
                
              Case  #frmMain_RecentFiles
                SelectedItem = GetGadgetState(#frmMain_RecentFiles)
                If SelectedItem > -1
                  RunProgram(Chr(34) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 1) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 0) + Chr(34))
                EndIf
                
              Case #frmMain_txtSearchInFiles
                DoFileSearch()
                
            EndSelect
            
        EndSelect
        
      Case #PB_Event_Gadget
        
        Select EventGadget()            
            
          Case #frmMain_RecentFiles
            
            Select EventType()
                
              Case #PB_EventType_LeftDoubleClick
                
                SelectedItem = GetGadgetState(#frmMain_RecentFiles)
                If SelectedItem > -1
                  RunProgram(Chr(34) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 1) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 0) + Chr(34))
                EndIf
                
            EndSelect
            
          Case #frmMain_txtFilter
            
            Select EventType()
            	Case #PB_EventType_Change
            		SetGadgetText(#frmMain_txtSearchInFiles, "")
                RefillList()
            EndSelect
            
        EndSelect
        
      Case #PB_Event_CloseWindow
        
        Quit = #True
        
      Case #PB_Event_SizeWindow
        
        frmMain_Resize()
        
    EndSelect
    
  Until  Quit = #True
  
EndProcedure

Main()
Grüße ... Kiffi
Hygge
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PureBasicRecentfilesTool

Beitrag von RSBasic »

Cool, danke, sehr nützlich. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PureBasicRecentfilesTool

Beitrag von RSBasic »

Hi Kiffi,

ich habe dein Code mit einem Spaltenklick-Event erweitert, um die Einträge auch mit Hilfe der Spalten zu sortieren, ohne die ComboBox benutzen zu müssen. Es ist zwar dadurch aufgrund der WinAPI-Verwendung nur unter Windows lauffähig, aber für reine Windows-User ist es ein bisschen bequemer, direkt mit einem Klick auf eine beliebige Spalte zu sortieren:

Code: Alles auswählen

EnableExplicit

Structure sRecentFile
  ID.s
  Fullname.s
  Filename.s
  PathName.s
  FileExists.i
  DateCreatedRaw.i
  DateCreated.s
  DateAccessedRaw.i
  DateAccessed.s
  DateModifiedRaw.i
  DateModified.s
EndStructure

Structure sPureBasicPrefs
  Filename.s
  MD5.s
  HistorySize.s
  List RecentFile.sRecentFile()
EndStructure

Global PureBasicPrefs.sPureBasicPrefs
Global MyOldList

#AppName = "PureBasicRecentfilesTool"

Enumeration ; Windows
  #frmMain
EndEnumeration

Enumeration ; Gadgets
  #frmMain_lblFilter
  #frmMain_txtFilter
  #frmMain_cmdDeleteFilter
  #frmMain_cboSort
  #frmMain_RecentFiles
  #frmMain_lblSearchInFiles
  #frmMain_txtSearchInFiles
  #frmMain_cmdSearchInFiles
EndEnumeration

Enumeration ; Menu/Toolbar-Items
  #frmMain_Shortcut_Return
EndEnumeration

Declare frmMain_cmdDeleteFilter_Click()

Procedure StartsWith(String.s, StartString.s)
  If Left(String, Len(StartString)) = StartString
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure frmMain_Resize()
 
  ResizeGadget(#frmMain_cboSort,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_cboSort) - 8,
               #PB_Ignore,
               #PB_Ignore,
               #PB_Ignore)
 
  ResizeGadget(#frmMain_txtFilter,
               GadgetX(#frmMain_lblFilter) + GadgetWidth(#frmMain_lblFilter),
               #PB_Ignore,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_cboSort) - GadgetWidth(#frmMain_lblFilter) - GadgetWidth(#frmMain_cmdDeleteFilter) - 8 - 8 - 8 - 8,
               #PB_Ignore)
 
  ResizeGadget(#frmMain_cmdDeleteFilter,
               GadgetX(#frmMain_txtFilter) + GadgetWidth(#frmMain_txtFilter) + 4,
               #PB_Ignore,
               #PB_Ignore,
               #PB_Ignore)
 
  ResizeGadget(#frmMain_RecentFiles,
               #PB_Ignore,
               #PB_Ignore,
               WindowWidth(#frmMain) - 8 - 8,
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_lblFilter) - 8  - GadgetHeight(#frmMain_lblSearchInFiles) - 8 - 8 - 8)
 
  ResizeGadget(#frmMain_lblSearchInFiles,
               8,
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_lblSearchInFiles) - 5,
               #PB_Ignore,
               #PB_Ignore)
 
  ResizeGadget(#frmMain_txtSearchInFiles,
               GadgetX(#frmMain_lblSearchInFiles) + GadgetWidth(#frmMain_lblSearchInFiles),
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_txtSearchInFiles) - 8,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_lblSearchInFiles) - GadgetWidth(#frmMain_cmdSearchInFiles) - 8 - 8 - 8,
               #PB_Ignore)
 
  ResizeGadget(#frmMain_cmdSearchInFiles,
               WindowWidth(#frmMain) - GadgetWidth(#frmMain_cmdSearchInFiles) - 8,
               WindowHeight(#frmMain) - GadgetHeight(#frmMain_lblSearchInFiles) - 8,
               #PB_Ignore,
               #PB_Ignore)
 
EndProcedure

Procedure.s LoadTextFile(TextFilename.s)
 
  Protected FF, StringFormat
  Protected ReturnValue.s
  Protected TextBuffer, TextBufferSize
 
  If FileSize(TextFilename) <= 0 : ProcedureReturn "" : EndIf
  FF = ReadFile(#PB_Any, TextFilename)
  If FF = 0 : ProcedureReturn "" : EndIf
  StringFormat = ReadStringFormat(FF)
  TextBufferSize = Lof(FF)
  TextBuffer = AllocateMemory(TextBufferSize)
  If TextBuffer = 0 : CloseFile(FF) : ProcedureReturn "" : EndIf
  ReadData(FF, TextBuffer, TextBufferSize)
  CloseFile(FF)
  ReturnValue = PeekS(TextBuffer, TextBufferSize, StringFormat)
  FreeMemory(TextBuffer)
 
  ProcedureReturn ReturnValue
 
EndProcedure

Procedure DoFileSearch()
 
  Protected FileContent.s
  Protected StringToFind.s
  Protected Found, Counter
 
  frmMain_cmdDeleteFilter_Click()
 
  NewList FilesToSearch.sRecentFile()
 
  For Counter = 0 To CountGadgetItems(#frmMain_RecentFiles) - 1
     
     AddElement(FilesToSearch())
     
     FilesToSearch()\Filename = GetGadgetItemText(#frmMain_RecentFiles, Counter, 0)
     FilesToSearch()\Pathname = GetGadgetItemText(#frmMain_RecentFiles, Counter, 1)
     FilesToSearch()\Fullname = FilesToSearch()\Pathname + "\" + FilesToSearch()\Filename
     FilesToSearch()\DateCreated = GetGadgetItemText(#frmMain_RecentFiles, Counter, 2)
     FilesToSearch()\DateModified = GetGadgetItemText(#frmMain_RecentFiles, Counter, 3)
     FilesToSearch()\DateAccessed = GetGadgetItemText(#frmMain_RecentFiles, Counter, 4)
     
  Next
 
  ClearGadgetItems(#frmMain_RecentFiles)
 
  ForEach FilesToSearch()
   
    Found = #False
   
    If GetGadgetText(#frmMain_txtSearchInFiles) = ""
      Found = #True
    Else
     
      FileContent = LoadTextFile(FilesToSearch()\Fullname)
     
      If FileContent <> ""
     
      If FindString(LCase(FileContent), LCase(GetGadgetText(#frmMain_txtSearchInFiles)))
        Found = #True
      EndIf
     
      EndIf
     
    EndIf
   
    If Found
       
       AddGadgetItem(#frmMain_RecentFiles, -1,
                     FilesToSearch()\Filename + #LF$ +
                     FilesToSearch()\Pathname + #LF$ +
                     FilesToSearch()\DateCreated + #LF$ +
                     FilesToSearch()\DateModified + #LF$ +
                     FilesToSearch()\DateAccessed)
       
    EndIf
   
  Next
 
  ClearList(FilesToSearch())
 
  SetGadgetState(#frmMain_RecentFiles, 0) 
 
  SetActiveGadget(#frmMain_txtSearchInFiles)
 
EndProcedure

Procedure RefillList()
 
  Protected Found
 
  ClearGadgetItems(#frmMain_RecentFiles)
 
  ForEach PureBasicPrefs\RecentFile()
   
    Found = #False
   
    If GetGadgetText(#frmMain_txtFilter) = ""
      Found = #True
    Else
     
      If FindString(LCase(PureBasicPrefs\RecentFile()\Filename + #LF$ + PureBasicPrefs\RecentFile()\Pathname), LCase(GetGadgetText(#frmMain_txtFilter)))
        Found = #True
      EndIf
     
    EndIf
   
    If Found
       
       AddGadgetItem(#frmMain_RecentFiles, -1, PureBasicPrefs\RecentFile()\Filename + #LF$ +
                                               PureBasicPrefs\RecentFile()\Pathname + #LF$ +
                                               PureBasicPrefs\RecentFile()\DateCreated + #LF$ +
                                               PureBasicPrefs\RecentFile()\DateModified + #LF$ +
                                               PureBasicPrefs\RecentFile()\DateAccessed)
     
      If Not PureBasicPrefs\RecentFile()\FileExists
        SetGadgetItemColor(#frmMain_RecentFiles, CountGadgetItems(#frmMain_RecentFiles) - 1, #PB_Gadget_FrontColor, #Red)
      EndIf
     
    EndIf
   
  Next
 
  SetGadgetState(#frmMain_RecentFiles, 0)
 
EndProcedure

Procedure DoSort()
   
   Select GetGadgetState(#frmMain_cboSort)
         
      Case 0 ; Keine Sortierung
         SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\ID), #PB_Integer)
         
      Case 1 ; Dateiname
         SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\Filename), #PB_String)
         
      Case 2 ; Pfadname
         SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\PathName), #PB_String)
         
      Case 3 ; Erstellungsdatum
         SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateCreatedRaw), #PB_Integer)
         
      Case 4 ; Änderungsdatum
         SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateModifiedRaw), #PB_Integer)
         
      Case 5 ; Zugriffsdatum
         SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateAccessedRaw), #PB_Integer)
         
   EndSelect
   
   RefillList()
   
   SetActiveGadget(#frmMain_RecentFiles)
   
EndProcedure

Procedure frmMain_cmdDeleteFilter_Click()
   
   SetGadgetText(#frmMain_txtFilter, "")
   RefillList()
   SetActiveGadget(#frmMain_txtFilter)
   
EndProcedure

Procedure ListCB(hWnd, Message, wParam, lParam)
  Protected *Header.HD_NOTIFY
  Protected Result=CallWindowProc_(MyOldList, hWnd, Message, wParam, lParam)
  
  Select Message
    Case #WM_NOTIFY
      *Header=lParam
      If *Header\hdr\code=#HDN_ITEMCLICK
        Select *Header\iItem
          Case 0;Dateiname
            SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\Filename), #PB_String)
          Case 1;Pfad
            SortStructuredList(PureBasicPrefs\RecentFile(), 0, OffsetOf(sRecentFile\PathName), #PB_String)
          Case 2;Erstellt
            SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateCreatedRaw), #PB_Integer)
          Case 3;Geändert
            SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateModifiedRaw), #PB_Integer)
          Case 4;Letzter Zugriff
            SortStructuredList(PureBasicPrefs\RecentFile(), #PB_Sort_Descending, OffsetOf(sRecentFile\DateAccessedRaw), #PB_Integer)
        EndSelect
        
        RefillList()
   
        SetActiveGadget(#frmMain_RecentFiles)
      EndIf
  EndSelect
  
  ProcedureReturn Result
EndProcedure

Procedure frmMain_Open()
 
  Protected WindowFlags
  Protected ListIconGadgetFlags
 
  WindowFlags | #PB_Window_SystemMenu
  WindowFlags | #PB_Window_SizeGadget
  WindowFlags | #PB_Window_ScreenCentered
  WindowFlags | #PB_Window_MinimizeGadget
  WindowFlags | #PB_Window_MaximizeGadget
 
  ListIconGadgetFlags | #PB_ListIcon_AlwaysShowSelection
  ListIconGadgetFlags | #PB_ListIcon_FullRowSelect
  ListIconGadgetFlags | #PB_ListIcon_GridLines
 
  OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 800, 600, #AppName, WindowFlags)
 
  TextGadget(#frmMain_lblFilter,    8, 12, 30, 20, "Filter:")
  StringGadget(#frmMain_txtFilter,  0,  8,  0, 20, "")
  ButtonGadget(#frmMain_cmdDeleteFilter, 0, 8, 20, 20, "x")
  GadgetToolTip(#frmMain_cmdDeleteFilter, "Filter löschen")
  BindGadgetEvent(#frmMain_cmdDeleteFilter, @frmMain_cmdDeleteFilter_Click(), #PB_EventType_LeftClick)
 
  ComboBoxGadget(#frmMain_cboSort, 0, 6, 120, 20)
  AddGadgetItem(#frmMain_cboSort, -1, "Keine Sortierung")
  AddGadgetItem(#frmMain_cboSort, -1, "Dateiname")
  AddGadgetItem(#frmMain_cboSort, -1, "Pfad")
  AddGadgetItem(#frmMain_cboSort, -1, "Erstellungsdatum")
  AddGadgetItem(#frmMain_cboSort, -1, "Änderungsdatum")
  AddGadgetItem(#frmMain_cboSort, -1, "Zugriffsdatum")
  SetGadgetState(#frmMain_cboSort, 0)
 
  ListIconGadget(#frmMain_RecentFiles, 8, 36, 0, 0, "Dateiname", 150, ListIconGadgetFlags)
  AddGadgetColumn(#frmMain_RecentFiles, 1, "Pfad", 250)
  AddGadgetColumn(#frmMain_RecentFiles, 2, "Erstellt", 120)
  AddGadgetColumn(#frmMain_RecentFiles, 3, "Geändert", 120)
  AddGadgetColumn(#frmMain_RecentFiles, 4, "Letzter Zugriff", 120)
 
  TextGadget  (#frmMain_lblSearchInFiles, 0, 0,  100, 20, "Suchen in Dateien:")
  StringGadget(#frmMain_txtSearchInFiles, 0, 0,    0, 20, "")
  ButtonGadget(#frmMain_cmdSearchInFiles, 0, 0,   80, 20, "Suchen")
 
  BindGadgetEvent(#frmMain_cmdSearchInFiles, @DoFileSearch(), #PB_EventType_LeftClick)
  BindGadgetEvent(#frmMain_cboSort, @DoSort())
 
  AddKeyboardShortcut(#frmMain, #PB_Shortcut_Return, #frmMain_Shortcut_Return)
 
  WindowBounds(#frmMain, 300, 200, #PB_Ignore, #PB_Ignore)
 
  frmMain_Resize()
  
  MyOldList = SetWindowLongPtr_(GadgetID(#frmMain_RecentFiles), #GWL_WNDPROC, @ListCB())
  
EndProcedure

Procedure ReadPreferences()
 
  PureBasicPrefs\Filename =  GetEnvironmentVariable("APPDATA") + "\PureBasic\PureBasic.prefs"
 
  PureBasicPrefs\MD5 = MD5FileFingerprint(PureBasicPrefs\Filename)
 
  OpenPreferences(PureBasicPrefs\Filename)
 
  ExaminePreferenceGroups()
 
  While NextPreferenceGroup()
   
    If PreferenceGroupName() = "RecentFiles"
     
      ExaminePreferenceKeys()
     
      While NextPreferenceKey()
       
        If PreferenceKeyName() = "HistorySize"
          PureBasicPrefs\HistorySize = PreferenceKeyValue()
        EndIf
       
        If StartsWith(PreferenceKeyName(), "RecentFile_")
         
          AddElement(PureBasicPrefs\RecentFile())
         
          PureBasicPrefs\RecentFile()\ID = Str(ListSize(PureBasicPrefs\RecentFile()))
         
          PureBasicPrefs\RecentFile()\Fullname = PreferenceKeyValue()
          PureBasicPrefs\RecentFile()\Filename = GetFilePart(PureBasicPrefs\RecentFile()\Fullname)
          PureBasicPrefs\RecentFile()\Pathname = GetPathPart(PureBasicPrefs\RecentFile()\Fullname)
         
          If FileSize(PureBasicPrefs\RecentFile()\Fullname) = -1
            PureBasicPrefs\RecentFile()\FileExists = #False
          Else
            PureBasicPrefs\RecentFile()\FileExists = #True
          EndIf
         
          PureBasicPrefs\RecentFile()\DateCreated  = "--"
          PureBasicPrefs\RecentFile()\DateModified = "--"
          PureBasicPrefs\RecentFile()\DateAccessed = "--"
         
          If PureBasicPrefs\RecentFile()\FileExists
           
            PureBasicPrefs\RecentFile()\DateCreatedRaw  = GetFileDate(PureBasicPrefs\RecentFile()\Fullname, #PB_Date_Created)
            PureBasicPrefs\RecentFile()\DateCreated     = FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", PureBasicPrefs\RecentFile()\DateCreatedRaw)
           
            PureBasicPrefs\RecentFile()\DateModifiedRaw = GetFileDate(PureBasicPrefs\RecentFile()\Fullname, #PB_Date_Modified)
            PureBasicPrefs\RecentFile()\DateModified    = FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", PureBasicPrefs\RecentFile()\DateModifiedRaw)
           
            PureBasicPrefs\RecentFile()\DateAccessedRaw = GetFileDate(PureBasicPrefs\RecentFile()\Fullname, #PB_Date_Accessed)
            PureBasicPrefs\RecentFile()\DateAccessed    = FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", PureBasicPrefs\RecentFile()\DateAccessedRaw)
           
          EndIf
         
        EndIf
       
      Wend
     
      Break
     
    EndIf
   
  Wend
 
  ClosePreferences()
 
EndProcedure

Procedure Main()
 
  Protected WWE, Quit, SelectedItem
 
  ReadPreferences()
 
  frmMain_Open()
 
  SetActiveGadget(#frmMain_txtFilter)
 
  RefillList()
 
  Repeat
   
    WWE = WaitWindowEvent()
   
    Select WWE
       
      Case #PB_Event_Menu
       
        Select EventMenu()
           
          Case #frmMain_Shortcut_Return
           
            Select GetActiveGadget()
               
              Case #frmMain_txtFilter
               
              Case  #frmMain_RecentFiles
                SelectedItem = GetGadgetState(#frmMain_RecentFiles)
                If SelectedItem > -1
                  RunProgram(Chr(34) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 1) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 0) + Chr(34))
                EndIf
               
              Case #frmMain_txtSearchInFiles
                DoFileSearch()
               
            EndSelect
           
        EndSelect
       
      Case #PB_Event_Gadget
       
        Select EventGadget()           
           
          Case #frmMain_RecentFiles
           
            Select EventType()
               
              Case #PB_EventType_LeftDoubleClick
               
                SelectedItem = GetGadgetState(#frmMain_RecentFiles)
                If SelectedItem > -1
                  RunProgram(Chr(34) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 1) + GetGadgetItemText(#frmMain_RecentFiles, SelectedItem, 0) + Chr(34))
                EndIf
               
            EndSelect
           
          Case #frmMain_txtFilter
           
            Select EventType()
               Case #PB_EventType_Change
                  SetGadgetText(#frmMain_txtSearchInFiles, "")
                RefillList()
            EndSelect
           
        EndSelect
       
      Case #PB_Event_CloseWindow
       
        Quit = #True
       
      Case #PB_Event_SizeWindow
       
        frmMain_Resize()
       
    EndSelect
   
  Until  Quit = #True
 
EndProcedure

Main()
Danke nochmal für dein Code, den ich nun öfters nutzen werde. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PureBasicRecentfilesTool

Beitrag von Kiffi »

RSBasic hat geschrieben:ich habe dein Code mit einem Spaltenklick-Event erweitert, um die Einträge auch mit Hilfe der Spalten zu sortieren, ohne die ComboBox benutzen zu müssen.
hihi, den Klick auf die Spaltenheader finde ich auch komfortabler. Ich habe den
Aufwand mit der Combobox extra betrieben, damit auch die anderen OSler damit
was anfangen können. (oh, ich glaube, da muss noch '\' und '/' als Pfadtrenner
getauscht werden, oder?)

Aber da nun beide Codes da sind, kann sich jeder entscheiden, was er nehmen möchte.

Danke & Grüße ... Kiffi
Hygge
Antworten