3.1.1. Что такое обьекты Xt.

    Как мы уже упоминали ранее, пакет представляет собой базу для создания управляющих элементов (widget). В смысле Xt widget - это просто структура данных, поля которой включают идентификатор самого элемента, идентификатор его окна, если таковое имеется, и многое другое. Атрибуты такого объекта называются ресурсами. Ресурсами widget могут быть, например, цвет фона его окна, шрифт выводимого текста, цвет границы окна и т.д.

    Каждый объект принадлежит к одному из предопределенных классов (widget class). Класс можно рассматривать как множество экземпляров (объектов), имеющих одинаковые характеристики. Классы Xt образуют иерархию (см. подробнее 3.2.1.).

    Во время работы программа создает сами объекты (экземпляры классов - widget). Они образуют совокупности, каждая из которых также представляет собой некоторую иерархию. Каждая такая иерархия называется деревом объектов (widget tree). Корнем дерева обязательно является widget, принадлежащий к одному из подклассов специального класса - Shell (в дальнейшем, говоря о таких объектах, мы иногда будет употреблять термин "shell-объект" или "shell-widget"). Если среди двух widget A и B дерева объектов первый ближе к корню, чем второй, то A является родительским объектом ("родителем") для B, а B есть подобъект (или "дочерний" объект, иногда также мы будем использовать термин "потомок") для A. Таким образом shell-объект является родительским widget для всех остальных widget данного дерева объектов. Именно он осуществляет взаимодействие программы и менеджера окон.

    Описанная иерархия widget соответствует взаимосвязи их окон, что является свойством X Window. Кроне этого, на объекты накладывается и другая иерархическая структура. Дело в том, что во время функционирования одни объекты могут управлять другими. Например, если объект A имеет два подобъекта B и C, то при изменении размеров A последний может автоматически перестроить B и C. Для того, чтобы это могло осуществиться, между widget устанавливается связь - связь "по управлению". Каждый объект может иметь один или несколько "управляемых" (managed) подобъектов.

    Теперь рассмотрим, как программа, использующая Xt, вэаимодействует с widget и X Window. Предусмотрены три механизма.

    Первый из них - процедуры обратного вызова (callback-процедуры или просто callback). Для любого класса определена совокупность действий, на которые должны реагировать принадлежащие ему объекты. Так, для любого класса предусмотрена реакция на уничтожение widget. Когда действие производится, происходит вызов либо стандартной функции Xt либо одной или нескольких процедур, предоставляемых программой. Такие функции и называются callback-процедурами.

    Второй способ взаимодействия - action-процедуры. Программа может заказать реакцию на то или иное событие (или группу событий), приходящее от X. Если событие происходит, Xt осуществляет поиск и вызов соответствующей функции.

    Третий механизм - обработчики событий (event handler). Этот способ аналогичен предыдущему, только более быстр в ущерб гибкости. Он позволяет реагировать только на единичные события, но не на их последовательности. Более подробно об указанных механизмах и способах их использования будет рассказано ниже.