Виджеты-примитивы являются базовыми элементами для ввода и вывода информации в 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 имеет следующие классы кнопок:
Кнопки CascadeButton и CascadeButtonGadget используются внутри меню и когда активизируются обычно отображают выпадающие меню (PulldownMenu).
Кнопки PushButton и PushButtonGadget могут использоваться как внутри меню так и вне его. Они позволяют выполнять некоторые действия определяемые приложением. Когда кнопка PushButton нажимается или становится готовой к активизации она изменяет свой внешний вид так что пользователь видит что нажал ее. Когда она отпускается, она возвращает внешний вид как будто отжата.
Кнопки-переключатели ToggleButton и ToggleButtonGadget имеют различные состояния: аналогично переключателям они бывают либо включенными либо выключенными. Они используются в меню или в режимах WorkArea менеджера RowColumn, включая RadioBoxes и CheckBoxes. Они также могут иметь неопределенное состояние.
Кнопка DrawnButton является пустой кнопкой, окруженной рамкой тени. Она предназначена для использования как кнопка PushButton но с изображением, отрисовываемым приложением.
С большими подробностями кнопки описаны в главе 5.
Виджет может действовать как окно просмотра в прокручиваемый элемент. Прокручиваемый элемент это плоскость с текстом, графикой, списком элементов или другим содержимым. Окно просмотра это фиксированного размера окно в котором видно часть прокручиваемого элемента.
Полоса прокрутки (ScrollBar) является управляющим элементом, который перемещает область просмотра горизонтально или вертикально относительно прокручиваемого элемента. Полоса прокрутки состоит из прямоугольнока, называемого прокручиваемой областью, представляющей полный размер прокручиваемого элемента. Она имеет маленький прямоугольник, называемый бегунком, внутри прокручиваемой области, представляющий положение и размер области просмотра относительно полного размера прокручиваемого элемента. Полоса прокрутки обычно содержит изображения стрелок на обоих концах большего прямоугольника.
Более детально полосы прокрутки описаны в главе 5.
Список (List) это массив текстовых элементов из которого пользователь может выделить один или несколько. Каждый элемент является композитной строкой. Список имеет четыре режима выделения: два из них позволяют пользователю выделять единовременно только один элемент, и оставшихся два позволяют пользователю выделить одновременно более одного элемента как в непрерывном так и в разрывном диапазоне.
Подробнее списки обсуждаются в главе 5.
Текстовый виджет (Text) предназначен для отображения и, возможно, редактирования текста. Он представляет текст как многобайтные или широкосимвольные строки. Когда виджет является редактируемым и пользователь нажимает клавишу, представляющую текстовый символ, этот символ вставляется в текст. Другие трансляции и действия позволяют пользователю перемещаться или выделять, вырезать, копировать, вставлять или прокручивать текст.
Текст может быть многострочным или ограниченными одной строкой. В однострочном текстовом виджете действия, перемещающие вверх и вниз на одну строку в многострочном виджете, производят переход фокуса на другой виджет, а нажатие osfTab перемещает клавиатурный фокус на другую группу виджетов вместо вставки символа табуляции /textit{Tab}.
Виджет TextField абсолютно аналогичен виджету Text в однострочном режиме, за исключением токо, что он оптимизирован по производительности для выполнения однострочных операций.
Дополнительно текстовые виджеты описаны в главах 5 и 10.