Описание интерфейса имеет структуру вложенных друг в друга окружений. Документ может как включать в себя окружения из других файлов,
с помощью инструкции (document:insert), так и вставлять себя в другие окружения с помощью инструкции (document:surround).
Возможно создание новых окружений прямо в документе с помощью
инструкций (document:envelop) и (document:end-envelop). Последнюю инструкцию можно не использовать – окружение автоматически закроется
на границе текущего (например в конце файла)
Каждое окружение можно рассматривать как область действия локальных переменных. Вы видите все определения в охватывающем окружении, но не видите переменных во вложенных окружениях, если они находятся ниже по тексту.
Особый случай – включение самостоятельного документа в данный
как в «рамку» – (document:subdocument). Включаемый документ, не знает о том что он находится в каком-то другом документе.
Главный документ не знает о включаемом ничего, ктоме того что тот предоставляет некоторый «корневой» виджет.
В примере выше документу передавались глобальные параметры, доступ к ним осуществляется
с помощью инструкции (global)
Отдельные элементы документа могут именоваться с помощью инструкции (document:id), позже по заданному идентификатору может производиться изменение свойств элементов.
Выше дано было описание «статической» структуры документа, но на этом возможности не ограничиваются.
Можно заменить содержимое документа другим с помощью (document:replace). Можно запустить диалог, содержащий требуемый документ инструкцией (document:popup). Завершается этот диалог – командой (document:end).
Конструкции document:* описывают общую структуру документа, из каких же элементов он состоит?
Документ состоит из «представлений», каждое представление соответствует тому или иному виджету.
Представление определяется с помощью инструкции (with-presentations), где задаётся – имя представления, «ключевое слово» по которому будет распознаваться
как именно надо отображать это представление, аттрибуты представления по-умолчанию.
Каждое представление обладает определёнными аттрибутами. Аттрибут задаются с помощью инструкции (with-attributes), где задаётся – имя аттрибута, количество обязательных параметров (по-умолчанию оно равно 1).
Аттрибуты и их значения перечисляются в форме
(<представление> <аттрибут> <параметры> <аттрибут> ...)
Если хочется задать аттрибут с количеством параметров, превышающим обязательное число, то
необходимо заключить его в скобки в месте со всеми желаемыми параметры:
(<представление> (<аттрибут> <большое количество параметров>) ... )
Кроме того в представлении могут задаваться отложенные действия при возникновении тех или иных внешних событий, например при щелчке мышью.
Запрос значений аттрибутов производится с помощью конструкции:
(<идентификатор элемента-представления> <аттрибут с недостаточным количеством параметров>)
Изменение значения:
(<идентификатор> <аттрибут с более чем достаточным количеством параметров>)
Обработчики событий – те же аттрибуты, но несущие в качестве содержимого фунции, вызываемые при возникновении каких-либо событий, например, при нажатии на кнопку.
Создаётся функция обработки при помощи функции make-callback,
возможна более удобная запись с помощью конструкции when.
Следующие две записи эквивалентны:
Возможно «программно» вызывать обработчики событий, принцип такой же как и при получении значения аттрибутута:
(<идентификатор> <событие>)
Пример:
Также возможно определение ключевых слов, кои по сути являются просто более удобной формой записи символов,
Задаются ключевые слова с помощью инструкции (with-keywords)
Ну и наконец последняя не рассмотренная возможность – создание мета-аттрибутов. Иногда часто требуется выполнить комплексные действия над аттрибутами, например для listbox часто требуется получить его элементы и определнить их количество, или после получения элементов
произвести из них какую-то выборку, или изменить какие-то части сложных аттрибутов (иконка элемента). Для удобства обслуживания такой ситуации можно ввести аттрибуты высокого уровня, которые будут внешне выглядеть как обычные аттрибуты, а на-самом деле «неявно» производить достаточно сложные действия
Определяются мета-аттрибуты инструкцией (with-meta-attributes), где задаётся: имя аттрибута, количество обязательных параметров (по-умолчанию 1), мета-методы при «запросе» или «изменении».
Мета-методы задаются в форме методов объектов.
Основые часто используемые в alterator представления, аттрибуты, мета-аттрибуты и ключевые слова, определены в документе /std/base который настоятельно рекомендуется посмотреть для изучения того как работает система описания интерфейсовю.