# 5. Конфигурирование меню и панелей инструментов

Меню и панели инструментов - одна из наиболее важных частей приложения для обеспечения работы с документом. Как правило, вы должны сделать доступными все функции через меню. Те пункты меню, которые вызывают функции, недоступные в текущем состоянии приложения, должны быть запрещены.

Далее, приложение может содержать только одну панель меню, но несколько панелей инструментов.

Панель инструментов должна содержать только наиболее часто используемые функции, которые должны вызываться нажатием кнопок с иконками; также в состав панелей инструментов могут входить выпадающие списки для выбора значений.

# 5.1. Как они работают ?

Каждый вход меню или кнопка панели инструментов имеет ресурсный идентификатор (ID), представляющий собой число типа integer. Поскольку данные значения не могут использоваться дважды, они представляются макросами. В макросах числовое значение заменяется осмысленным названием, используемым в коде программы.

Все ресурсные ID собраны в файле `resource.h`, где можно посмотреть, какие числа уже задействованы. В любом случае, компилятор проинформирует вас, если вы дважды используете одно и то же число для различных входов. Кроме того, ресурсный файл должен содержать все клавиши быстрого доступа к меню, заменяемые в IDK-макросе(?). Например:

       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);

Этот код добавляет вход Toolbar в меню View панели меню приложения kscribble. Имя ресурсного ID состоит из имени меню и имени входа, как видно. Амперсант, стоящий перед буквой, заставляет ее работать как горячую клавишу, а само имя входа передается с использованием макроса интернационализации i18n().

При активации входа меню вызывается конструкция switch функции commandCallback() с ID меню. Поэтому вы должны добавить соответствующее сравнение в конструкцию switch и функцию, которую необходимо выполнить при выборе данного входа меню:

       1     case ID_VIEW_TOOLBAR:
       2     	slotViewToolBar();
       3     	break;

Заметьте, что вы не обязаны использовать систему ID. Если не задан никакой ID, меню нумеруется автоматически. KDevelop использует систему ID для того, чтобы иметь возможность создать конструкции switch для выбора выполняемого слота при поступлении сигнала `activated()` для меню и `clicked()` для кнопок панели инструментов. Однако эта связь может быть реализована непосредственно, используя соответствующие методы классов меню и панели инструментов.