pc.uz
Поиск
Расширенный поиск
РегистрацияЗабыли пароль? Запомнить
Товары Каталог компаний Публикации Объявления События Полезные сервисы Наши вакансии
Воскресенье, 20 января 2019 г.
USD: 8356.18   EUR: 9582.03
Версия для печати
2006-03-29 00:00:00

Спецификация формата ресурсов XRC

!!!!! ЕЩЕ НЕ ОКОНЧАТЕЛЬНАЯ !!!!!

XRC - основанная на XML технология построения мультиплатформеных GUI. К сожалению, документация по этому вопросу на русском языке практически отсутствует. Поэтому приходится действовать по принципу "сделай сам". Отсюда - этот перевод спецификации формата XRC.

Англоязычный оригинал взят с сайта cvs.wxwidgets.org. Его последняя на момент перевода (26.03.2006) версия: v 1.21 2006/02/08 13:33:55 VZ Exp. По адресу http://cvs.wxwidgets.org/viewcvs.cgi/wxWidgets/docs/tech/tn0014.txt Вы можете найти список всех версий спецификации и скачать любую из них (на английском языке). В том числе и текущую.

В случае обнаружения ляпов в переводе, сообщайте о них на форуме. Буду очень благодарен.

Дмитрий Скоробогатов

0. Введение

Этот документ описывает формат файла, используемого для хранения XRC ресурсов, которые используются классом wxXmlResource. Вероятно, это полезно только для тех, кто создает диалоговые редакторы с поддержкой XRC.

Если Вы хотите только использовать ресурсы, Вы можете выбрать из множества редакторов:

a) wxDesigner (http://www.roebling.de)
b) XRCed (wxPython/tools)
c) DialogBlocks (wxPython/tools)

и других, перечисленных в разделе "Ресурсы" вебсайта wxWidgets.

Формат XRC основан на XML 1.0 (пожалуйста смотрите спецификацию от W3C). Для этого формата нет никакого DTD-определения, так как его невозможно полностью описать ограниченными выразительными средствами DTD.

Сноска: см. также http://ldaptool.sourceforge.net/XRCGuide/XRCGuideSingle/

1. Терминология

Применяется обычная терминология XML. В частности мы будем использовать термины УЗЕЛ, СВОЙСТВО и ЗНАЧЕНИЕ в смысле XML:

<узел свойство1="значение1" свойство2="значение2">...</узел>

Термин АТРИБУТ является специфическим для XRC и обозначает подузел для узла <object> или <object_ref>, который сам не является узлом <object> или <object_ref>. В примере ниже <pos>, <label> и <style> - атрибуты, в то время как ни <resource> и ни один из <object> атрибутами не являются:

<?xml version="1.0" encoding="utf-8">
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
    <object class="wxPanel">
        <style>wxSUNKEN_BORDER</style>             <!-- атрибут -->
        <object class="wxStaticText">
            <label>A label</label>                 <!-- атрибут -->
            <pos>10,10</pos>                       <!-- атрибут -->
        </object>
    </object>
</resource>

ЗНАЧЕНИЕ АТРИБУТА - содержание всех текстовых элементов в пределах тэга атрибута. В примере выше, "wxSUNKEN_BORDER", "A label" и "10,10" - значения атрибутов.
ТИП АТРИБУТА определяет, какие значения атрибутов допустимы для данного атрибута (Вы можете думать об этом как об определении синтаксиса значения атрибута).

2. Элементарное описание

Файл ресурса XRC - правильно построенный документ XML. Все элементы файла XRC принадлежат пространству имен http://www.wxwidgets.org/wxxrc.

Корневым узлом документа XRC должен быть <resource> (ресурс). Узел <resource> имеет дополнительное свойство "version" (версия). Версия по умолчанию - "0.0.0.0" (когда свойство "version" не указано). Версия состоит из четырех целых чисел, разделенных точками периода. Версия формата XRC изменяется, только если имело место несовместимое изменение библиотеки (то есть когда библиотека текущей версии не может понять старые ресурс-файлы или старшие версии библиотеки не поняли бы новый формат). Первые три целых числа являются главными и указывают номер релиза wxWidgets, в котором произошло изменение, последнее число - номер пересмотра и равно 0 для первого несовместимого изменения в данном релизе wxWidgets, 1 для второго и т.д.

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

Узел <resource> содержит также объявление пространства имен:

<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">

Узел <resource> может содержать только подузлы <object> (объект) и <object_ref>, все из которых должны иметь свойство "name" (имя).

