Pour mon programme domotique, je souhaite avoir une fenêtre principale avec plusieurs gadgets (de l'ordre d'une centaine) : des graphes, des champs éditables, des boutons reflétant l'état des lampes, etc.
Je veux aussi utiliser un listicongadget pour indiquer les évènements à venir (allumage de lampe à 7h, volet roulant XX à 7h15,...) et comme je veux pouvoir changer cette programmation, un double-clic sur cette liste doit faire quelque chose : idéalement, éditer le champ sélectionné (mais la programmation employée sur les différents post me rebute un peu par la complexité et surtout le risque de non-compatibilité Win/linux) ou bien ouvrir une boite de dialogue.
Là, ça devient un peu moche car soit je rajoute mes constantes dans mon encart ENUM (ça commence à faire des constantes nombreuses), soit je peux utiliser des valeurs locales à ma procédure d'édition...
Enfin, durant mon édition, je souhaite que ce ne soit pas bloquant pour l'ensemble du programme (qui effectue des relevés de température par exemple, ou stocke les messages en provenance du BUS) : comment dois-je gérer cela ?
Actuellement, j'utilise des eventtimer
Code:
If EventID=#PB_Event_Timer
Select EventTimer()
Case 100
WriteTempFile()
GraphTemp()
Case 101
VelbusBPCalc()
Case 102
ClearOldMsg(4)
EndSelect
EndIf
Bref, une vision du bon fonctionnement m'intéresse pour ne pas être bloquant comme en automatisme

Pour le moment, j'ai une procédure qui est lancée en cas de double-clic pour afficher la fenêtre d'édition (très basique) :
Code:
Procedure EditEvent(ligne)
OpenWindow(#EE_Window,50,50,200,120,"Editer événement",#PB_Window_ScreenCentered|#PB_Window_Normal)
StringGadget(#EE_StrHM, 100, 10, 80, 18, GetGadgetItemText(#Editor_Reveil,ligne,2))
StringGadget(#EE_StrDay, 100, 30, 80, 18, GetGadgetItemText(#Editor_Reveil,ligne,1))
StringGadget(#EE_StrAdr, 100, 50, 80, 18, GetGadgetItemText(#Editor_Reveil,ligne,4))
StringGadget(#EE_StrMod, 100, 70, 80, 18, GetGadgetItemText(#Editor_Reveil,ligne,5))
ButtonGadget(#EE_ButtonOK,70,90,80,18,"OK")
EndProcedure
Puis dans ma boucle principale, je surveille le bouton
Code:
Case #EE_ButtonOK
ligne = GetGadgetState(#Editor_Reveil)
SetGadgetItemText(#Editor_Reveil,ligne,GetGadgetText(#EE_StrHM),2)
SetGadgetItemText(#Editor_Reveil,ligne,GetGadgetText(#EE_StrDay),1)
SetGadgetItemText(#Editor_Reveil,ligne,GetGadgetText(#EE_StrAdr),4)
SetGadgetItemText(#Editor_Reveil,ligne,GetGadgetText(#EE_StrMod),5)
CloseWindow(#EE_Window)
EndSelect
Ca me paraît très "crade" comme structure de codage mais je ne sais pas s'il y a d'autres moyens plus d'en "l'état de l'Art"
Merci