Gestion d'événéments avec rappel
Publié : mar. 07/janv./2025 12:49
Bonjour à tous,
pour voir si j'avais encore le coup de patte, j'ai cherché une idée d'application pratique pour ne pas oublier mes événements et rendez-vous important, j'ai fait ça et je me suis dit que je pouvais vous en faire profiter, si ça vous intéresse.
pour voir si j'avais encore le coup de patte, j'ai cherché une idée d'application pratique pour ne pas oublier mes événements et rendez-vous important, j'ai fait ça et je me suis dit que je pouvais vous en faire profiter, si ça vous intéresse.
Code : Tout sélectionner
;Gestion d'événéments avec rappel
;{ Fichiers inclus
XIncludeFile "D:\Programmation\Prg Perso\M\Modules en francais\MesBoutons.pb"
UseModule MesBoutons
;}
;{ Enumérations
Enumeration Fichiers
#Fichier_Json
EndEnumeration
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Cal ;calendrier
#Btn_Ajouter ; bouton pour ajouter un événement
#Btn_Charger ; bouton pour charger les événements
#Btn_Sauvegarder ; bouton pour sauvegarder les événements
#Lst_Evenements ; liste pour afficher les événements
EndEnumeration
Enumeration Polices
#police
EndEnumeration
;}
;{ Structures
; Structure de l'événement
Structure Evenement
Date.q
Heure.q
Description.s
EndStructure
;}
;{ Variables
Global.s Rep$ = GetPathPart(ProgramFilename()) : SetCurrentDirectory(Rep$)
; Liste globale des événements
Global NewList ListEvenements.Evenement(), NewList ListeTemp.Evenement()
Global.b Quitter = #False
Global.s Fichier_Evenements = Rep$ + "Mes événements.Json"
Global.b SauvegardeEffectuee = #True
Global.q DateActuelle, HeureEvenement
Global.iGadget *Btn_Ajouter, *Btn_Charger, *Btn_Sauvegarder
LoadFont(#police, "Arial Nova", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#police))
;- Init position
ExamineDesktops()
Global Xmax = DesktopWidth(0)
Global LargeurInterface = 340
;}
Procedure TrierListeEvenement()
ClearList(ListeTemp())
ForEach ListEvenements()
AddElement(ListeTemp())
ListeTemp() = ListEvenements()
Next
SortStructuredList(ListeTemp(), #PB_Sort_Ascending, OffsetOf(Evenement\Heure), TypeOf(Evenement\Heure))
SortStructuredList(ListeTemp(), #PB_Sort_Ascending, OffsetOf(Evenement\Date), TypeOf(Evenement\Date))
EndProcedure
Procedure Charger_Liste()
Select #PB_EventType_LeftClick
Case EventType()
If ReadFile(#Fichier_Json, Fichier_Evenements)
CloseFile(#Fichier_Json)
;Lecture du fichier JSON
LoadJSON(#Fichier_JSON, Fichier_Evenements, #PB_JSON_NoCase)
;Extraction de la chaine JSON vers la liste chainée ListEvenements()
ExtractJSONList(JSONValue(#Fichier_JSON), ListEvenements())
TrierListeEvenement()
If IsWindow(#Fenetre_principale)
;Affichage de la liste d'évenements
ForEach ListeTemp()
With ListeTemp()
AddGadgetItem(#Lst_Evenements, -1, FormatDate("%dd/%mm/%yyyy", \Date) + " " + FormatDate("%hh:%ii", \Heure) + " : " + \Description)
SetGadgetItemData(#Lst_Evenements, CountGadgetItems(#Lst_Evenements) - 1, ListIndex(ListEvenements()))
EndWith
Next
EndIf
EndIf
EndSelect
EndProcedure
Procedure Sauvegarder_Evenements()
Select #PB_EventType_LeftClick
Case EventType()
;Création d'un objet JSON
CreateJSON(#Fichier_JSON)
;Insertion de la liste chainée "ListEvenements()" dans l'objet JSON
InsertJSONList(JSONValue(#Fichier_JSON), ListEvenements())
;Sauvegarde du fichier
SaveJSON(#Fichier_JSON, Fichier_Evenements, #PB_JSON_PrettyPrint)
SauvegardeEffectuee = #True
EndSelect
EndProcedure
Procedure Ajouter_Evenement()
Select #PB_EventType_LeftClick
Case EventType()
Date = GetGadgetState(#Cal)
Heure$ = InputRequester("Nouvel Événement", "Entrez l'heure de l'événement (HH:MM):", "")
If Heure$ <> ""
Txt_Evenement$ = InputRequester("Nouvel Événement", "Entrez le détail de l'événement:", "")
If Txt_Evenement$ <> ""
AddElement(ListEvenements())
ListEvenements()\Date = Date
ListEvenements()\Heure = ParseDate("%hh:%ii", Heure$)
ListEvenements()\Description = Txt_Evenement$
AddGadgetItem(#Lst_Evenements, -1, FormatDate("%dd/%mm/%yyyy", Date) + " " + FormatDate("%hh:%ii", ListEvenements()\Heure) + " : " + Txt_Evenement$)
SauvegardeEffectuee = #False
EndIf
EndIf
EndSelect
EndProcedure
Procedure Verifier_Rappels()
DateActuelle = Date()
ForEach ListEvenements()
; Vérifier si l'événement est dans le futur
If ListEvenements()\Date + ListEvenements()\Heure > DateActuelle
; Rappel 10 minutes avant
If ListEvenements()\Date + ListEvenements()\Heure <= DateActuelle + 600
MessageRequester("Rappel d'Événement", "Événement imminent : " + ListEvenements()\Description, #PB_MessageRequester_Ok)
EndIf
EndIf
Next
EndProcedure
Procedure Verifier_Rappels_Au_Demarrage()
DateActuelle = Date()
ForEach ListEvenements()
HeureEvenement = ListEvenements()\Date + ListEvenements()\Heure
If FormatDate("%yyyy%mm%dd", HeureEvenement) = FormatDate("%yyyy%mm%dd", DateActuelle)
Debug HeureEvenement
MessageRequester("Rappel d'Événement", "Événement aujourd'hui : " + ListEvenements()\Description + " à " + FormatDate("%hh:%ii", ListEvenements()\Heure), #PB_MessageRequester_Ok)
EndIf
Next
EndProcedure
; Ouverture de la fenêtre principale
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, Xmax-LargeurInterface-10, 40, 340, 800, "Gestion d'événéments avec rappel")
CalendarGadget(#Cal, 10, 10, 325, 250)
setwindowTheme_(GadgetID(#Cal), @"", @"")
*Btn_Ajouter = GadgetCouleurBouton(#Btn_Ajouter, 67, 270, 200, 30, "Ajouter Événement")
*Btn_Charger = GadgetCouleurBouton(#Btn_Charger, 67, 310, 200, 30, "Charger Événements")
*Btn_Sauvegarder = GadgetCouleurBouton(#Btn_Sauvegarder, 67, 350, 200, 30, "Sauvegarder Événements")
ListViewGadget(#Lst_Evenements, 10, 390, 320, 400)
*Btn_Ajouter\SetGadgetColor(#PB_Gadget_BackColor, $C9AF10)
*Btn_Ajouter\SetGadgetColor(#PB_Gadget_FrontColor, $F9F0B9)
*Btn_Charger\SetGadgetColor(#PB_Gadget_BackColor, $03A2D5)
*Btn_Charger\SetGadgetColor(#PB_Gadget_FrontColor, $C1EFFD)
*Btn_Sauvegarder\SetGadgetColor(#PB_Gadget_BackColor, $08CF1C)
*Btn_Sauvegarder\SetGadgetColor(#PB_Gadget_FrontColor, $CDFCD2)
Charger_Liste()
Verifier_Rappels_Au_Demarrage()
; Boucle d'événements
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Ajouter ; Bouton Ajouter Événement
Ajouter_Evenement()
Case #Btn_Charger ; Bouton Charger Événements
Charger_Liste()
Case #Btn_Sauvegarder ; Bouton Sauvegarder Événements
Sauvegarder_Evenements()
EndSelect
Case #PB_Event_CloseWindow
Quitter = #True
EndSelect
Verifier_Rappels()
Until Quitter
If Not SauvegardeEffectuee
Reponse = MessageRequester("ATTENTION", "Vous n'avez pas sauvegardé votre travail, voulez-vous le faire maintenant ?", #PB_MessageRequester_YesNo)
If Reponse = #PB_MessageRequester_Yes
Sauvegarder_Evenements()
EndIf
EndIf
EndIf
End
EndProcedure
Programme_principal()