Стандартные диалоги
Диалоги выбора файлов и директорий
Диалоговые окна для работы с файлами (открытие, сохранение) и директориями, пожалуй, используются чаще всего в современных приложениях. Библиотека Juce включает несколько компонентов для выбора файлов и каталогов; рассмотрим те из них, которые используются в качестве заготовок для создания диалоговых окон.
FilenameComponent реализует диалог, представляющий собой редактируемое поле ввода с кнопкой для "обзора" файлов, имеющихся в директории, а также с выпадающим списком ранее открытых файлов ( рис. 17.4 ).
Для отображения виджета FilenameComponent мы используем "обёртку" - объект класса DialogWindow.
Рассмотрим использование компонента на примере программы, в которой пользователь с помощью диалогового окна выбирает тот или иной файл, который сохраняется в переменной File ObtainedFile, и имя которого отображается в окне программы ( рис. 17.4).
Рассмотрим реализацию компонента содержимого нашего примера ( пример 17.2).
#include "TCentralComponent.h" //------------------------------------------ #define tr(s) String::fromUTF8(s) //------------------------------------------ TCentralComponent::TCentralComponent() : Component("Central Component"), pNameLabel(0), pChooseButton(0) { // Ярлык для показа имени открытого файла pNameLabel = new Label(L"Name Label", tr("Выберите файл...")); pNameLabel->setFont(Font(15.0000f, Font::bold)); pNameLabel->setJustificationType(Justification::centred); pNameLabel->setEditable(false, false, false); pNameLabel->setColour(Label::textColourId, Colours::black); pNameLabel->setColour(Label::backgroundColourId, Colours::azure); pNameLabel->setColour(Label::outlineColourId, Colours::black); addAndMakeVisible(pNameLabel); // Кнопка для вызова диалога открытия файла pChooseButton = new TextButton(L"Choose Button"); pChooseButton->setButtonText(tr("Выбрать...")); pChooseButton->addListener(this); addAndMakeVisible(pChooseButton); setSize (400, 150); } //----------------------------------------------- TCentralComponent::~TCentralComponent() { // Удаляем дочерние виджеты // и обнуляем их указатели deleteAllChildren(); } //------------------------------------------------ void TCentralComponent::paint(Graphics& Canvas) { Canvas.fillAll(Colours::azure); } //------------------------------------------------ void TCentralComponent::resized() { pNameLabel->setBounds(10, 10, getWidth() - 20, 25); pChooseButton->setBounds(proportionOfWidth(0.5000f) - ((150) / 2), proportionOfHeight(0.5000f) - ((25) / 2), 150, 25); } //------------------------------------------------- void TCentralComponent::buttonClicked(Button* pButton) { if(pButton == pChooseButton) { // Создаём компонент для выбора файла FilenameComponent* pFileNameDialog = new FilenameComponent( String::empty, ObtainedFile, true, false, false, String::empty, String::empty, tr("Выберите файл...") ); // Задаём его размер (иначе его не будет видно) pFileNameDialog->setSize(250, 25); // Создаём "обёртку" для показа диалога... DialogWindow::showModalDialog(tr("Выбор файла"), pFileNameDialog, NULL, Colours::azure, true, false, false); // Когда файл открыт... ObtainedFile = pFileNameDialog->getCurrentFile(); // проверяем, существует ли он if(!(ObtainedFile == File::nonexistent)) { // Выводим на ярлык название файла pNameLabel->setText(ObtainedFile.getFileName(), false); } else { pNameLabel->setText(tr("Файл не выбран!"), false); } if(pFileNameDialog) delete pFileNameDialog; } } //--------------------------------------------------------------Листинг 17.2. Реализация класса компонента содержимого TCentralComponent (файл TCentralComponent.cpp)