Page suivante Page précédente Table des matières

### 5. Configuration des Barres de Menus et des Barres d'Outils

Les barres de menus et les barres d'outils font partie des éléments les plus importants d'une application pour permettre de travailler avec une structure de document. En règle générale, vous devriez rendre toutes les fonctions disponibles via la barre de menus. Les méthodes qui peuvent ne pas être disponibles à un certain moment de la vie de l'application devraient aussi être désactivées.

De plus, une application ne peut contenir qu'une seule barre de menus mais plusieurs barres d'outils. D'un autre côté, les barres d'outils devraient contenir uniquement les commandes les plus fréquemment utilisées, représentées par des icônes ou fournir des méthodes à accès rapide comme les listes déroulantes pour sélectionner des valeurs.

### 5.1 Comment ça fonctionne ?

Chaque entrée, que ce soit une entrée de menu ou un élément d'une barre d'outils, possède un identificateur de ressource (NdT : ID) qui est une valeur entière. Comme ces valeurs ne peuvent pas être utilisées deux fois, elles sont définies par des macros où les valeurs numériques sont remplacées par un nom d'identificateur descriptif qui peut alors être utilisé dans le code source.

Tous les identificateurs de ressource sont regroupés dans le fichier `resource.h` où vous pouvez contrôler les valeurs utilisées. De toute façon, le compilateur vous avertira si vous avez utilisé deux fois la même valeur pour construire des entrées. Le fichier de ressource devrait aussi contenir tous les accélérateurs de menu définis par les macros de remplacement IDK. Voici un exemple :

    (resource.h)

    #define ID_VIEW_TOOLBAR             12010

    (kscribble.cpp)

    // menu entry Toolbar in the "view" menubar menu
    view_menu->insertItem(i18n("&Toolbar"), ID_VIEW_TOOLBAR);

Ceci insère l'entrée "Toolbar" au menu popup "View" de la barre de menus dans l'application kscribble. Le nom de l'identificateur de ressource est géré pour contenir le nom du menu et le nom de l'action. Le symbole & (NdT : ampersand) est placé devant la lettre qui fait office d'accélérateur clavier et l'entrée elle-même est entourée par la macro i18n() pour l'internationalisation.

Lors de l'activation de l'élément de menu, le "switch" de commandCallback() est appelé avec le numéro d'identifiant. Ici, vous devez ajouter une valeur de comparaison correspondante avec la méthode que vous voulez exécuter lors de l'activation de l'entrée du menu :

            case ID_VIEW_TOOLBAR:
                    slotViewToolBar();
                    break;

Note : vous n'avez pas besoin d'utiliser le système d'identifiants (NdT : ID system). Si aucun identifiant n'est donné, le menu est numéroté automatiquement. L'architecture de KDevelop l'utilise car il permet d'accéder aux identifiants de menu ou de barre d'outils pour créer des cas de `switch` qui sélectionnent le slot à appeler lors du signal `activated()` pour les menus et `clicked()` pour les boutons de la barre d'outils. La connexion peut aussi être faite directement en utilisant les méthodes fournies par les classes fournissant les menus et les barres d'outils.

### 5.2 Ajouter un nouveau Menu

Une nouvelle barre de menus est ajoutée à une application de la façon suivante :

1. ajouter un pointeur vers le nouveau menu dans l'en-tête de la classe App
2. appeler le constructeur de `QPopupMenu` pour le pointeur dans `initMenuBar()` à l'emplacement où votre barre de menus doit apparaître
3. insérer les éléments de menu corespondants dans le menu popup et définir leurs identifiants de ressource dans le fichier de ressource
4. ajouter les connexions pour `commandCallback()` et `statusCallback()` au menu à la fin de `initMenuBar()`
5. ajouter les méthodes que vous voulez appeler par les entrées de menu dans les fichiers d'en-tête et d'implantation
6. ajouter les cas de switch pour les entrées aux méthodes `commandCallback()` et `statusCallback()`.

### 5.3 Intégrer des boutons à la Barre d'Outils

Des boutons peuvent être ajoutés à une barre d'outils comme des entrées à un menu, à la différence que la méthode utilisée est `insertButton()` et qu'elle prend en paramètres une icône de bouton et un texte de bulle d'aide au lieu d'un texte de menu.

Les icônes que vous voulez utiliser peuvent être chargées par `KIconLoader` ; `KApplication` offre aussi les macros `ICON()` et `Icon()` pour accéder au chargeur d'icônes et charger l'icône. Ces macros prennent le nom du fichier de l'icône en paramètre pour charger l'icône à partir du système de fichiers de KDE, dans un certain ordre (voir `KIconLoader` pour l'ordre de recherche).

Les bibliothèques de KDE offrent aussi un ensemble de boutons de barre d'outils qui peuvent être utilisés pour des actions standards. Au cas où elles ne vous conviendraient pas, vous devrez dessiner vos propres icônes. KDevelop permet cela en sélectionnant "Nouveau" dans le menu "Fichier", puis en sélectionnant Pixmap comme type de fichier. Souvent, vous placerez les icônes de votre barre d'outils dans un sous-dossier "toolbar" de votre projet et les installerez dans le dossier toolbar spécifique à votre application.

### 5.4 Configuration des Barres d'État

Les projets KDevelop utilisent déjà la barre d'état en affichant des messages sur les entrées du menu et sur les boutons de la barre d'outils. Quand vous ajoutez une entrée de menu, ajoutez aussi un message d'état dans la méthode `statusCallback()`.

`statusCallback()` utilise la méthode `slotStatusHelpMsg()` pour afficher un message dans la barre d'état pendant 2 secondes. Lorsque vous exécutez une commande, vous devriez utiliser la méthode `slotStatusMsg()` dès le début avec la chaîne de caractères décrivant ce que votre application fait ; avant un "return" ou la fin de la méthode, vous devrez réinitialiser le message dans la barre d'état en appelant la même méthode avec la chaîne de caractères "Ready".

### 5.5 Configuration des Raccourcis Clavier

Les raccourcis clavier sont une chose très professionnelle que vous devriez toujours ajouter à votre application. Ils sont principalement utilisés par les utilisateurs expérimentés qui veulent travailler plus vite avec leurs applications et veulent apprendre des raccourcis . Pour cela, les bibliothèques de KDE contiennent la classe `KAccel` qui fournit les combinaisons de touches des raccourcis clavier et l'accès aux raccourcis clavier standards configurés globalement.

Par défaut, les applications fenêtrées générées par KDevelop utilisent seulement les raccourcis clavier standards comme F1 pour accéder à l'aide en ligne, Ctrl+N pour un Nouveau fichier, etc. Vous devriez d'abord regarder la liste des raccourcis clavier déjà définis dans `KAccel` avant d'en ajouter un nouveau.

Si votre application contient beaucoup de raccourcis clavier, vous devriez les rendre configurables dans le menu "Options", soit en les associant avec le reste de la configuration de l'application dans un `QWidget`, soit tout seul. Les bibliothèques de KDE fournissent déjà un `KKeyChooser` utilisable dans des boîtes de dialogue à onglet, tandis que `KKeyDialog` est une boîte de dialogue de configuration des raccourcis clavier prête à l'emploi.

Consultez les classes suivantes pour plus d'informations :

`KAccel`(kdecore), `KKeyChooser`, `KKeyDialog` (kdeui)

Page suivante Page précédente Table des matières