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