Классы виджетов и их иерархия

Этот раздел дает краткий обзор иерархии классов виджетов в Xt и Motif. Глава 2 более детально рассматривает эту иерархию.

Классы Xt

Xt опередляет базовые классы для всех виджетов. Core является фундаментальным классом для всех виджетов, которые имеют окна. Этот класс содержит базовые ресурсы геометрии виджетов, цвета фона, трансляций, и чувствительности ввода. Виджетоподобные объекты, которые не имеют окон - называемые в Motif гадгетами - являются подклассами от RectObj. Этот класс содержит реурсы геометрии, но не содержит цветов и трансляций.

Composite является базовым классом для всех виджетов, которые могут иметь дочерние виджеты. Этот класс поддерживает список своих дочерних виджетов и отвечает за управление их геометрией. Constraint является подклассом от Composite который поддерживает дополнительные данные для каждого дочернего виджета, представляющие ограничивающие ресурсы для дочерних виджетов.

Shell является базовам классом для всех виджетов-оболочек. Оболочки обертывают другие виджеты чьи окна являюся дочерними от корневого окна. Оболочки отвечают за взаимодействие с менеджером окон. Shell является подклассом Composite. Xt содержит следующие подклассы Shell:

OverrideShell

Окружает виджеты, которые менеджер окон должен игнорировать, такие как меню.

WMShell

Суперкласс для оболочек которым необходимо особым образом взаимодействовать с менеджером окон.

VendorShell

Подкласс от WMShell реализующий зависимое от набора компонентов поведение.

TransientShell

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

TopLevelShell

Подкласс от VendorShell для виджет верхнего уровня для компонент приложения.

ApplicationShell

Подкласс от TopLevelShell для виджетов верхнего уровня представляющих приложение как единое целое.

Классы Motif

Motif содержит три обширные группы виджетов: примитивы и гадгеты, менеджеры, оболочки.

Примитивы и гадгеты

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

XmPrimitive используется только как суперкласс для классов с более специализированным поведением. Подклассами примитивов Motif являются следующие:

XmSeparator

Используется для разделения других виджетов. Обычно выглядит как линия.

XmLabel

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

Подклассы XmCascadeButton, XmDrawnButton, XmPushButton и XmToggleButton от XmLabel производят некоторые действия когда активизируются или "нажимаются" пользователем. Подклассы имеют роль активизаторов меню, переключателей, кнопок и маленьких графических областей.

XmScrollBar

Управляет перемещением прокручиваемого горизонтально или вертикально виджета в фиксированной области просмотра.

XmList

Массив текстовых элементов из которого пользователь может выбрать один или более элемент.

XmText

Виджет для отображения и, возможно, редактирования текста. XmText может быть многострочным или ограниченным одной строкой. XmTextField является оптимизированным для одной строки вариантом XmText.

Гадгеты являются вариантами примитивов которые не имеют окон. Гадгеты имеют геометрию, но они наследуют цвета от их родителя и зависят от родителя в части распределения событий для них. XmGadget, подкласс RetObj, является базовым классом для гадгетов. Гадгет варианты существуют для сепараторов, меток и большинства кнопок. XmIconGadget, который отображает как текст так и пиксельные изображения в различных комбинациях, манипулируются виджетом XmContainer.

Смотрите Главу 10 для дополнительной информации о виджетах XmText и XmTextField. Смотрите главу 5 для дополнительной информации о других примитивах.

Менеджеры

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

XmFrame

Окружает свой дочерние виджет тенью и свободным полем.

XmScale

Показывает значение внутри диапазона и дополнительно позволяет пользователю устанавливать новое значение.

XmPanedWindow

Распологает своих потомков, называемых панелями, вертикально или горизонтально (с лева на право или с права на лево, в зависимости от \textbl{XmNorientation}). Может также вставлять управляющий элемент, называемый сэшем, позволяющим пользователю устанавливать размер панелей.

XmScrolledWindow

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

XmMainWindow

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

XmRowColumn

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

XmBulletinBoard

