# Chapitre 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 :

       1 (resource.h)
       2
       3 #define ID_VIEW_TOOLBAR             12010
       4
       5
       6 (kscribble.cpp)
       7
       8 // menu entry Toolbar in the "view" menubar menu
       9 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 :

       1 	case ID_VIEW_TOOLBAR:
       2 		slotViewToolBar();
       3 		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 .