■ Caractéristiques principales.
-Chaque contact se compose d'un nom et d'un téléphone. A vous d'ajouter ce que vous voulez.
-Le fichier JSON contenant les contacts est lu et transféré dans une liste chaînée à l'ouverture de l'application.
-La sauvegarde des contacts est exécutée à la fermeture de l'application.
- 3 Boutons
Nouveau pour la saisie d'un nouveau contact. La plupart du temps il ne sert à rien.
Ajouter/Modifier pour ajouter ou mettre à jour un contact
Supprimer pour .... supprimer un contact.
Avantage du fichier JSON: Si vous modifiez la structure de la liste chaînée en ajoutant un email ou une adresse de contact, vous n'avez pas besoin de modifier la procédure de sauvegarde.
Enregistrer ce code dans un dossier avant de l'utiliser.
Code : Tout sélectionner
;Gestionnaire de contacts
;
;Contributor : falsam
;PureBasic : 5.30 minimum
;
Enumeration
#JSONFile
EndEnumeration
Enumeration Window
#mf ;Fenetre
EndEnumeration
Enumeration Gadget
#mfName ;Saisie du nom du contact
#mfTel ;Saisie du téléphone d'un contact
#mfContacts ;Liste des contacts
#mfContactNew ;Bouton nouveau contact
#mfContactUpdate;Bouton ajout ou mise à jour d'un contact
#MfContactDelete;Bouton suppression d'un contact
EndEnumeration
;Structure d'un contact
Structure Contact
Name.s
Tel.s
EndStructure
;Création d'une liste vierge des contacts
Global NewList Contacts.Contact()
;Declaration des traitements
Declare MainFormShow() ;Ouverture de l'application
Declare ContactsLoad() ;Chargement des contacts existants
Declare ContactEvent() ;Gestionnaire de controle de la saisie
Declare ContactNew() ;Nouveau contact
Declare ContactSelect() ;Un contact est sélectionné dansla liste
Declare ContactDelete() ;Suppression d'un contact
Declare ContactUpdate() ;Gestionnaire de mise à jour des contacts
Declare ContactsSave() ;Sauveagarde des contacts
MainFormShow()
;Ouverture de l'application
Procedure MainFormShow()
OpenWindow(#mf, 0, 0, 500, 400, "Mes Contacts", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TextGadget(#PB_Any, 20, 23, 100, 22, "Nom")
StringGadget(#mfName, 120, 20, 250, 24, "")
TextGadget(#PB_Any, 20, 53, 100, 22, "Téléphone")
StringGadget(#mfTel, 120, 50, 250, 24, "")
ListIconGadget(#mfContacts, 20, 120, 460, 250, "Nom", 150, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#MfContacts, 1, "Téléphone", 150)
ButtonGadget(#mfContactNew, 400, 20, 80, 24, "Nouveau")
ButtonGadget(#mfContactUpdate, 400, 50, 80, 24, "Ajouter")
ButtonGadget(#MfContactDelete, 400, 80, 80, 24, "Supprimer")
;Control de la saisie (Le nom est obligatoire)
BindGadgetEvent(#mfName, @ContactEvent())
;Mise en place d'un nouveau contact
BindGadgetEvent(#mfContactNew, @ContactNew())
;Un contact est selectionné dans la liste
BindGadgetEvent(#mfContacts, @ContactSelect())
;Ajout ou modification d'un contact
BindGadgetEvent(#mfContactUpdate, @ContactUpdate())
;Supression d'un contact
BindGadgetEvent(#MfContactDelete, @ContactDelete())
;Fermeture de l'application et sauvegarde des contacts
BindEvent(#PB_Event_CloseWindow, @ContactsSave())
;Lectures des contacts
ContactsLoad()
;L'application est préte pour la saisie d'un contact
ContactNew()
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndProcedure
;Chargement des contacts existants
Procedure ContactsLoad()
If ReadFile(#JSONFile, "contacts.json")
CloseFile(#JSONFile)
;Lecture du fichier JSON
LoadJSON(#JSONFile, "contacts.json", #PB_JSON_NoCase)
;Extraction de la chaine JSOn vers la liste chainée Contacts
ExtractJSONList(JSONValue(#JSONFile), Contacts())
;Affichage de la liste des contacts
ForEach(Contacts())
With Contacts()
AddGadgetItem(#mfContacts, -1, \Name + Chr(10) + \Tel)
SetGadgetItemData(#mfContacts, CountGadgetItems(#mfContacts)-1, ListIndex(Contacts()))
EndWith
Next
EndIf
EndProcedure
;Gestionnaire de controle de la saisie
Procedure ContactEvent()
Protected Event = EventType()
Select Event
Case #PB_EventType_Change
If Trim(GetGadgetText(#mfName)) <> ""
DisableGadget(#mfContactNew, #False)
DisableGadget(#mfContactUpdate, #False)
Else
DisableGadget(#mfContactNew, #True)
DisableGadget(#mfContactUpdate, #True)
EndIf
EndSelect
EndProcedure
;Nouveau contact (Reset des champs de saisie)
Procedure ContactNew()
SetWindowData(#mf, 0) ;C'est une création
SetGadgetText(#mfName, "")
SetGadgetText(#mfTel, "")
DisableGadget(#mfContactNew, #True)
DisableGadget(#mfContactUpdate, #True)
DisableGadget(#MfContactDelete, #True)
SetGadgetText(#mfContactUpdate, "Ajouter")
SetActiveGadget(#mfName)
EndProcedure
;Un contact est sélectionné dans la liste
Procedure ContactSelect()
Protected Item = GetGadgetState(#MfContacts)
If Item <> -1
SelectElement(Contacts(), GetGadgetItemData(#mfContacts, Item))
With Contacts()
SetGadgetText(#mfName, \Name)
SetGadgetText(#mftel, \Tel)
EndWith
EndIf
;C'est une modification de contact
SetWindowData(#mf, 1)
DisableGadget(#mfContactNew, #False)
DisableGadget(#mfContactUpdate, #False)
DisableGadget(#MfContactDelete, #False)
SetGadgetText(#mfContactUpdate, "Modifier")
SetActiveGadget(#mfName)
EndProcedure
;Suppression d'un contact
Procedure ContactDelete()
If MessageRequester("Information", "Etes vous certain de supprimer un contact ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SetWindowData(#mf, 3) ;C'est une suppression
ContactUpdate()
EndIf
EndProcedure
;Gestionnaire de mise à jour des contacts
Procedure ContactUpdate()
Protected Name.s = GetGadgetText(#mfName)
Protected Tel.s = GetGadgetText(#mfTel)
Select GetWindowData(#mf)
Case 0 ;Création d'un contact
AddElement(Contacts())
With Contacts()
\Name = Name
\Tel = Tel
AddGadgetItem(#mfContacts, -1, \Name + Chr(10) + \Tel)
SetGadgetItemData(#mfContacts, CountGadgetItems(#mfContacts)-1, ListIndex(Contacts()))
EndWith
Case 1 ;Modification d'un contact
With Contacts()
\Name = Name
\Tel = Tel
SetGadgetItemText(#mfContacts, ListIndex(Contacts()), \Name, 0)
SetGadgetItemText(#mfContacts, ListIndex(Contacts()), \Tel, 1)
EndWith
ContactNew()
Case 3 ;Suppression d'un contact
RemoveGadgetItem(#mfContacts, ListIndex(Contacts()))
DeleteElement(Contacts())
;Mise à jour des indexs de liaisons ListIconGadget <-> Contacts()
ForEach(Contacts())
SetGadgetItemData(#mfContacts, ListIndex(Contacts()), ListIndex(Contacts()))
Next
EndSelect
EndProcedure
;Sauvegarde des contacts à la fermeture de l'application
Procedure ContactsSave()
;Création d'un objet JSON
CreateJSON(#JSONFile)
;Insertion de la liste chainée "Contacts" dans l'objet JSON
InsertJSONList(JSONValue(#JSONFile), Contacts())
;Sauvegarde du fichier
SaveJSON(#JSONFile, "contacts.json")
EndProcedure