Элементы управления. Компоненты панели инструментов
Цель лекции: Научиться создавать и использовать панели инструментов в своих программах
Для построения панели инструментов библиотека Juce предоставляет классы Toolbar, ToolbarItemFactory и ToolbarButton.
Toolbar — компонент, который рисует вертикальную или горизонтальную полосу (панель), содержащую кнопки или иные виджеты в порядке, определяемом ToolbarItcodeFactory.
ToolbarItemFactory отвечает за создание и добавление на панель инструментов её элементов. Каждый тип добавляемых элементов должен характеризоваться уникальным номером (ID), включая разделители и распорки.
ToolbarButton — "быстрая" кнопка инструментальной панели, наиболее часто добавляемый на неё виджет. Этот тип кнопок отличается тем, что содержит вместо надписи небольшое изображение (пиктограмму, icon), символизирующее определённую команду меню.
Класс ToolbarButton является потомком ToolbarItemComponent, с помощью которого можно создавать произвольные виджеты для добавления на панель инструментов.
Программа, окно которой показано на рисунке 14.1 , демонстрирует применение всех вышеперечисленных классов.
С помощью BinaryBuilder заранее подготовим файлы бинарных ресурсов для изображений кнопок панели (описание того, как это сделать приводится в "Элементы управления. Кнопки" ).
Как упоминалось, за создание кнопок панели инструментов отвечает класс ToolbarItemFactory. Он является абстрактным и включает три чистые виртуальные функции:
- virtual void ToolbarItemFactory::getAllToolbarItemIds(Array<int>& ids) — задаёт массив уникальных числовых не равных нулю идентификаторов (ID) для каждого из типов элементов, которые может создавать ToolbarItemFactory;
- virtual void ToolbarItemFactory::getDefaultItemSet(Array<int>& ids) — задаёт собственно сам набор добавляемых на панель инструментов элементов, основываясь на наборе идентификаторов, созданных предыдущей функцией;
- virtual ToolbarItemComponent* ToolbarItemFactory::createItem(int itemId) — создаёт компонент (например, кнопку), добавляемый на панель инструментов, из числа набора, основываясь на наборе идентификаторов, созданных предыдущей функцией.
Объявим собственный класс, TToolbarFactory, унаследованный от ToolbarItemFactory, который будет создавать набор из 4 кнопок: "Выход", "Новый", "Открыть" и "Ориентация" ( рис. 14.1, пример 14.1).
#ifndef _TTolbarFactory_h_ #define _TTolbarFactory_h_ //----------------------------------------------- #include "../JuceLibraryCode/JuceHeader.h" //------------------------------------------------ // "Фабрика" для создания кнопок панели инструментов class TToolbarFactory : public ToolbarItemFactory { public: TToolbarFactory(); ~TToolbarFactory(); // Идентификаторы создаваемых кнопок enum TToolbarItemID { FileNew = 1, FileOpen = 2, FileQuit = 3, ViewOrientation = 4 }; // Задаёт идентификаторы кнопок void getAllToolbarItemIds(Array<int>&); // Задаёт набор кнопок панели инструментов void getDefaultItemSet(Array<int>&); // Создаёт элемент панели инструментов ToolbarItemComponent* createItem(int); // Кнопка "Выход" ToolbarButton* pFileQuitButton; // Кнопка "Новый" ToolbarButton* pFileNewButton; // Кнопка "Открыть" ToolbarButton* pFileOpenButton; // Кнопка "Ориентация" ToolbarButton* pViewOrientationButton; private: // Изображения - пиктограммы кнопок Image ImageExit_png; Image ImageNew_png; Image ImageOpen_png; Image ImageSwitch_png; }; //----------------------------------------- #endifЛистинг 14.1. Объявление класса "фабрики" элементов инструментальной панели TToolbarFactory (файл TToolbarFactory.h)
В качестве члена класса мы создали перечислимый список TToolbarItemID идентификаторов кнопок (в принципе, его можно объявить и вне класса, например, если вы хотите использовать один набор идентификаторов команд для кнопок панели инструментов и пунктов меню). В качестве открытых членов класса мы объявили указатели на кнопки — элементы панели инструментов, а закрытых — добавляемые на их поверхность изображения (класс Image).