yop,
Pour un petit projet perso il va me falloir une GUI, et comme mes besoins sont assez basiques j'aimerais en profiter pour la faire moi-même. Grosso modo il me faudra juste les composants de base : Form, Label, Textbox, Button et 2 ou 3 autres du même genre.
C'est au niveau de la gestion des évènements que je me demande quelle méthode choisir. J'aimerais bien un système comparable à ce qu'on trouve en C# ou en Delphi, avec des "event handlers" auxquels on puisse attacher des méthodes de traitement. Le truc c'est que le modèle n'est pas super clair pour moi, et je ne sais pas dans quelle direction partir pour éviter de me retrouver bloquer au cas où je décide de faire évoluer cette future petite bibliothèque.
Quand je regarde les évènements qui vont être à traiter, il y en a certains qui sont très génériques et vont exister pour chaque composant (OnMouseClic ou OnKeyDown par exemple) et d'autres qui au contraire vont être très lié au fonctionnement du composant auquel ils appartiennent (OnValueChanged pour une Textbox par exemple). Dans le second cas, pas de problème, l'évènement sera déclenché via une fonction spécifique au composant. Mais dans le premier cas c'est un peu moins clair pour moi : les évènements genre "OnKeyDown" ne sont à traiter que pour le composant qui a actuellement le focus, il va donc falloir trouver un moyen pour que quand une touche du clavier est enfoncée, l'évènement "OnKeyDown" du composant actuellement "focusé" soit déclenché. Par contre, un évènement comme "OnMouseClic" va fonctionner sur n'importe quel composant pour peu que la souris soit positionnée dessus, ce qui implique une petite recherche avant de savoir quoi déclencher.
Je pourrais partir sur une approche naïve qui traite un à un ces quelques cas, mais au-delà du simple fait d'être assez moche, il y a un premier problème : tous ces évènements doivent alors être connus de ma classe mère ("Composant") de laquelle héritent tous les composants. Je vais donc me retrouver avec une classe abstraite "Composant" qui va contenir tous ces évènements que je n'ai pas su mettre ailleurs. Ça me gène dans le sens où un composant peut avoir une notion de gestion d'évènement, mais tant que ça reste générique. Lui coller directement la gestion finalement très spécifique de "OnKeyDown" et autres me semble être assez mauvais d'un point de vue conception, mais je ne vois pour l'instant pas d'autre solution.
Auriez-vous des idées ?