Строительные блоки: виджеты-примитивы и гадгеты

Виджеты-примитивы являются базовыми элементами для ввода и вывода информации в Motif. Примитивы обычно являются завершающими виджетами иерархии виджетов. Это виджеты не имеют потомков для которых являются родителями. Название примитивы не подразумевает простоты; некоторые примитивы, такие как виджет Text, имеют очень сложное поведение. Примитивами они названы в противоположность менеджерам, виджетам, которые обычно имеют потомков. Они также предлагают базовые компоненты из которых строятся сложные виджеты. Примитивы иногда называют управляющими виджетами.

Класс Motif виджетов XmPrimitive является суперклассом для всех примитивов. XmPrimitive является подклассом от базового класса Xt виджетов Core. Core содержит ресурсы описывающие ширину и высоту виджета, а также x и y координаты виджета отностиельно его родителя. Друге ресурсы Core управляют характеристиками окна, такими как цвет фона; должен или нет виджет принимать события; карты, используемые для трансляции событий в подпрограммы действий виджета.

XmPrimitive добавляет две группы возможностей к классу Core. Одна группа состоит из ресурсов для управления дополнительными визуальными характеристиками, включая характеристики трехмерных теней и прямоугольника подсветки который отображается когда виджет является фокусом для клавиатурного ввода. Вторая группа управляет клавиатурным переходом, использованием клавиатуры для перемещения фокуса с одного виджета на другой. Эта группа включает несколько ресурсов и набор трансляций и действий, позволяющих пользователю перемещать фокус клавиатуры на другой виджет нажатием клавиш со стрелками. XmPrimitive также предоставляет процедуры обратного вызова для обеспечения возможности предоставления приложением справочной информации когда пользователь нажимает osfHelf.

Класс виджетов XmGadget является суперклассом для всех гадгетов. XmGadget является подклассом от Xt класса RectObj. Этот класс предоставляет ресурсы для определения размера и положения прямоугольной области гадгета внутри его родителя. XmGadget является эквивалентом XmPrimitive эа двумя исключениями:

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

Метки и разделители

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

Метки отображают как текст так и пиксельные изображения. Когда метка отображает текст она использует специальную конструкцию, называемую композитной строкой. Это поток, компоненты которого представляют нуль или более частей текста, каждая с соответствующими тегами воспроизведения и направления отображения. Когда Motif отображает композитные строки он сопоставляет каждый тег с тэгом в таблице воспроизведения виджета и исапользует соответствующий шрифт или шрифты, цвета и другие возможности.

Разделители Separator или SeparatorGadget разделяют управляющие элементы или их группы. Он обычно выглядит как горизонтальная или вертикальная линия и поддерживает различные стили рисования линии.

Метки и разделители более подробно описаны в главе 5.

Кнопки

Кнопка представляет основной управляющий элемент который позволяет производить действия при его активизации пользователем. Кнопки обычно используются в меню, группах кнопок RadioBoxes и CheckBoxes, диалоговых формах SelectionBoxes и MessageBoxes. Motif имеет следующие классы кнопок:

С большими подробностями кнопки описаны в главе 5.

Полосы прокрутки

Виджет может действовать как окно просмотра в прокручиваемый элемент. Прокручиваемый элемент это плоскость с текстом, графикой, списком элементов или другим содержимым. Окно просмотра это фиксированного размера окно в котором видно часть прокручиваемого элемента.

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

Более детально полосы прокрутки описаны в главе 5.

Списки

Список (List) это массив текстовых элементов из которого пользователь может выделить один или несколько. Каждый элемент является композитной строкой. Список имеет четыре режима выделения: два из них позволяют пользователю выделять единовременно только один элемент, и оставшихся два позволяют пользователю выделить одновременно более одного элемента как в непрерывном так и в разрывном диапазоне.

Подробнее списки обсуждаются в главе 5.

Текст

Текстовый виджет (Text) предназначен для отображения и, возможно, редактирования текста. Он представляет текст как многобайтные или широкосимвольные строки. Когда виджет является редактируемым и пользователь нажимает клавишу, представляющую текстовый символ, этот символ вставляется в текст. Другие трансляции и действия позволяют пользователю перемещаться или выделять, вырезать, копировать, вставлять или прокручивать текст.

Текст может быть многострочным или ограниченными одной строкой. В однострочном текстовом виджете действия, перемещающие вверх и вниз на одну строку в многострочном виджете, производят переход фокуса на другой виджет, а нажатие osfTab перемещает клавиатурный фокус на другую группу виджетов вместо вставки символа табуляции /textit{Tab}.

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

Дополнительно текстовые виджеты описаны в главах 5 и 10.