Bonjour,
Je suis en train de réfléchir à comment ajouter des raccourcis claviers configurables à mon programme. N'étant pas le premier à vouloir faire ceci j'ai cherché sur le net des tutos, frameworks, bibliothèques mais sans résultat. Peut-être aurais-je ici des pistes pour ne pas réinventer la roue!
Ce que je sais déjà faire:
- Ecouter les touches pressées
- Associer une touche à par exemple une std::function<void()> et appeler cette fonction quand la touche est pressée.
Ma question est au niveau de la conception de mon système de gestion des raccourcis. J'explique le système que j'imagine:
Il y a des classes avec des méthodes publiques, et des objets instances de ces classes.
On peut associer certaines méthodes de certains de ces objets à des raccourcis clavier, et modifier ces raccourcis pendant l'exécution (et du coup que l'utilisateur puisse le faire).
Il y a plusieurs "jeux" de raccourcis claviers. Selon l'état de l'application tel ou tel jeu de raccourcis est actif. Une même touche peut donc, selon les jeux actifs, déclencher l'appel de différentes méthodes.
Il y a au moins un jeu de base, actif tout le temps, qui contient les raccourcis généraux de pilotage global de l'application (la fermer, basculer entre ses états principaux, afficher ou cacher certaines fenêtres, etc).
Et il y a des jeux de raccourcis supplémentaires, spécifiques à l'état de l'application. Par exemple quand l'application est en train de lire des vidéos la touche espace fait le play/pause, mais plus tard quand l'application est en mode enregistrement du son du microphone la touche espace déclenche ou stoppe cet enregistrement.
Plusieurs jeux de raccourcis supplémentaires peuvent être actifs en même temps.
Donc, quand une touche est enfoncée, le programme déclenche la fonction associée dans le jeu de raccourcis globaux. S'il n'y a pas de fonction associée dans ce jeu elle cherche s'il y a une fonction associée dans un des autres jeux, et l'exécute.
Les objets répondant aux touches peuvent être créés et détruits pendant l'exécution du programme. La méthode d'un objet associée à une touche doit donc être appelée uniquement si l'objet existe, bien sûr.
Les objets peuvent recevoir le focus. Dans un même jeu de raccourcis, plusieurs objets peuvent associer une méthode à une même touche. Quand la touche est pressée c'est l'objet qui a le focus qui aura sa méthode associée exécutée.
Il doit être possible de sauvegarder et charger les jeux de raccourcis sur le disque, de préférence sous forme texte (qui soit donc éditable à la main).
Donc voilà, je suis en train de me demander comment articuler tout cela, avec donc la sensation d'être en train de coder quelques chose qui l'a déjà été par d'autres. Est-ce que quelqu'un aurait une piste d'implémentation, un pattern à proposer ? En même temps j'ai l'impression que ma question est complexe...
Merci![]()
Partager