Опубликован: 13.07.2012 | Доступ: свободный | Студентов: 460 / 8 | Оценка: 5.00 / 5.00 | Длительность: 18:06:00
Специальности: Программист
Лекция 8:

Ввод и отображение текстовой информации

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Аннотация: В этой лекции вы познакомитесь с компонентами ввода и отображения текстовой информации (классы Label, TextEditor и CodeEditorComponent)

Цель лекции: Научиться применять компоненты ввода и отображения текстовой информации

В библиотеке Juce имеется немного компонентов, позволяющих отображать, вводить и редактировать текстовую информацию. Связано это с тем, что, во-первых, в отличие от других GUI toolkit'ов компоненты Juce обладают внушительным числом свойств и могут использоваться с различными целями: например, уже знакомый нам класс Label может использоваться не только для отображения текста, но и для пользовательского ввода; класс TextEditor, в зависимости от программных настроек, может выступать и как однострочное, и многострочное поле редактирования и т.п. Во-вторых, Juce обладает богатыми возможностями рисования, в том числе вывода текста (см. "Рисование на канве компонентов" ). Рисовать можно не только на любом визуальном компоненте, но и на полосе заголовка главного окна, что выгодно отличает Juce от других кроссплатформенных библиотек.

Ниже приведён перечень классов компонентов Juce, ориентированных на ввод и отображение текста с их краткими характеристиками:

  • Label (метка, ярлык) — класс преимущественно отвечает за отображение текста, который не изменятся пользователем. Но в зависимости от настроек может отображать и редактируемый текст (переход в режим редактирования, в зависимости от выбора программиста, возможен как по одинарному, так и по двойному щелчку мышью).
  • TextEditor (текстовый редактор) — класс с довольно богатыми возможностями. В зависимости от настроек объект этого класса может вступать как
    • компонент для отображения, ввода и редактирования однострочных текстов;
    • поле для ввода символов в соответствии с шаблоном (окно ввода пароля, окно для ввода цифр и т.п.);
    • компонент для отображения, ввода и редактирования многострочных текстов.
  • CodeEditorComponent – компонент текстовый редактор, ориентированный на отображение исходного кода программы в соответствии с заданным шаблоном.

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

Возможность редактирования надписи ярлыка задаётся методом void Label::setEditable(bool editOnSingleClick, bool editOnDoubleClick = false, bool lossOfFocusDiscardsChanges = false). В случае, если параметр lossOfFocusDiscardsChanges принимает значение true, то щелчок мышью где-либо во время редактирования ярлыка, отменяет внесённые в текст изменения.

Текст, отображаемый компонентом класса Label, имеет тип строки String и задаётся в конструкторе Label::Label(const String& componentName = String::empty, const String& labelText = String::empty), где componentName — название ярлыка, необходимое для нужд отладки, а labelText — отображаемая надпись. Кроме того, задать текст ярлыка можно с помощью функции void Label::setText(const String& newText, bool broadcastChangeMessage), где newText — новый текст. Второй параметр необходим для генерации сообщения об измнении текста ярлыка (в том случае, если он принимает значение true), однако в большинстве случаев ему можно присвоить значение false.

Получить текущий текст ярлыка можно с помощью метода const String Label::getText(bool returnActiveEditorContents = false) const. Принимаемый параметр необходим лишь в том случае, если ярлык находится в стадии редактирования текста пользователем. Если параметр принимает значение true, функция возвращает текст, отображаемый ярлыком на момент её вызова. В том случае, если параметр принимает значение false, функция вернёт текст не раньше, чем пользователь закончит его набор и нажмёт клавишу <ENTER>. В том случае, если возможность редактирования надписи запрещена, принимаемый функцией параметр неважен.

Для ввода в ярлык смешанной информации, например, строк и цифр, необходимо воспользоваться оператором или методом склеивания (конкатенации) строк класса String, а также возможностями его конструктора. Например, если в программе есть целочисленная переменная iWorkers, отображающая число рабочих некоего предприятия, то вывести информацию об этом можно следующим образом ( пример 8.1):

Label* pWorkersLabel = new Label("WorkersLabel");
String sWorkers = String(T("Число рабочих: ")) += String(iWorkers);
pWorkersLabel->setText(sWorkers, false);
Листинг 8.1. Пример преобразования целочисленной переменной для вывода информации в текстовую надпись

Каждый ярлык имеет следующие цветовые характеристики: цвет границы, цвет фона и цвет отображаемого текста. Тот или иной цвет задаётся методом, наследуемым классом Label от Component, void Component::setColour(int colourId, const Colour& colour). Первый параметр, принимаемый функцией, показывает, какой именно цвет (границы, фона или текста) ярлыка следует изменить, а второй задаёт собственно этот цвет.

Значения ID цвета можно задавать с помощью элементов нумерованного списка, входящего в состав класса Label: enum ColourIds {backgroundColourId = 0x1000280, textColourId = 0x1000281, outlineColourId = 0x1000282} (цвет фона, текста и внешней границы надписи, соответственно).

Кроме того, оформление надписи можно изменить, задав характеристики шрифта, Font (см. "Шрифты и строки" ). Новый шрифт ярлыка задаётся методом void Label::setFont(const Font& newFont). Получить текущий шрифт надписи можно с помощью функции const Font& Label::getFont() const throw().

Выравнивание текста надписи относительно границ компонента осуществляет его метод void Label::setJustificationType(const Justification& justification). Характер выравнивания задаётся объектом класса Justification, который включает в себя нумерованный список

enum
{ 
  left = 1, right = 2, horizontallyCentred = 4, top = 8, 
  bottom = 16, verticallyCentred = 32, horizontallyJustified = 64, centred = 36, 
  centredLeft = 33, centredRight = 34, centredTop = 12, centredBottom = 20, 
  topLeft = 9, topRight = 10, bottomLeft = 17, bottomRight = 18 
}

Элементы списка — флаги выравнивания — могут комбинироваться между собой. Их значения приведены ниже:

  • left — флаг означает, что объект (в нашем случае текст ярлыка) должен быть выровнен по левому краю доступного пространства компонента;
  • right — по правому краю;
  • horizontallyCentred - объект (текст) должен быть выровнен по горизонтали между левым и правым краями краю доступного пространства компонента;
  • top — по верхему краю;
  • bottom — по нижнему краю;
  • verticallyCentred — объект (текст) должен быть выровнен по вертикали (между верхним и нижним краями ярлыка)
  • horizontallyJustified — флаг показывает, что текст должен быть растянут таким образом, чтобы заполнить всё доступное пространство между правым и левым краями ярлыка;
  • centred — выровнен как по вертикали, так и по горизонтали;
  • centredLeft — объект должен быть выровнен по вертикали; по горизонтали текст выравнивается по левому краю;
  • centredRight — то же, но горизонтальное выравнивание — по правому краю;
  • centredTop — по горизонтали текст выровнен по центру, по вертикали — у верхнего края ярлыка;
  • centredBottom — то же, но вертикальное выравнивание — по нижнему краю компонента;
  • topLeft — показывает, что объект должен быть размещён в верхне-левом углу компонента;
  • topRight — в верхнем правом углу;
  • bottomLeft — в нижнем левом углу;
  • bottomRight — в нижнем правом углу.

Размещение ярлыка в компоненте-контейнере (обычно это компонент содержимого), определяется свойствами и методами, наследуемыми от класса Component (см. "Компонентная модель Juce. Общие свойства компонентов" ).

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >