Je travaille avec C++ Builder Xe![]()
, donc un compilateur C++03 pas trop standard avec des extensions: enum typés, et pleins de mots clef pour l'IDE/ la bibliothèque VCL
Et par exemple Boost ne compile pas toujours.
J'ai une IHM avec un menu à gauche avec 6 entrées
Lorsque je clique sur une entrée, un écran/ contrôleur s'affiche sur les 6/ 10ième droit.
Donc à partir d'un écran, j'ai accès aux 5 autres écrans: soit une matrice de transitions (ce n'est pas terrible comme terme)
Donc le code est le suivant :
Mais, parce que sinon c'est trop facile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 current_controller->set_parent(NULL); je déselectionne l'entrée courante new_controller->set_parent(&main_form); je sélectionne la nouvelle entrée current_controller = new_controller // <- actuellement c'est avec un état enum:
1) Sur l'écran 1 et l'écran 3, j'ai une liste de XXX que je partage entre les 2 écrans
Si (current_controller != 1) && (current_controller != 3) && ((new_controller == 3) || (new_controller == 1)) -> j'affiche la liste
Si (current_controller == 1) && (new_controller == 3) -> je repositionne la liste et je sélectionne la première ligne
Si (current_controller == 3) && (new_controller == 1) -> je repositionne la liste et je sélectionne la première ligne
Mais il faut aussi penser à la cacher
Si ((current_controller == 1) || (current_controller == 3)) && (new_controller != 3) && (new_controller != 1) -> je cache la liste
2) l'écran 6 est l'écran de "settings" (langue et couleur)
3) Extra : on voit clairement que 1 entrée (un label texte) est associée à un contrôleur (mais dans mon code je n'ai pas créé de classe d'association)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Si (current_controller == 6) alors controller_06->set_parent(NULL); je déselectionne l'entrée 06 je sélectionne la nouvelle entrée si (il n'y a pas de changements) -> j'affiche le nouvel écran sinon -> je lance un thread pour répercuter les changements partout, et écrire le fichier de configuration fsi
Sauf pour l'écran 4, où l'entrée est sur 2 labels
J'ai codé cela avec 6 switch cases de 6 cas (avec le cas diagonal vide à chaque fois) : cela fonctionne parfaitement.
Mais j'ai un autre menu ... un menu à 33 entrées (soit 33*32 cas = 1056) : avec 33 switch cases de 32 cas + 1 cas diagonal vide (7000 - 8000 lignes le machin)
cela pique fortement![]()
Et là je vais avoir 3 à 5 listes partagées, et sûrement des tests réseau "au début"
Est-ce que vous avez une idée de coder un truc dynamique avec des pointeurs de fonctions/ méthodes, machines à états, ... ?
En gros, mon code: j'ai une classe "groupe de contrôleurs" qui contiennent tous les contrôleurs (6 ou 33) et c'est ce groupe qui fait l'affichage du menu.
[Et actuellement, je n'ai pas d'héritage, pas de virtuel, pas de pointeurs, juste un état enum de 6 ou 33 valeurs: de la composition la plus simple]
[au début, j'avais séparé ce groupe et le menu, mais pour plus de facilité, j'ai fusionné les 2 classes]
Partager