Узел <object> представляет единственный объект (элемент GUI), и обычно его принимают за непосредственный представитель класса из wxWidgets. У него есть три свойства: "name" (имя) "class" (класс) и "subclass" (подкласс). Свойство "class" обязательно должно присутствовать, оно сообщает XRC, какой объект из wxWidgets должен быть здесь создан. Другие два свойства являются дополнительными. Свойство "name" обычно принимается за ID и служит для идентификации объекта. Его значение также передается в макрокоманду XRCID(), и используется чтобы создать wxWindow-идентификатор и имена атрибутов. Оно должно быть уникальным среди всех дочерних записей самого близкого содержащего объекта (wxDialog, wxFrame, wxPanel, wxNotebook) вверх от объекта в иерархии узлов XML (хотя два различных контейнера могут содержать объекты с одинаковыми "name"). Свойство "subclass" - дополнительное название класса, конструктор которого будет вызван вместо конструктора для "class". Подкласс должен быть доступен в программе, в которую загружается ресурс, должен быть получен из "class" и должен быть зарегистрирован в пределах системы wxWidget RTTI.

Пример:

<object name="MyList1" class="wxListCtrl" subclass="MyListCtrlClass">
    ...
</object>

Узел <object> может иметь произвольные дочерние узлы. Эти узлы и их семантика зависят от классов и будут определены в этом документе позже. Пользователю позволяется регистрировать новые обработчики объектов в пределах XRC и расширить его, чтобы работать с новыми классами <object> (и поэтому - с различными дочерними узлами для <object>).

Узел <object_ref> идентичен узлу <object>, за исключением того, что он имеет значение _not_ для свойства "class" и имеет дополнительное обязательное свойство "ref" (указатель). Его концепция аналогична Unix symlinks: значение свойства "ref" равно значению свойства "name" некоторого существующего узла (отсылает к указанному узлу) в ресурсах (необязательно верхнего уровня). Свойство "class" указанного узла и все его подузлы будут скопированы вместо указывающего узла <object_ref>, и он будет обработан как правильный узел <object>. Если сам узел <object_ref> имеет дочерние узлы, то эти узлы _override_ (отменят) дочерние узлы от указанного узла.

Пример:

<object name="foo" class="wxTextCtrl">
    <value>Привет</value>
    <size>100,-1d</size>
</object>
<object_ref name="bar" ref="foo">
    <value>bar</value>               <!-- отменить! -->
</object_ref>

Идентично:

<object name="foo" class="wxTextCtrl">
    <value>hello</value>
    <size>100,-1d</size>
</object>
<object name="bar" class="wxTextCtrl">
    <value>bar</value>
    <size>100,-1d</size>
</object>

3. Основные типы атрибутов

Есть несколько типов атрибутов (см. раздел 1. Терминология), которые применимы ко многим атрибутам различных классов:

String (строка)

Произвольный текст. Некоторые символы имеют специальную интерпретацию и оттранслированы синтаксическим анализатором XRC согласно следующей таблице:

"_"->"&" ('&' используется, чтобы подчеркнуть, например, пункты меню в wxWidgets)
"__"->"_"
"\n"->конец строки (C-шный символ '\n')
"\r"->возврат каретки (C-шный символ '\r')
"\t"->tab (C-шный символ '\t')
"\\"->"\" (введен в версии 2.5.3.0, отсутствует в более ранних версиях)

Примечание Версии: до версии 2.3.0.1 вместо '_' использовался '$'.

I18nString (интернационализация)

Подобен String, но значение оттранслировано к родному языку средствами wxLocale во время выполнения (если это не было заблокировано, т.е. если флаг wxXRC_USE_LOCALE передается конструктору wxXmlResource). Используется для строк, которые являются "visible" (видимыми) в графическом интерфейсе пользователя.

UnsignedInteger (беззнаковое целое)

Это очевидно. Значения могут быть представлены только цифрами 0-9 и должны содержать по крайней мере одну цифру.

Integer (целое)

Аналогично UnsignedInteger но может быть приписан '-' (целое, меньшее нуля).

Position (позиция)

Определяет позицию (окна) в пространстве 2D. Синтаксис: <integer>,<integer>[d], где <integer> - правильное целочисленное значение.

Size (размер)

Синтаксис такой же, как у Position, но величины интерпретируются как размер окна (тип wxSize) а не позиция (тип wxPosition).

Style[wxSomeClass] (стиль)

