Je vous remercie par anticipation
Code : Tout sélectionner
EnableExplicit
Enumeration Fichiers
#Fichier_Json
EndEnumeration
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Arbre
#Edt
#Btn_Nouv_Dossier
#Btn_Nouv_Note
#Btn_Renommer
#Btn_Supp_Note
#Btn_Supp_Dossier
#Btn_Charger
#Btn_Sauvegarder
#Btn_Quitter
#Btn_Monter
#Btn_Descendre
EndEnumeration
Enumeration Polices
#police
EndEnumeration
Global.s Rep$ = GetPathPart(ProgramFilename()) : SetCurrentDirectory(Rep$)
Global Fichier_Notes.s = Rep$ + "Notes.Json"
Global NoeudSelectionne.i
Global NewList Notes.s()
Global NewList ContenuNotes.s()
LoadFont(#police, "Arial Nova", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#police))
Procedure NoeudSelectionne()
NoeudSelectionne = GetGadgetState(#Arbre)
EndProcedure
Procedure AjouterDossier()
NoeudSelectionne()
If NoeudSelectionne = -1
AddGadgetItem(#Arbre, -1, "Nouveau dossier")
AddElement(Notes())
Notes() = "Nouveau dossier"
AddElement(ContenuNotes())
ContenuNotes() = ""
Else
AddGadgetItem(#Arbre, -1, "Nouveau dossier", 0, NoeudSelectionne)
AddElement(Notes())
Notes() = "Nouveau dossier"
AddElement(ContenuNotes())
ContenuNotes() = ""
EndIf
EndProcedure
Procedure AjouterNote()
NoeudSelectionne()
If NoeudSelectionne <> -1
AddGadgetItem(#Arbre, -1, "Nouvelle note", 0, NoeudSelectionne)
Else
AddGadgetItem(#Arbre, -1, "Nouvelle note")
EndIf
AddElement(Notes())
Notes() = "Nouvelle note"
AddElement(ContenuNotes())
ContenuNotes() = ""
EndProcedure
Procedure RenommerNoeud()
NoeudSelectionne()
If NoeudSelectionne <> -1
Protected nomNoeud$ = InputRequester("Renommer", "Entrez le nouveau nom :", GetGadgetItemText(#Arbre, NoeudSelectionne))
If nomNoeud$ <> ""
SetGadgetItemText(#Arbre, NoeudSelectionne, nomNoeud$)
SelectElement(Notes(), NoeudSelectionne)
Notes() = nomNoeud$
EndIf
EndIf
EndProcedure
Procedure ChargerContenuNote()
NoeudSelectionne()
If NoeudSelectionne <> -1
SelectElement(ContenuNotes(), NoeudSelectionne)
SetGadgetText(#Edt, ContenuNotes())
EndIf
EndProcedure
Procedure SauvegarderContenuNote()
NoeudSelectionne()
If NoeudSelectionne <> -1
SelectElement(ContenuNotes(), NoeudSelectionne)
ContenuNotes() = GetGadgetText(#Edt)
EndIf
EndProcedure
Procedure Supprimer_Note()
NoeudSelectionne()
If NoeudSelectionne <> -1
RemoveGadgetItem(#Arbre, NoeudSelectionne)
DeleteElement(Notes(), NoeudSelectionne)
DeleteElement(ContenuNotes(), NoeudSelectionne)
EndIf
EndProcedure
Procedure Supprimer_Dossier()
NoeudSelectionne()
If NoeudSelectionne <> -1
RemoveGadgetItem(#Arbre, NoeudSelectionne)
DeleteElement(Notes(), NoeudSelectionne)
DeleteElement(ContenuNotes(), NoeudSelectionne)
EndIf
EndProcedure
Procedure MonterNoeud()
NoeudSelectionne()
If NoeudSelectionne > 0
Protected Texte$ = GetGadgetItemText(#Arbre, NoeudSelectionne)
Protected Contenu$ = GetGadgetText(#Edt)
; Échanger les éléments dans les listes chaînées
SelectElement(Notes(), NoeudSelectionne)
Protected NoteTemp.s = Notes()
SelectElement(Notes(), NoeudSelectionne - 1)
Protected NoteTempPrec.s = Notes()
Notes() = NoteTempPrec
SelectElement(Notes(), NoeudSelectionne - 1)
Notes() = NoteTemp
SelectElement(ContenuNotes(), NoeudSelectionne)
Protected ContenuTemp.s = ContenuNotes()
SelectElement(ContenuNotes(), NoeudSelectionne - 1)
Protected ContenuTempPrec.s = ContenuNotes()
ContenuNotes() = ContenuTempPrec
SelectElement(ContenuNotes(), NoeudSelectionne - 1)
ContenuNotes() = ContenuTemp
; Mettre à jour l'arborescence
SetGadgetItemText(#Arbre, NoeudSelectionne, GetGadgetItemText(#Arbre, NoeudSelectionne - 1))
SetGadgetItemText(#Arbre, NoeudSelectionne - 1, Texte$)
SetGadgetState(#Arbre, NoeudSelectionne - 1)
EndIf
EndProcedure
Procedure DescendreNoeud()
NoeudSelectionne()
If NoeudSelectionne < CountGadgetItems(#Arbre) - 1
Protected Texte$ = GetGadgetItemText(#Arbre, NoeudSelectionne)
Protected Contenu$ = GetGadgetText(#Edt)
; Échanger les éléments dans les listes chaînées
SelectElement(Notes(), NoeudSelectionne)
Protected NoteTemp.s = Notes()
SelectElement(Notes(), NoeudSelectionne + 1)
Protected NoteTempsSuiv.s = Notes()
Notes() = NoteTempsSuiv
SelectElement(Notes(), NoeudSelectionne + 1)
Notes() = NoteTemp
SelectElement(ContenuNotes(), NoeudSelectionne)
Protected ContenuTemp.s = ContenuNotes()
SelectElement(ContenuNotes(), NoeudSelectionne + 1)
Protected ContenuTempSuiv.s = ContenuNotes()
ContenuNotes() = ContenuTempSuiv
SelectElement(ContenuNotes(), NoeudSelectionne + 1)
ContenuNotes() = ContenuTemp
; Mettre à jour l'arborescence
SetGadgetItemText(#Arbre, NoeudSelectionne, GetGadgetItemText(#Arbre, NoeudSelectionne + 1))
SetGadgetItemText(#Arbre, NoeudSelectionne + 1, Texte$)
SetGadgetState(#Arbre, NoeudSelectionne + 1)
EndIf
EndProcedure
Procedure GestionEvenementsArbre()
Static dernierHeureClic.i
Protected seuilDoubleClic.i = 500
Protected HeureCourante.i = ElapsedMilliseconds()
If EventType() = #PB_EventType_LeftClick
If HeureCourante - dernierHeureClic <= seuilDoubleClic
RenommerNoeud()
Else
ChargerContenuNote()
EndIf
dernierHeureClic = HeureCourante
EndIf
EndProcedure
Procedure Sauvegarder()
; Création d'un objet JSON
CreateJSON(#Fichier_Json)
; Insertion de la liste chaînée "Notes()" dans l'objet JSON
InsertJSONList(JSONValue(#Fichier_Json), Notes())
; Insertion de la liste chaînée "ContenuNotes()" dans l'objet JSON
InsertJSONList(JSONValue(#Fichier_Json), ContenuNotes())
; Sauvegarde du fichier
SaveJSON(#Fichier_Json, Fichier_Notes, #PB_JSON_PrettyPrint)
EndProcedure
Procedure Charger()
If FileSize(Fichier_Notes) > 0
; Lecture du fichier JSON
LoadJSON(#Fichier_Json, Fichier_Notes)
; Extraction de la chaîne JSON vers la liste chaînée Notes()
ExtractJSONList(JSONValue(#Fichier_Json), Notes())
; Extraction de la chaîne JSON vers la liste chaînée ContenuNotes()
ExtractJSONList(JSONValue(#Fichier_Json), ContenuNotes())
; Affichage de la liste dans le TreeGadget
ForEach Notes()
AddGadgetItem(#Arbre, -1, Notes())
Next
EndIf
EndProcedure
Procedure Quitter()
CloseWindow(#Fenetre_principale)
End
EndProcedure
If OpenWindow(#Fenetre_principale, 100, 100, 650, 710, "Prise de notes", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(#Arbre, 10, 10, 310, 530)
EditorGadget(#Edt, 330, 10, 310, 530)
ButtonGadget(#Btn_Nouv_Dossier, 10, 550, 150, 30, "Nouveau dossier")
ButtonGadget(#Btn_Nouv_Note, 170, 550, 150, 30, "Nouvelle note")
ButtonGadget(#Btn_Renommer, 10, 630, 310, 30, "Renommer dossier ou note")
ButtonGadget(#Btn_Supp_Note, 170, 590, 150, 30, "Supprimer note")
ButtonGadget(#Btn_Supp_Dossier, 10, 590, 150, 30, "Supprimer dossier")
ButtonGadget(#Btn_Charger, 490, 550, 150, 30, "Charger")
ButtonGadget(#Btn_Sauvegarder, 490, 590, 150, 30, "Sauvegarder")
ButtonGadget(#Btn_Quitter, 490, 670, 150, 30, "Quitter")
ButtonGadget(#Btn_Monter, 10, 670, 150, 30, "Monter")
ButtonGadget(#Btn_Descendre, 170, 670, 150, 30, "Descendre")
; Déclencheurs
BindGadgetEvent(#Arbre, @GestionEvenementsArbre())
BindGadgetEvent(#Btn_Nouv_Dossier, @AjouterDossier())
BindGadgetEvent(#Btn_Nouv_Note, @AjouterNote())
BindGadgetEvent(#Btn_Renommer, @RenommerNoeud())
BindGadgetEvent(#Btn_Supp_Note, @Supprimer_Note())
BindGadgetEvent(#Btn_Supp_Dossier, @Supprimer_Dossier())
BindGadgetEvent(#Btn_Charger, @Charger())
BindGadgetEvent(#Btn_Sauvegarder, @Sauvegarder())
BindGadgetEvent(#Btn_Quitter, @Quitter())
BindGadgetEvent(#Btn_Monter, @MonterNoeud())
BindGadgetEvent(#Btn_Descendre, @DescendreNoeud())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quitter()
EndSelect
ForEver
EndIf