Share your advanced PureBasic knowledge/code with the community.
-
StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Post
by StarBootics »
Hello everyone,
This is something I made for one of my project and I'm releasing here in hope it will be useful to someone else.
Best regards
StarBootics
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Module - V1.0.0 Beta
; Project name : RecentFiles - Module
; File name : RecentFiles - Module.pb
; File Version : 1.0.0
; Programmation : OK
; Programmed by : StarBootics
; Creation Date : 23-03-2019
; Last update : 23-03-2019
; Coded for PureBasic : V5.70 LTS
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DeclareModule RecentFiles
Declare.a GetHistoricSize()
Declare.s GetFileNames()
Declare SetHistoricSize(P_HistoricSize.a)
Declare Initialize(P_HistoricSize.a)
Declare Reset()
Declare.l LinearSearchFileNames(P_FileNames.s, P_CaseSensitive.b = #True)
Declare SelectFileNames(P_Index.l)
Declare FirstFileNames()
Declare LastFileNames()
Declare PreviousFileNames()
Declare NextFileNames()
Declare ResetFileNames()
Declare ClearFileNames()
Declare FileNamesIndex()
Declare FileNamesSize()
Declare ReadPrefs(P_GroupName.s)
Declare WritePrefs(P_GroupName.s)
Declare InsertNewFile(P_NewFileName.s)
EndDeclareModule
Module RecentFiles
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure Instance
HistoricSize.a
List FileNames.s()
EndStructure
Global Instance.Instance
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<
Procedure.a GetHistoricSize()
ProcedureReturn Instance\HistoricSize
EndProcedure
Procedure.s GetFileNames()
ProcedureReturn Instance\FileNames()
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<
Procedure SetHistoricSize(P_HistoricSize.a)
Instance\HistoricSize = P_HistoricSize
While ListSize(Instance\FileNames()) > Instance\HistoricSize
LastElement(Instance\FileNames())
DeleteElement(Instance\FileNames())
Wend
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Initialize operator <<<<<
Procedure Initialize(P_HistoricSize.a)
; ClearStructure(Instance, Instance)
; InitializeStructure(Instance, Instance)
Instance\HistoricSize = P_HistoricSize
ClearList(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<
Procedure Reset()
; ResetStructure(Instance, Instance)
Instance\HistoricSize = 0
FreeList(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The linear search linked list operator(s) <<<<<
Procedure.l LinearSearchFileNames(P_FileNames.s, P_CaseSensitive.b = #True)
Protected IsFoundAtIndex.l = -1
If P_CaseSensitive = #True
ForEach Instance\FileNames()
If UCase(Instance\FileNames()) = UCase(P_FileNames)
IsFoundAtIndex = ListIndex(Instance\FileNames())
Break
EndIf
Next
Else
ForEach Instance\FileNames()
If Instance\FileNames() = P_FileNames
IsFoundAtIndex = ListIndex(Instance\FileNames())
Break
EndIf
Next
EndIf
ProcedureReturn IsFoundAtIndex
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Select in linked list operator(s) <<<<<
Procedure SelectFileNames(P_Index.l)
ProcedureReturn SelectElement(Instance\FileNames(), P_Index)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The First element in linked list operator(s) <<<<<
Procedure FirstFileNames()
ProcedureReturn FirstElement(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Last element in linked list operator(s) <<<<<
Procedure LastFileNames()
ProcedureReturn LastElement(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Previous element in linked list operator(s) <<<<<
Procedure PreviousFileNames()
ProcedureReturn PreviousElement(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Next element in linked list operator(s) <<<<<
Procedure NextFileNames()
ProcedureReturn NextElement(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset linked list operator(s) <<<<<
Procedure ResetFileNames()
ResetList(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Clear linked list operator(s) <<<<<
Procedure ClearFileNames()
ClearList(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Index in the linked list operator(s) <<<<<
Procedure FileNamesIndex()
ProcedureReturn ListIndex(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Size of the linked list operator(s) <<<<<
Procedure FileNamesSize()
ProcedureReturn ListSize(Instance\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read preferences group <<<<<
Procedure ReadPrefs(P_GroupName.s)
PreferenceGroup(P_GroupName)
Instance\HistoricSize = ReadPreferenceLong("HistoricSize", Instance\HistoricSize)
For FileNamesID = 0 To Instance\HistoricSize - 1
AddElement(Instance\FileNames())
Instance\FileNames() = ReadPreferenceString("FileNames_" + Str(FileNamesID), Instance\FileNames())
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write preferences group <<<<<
Procedure WritePrefs(P_GroupName.s)
PreferenceGroup(P_GroupName)
WritePreferenceLong("HistoricSize", Instance\HistoricSize)
ForEach Instance\FileNames()
WritePreferenceString("FileNames_" + Str(ListIndex(Instance\FileNames())), Instance\FileNames())
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The InsertNewFile operator <<<<<
Procedure InsertNewFile(P_NewFileName.s)
If LinearSearchFileNames(P_NewFileName) = -1
ResetList(Instance\FileNames())
AddElement(Instance\FileNames())
Instance\FileNames() = P_NewFileName
Else
DeleteElement(Instance\FileNames())
ResetList(Instance\FileNames())
AddElement(Instance\FileNames())
Instance\FileNames() = P_NewFileName
EndIf
If ListSize(Instance\FileNames()) > Instance\HistoricSize
LastElement(Instance\FileNames())
DeleteElement(Instance\FileNames())
EndIf
EndProcedure
EndModule
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.001 seconds (263000.00 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CompilerIf #PB_Compiler_IsMainFile
RecentFiles::SetHistoricSize(5)
For Index = 0 To 5
RecentFiles::InsertNewFile("File " + Str(Index) + ".txt")
Next
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::InsertNewFile("File " + Str(3) + ".txt")
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::InsertNewFile("File " + Str(6) + ".txt")
Debug ""
If RecentFiles::FirstFileNames()
Repeat
Debug RecentFiles::GetFileNames()
Until RecentFiles::NextFileNames() = #Null
EndIf
RecentFiles::SetHistoricSize(3)
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
CompilerEndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
The Stone Age did not end due to a shortage of stones !
-
StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Post
by StarBootics »
Hello everyone,
Sorry to re-open an old thread. This is the OOP style of the original RecentFiles system.
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Object - V1.0.0 Beta
; Project name : RecentFiles Object
; File name : RecentFiles - OOP.pb
; File Version : 1.0.1
; Programmation : OK
; Programmed by : StarBootics
; Creation Date : 16-03-2020
; Last update : 29-10-2020
; Coded for PureBasic : V5.72 LTS Beta 2
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DeclareModule RecentFiles
Interface RecentFiles
GetHistoricSize.a()
GetFileNames.s()
SetHistoricSize(P_HistoricSize.a)
SetFileNames(P_FileNames.s)
LinearSearchFileNames.l(P_FileNames.s)
AddFileNames()
SelectFileNames.i(P_Index.l)
FirstFileNames.i()
LastFileNames.i()
PreviousFileNames.i()
NextFileNames.i()
DeleteFileNames()
ResetFileNames()
ClearFileNames()
FileNamesIndex.l()
FileNamesSize.l()
ReadPrefs(P_GroupName.s)
WritePrefs(P_GroupName.s)
InsertNewFile(P_NewFileName.s)
SanityCheck()
Free()
EndInterface
Declare.i New(P_HistoricSize.a = 20)
EndDeclareModule
Module RecentFiles
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure Private_Members
VirtualTable.i
HistoricSize.a
List FileNames.s()
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<
Procedure.a GetHistoricSize(*This.Private_Members)
ProcedureReturn *This\HistoricSize
EndProcedure
Procedure.s GetFileNames(*This.Private_Members)
ProcedureReturn *This\FileNames()
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<
Procedure SetHistoricSize(*This.Private_Members, P_HistoricSize.a)
*This\HistoricSize = P_HistoricSize
While ListSize(*This\FileNames()) > *This\HistoricSize
LastElement(*This\FileNames())
DeleteElement(*This\FileNames())
Wend
EndProcedure
Procedure SetFileNames(*This.Private_Members, P_FileNames.s)
*This\FileNames() = P_FileNames
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The linear search linked list operator(s) <<<<<
Procedure.l LinearSearchFileNames(*This.Private_Members, P_FileNames.s)
IsFoundAtIndex.l = -1
ForEach *This\FileNames()
If P_FileNames = *This\FileNames()
IsFoundAtIndex = ListIndex(*This\FileNames())
Break
EndIf
Next
ProcedureReturn IsFoundAtIndex
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Add to linked list operator(s) <<<<<
Procedure AddFileNames(*This.Private_Members)
AddElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Select in linked list operator(s) <<<<<
Procedure.i SelectFileNames(*This.Private_Members, P_Index.l)
ProcedureReturn SelectElement(*This\FileNames(), P_Index)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The First element in linked list operator(s) <<<<<
Procedure.i FirstFileNames(*This.Private_Members)
ProcedureReturn FirstElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Last element in linked list operator(s) <<<<<
Procedure.i LastFileNames(*This.Private_Members)
ProcedureReturn LastElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Previous element in linked list operator(s) <<<<<
Procedure.i PreviousFileNames(*This.Private_Members)
ProcedureReturn PreviousElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Next element in linked list operator(s) <<<<<
Procedure.i NextFileNames(*This.Private_Members)
ProcedureReturn NextElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Delete element from linked list operator(s) <<<<<
Procedure DeleteFileNames(*This.Private_Members)
DeleteElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset linked list operator(s) <<<<<
Procedure ResetFileNames(*This.Private_Members)
ResetList(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Clear linked list operator(s) <<<<<
Procedure ClearFileNames(*This.Private_Members)
ClearList(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Index in the linked list operator(s) <<<<<
Procedure.l FileNamesIndex(*This.Private_Members)
ProcedureReturn ListIndex(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Size of the linked list operator(s) <<<<<
Procedure.l FileNamesSize(*This.Private_Members)
ProcedureReturn ListSize(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read preferences group <<<<<
Procedure ReadPrefs(*This.Private_Members, P_GroupName.s)
PreferenceGroup(P_GroupName)
*This\HistoricSize = ReadPreferenceLong("HistoricSize", *This\HistoricSize)
FileNames_Max = ReadPreferenceLong("FileNames_Max", 0) - 1
For FileNamesID = 0 To FileNames_Max
AddElement(*This\FileNames())
*This\FileNames() = ReadPreferenceString("FileNames_" + Str(FileNamesID), *This\FileNames())
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write preferences group <<<<<
Procedure WritePrefs(*This.Private_Members, P_GroupName.s)
PreferenceGroup(P_GroupName)
WritePreferenceLong("HistoricSize", *This\HistoricSize)
WritePreferenceLong("FileNames_Max", ListSize(*This\FileNames()))
ForEach *This\FileNames()
WritePreferenceString("FileNames_" + Str(ListIndex(*This\FileNames())), *This\FileNames())
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< InsertNewFile Operator <<<<<
Procedure InsertNewFile(*This.Private_Members, P_NewFileName.s)
If LinearSearchFileNames(*This, P_NewFileName) = -1
ResetList(*This\FileNames())
AddElement(*This\FileNames())
*This\FileNames() = P_NewFileName
Else
DeleteElement(*This\FileNames())
ResetList(*This\FileNames())
AddElement(*This\FileNames())
*This\FileNames() = P_NewFileName
EndIf
If ListSize(*This\FileNames()) > *This\HistoricSize
LastElement(*This\FileNames())
DeleteElement(*This\FileNames())
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< SanityCheck Operator <<<<<
Procedure SanityCheck(*This.Private_Members)
ForEach *This\FileNames()
If FileSize(*This\FileNames()) = -1
DeleteElement(*This\FileNames(), 1)
EndIf
Next
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Destructor <<<<<
Procedure Free(*This.Private_Members)
FreeStructure(*This)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Constructor <<<<<
Procedure.i New(P_HistoricSize.a = 20)
*This.Private_Members = AllocateStructure(Private_Members)
*This\VirtualTable = ?START_METHODS
*This\HistoricSize = P_HistoricSize
ProcedureReturn *This
EndProcedure
DataSection
START_METHODS:
Data.i @GetHistoricSize()
Data.i @GetFileNames()
Data.i @SetHistoricSize()
Data.i @SetFileNames()
Data.i @LinearSearchFileNames()
Data.i @AddFileNames()
Data.i @SelectFileNames()
Data.i @FirstFileNames()
Data.i @LastFileNames()
Data.i @PreviousFileNames()
Data.i @NextFileNames()
Data.i @DeleteFileNames()
Data.i @ResetFileNames()
Data.i @ClearFileNames()
Data.i @FileNamesIndex()
Data.i @FileNamesSize()
Data.i @ReadPrefs()
Data.i @WritePrefs()
Data.i @InsertNewFile()
Data.i @SanityCheck()
Data.i @Free()
END_METHODS:
EndDataSection
EndModule
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.001 seconds (284000.00 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CompilerIf #PB_Compiler_IsMainFile
RecentFiles.RecentFiles::RecentFiles = RecentFiles::New(5)
For Index = 0 To 5
If CreateFile(Index, "Fichier " + Str(Index) + ".txt")
WriteString(Index, "Test file - Fichier test : " + Str(Index))
CloseFile(Index)
RecentFiles\InsertNewFile("Fichier " + Str(Index) + ".txt")
EndIf
Next
RecentFiles\ResetFileNames()
While RecentFiles\NextFileNames()
Debug RecentFiles\GetFileNames()
Wend
RecentFiles\InsertNewFile("Fichier " + Str(3) + ".txt")
Debug ""
RecentFiles\ResetFileNames()
While RecentFiles\NextFileNames()
Debug RecentFiles\GetFileNames()
Wend
RecentFiles\InsertNewFile("Fichier " + Str(6) + ".txt")
Debug ""
If RecentFiles\FirstFileNames()
Repeat
Debug RecentFiles\GetFileNames()
Until RecentFiles\NextFileNames() = #Null
EndIf
RecentFiles\SetHistoricSize(4)
Debug ""
RecentFiles\ResetFileNames()
While RecentFiles\NextFileNames()
Debug RecentFiles\GetFileNames()
Wend
RecentFiles\SanityCheck()
Debug ""
RecentFiles\ResetFileNames()
While RecentFiles\NextFileNames()
Debug RecentFiles\GetFileNames()
Wend
For Index = 0 To 5
DeleteFile("Fichier " + Str(Index) + ".txt")
Next
RecentFiles\Free()
CompilerEndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Best regards
StarBootics
Last edited by
StarBootics on Fri Oct 30, 2020 2:52 am, edited 2 times in total.
The Stone Age did not end due to a shortage of stones !
-
StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Post
by StarBootics »
Hello again,
This is the version 2.0.0 of the original Module :
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Module - V1.0.0 Beta
; Project name : Recent Files systems
; File name : RecentFiles - Module.pb
; File Version : 2.0.0
; Programmation : OK
; Programmed by : StarBootics
; Creation Date : 16-03-2020
; Last update : 16-03-2020
; Coded for PureBasic : V5.72 LTS Beta 2
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DeclareModule RecentFiles
Declare AddInstance(P_Key.s)
Declare FindInstance(P_Key.s)
Declare NextInstance()
Declare DeleteInstance(P_Key.s)
Declare ResetInstances()
Declare ClearInstances()
Declare.a GetHistoricSize()
Declare.s GetFileNames()
Declare SetHistoricSize(P_HistoricSize.a)
Declare SetFileNames(P_FileNames.s)
Declare Reset(P_Name.s)
Declare.l LinearSearchFileNames(P_FileNames.s)
Declare SelectFileNames(P_Index.l)
Declare FirstFileNames()
Declare LastFileNames()
Declare PreviousFileNames()
Declare NextFileNames()
Declare ResetFileNames()
Declare FileNamesIndex()
Declare FileNamesSize()
Declare ReadPrefs(P_GroupName.s)
Declare WritePrefs(P_GroupName.s)
Declare InsertNewFile(P_NewFileName.s)
Declare SanityCheck()
EndDeclareModule
Module RecentFiles
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure Instance
HistoricSize.a
List FileNames.s()
EndStructure
Global NewMap Instances.Instance()
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Multiple Instances Helper <<<<<
Procedure AddInstance(P_Key.s)
AddMapElement(Instances(), P_Key)
EndProcedure
Procedure FindInstance(P_Key.s)
ProcedureReturn FindMapElement(Instances(), P_Key)
EndProcedure
Procedure NextInstance()
ProcedureReturn NextMapElement(Instances())
EndProcedure
Procedure DeleteInstance(P_Key.s)
DeleteMapElement(Instances(), P_Key)
EndProcedure
Procedure ResetInstances()
ResetMap(Instances())
EndProcedure
Procedure ClearInstances()
ClearMap(Instances())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The observators <<<<<
Procedure.a GetHistoricSize()
ProcedureReturn Instances()\HistoricSize
EndProcedure
Procedure.s GetFileNames()
ProcedureReturn Instances()\FileNames()
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The mutators <<<<<
Procedure SetHistoricSize(P_HistoricSize.a)
Instances()\HistoricSize = P_HistoricSize
While ListSize(Instances()\FileNames()) > Instances()\HistoricSize
LastElement(Instances()\FileNames())
DeleteElement(Instances()\FileNames())
Wend
EndProcedure
Procedure SetFileNames(P_FileNames.s)
Instances()\FileNames() = P_FileNames
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<
Procedure Reset(P_Name.s)
If P_Name = ""
ForEach Instances()
Instances()\HistoricSize = 0
ForEach Instances()\FileNames()
Instances()\FileNames() = ""
Next
FreeList(Instances()\FileNames())
Next
FreeMap(Instances())
Else
If FindMapElement(Instances(), P_Name)
Instances()\HistoricSize = 0
ForEach Instances()\FileNames()
Instances()\FileNames() = ""
Next
FreeList(Instances()\FileNames())
DeleteMapElement(Instances(), P_Name)
EndIf
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The linear search linked list operator(s) <<<<<
Procedure.l LinearSearchFileNames(P_FileNames.s)
Protected IsFoundAtIndex.l = -1
ForEach Instances()\FileNames()
If Instances()\FileNames() = P_FileNames
IsFoundAtIndex = ListIndex(Instances()\FileNames())
Break
EndIf
Next
ProcedureReturn IsFoundAtIndex
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Select in linked list operator(s) <<<<<
Procedure SelectFileNames(P_Index.l)
ProcedureReturn SelectElement(Instances()\FileNames(), P_Index)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The First element in linked list operator(s) <<<<<
Procedure FirstFileNames()
ProcedureReturn FirstElement(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Last element in linked list operator(s) <<<<<
Procedure LastFileNames()
ProcedureReturn LastElement(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Previous element in linked list operator(s) <<<<<
Procedure PreviousFileNames()
ProcedureReturn PreviousElement(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Next element in linked list operator(s) <<<<<
Procedure NextFileNames()
ProcedureReturn NextElement(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset linked list operator(s) <<<<<
Procedure ResetFileNames()
ResetList(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Index in the linked list operator(s) <<<<<
Procedure FileNamesIndex()
ProcedureReturn ListIndex(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Size of the linked list operator(s) <<<<<
Procedure FileNamesSize()
ProcedureReturn ListSize(Instances()\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read preferences group <<<<<
Procedure ReadPrefs(P_GroupName.s)
If FindMapElement(Instances(), P_GroupName)
PreferenceGroup(P_GroupName)
Instances()\HistoricSize = ReadPreferenceLong("HistoricSize", Instances()\HistoricSize)
FileNames_Max = ReadPreferenceLong("FileNames_Max", 0) - 1
For FileNamesID = 0 To FileNames_Max
AddElement(Instances()\FileNames())
Instances()\FileNames() = ReadPreferenceString("FileNames_" + Str(FileNamesID), Instances()\FileNames())
Next
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write preferences group <<<<<
Procedure WritePrefs(P_GroupName.s)
If FindMapElement(Instances(), P_GroupName)
PreferenceGroup(P_GroupName)
WritePreferenceLong("HistoricSize", Instances()\HistoricSize)
WritePreferenceLong("FileNames_Max", ListSize(Instances()\FileNames()))
ForEach Instances()\FileNames()
WritePreferenceString("FileNames_" + Str(ListIndex(Instances()\FileNames())), Instances()\FileNames())
Next
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The InsertNewFile operator <<<<<
Procedure InsertNewFile(P_NewFileName.s)
If LinearSearchFileNames(P_NewFileName) = -1
ResetList(Instances()\FileNames())
AddElement(Instances()\FileNames())
Instances()\FileNames() = P_NewFileName
Else
DeleteElement(Instances()\FileNames())
ResetList(Instances()\FileNames())
AddElement(Instances()\FileNames())
Instances()\FileNames() = P_NewFileName
EndIf
If ListSize(Instances()\FileNames()) > Instances()\HistoricSize
LastElement(Instances()\FileNames())
DeleteElement(Instances()\FileNames())
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The SanityCheck operator <<<<<
Procedure SanityCheck()
ForEach Instances()\FileNames()
If FileSize(Instances()\FileNames()) = -1
DeleteElement(Instances()\FileNames(), 1)
EndIf
Next
EndProcedure
EndModule
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.001 seconds (358000.00 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CompilerIf #PB_Compiler_IsMainFile
RecentFiles::AddInstance("RecentFiles")
RecentFiles::SetHistoricSize(5)
RecentFiles::AddInstance("RecentProjects")
RecentFiles::SetHistoricSize(5)
For Index = 0 To 5
If RecentFiles::FindInstance("RecentFiles")
If CreateFile(Index, "Fichier " + Str(Index) + ".txt")
WriteString(Index, "Test file - Fichier test : " + Str(Index))
CloseFile(Index)
RecentFiles::InsertNewFile("Fichier " + Str(Index) + ".txt")
EndIf
EndIf
If RecentFiles::FindInstance("RecentProjects")
If CreateFile(Index, "Project " + Str(Index) + ".prj")
WriteString(Index, "Test file - Fichier test : " + Str(Index))
CloseFile(Index)
RecentFiles::InsertNewFile("Project " + Str(Index) + ".prj")
EndIf
EndIf
Next
If RecentFiles::FindInstance("RecentFiles")
Debug "RecentFiles"
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::InsertNewFile("Fichier " + Str(3) + ".txt")
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::InsertNewFile("Fichier " + Str(6) + ".txt")
Debug ""
If RecentFiles::FirstFileNames()
Repeat
Debug RecentFiles::GetFileNames()
Until RecentFiles::NextFileNames() = #Null
EndIf
RecentFiles::SetHistoricSize(4)
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::SanityCheck()
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
EndIf
If RecentFiles::FindInstance("RecentProjects")
Debug ""
Debug "RecentProjects"
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::InsertNewFile("Project " + Str(3) + ".prj")
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::InsertNewFile("Project " + Str(6) + ".prj")
Debug ""
If RecentFiles::FirstFileNames()
Repeat
Debug RecentFiles::GetFileNames()
Until RecentFiles::NextFileNames() = #Null
EndIf
RecentFiles::SetHistoricSize(4)
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
RecentFiles::SanityCheck()
Debug ""
RecentFiles::ResetFileNames()
While RecentFiles::NextFileNames()
Debug RecentFiles::GetFileNames()
Wend
EndIf
For Index = 0 To 5
DeleteFile("Fichier " + Str(Index) + ".txt")
DeleteFile("Project " + Str(Index) + ".prj")
Next
CompilerEndIf
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !