RecentFileList

Share your advanced PureBasic knowledge/code with the community.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

RecentFileList

Post by BackupUser »

Code updated for 5.20+

Restored from previous forum. Originally posted by Rings.

after a long time i post again a small snippet to handle RecentFiles.Can be very usefull and handy for appz.
The part of Recent and Menu-Generating is seperated.
Based on orginal Menu-Example from Sourcefolder

Code: Select all

;Recent-List;
;by Siegfried Rings (CodeGuru)
;
Global Recentfilename.s
Recentfilename="MyRecentFiles.RFN" ;This holds the filename for the recentlist
Global NewList Files.s();Linked List to hold RecentFiles
#File=99;Filepointer
#MenuRecentFiles=100;Start where Entrys are beginning in Menu

Procedure Recent(NewFilename.s)
  If FileSize(Recentfilename)>0
    If OpenFile(#File, Recentfilename)
      ClearList(Files())
      If NewFilename <> ""
        AddElement(Files())
        Files()=NewFilename;Set as first element
      EndIf
      
      While Eof(#File)=0
        sDummy.s=ReadString(#File)
        If sdummy <> NewFilename ;is already here ?
          If sdummy
            AddElement(Files())
            Files()=sDummy
          EndIf
        EndIf
      Wend
      
      CloseFile(#File)
      ResetList(Files())
      If OpenFile(#File,Recentfilename)
        While NextElement(Files())       ; Process all the elements...
          WriteStringN(#File, Files())
        Wend
        CloseFile(#File)
      EndIf
    EndIf
  Else
    ;New one
    If NewFilename
      If CreateFile(#File,Recentfilename)>0
        WriteStringN(#File, NewFilename)
        CloseFile(#File)
      EndIf
      AddElement(Files())
      Files()=NewFilename
    EndIf
  EndIf
EndProcedure

Procedure Makemenu(Window)
  If CreateMenu(0, WindowID(Window))
    MenuTitle("File")
    MenuItem( 1, "&Load...")
    MenuItem( 2, "Save")
    MenuItem( 3, "Save As...")
    
    MenuBar()
    
    ResetList(Files())
    While NextElement(Files())       ; Process all the elements...
      MenuItem( #MenuRecentFiles+ListIndex(Files()) , Files())
    Wend
    
    MenuBar()
    MenuItem( 7, "&Quit")
    
    MenuTitle("Edition")
    MenuItem( 8, "Cut")
    MenuItem( 9, "Copy")
    MenuItem(10, "Paste")
    
    MenuTitle("?")
    MenuItem(11, "About")
    
  EndIf
  
EndProcedure

If OpenWindow(0, 100, 150, 195, 260, "PureBasic - Menu", #PB_Window_SystemMenu)
  
  Recent("");Init the RecentFiles-list
  MakeMenu(0)  ;And generate a menu for it
  Repeat
    
    Select WaitWindowEvent()
        
      Case #PB_Event_Menu
        Select EventMenu() 
            
          Case 1
            NewFilename.s = OpenFileRequester("", "", "", 0)
            If NewFilename
              Recent(NewFilename.s) ;Add To our list
              MakeMenu(0)  ;Update the menu
            EndIf
            
          Case 11 ; About
            MessageRequester("About", "Cool Menu example", 0)
          Case 7
            Quit=1             
          Default
            MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit = 1
    EndSelect
  Until Quit = 1
EndIf
End
Its a long way to the top if you wanna .....CodeGuru