j'essaie de faire un questionnaire de culture générale et dans ce questionnaire il y à 6 thèmes : Monde, Arts, Sciences, Spectacles, Histoire et Sport, j'aimerais que ma liste n'affiche que le thème choisi afin d'en choisir une question.
J'aimerais aussi que quelqu'un me dirige dans la bonne direction, je pense que ça ne doit pas être très compliqué, mais je ne trouve pas la solution, je travaille avec un fichier json, mais ça ne doit pas être un écueil non plus.
Je vous remercie tous par avance de votre aide bienveillante
Code : Tout sélectionner
;Questionnaire de culture générale
XIncludeFile "D:\Programmation\Prg Perso\M\Modules\MesGadgets.pb"
UseModule MesGadgets
Enumeration
#Fenetre_principale
EndEnumeration
Enumeration
#Ctn_Choix_Question
#Lst_Elements
#Btn_Monde
#Btn_Arts
#Btn_Spectacles
#Btn_Histoire
#Btn_Sciences
#Btn_Sports
#Theme
#Sujet
#Edt_Question
#Edt_Reponse
#Ctn_Boutons
#Btn_Maj
#Btn_Nouveau
#Btn_Supprimer
#Btn_Quitter
#Txt_Titre
#Txt_Signature
EndEnumeration
Enumeration Fichiers
#FichierJSON
EndEnumeration
Enumeration
#Police
#Police2
EndEnumeration
Structure Element
Theme.s ;Thème choisi
Sujet.s ;De quel sujet parle-t'on?
Question.s ;Question
Reponse.s ;Réponse à mémoriser
EndStructure
Global NewList Elements.Element(), Evenement, Fichier.s = "D:\Programmation\Donnees\Culture_generale.Json"
Global.iGadget *Btn_Monde, *Btn_Arts, *Btn_Spectacles, *Btn_Histoire, *Btn_Sciences, *Btn_Sports, *Btn_Quitter
Declare Charger_Elements()
Declare GestionEvenements()
Declare Nouvel_Element()
Declare Selection_Element()
Declare Supprimer_Element()
Declare Maj_Element()
Declare Sauvegarder_Elements()
Declare Quitter()
Declare Init_Questionnaire()
LoadFont(#Police, "Arial", 25, #PB_Font_Bold)
LoadFont(#Police2, "Arial", 12)
;Chargement des éléments existants
Procedure Charger_Elements()
If ReadFile(#FichierJSON, Fichier)
CloseFile(#FichierJSON)
;Lecture du fichier JSON
LoadJSON(#FichierJSON, Fichier, #PB_JSON_NoCase)
;Extraction de le chaîne JSON vers la liste chaînée Elements
ExtractJSONList(JSONValue(#FichierJSON), Elements())
;Affichage de la liste des éléments
ForEach Elements()
With Elements()
AddGadgetItem(#Lst_Elements, -1, \Theme + #LF$ + \Sujet + #LF$ + \Question + #LF$ + \Reponse)
SetGadgetItemData(#Lst_Elements, CountGadgetItems(#Lst_Elements) - 1, ListIndex(Elements()))
EndWith
Next
EndIf
EndProcedure
Procedure GestionEvenements()
Protected Evenement = EventType()
Select Evenement
Case #PB_EventType_Change
If Trim(GetGadgetText(#Theme)) <> ""
DisableGadget(#Btn_Nouveau, #False)
;DisableGadget(#Btn_Maj, #False)
Else
DisableGadget(#Btn_Nouveau, #True)
DisableGadget(#Btn_Maj, #True)
EndIf
EndSelect
EndProcedure
;Nouvel élément (raz des champs)
Procedure Nouvel_Element()
SetWindowData(#Fenetre_principale, 0) ;C'est une création
SetGadgetText(#Theme, "")
SetGadgetText(#sujet, "")
SetGadgetText(#Edt_Question, "")
SetGadgetText(#Edt_Reponse, "")
DisableGadget(#Btn_Nouveau, #True)
;DisableGadget(#Btn_Maj, #True)
DisableGadget(#Btn_Supprimer, #True)
SetGadgetText(#Btn_Maj, "Ajouter")
SetActiveGadget(#Theme)
EndProcedure
;Une question est sélectionnée dans la liste
Procedure Selection_Element()
Protected Item = GetGadgetState(#Lst_Elements)
If Item <> -1
SelectElement(Elements(), GetGadgetItemData(#Lst_Elements, Item))
With Elements()
SetGadgetText(#Theme, \Theme)
SetGadgetText(#Sujet, \Sujet)
SetGadgetText(#Edt_Question, \Question)
SetGadgetText(#Edt_Reponse, \Reponse)
EndWith
EndIf
;C'est une modif
SetWindowData(#Fenetre_principale, 1)
DisableGadget(#Btn_Nouveau, #False)
DisableGadget(#Btn_Maj, #False)
DisableGadget(#Btn_Supprimer, #False)
SetGadgetText(#Btn_Maj, "Modifier")
SetActiveGadget(#Theme)
EndProcedure
;Suppression d'une question
Procedure Supprimer_Element()
If MessageRequester("Information", "Etes vous sûr de supprimer une question ?" + #CRLF$ + "cette action est irrémédiable !", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SetWindowData(#Fenetre_principale, 3) ;C'est une suppression
Maj_Element()
EndIf
EndProcedure
Procedure Maj_Element()
Protected.s Theme = GetGadgetText(#Theme)
Protected.s Sujet = GetGadgetText(#Sujet)
Protected.s Question = GetGadgetText(#Edt_Question)
Protected.s Reponse = GetGadgetText(#Edt_Reponse)
Select GetWindowData(#Fenetre_principale)
Case 0 ; Création
AddElement(Elements())
With Elements()
\Theme = Theme
\Sujet = Sujet
\Question = Question
\Reponse = Reponse
AddGadgetItem(#Lst_Elements, -1, \Theme + #LF$ + \Sujet + #LF$ + \Question + #LF$ + \Reponse)
SetGadgetItemData(#Lst_Elements, CountGadgetItems(#Lst_Elements) - 1, ListIndex(Elements()))
EndWith
Case 1 ;Modif
With Elements()
\Theme = Theme
\Sujet = Sujet
\Question = Question
\Reponse = Reponse
SetGadgetItemText(#Lst_Elements, ListIndex(Elements()), \Theme, 0)
SetGadgetItemText(#Lst_Elements, ListIndex(Elements()), \Sujet, 1)
SetGadgetItemText(#Lst_Elements, ListIndex(Elements()), \Question, 2)
SetGadgetItemText(#Lst_Elements, ListIndex(Elements()), \Reponse, 3)
EndWith
Nouvel_Element()
Case 3 ;Suppression
RemoveGadgetItem(#Lst_Elements, ListIndex(Elements()))
DeleteElement(Elements())
;Mise à jour de liaison ListIconGadget <-> Elements()
ForEach Elements()
SetGadgetItemData(#Lst_Elements, ListIndex(Elements()), ListIndex(Elements()))
Next
EndSelect
EndProcedure
;Sauvegarde automatique à la fermeture de l(application
Procedure Sauvegarder_Elements()
;Création d'un objet JSON
CreateJSON(#FichierJSON)
;insertion de la liste chaînée "Elements()" dans l'objet
InsertJSONList(JSONValue(#FichierJSON), Elements())
;sauvegarde du fichier
SaveJSON(#FichierJSON, Fichier, #PB_JSON_PrettyPrint)
;Libérer les données
FreeJSON(#FichierJSON)
;Libérer la liste
FreeList(Elements())
EndProcedure
Procedure Quitter()
Select EventType()
Case #PB_EventType_LeftClick
CloseWindow(#Fenetre_principale)
Sauvegarder_Elements()
End
EndSelect
EndProcedure
Procedure Init_Questionnaire()
If OpenWindow(#Fenetre_principale, 0, 0, 1455, 950, "", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
SetGadgetFont(#PB_Default, FontID(#Police))
TextGadget(#Txt_Titre, 15, 10, 1430, 50, "", #PB_Text_Center|#SS_CENTERIMAGE)
ContainerGadget(#Ctn_Choix_Question, 10, 70, 1435, 420, #PB_Container_Raised)
*Btn_Monde = GadgetCouleurBouton(#Btn_Monde, 10, 10, 200, 50, "Monde")
*Btn_Arts =GadgetCouleurBouton(#Btn_Arts, 220, 10, 200, 50, "Arts")
*Btn_Spectacles = GadgetCouleurBouton(#Btn_Spectacles, 430, 10, 200, 50, "Spectacles")
*Btn_Histoire = GadgetCouleurBouton(#Btn_Histoire, 640, 10, 200, 50, "Histoire")
*Btn_Sciences = GadgetCouleurBouton(#Btn_Sciences, 850, 10, 360, 50, "Science et techniques")
*Btn_Sports = GadgetCouleurBouton(#Btn_Sports, 1220, 10, 200, 50, "Sports")
ListIconGadget(#Lst_Elements, 10, 70, 1410, 340, "Thème", 200, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines|#LVS_NOCOLUMNHEADER)
AddGadgetColumn(#Lst_Elements, 1, "Sujet", 180)
AddGadgetColumn(#Lst_Elements, 2, "Question", 1000)
CloseGadgetList()
StringGadget(#Theme, 10, 500, 710, 50, "")
StringGadget(#Sujet, 730, 500, 715, 50, "")
EditorGadget(#Edt_Question, 10, 560, 710, 230, #PB_Editor_WordWrap)
EditorGadget(#Edt_Reponse, 730, 560, 715, 230, #PB_Editor_WordWrap)
ContainerGadget(#Ctn_Boutons, 10, 800, 1435, 80, #PB_Container_Raised)
ButtonGadget(#Btn_Maj, 10, 10, 200, 50, "Ajouter")
ButtonGadget(#Btn_Nouveau, 220, 10, 200, 50, "Nouveau")
ButtonGadget(#Btn_Supprimer, 430, 10, 200, 50, "Supprimer")
*Btn_Quitter = GadgetCouleurBouton(#Btn_Quitter, 640, 10, 200, 50, "Quitter")
CloseGadgetList()
TextGadget(#Txt_Signature, 10, 890, 1435, 50, "", #PB_Text_Center|#SS_CENTERIMAGE)
SetGadgetText(#Txt_Titre, "Choisissez une thématique")
SetGadgetText(#Txt_Signature, "Questionnaire de culture générale - Logiciel créé par Micoute")
;Polices
SetGadgetFont(#Lst_Elements, FontID(#Police2))
SetGadgetFont(#Edt_Question, FontID(#Police2))
SetGadgetFont(#Edt_Reponse, FontID(#Police2))
;Couleurs
SetWindowColor(#Fenetre_principale, $FF5DF4)
SetGadgetColor(#Txt_Titre, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
SetGadgetColor(#Txt_Titre, #PB_Gadget_FrontColor, $5DFFFC)
SetGadgetColor(#Txt_Signature, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
SetGadgetColor(#Txt_Signature, #PB_Gadget_FrontColor, $5DFFFC)
SetGadgetColor(#Lst_Elements, #PB_Gadget_BackColor, $FFE6FD)
SetGadgetColor(#Theme, #PB_Gadget_BackColor, $FFE6FD)
SetGadgetColor(#Sujet, #PB_Gadget_BackColor, $FFE6FD)
SetGadgetColor(#Edt_Question, #PB_Gadget_BackColor, $FFE6FD)
SetGadgetColor(#Edt_Reponse, #PB_Gadget_BackColor, $FFE6FD)
SetGadgetColor(#Ctn_Boutons, #PB_Gadget_BackColor, $FFE6FD)
*Btn_Monde\SetGadgetColor(#PB_Gadget_BackColor, $FFA7CD)
*Btn_Arts\SetGadgetColor(#PB_Gadget_BackColor, $26C8F5)
*Btn_Spectacles\SetGadgetColor(#PB_Gadget_BackColor, $FFA7FD)
*Btn_Histoire\SetGadgetColor(#PB_Gadget_BackColor, $A7FFFD)
*Btn_Sciences\SetGadgetColor(#PB_Gadget_BackColor, $FFD6A7)
*Btn_Sports\SetGadgetColor(#PB_Gadget_BackColor, $A7FFB7)
*Btn_Quitter\SetGadgetColor(#PB_Gadget_BackColor, $FF)
*Btn_Quitter\SetGadgetColor(#PB_Gadget_FrontColor, $FFFF)
;Contrôle de la saisie
BindGadgetEvent(#Edt_Question, @GestionEvenements())
;Mise en place d'une nouvelle question
BindGadgetEvent(#Btn_Nouveau, @Nouvel_Element())
;Une question est sélectionnée
BindGadgetEvent(#Lst_Elements, @Selection_Element())
;Ajout ou modification d'une question
BindGadgetEvent(#Btn_Maj, @Maj_Element())
;Suppression d'une question
BindGadgetEvent(#Btn_Supprimer, @Supprimer_Element())
;Fermeture de l'application et sauvegarde automatique
BindGadgetEvent(#Btn_Quitter, @Quitter())
Charger_Elements()
EndIf
EndProcedure
Init_Questionnaire()
;- Boucle
Repeat
Evenement = WaitWindowEvent()
Until Evenement = #PB_Event_CloseWindow