About coding style, I'm seriously considering going OOP style for example the Recent Files management both for plain source code and projects look like this :Fred wrote:You posts are very well done Tristano, thanks for it. You are indeed right when you said it was done only for a small group of dev (actually only 2: Fr34k and me) and we indeed agreed on coding style and such. Feel free to continue your pull requests to make it better for everyone contributing, like puting a BOM for everyone, and using a .cfg instead of storing config at the end of file etc.
TBH, I'm not that worried about future, it will take some iteration to get something usable for everyone but we will get there !
Happy hacking, glad to see than some of you successfully compiled the IDE
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code généré par : Dev-Object - V0.9.10
; Nom du projet : Le nom du projet ici
; Nom du fichier : Nom du fichier
; Version du fichier : 0.0.0
; Programmation : À vérifier
; Programmé par : StarBootics
; Date : 03-12-2019
; Mise à jour : 03-12-2019
; Codé pour PureBasic : V5.71 LTS
; Plateforme : 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)
Free()
EndInterface
Declare.i New(P_HistoricSize.a = 20)
EndDeclareModule
Module RecentFiles
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Private_Members
VirtualTable.i
HistoricSize.a
List FileNames.s()
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Procedure.a GetHistoricSize(*This.Private_Members)
ProcedureReturn *This\HistoricSize
EndProcedure
Procedure.s GetFileNames(*This.Private_Members)
ProcedureReturn *This\FileNames()
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Procedure SetHistoricSize(*This.Private_Members, P_HistoricSize.a)
*This\HistoricSize = P_HistoricSize
EndProcedure
Procedure SetFileNames(*This.Private_Members, P_FileNames.s)
*This\FileNames() = P_FileNames
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur(s) de fouille linéaire de liste chaînée <<<<<
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
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) d'ajout à la liste chaînée <<<<<
Procedure AddFileNames(*This.Private_Members)
AddElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) de Sélection dans la liste chaînée <<<<<
Procedure.i SelectFileNames(*This.Private_Members, P_Index.l)
ProcedureReturn SelectElement(*This\FileNames(), P_Index)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) Premier élément de la liste chaînée <<<<<
Procedure.i FirstFileNames(*This.Private_Members)
ProcedureReturn FirstElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) Dernier élément de la liste chaînée <<<<<
Procedure.i LastFileNames(*This.Private_Members)
ProcedureReturn LastElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) élément Précédent de la liste chaînée <<<<<
Procedure.i PreviousFileNames(*This.Private_Members)
ProcedureReturn PreviousElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) élément Suivant de la liste chaînée <<<<<
Procedure.i NextFileNames(*This.Private_Members)
ProcedureReturn NextElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) Supprimer l'élément courant de la liste chaînée <<<<<
Procedure DeleteFileNames(*This.Private_Members)
DeleteElement(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) Reset de la liste chaînée <<<<<
Procedure ResetFileNames(*This.Private_Members)
ResetList(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) Clear de la liste chaînée <<<<<
Procedure ClearFileNames(*This.Private_Members)
ClearList(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) de numéro d'index de la liste chaînée <<<<<
Procedure.l FileNamesIndex(*This.Private_Members)
ProcedureReturn ListIndex(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'operateur(s) de grandeur de la liste chaînée <<<<<
Procedure.l FileNamesSize(*This.Private_Members)
ProcedureReturn ListSize(*This\FileNames())
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Lecture d'un groupe Préférences <<<<<
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
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Écriture d'un groupe de Préférences <<<<<
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
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur InsertNewFile <<<<<
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
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le Destructeur <<<<<
Procedure Free(*This.Private_Members)
ClearStructure(*This, Private_Members)
FreeStructure(*This)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Le Constructeur <<<<<
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 @Free()
END_METHODS:
EndDataSection
EndModule
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.001 secondes (284000.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Best regards
StarBootics