Суперкласс для диалогов, виджетов которые представляют информацию пользователю или получают ее отпользователя. Диалоговым виджетом может быть BulletinBoard, предоставляющий базовое поведение, или специализированный подкласс. Частные подклассы представляют список из которого пользователь может сделать выбор, отображают имена файлов и позволяют пользователю выбратьодин из них, просят пользователя ввести команду и отображают сообщение. Один из подклассов,XmForm, предоставляет обобщенное основанное на ограничениях управление геометнией своих потомков.

XmDrawingArea

Менеджер общего назначения предназначенные для использования в качестве области для выполениения графических операций.

XmContainer

Управляет наборами виджетов определенных видов (обычно IconGadget). Эти дочерние виджеты показываются в нескольких различных форматах расположения, выбираются с использованием различных типов и техники выделения и непосредственно управляются пользователем. Одно из возможных применений Container виджета это построение графического интерфейса пользователя для файловой системы.

XmComboBox

Управляет виджетом текстового поля и виджетом списка. Пользователь может выбрать элемент и ComboBox посредством щелчка на нем в списке или набрав его непосредственно в текстовом поле.

XmSpinBox

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

XmNotebook

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

Оболочки

Motif содержит три класса оболочек:

VendorShell

Специализированная для Motif реализация соответствующего Xt класса. Среди других возможностей управляет взаимодействием с MWM.

XmDialogShell

Подкласс от TransientShell который содержит диалоги. Взаимодействует с BulletinBoard при всплытии и позиционировании временных диалогов.

XmMenuShell

Подкласс от OverrideShell который содержит меню.

Другие классы Motif

Motif использует некоторое кольчество специализированных объектов не предназначенных для использования в создании виджетов. Эти объекты существуют в первую очередь для хранения ресурсов и другой информации которую сложно сделать доступной другим путем. XmDisplay сохраняет ресурсы специфичные для данного дисплея, а XmScreen сохраняет ресурсы специфичные для каждого экрана на котором приложение создает виджеты. Интерфейс drag and drop включает объекты представляющие некоторые аспекты транзакций drag and drop, включая общий контекст, точки выброса, иконки перетаскивания и перенос данных.

В дополнение к объектам Motif предоставляемыми стандартным набором компонентов, ваше приложение может использовать виджеты предоставляемими дркгими производителями. Вы также можете свои собственные виджеты. Смотрите Руководство по написанию виджетов Motif для дополнительной информации.

Файлы заголовков и библиотеки

Xlib, Xt и Motif имеют заголовочные файлы (иниче называемые подключаемыми файлами) которые приложение должно включать в свой код. Однако, заголовочные файлы Motif сами подключают необходимые файлы Xt, которые в свою очередь подключают необходимые файла Xlib. Приложению обычно необходимо подключить только соответствующие файлы Motif.

Все Motif приложения должны подключать файл <Xm/Xm.h>. Этот файл содержит определения, необходимые всем приложениям. Каждый виджет Motif также имеет подключаемый файл. Приложение должно подключить эти заголовочные файлы для всех виджетов, которые оно создает. Дополнительно некоторые группы подпрограмм Motif имеют свои собственные заголовочные файлы. Необходимые подключаемые файлы для каждого виджета и подпрограммы Motif описаны в Справочник программиста Motif.

Вместо использования большого количества заголовочных файлов для конкретных виджетов и подпрограмм приложение может подключить файл <Xm/XmAll.h>. Этот файл объединяет все документированные заголовочные файлы Motif. Подключение <Xm/XmAll.h> может немного замедлить компиляцию; тем не менее его подключение не увеличивает размер результирующего приложения. Другими словами работа редактора связей никак не изменяется в результате подключения <Xm/XmAll.h> вместо подключения индивидуальных заголовочных файлов.

При создании Motif приложения разработчик связать программу с необходимыми библиотеками. Xlib, Xt, набор компонентов Motif и MRM имеют раздельные библиотеки. Приложение которое не использует MRM должно быть связано с библиотеками набора компонентов Motif, Xp, Xext, Xpm, Xt и Xlib. Приложение которое использует MRM должно быть связано с этими библиотеками и дополнительно с библиотекой MRM. Разаработчик также должен связать приложение с дополнительными бибилиотеками, в зависимости от платформы или операционной системы. Проконсультируйтесь у Вашего системного администратора и прочтите документацию производителя для получения дополнительной информации о библиотеках необходимых для Motif приложений.