Список флагов стилей передается конструктору wxSomeClass. Флаги записываются также, как в C++ коде (напр., "wxSUNKEN_BORDER", "wxHW_SCROLLBAR_NEVER") и разделяются произвольной комбинацией пробельных символов и '|'. Возможность указания флага зависит от класса и не описывается в этом документе. Пожалуйста, смотрите руководство wxWidgets чтобы узнать, какие стили может принять данный класс. Если XRC не принимает флаг, указанный в документации wxWidgets, - это баг.

Bitmap (точечный рисунок)

Значение атрибута интерпретируется как имя файла (или как абсолютный или относительный для файла ресурса XRC путь). Кроме того, узел атрибута может иметь свойства "stock_id" и "stock_client". Их значениями могут быть любые величины из wxArtID (или wxArtClient соответственно), как это используется в wxArtProvider (поскольку пользователь может определить собственные константы, здесь фактически разрешена любая строка). Примеры - "wxART_FILE_OPEN" (id) или "wxART_MENU" (client).

Любое из свойств "stock_id" или "stock_client" или же имя файла могут быть опущены. XRC определяет точечный рисунок для использования согласно следующему алгоритму:

  1. Если свойство "stock_id" непусто, запрашивается wxArtProvider для побитового изображения (если отсутствует "stock_client", используется умолчальный, как правило - wxART_OTHER; исключения оговорены ниже в разделе о специфике классов). Если запрос терпит неудачу, переходим к пункту 2.
  2. Точечный рисунок загружается из файла, указанного в значении атрибута.

Boolean (логический)

Логическое значение, - либо "0" (false), либо "1" (true).

Font (шрифт)

Значение - шрифт. Шрифт может быть описан посредством указания его элементарных свойств, или он может быть производным от одного из системных шрифтов. Шрифтовой узел может содержать следующее подузлы (в левом столбце таблицы - имена подузлов, в правом - типы значений в соответствии с определениями выше):

size (размер)UnsignedInteger
style (стиль)normal | italic | slant
weight (жирность)normal | bold | light
family (семейство)roman | script | decorative | swiss | modern | teletype
underlined (подчеркнутость)Boolean
face (гарнитура)разделенный запятыми список названий
encoding (кодировка)кодировка шрифта как строка (бессмысленно указывать в Unicode)
sysfont (системный шрифт)символическое имя стандартного системного шрифта (одна из констант wxSYS_*_FONT)
relativesize (относительный размер)Переменный размер шрифта относительно текущего размера системного шрифта;
Может использоваться только когда используется sysfont и не используется size.

Вместо любых пропущенных свойств по умолчанию используются свойства wxFont.

Примеры:

<font>
    <face>arial,helvetica</face>
    <size>12</size>
</font>

<font>
    <sysfont>wxSYS_DEFAULT_GUI_FONT</sysfont>
    <weight>bold</weight>
    <relativesize>1.5</relativesize>
</font>

Colour (цвет)

Значение цвета указывается как величина RGB в стандартном формате #rrggbb, где rr, gg и bb - шестнадцатеричные регистронезависимые значения в диапазоне 00..FF, либо символическое имя. Символические имена - константы wxSYS_COLOUR_*, определенные в wxWidgets, записанные как строки.

Пример:

<bg>wxSYS_COLOUR_SCROLLBAR</bg>
<fg>#FF0000</fg>

4. Поддерживаемые классы

Атрибуты указаны в таблицах следующего формата:

имя атрибута тип атрибута значение по умолчанию, при отсутствии
[(дополнительные замечания...........................................)]

wxBitmap

Это - специальный случай, поскольку создает экземпляр не wxWindow а wxBitmap. Другое отличие состоит в том, что, что у него нет каких-либо атрибутов. Вместо этого сам узел интерпретируется, как если бы он имел тип Bitmap.

Пример:

<object class="wxBitmap">bitmaps/foo.gif</object>

wxIcon

Идентичен классу wxBitmap, за исключением того, что создает wxIcon вместо wxBitmap.

wxButton

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxButton]
labelI18nString
defaultBooleanfalse
(Является ли кнопка умолчальной?)

wxCalendarCtrl

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxCalendarCtrl]

wxCheckBox

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxCheckBox]
checkedBooleanfalse

wxCheckList

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxCheckList]
content(смотри ниже)(пустое)

