Менеджеры это виджеты которые обычно содержат другие виджеты, как примитивы так и другие менеджеры. С одной стороны менеджеры отвечают за расположение и форму их потомков в соответствии с конфигурацией потомков и в зависимости от специализированного назначения менеджера. С другой стороны они отвечают да определение когда их гадгет потомок должен обработать событие ввода и если должен то диспетчеризовать событие этому потомку.
Класс Motif виджетов XmManager является суперклассом для всех менеджеров. XmManager является подклассом от Core. Аналогично XmPrimitive XmManager содержит ресурсы для управления цветом или пиксельным изображением используемыми для изображения, теней и прямоугольника подсветки. Большинство менеджеров не имеют тени или прямоугольника подсветки, но гадгет потомки наследуют эти параметры. Менеджеры также имеют ресурсы для управления клавиатурным переходом и они предоставляют процедуры обратного вызова для обработки запроса пользователя на помощь. В дополнение они содержат трансляции и действия для диспетчеризации событий ввода для гадгет потомков, обычно для потомки содержащего текущий фокус клавиатурных событий.
XmManager не может использоваться для создания экземпляров в программе, он предназначен только для использования в качестве суперкласса для других классов виджетов. Motif содержит несколько специализированных подклассов менеджеров, обобщаемых в последующих разделах.
Рамка (Frame) это простой менеджер который окружает единственного потомка тенью и свободным полем. Рамка также может иметь другого потомка который отображается как название рамки.
Рамки более подробно описываются в главе 8.
Регуляторы (Scale) это менеджеры, выполняющие функции управляющих элементов. Они отображают значение в пределах некоторого диапазона и дополнительно позволяют пользователю установить новое значение. Их внешний вид и поведение аналогичны полосе прокрутки без стрелочек. Они также имеют заголовок и могут отображать текущее значение рядом с бегунком. Если приложение добавит дополнительные потомки к регулятору, то он расположит их строго напротив прямоугольной области представляющей даипазон значений, и эти потомки могут быть использоваться как щкалы или метки значений.
Подробнее регуляторы рассмотрены в главе 5.
Окна панелей (PanedWindow) распологают своих потомков вертикально сверху вниз или горизонтально и устанавливают всем им одинаковую ширину. Каждый потомок является панелью. Между каждой парой парелей окно панелей вставляет необязательный разделитель и орган управления называемый сэшем. Манипулируя сэшем с помощью мыши или клавиатуры пользователь может увеличить или уменьшить высоту примыкающих панелей. Окно панелей содержит ресурсы для для управления свободых полей, пробелов между панелями и внешним видом сэша. Каждая панель окна панелей содержит ресурсы указывающие максимальную и минимальную высоту и может или нет панель самостоятельно, иначе говоря должно ли окно панелей позволять, изменять размер без вмешательства пользователя.
Дополнительную информацию об окнах пнелей можно найти в главе 8.
Окна прокрутки (ScrolledWindow) управляют окном просмотра и полосами прокрутки для реализации окна в виртуальный прокручиваемый элемент. Пользователь может перемещать окно просмотра для отображения различных частей прокручиваемого элемента с использованием полос прокрутки или клавиатурных команд прокрутки.
Окно прокрутки способно автоматически проиводить операции прокрутки. В этом режиме приложение создает виджет, который представляет прокручиваемый элемент, как потомкаокна прокрутки. Окно прокрутки затем создает окно отсечения для выполнения функций окна просмотра, создает и берет на управление полосы прокрутки и изменяет содержимое окна просмотра в ответ на команды прокрутки выдаваемые пользователем.
Окно прокрутки также может позволять приложению выполнять операции прокрутки. В этом режиме приложени само может создать и взять на управление полосы прокрутки и должно изменять содержимое окна просмотра в ответ на действия пользователя.
Списки и текстовые виджеты обычно используются в качестве прокручиваемых элементов. Motif содержит соответствующие процедуры для создания списков и тескстовых виджетов внутри окна прокрутки, о получающиеся прокручиваемые списки (ScrolledList) и прокручиваемые текстовые (ScrolledText) виджеты выполняющие операции прокрутки без участия приложения.
Главное окно (MainWindow) является подклассом окна прокрутки которое предназначено для использвание как главное окно приложения. В дополнение к окну просмотра и полосам прокрутки главное окно содержит необязательные полосу меню (MenuBar), командное окно и окно сообщений.
Более подробно виджеты Окно Прокрутки и Главное окно описываются в главе 8.
Строки-Столбцы (RowColumn) реализуют как меню так и Рабочие Области (WorkAreas). Меню это виджеты которые позволяют пользователю сделать выбор из действий или состояний. Motif поддерживает четые базовые вида меню:
Полоса меню (MenuBar) обычно используется в Главном Окне приложения и иногда в других компонентах. Чаще всего она состоит из строки Каскадных Кнопок которые, когда активизируются, вызывают появление Выпадающих Меню.
Всплывающие меню (PopupMenu) состоит из набора выборов который применим к некоторой компоненте приложения. Меню не видимы пока пользователь не выполнит действия которые вызовут вывод меню. Оно может содержать кнопки которые непосредственно выполняют действия или Каскадные Кнопки для вызова появления Выпадающих Меню.
Выпадающие меню связываются с Каскадными Кнопками в Полосах Меню, Всплывающих Меню или других Выпадающих Меню. Эти меню также не видны пока пользователь не вызовет их появления активизацией связанной Каскадной Кнопкой. Аналогично Всплывающим Меню, Выпадающие Меню могут содержать кнопки которые выполняют непосредственные действия или Каскадные Кнопки которые вызывают появление других Выпадающих Меню.
Меню Опций позволяют пользователю делать выброр из одного набора выборов, обычно являющихся уникальными атрибутами или состояниями. Оно состоит из метки, Гадгета Каскадной Кнопки чья метка отображает текущую выбранную опцию, и Выпадающего Меню содержащего кнопки которые представляют набор параметров.
Одно из применений режима Рабочей Области виджета Строки-Столбцы состоит в содержании набора кнопок ToggleButton для образования наборов кнопок RadioBox и CheckBox. Когда пользователь выберет кнопку ToggleButton ее состояние изменится с включено на выключено или с выключено на включено. Другим применением является расположение некоторого набора виджетов в строки, колонки и двухмерные структуры.
RowColumn описан более подробно в главе 6.
Диалоги являются контейнерными виджетами которые предоставляют возможности взаимодействия между пользователем и приложением. Диалоговый виджет обычно задает вопрос или представляет некоторую информацию для пользователя. В некоторых случаях приложение останавливает свое выполнение до тех пор, пока пользователь не предоставит ответ.
Обычно суперклассом для диалоговых виджетов является XmBulletinBoard. Диалоговый виджет может быть как непосредственно BulletinBoard, так и одним из более специализированных подклассов. BulletinBoard является контейнером без автоматически создаваемых потомков, он предоставляет обобщенное поведение необходимое для большинства диалогов. Его подклассы предоставляют дочерние виджеты и специфическое поведение специфичное для некоторых типов диалогов:
SelectionBox (Поле Выбора) является подклассом BulletinBoard который позволяет пользователю сделать выбор из списка вариантов. Он обычно содержит список, редактируемое текстовое поле отображающее выбор и три или четыре кнопки для принятия или отмены выбранного варианта и вызова справочной информации.
FileSelectionBox (Поле Выбора Файла) является специализированным подклассом SelectionBox для выбора файла из каталога. Он состоит два текстовых поля, одно из которых содержит шаблон поиска файла, другое содержит имя выбранного файла; два списка, один отображающий имена файлов, а другой - имена подкаталогов; и набор кнопок.
Command (Команда) является специализированным SelectionBox для ввода команд. Его основными составляющими являются текстовое поле для редактирования команд и список представляющий историю введенных команд.
MessageBox (Поле Сообщений) представляет подкласс BulletinBoard для отображения сообщений для пользователя. Он обычно содержит символ сообщения, текст сообщения и до трех кнопок. Motif предоставляет индивидуальные символы для различных видов сообщений: ошибок, предупреждений, информации, вопросов и оповещении о занятости приложения.
TemplateDialog является специализированным MessageBox который позволяет приложению создавать собственные диалоги с дополнительными потомками, такими как полосы меню и дополнительными кнопками.
Form является подклассом BulletinBoard позволяющим производить основанное на ограничениях управление геометрией. Потомки Form имеют ресурсы, представляющие привязку к другим потомкам или самой форме, смещения относительно привязки и относительное положение внутри формы. Form вычисляет положение и размер своих потомков частично основываясь на этих ограничениях. Эта функция расположения потомков делает Form часто применяемым и вне диалогов.
Диалоги описываются более подробно в Главе 7.
DrawingArea является менеджером предназначенным для использования в качестве области, содержащей графические объекты. Приложение должно взаимодействовать с DrawingArea на значительно более низком уровне чем с другими Motif виджетами, но DrawingArea предоставляет приложения более мелкоуровневую информацию о событиях. DrawingArea содержит процедуры обратного вызова для оповещения приложения когда выставляется или изменяет размер и когда он принимает ввод с клавиатуры или от мыши. Приложение обычно должно использовать подпрограммы Xlib для отрисовки в DrawingArea и приложение отвечает за обновление содержимого когда это необходимо. Гибкость DrawingArea делает его часто используемым видетом для реализации как графических так и текстовых возможностей, не предоставляемых другими Motif виджетами.
DrawingArea описывается более подробно в Главе 15.
Виджет ComboBox совмещает возможности виджета TextField и виджета List. Он позволяет пользователю вводить информацию через TextField и также предоставляет список возможных значений через List для завершения ввода в текстовое поле. Приложение предоставляет массив композитных строк которые заполняют этот список и также устанавливет количество видимых элементов списка. Если в списке содержится большее число элементов чем может быть видно (определяется значением ресурса \textbl{XmNvisibleItemCount}), то отображается вертикальная полоса прокрутки позволяющая пользователю прокручивать содержимое списка. Список может отображаться все время, или он может выводиться пользователем посредством нажатия на кнопку вниз при "выпадающем вниз" стиле ComboBox.
Текстовое поле в ComboBox может быть редактируемым или нередактируемым. Если TextField является редактируемым, то пользователь может непосредственно произвести набор в поле для ввода вюбора. Если оно не редактируемо, то печать текста может вызвать алгоритм поиска который позволит сделать выбор из списка используя символы, набранные пользователем. В обоих случаях элемент списка может быть выбран с помощью клавиатуры или мыши. Когда элемент является выбранным, он отображается в реверсных цветах и списке и отображается в текстовом поле ComboBox.
ComboBox более подробно описан в Главе 6.
SpinBox это менеджер, основным назначением которого является управление. Он создает пару стрелок которые могут использоваться для перебора значений из некоторого набора. Значения, которые обычно связаны но взамино исключающи, отображаются последовательно по одной в одно время в единственном текстовом поле. Значения могут быть диапазоном числовых значений или упорядоченным списком композитных строк. Кнопки стрелок позволяют пользователю продвигаться вперед или возвращаться назад между значениями пока не будет выбрано желаемое значение.
SimpleSpinBox является "готовым к использованию" подклассом от SpinBox. Текстовое поле для SimpleSpinBox создается автоматически.
SpinBox и SimpleSpinBox более подробно описаны в Главе 6.
Container является менеджером, который принимает потомков только класса XmIconGadget или его подклассов. Он выстраивает этох потомков в различных форматах и просматривать в зависимости от установок их ресурсов, и позволяющий производить выделение и манипулирование потомками.
Более подробно Container описан в Главе 8.
Notebook является менеджером который отображает только одного потомка в одно время. Каждый потомок имеет назначенный ему номер страницы в Notebook и отображается пользователем посредством нажатия клавиши табуляции или прокрутчиков странжиц в Notebook.
Подробнее Notebook описан в главе 8.