Стандартные диалоги
Диалоги выбора файлов и директорий
Диалоговые окна для работы с файлами (открытие, сохранение) и директориями, пожалуй, используются чаще всего в современных приложениях. Библиотека 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)