Дополнительный атрибут "content" не имеет значения. Вместо этого он может содержать произвольное число узлов <item> (контрол заполняется строками, содержащимися в этих узлах). Каждый узел <item> должен содержать значение I18nString и может иметь свойство "checked" с возможными значениями "0" или "1" указывающими, является ли этот пункт изначально выбранным.

Пример:

<object class="wxCheckList">
    <content>
      <item>Один</item>
      <item checked="1">Два</item>
      <item checked="1">Три</item>
      <item>Четыре</item>
    </content>
</object>

wxDatePickerCtrl

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxDatePickerCtrl]

wxDialog

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxDialog]wxDEFAULT_DIALOG_STYLE
titleI18nString""
iconBitmap(пустое)
centeredBooleanfalse

wxDialog может иметь дочерние объекты.

wxFrame

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxDialog]wxDEFAULT_FRAME_STYLE
titleI18nString""
iconBitmap(пустое)
centeredBooleanfalse

wxFrame может иметь дочерние объекты. Может иметь не более одного wxToolBar, wxMenuBar и дочерние wxStatusBar; объекты этих типов автоматически создают фреймовые тул-, меню- и статусбары соответственно.

wxMDIParentFrame

Поддерживает те же атрибуты и дочерние узлы, что и wxFrame. К тому же, дети могут иметь тип wxMDIChildFrame.

wxMDIChildFrame

Поддерживает те же атрибуты и дочерние узлы, что и wxFrame.

wxScrolledWindow

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxScrolledWindow]wxHSCROLL | wxVSCROLL

wxScolledWindow может иметь дочерние объекты.

wxSplitterWindow

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxSplitterWindow]wxSP_3D
sashposInteger0
(Начальная позиция разделителя)
minsizeInteger-1
(Минимальный размер панели)
orientation"horizontal"|"vertical"horizontal

wxSplitterWindow должен иметь хотя бы один и не более двух дочерних объектов. Если имеется только один дочерний объект, то инициализатор wxSplitterWindow::Initialize создаст неразделенный сплитер. Если имеется два ребенка, сплитер создастся разделенным горизонтально или вертикально в зависимости от значения атрибута "orientation".

wxStatusBar

fieldsЦелое число полей
widthsширина1, ширина2, ширина3, ...

wxToolBar

posPosition-1,-1
sizeSize-1,-1
styleStyle[wxToolBar]wxNO_BORDER | wxTB_HORIZONTAL
bitmapsizeSize-1,-1
(Размер содержащихся точечных рисунков)
marginsSize-1,-1
packingInteger-1
separationInteger-1
bgBackground colourNone
dontattachtoframeBooleanFalse

Узел wxToolBar может иметь дочерние узлы <object> и <object_ref>. Их классами могут быть "tool", "separator" или любой класс wxWidgets производный от wxControl. "tool" и "separator" - специальные псевдо-классы, которые могут появиться только в пределах узла wxToolBar. Их атрибуты - следующие:

separator

(не имеет никаких атрибутов)

tool

bitmapBitmap
bitmap2BitmapwxNullBitmap
toggleBoolean0
radioBoolean0
disabledBoolean0
labelI18nString""
tooltipI18nString""
longhelpI18nString""
posPosition-1,-1

Ограничение:
Не более одного из атрибутов "toggle" и "radio" могут быть 1. Атрибут "pos" должен отсутствовать, если указаны атрибуты "label" или "radio", или если стиль родительского wxToolBar-а содержит wxTB_TEXT.

Замечание:
Использование атрибута "pos" настоятельно не рекомендуется, оно обесценивает использование wxToolBar и не поддерживается MSW и реализациями GTK.

Дочерние объекты добавляются в тулбар посредством AddTool для класса "tool", AddSeparator для "separator" и AddControl для других классов.

5. Дополнительно

FIXME - обработка свойства "platform".

=== КОНЕЦ ===

Версия: $Id: tn0014.txt,v 1.21 2006/02/08 13:33:55 VZ Exp $

Источник: cvs.wxwidgets.org

Перевод: Дмитрий Скоробогатов

Прочитано: 6169 раз(а)  |  Комментариев: 0  |  Средняя оценка (макс. 7): нет (Голосов: 0)
Вы не авторизованы для голосования
отсутствуют
В этой теме комментарии отключены.
Регистрация в каталоге Обратная связь Размещение на сайте Приглашаем авторов! О проекте Наши партнеры
© ООО «Norma»; 2018. Все права защищены.
YP
Рейтинг@Mail.ru
Uzinfocom Datacenter
18+
Add engine