It is currently Fri Jul 10, 2020 4:48 am

All times are UTC + 1 hour




Post new topic Reply to topic  [ 3 posts ] 
Author Message
 Post subject: RecentFiles - Module
PostPosted: Sun Mar 24, 2019 3:05 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 534
Location: Canada
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:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 !


Top
 Profile  
Reply with quote  
 Post subject: Re: RecentFiles - Module
PostPosted: Mon Mar 16, 2020 3:29 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 534
Location: Canada
Hello everyone,

Sorry to re-open an old thread. This is the OOP style of the original RecentFiles system.

Code:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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.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
 
  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)
   
    ClearStructure(*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

_________________
The Stone Age did not end due to a shortage of stones !


Last edited by StarBootics on Sat Mar 21, 2020 12:20 am, edited 1 time in total.

Top
 Profile  
Reply with quote  
 Post subject: Re: RecentFiles - Module
PostPosted: Mon Mar 16, 2020 7:27 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 534
Location: Canada
Hello again,

This is the version 2.0.0 of the original Module :
Code:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 !


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 16 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye