XML интерфейс ПРОГОРОДа, с моей точки зрения, пока не очень готов для публичного документирования. Может, и не будет готов в обозримом будущем. Но я понимаю, что если даже до релиза 2.0 вы бросились копать и редактировать, после релиза это только продолжится. Посему здесь я буду давать некую информацию, которая должна помочь хотя бы не сломать
![Smile :)](./images/smilies/icon_e_smile.gif)
Я не буду здесь давать информацию по формату файла vol - это уж вы как-нибудь сами... Мне не хотелось бы здесь писать полную документацию - читайте готовые XML файлы в качестве примеров.
Итак...
Файл с расширением vol рассматривается ПРОГОРОДом как одноименная (без расширения!) папка. Сначала файл ищется в реальной папке, если такового не найдено - ищется в vol-файле. Таким образом можно подменить только те файлы, которые надо менять.
Основные теги: group (группа), control (контролька), layer (слой). Контрольки обязаны быть внутри некоей группы. Группы не бывают вложенными. Слои служат исключительно для позиционирования и не "производят" собственно для программы ничего, кроме координат и размеров групп и контролек.
Группы, слои и контрольки образуют вложенные "боксы", которые заполняются, и такие стягивающиеся боксы используются для вычисления координат, когда они не указаны, и величин, указанных в процентах. Исключение составляют:
- величина "100%" для высот и ширин (заполняет "всё оставшееся пространство", но не участвует в заполнении бокса);
- выравнивание по центру (не участвует в заполнении бокса в направлении выравнивания);
- выравнивания top, left, bottom, right (всегда вычисляются в описывающий, но не "стянутый" бокс).
Полноценная укладка не реализована, посему рекомендуется использовать слои, разделять всё на горизонтальные или вертикальные полоски, элементы в которых будут иметь 100%-ную высоту или ширину, соответственно.
Почти всегда нужно указывать ширину и высоту элемента. Исключения:
- картинка (контролька с вложенным тегом image), для неё по умолчанию возьмутся размеры картинки;
- группа или слой, элементы внутри которой имеют определённые размеры в неизвестном направлении, и которые не испоьзуют выравниваний в неизвестном направлении. Но и в этой ситуации вычисление может быть ошибочным.
Числа означают "количество пикселей в низком разрешении". Для среднего разрешения это число множится на 1.5, для высокого - на 2.
Для создания квадратных элементов с вычисляемыми размерами можно использовать "ссылку назад", например:
- Код: Выделить всё
<layer width="33%" height="width">
Здесь сначала вычислится ширина, потом это значение будет использовано в высоте.
Есть средства описывать разные разделы для портретной и альбомной ориентации: теги portrait и landscape. Ими надо пользоваться с большой осторожностью: результирующий порядок следования групп и контролек для обеих ориентаций должен быть идентичным, и набор групп и контролек должен быть идентичным. В противном случае возможна некорректная работа программы. Лучше пользоваться совсем недавно введённой возможностью указывать координаты (атрибуты left, top), размеры (width, height), отступы (marginwidth, marginheight), высоту шрифта (font) как два значения, через запятую, для разных ориентаций, сначала для портретной, потом для альбомной, например:
- Код: Выделить всё
<group width="50%,100%" height="100%,50%" marginwidth="8,4">
Группы и контрольки, доступ к которым нужен программе, имеют идентификаторы (атрибут id). Не вводите свои идентификаторы - это бессмысленно без правки программы. Не удаляйте существующие идентификаторы - многие части программы считают, что такой элемент обязан быть, и программа просто упадёт без него. Не меняйте тип контрольки (атрибут type), т.к. функциональность зависит от типа. Иногда это может "прокатить", но, вообще говоря, нет.
Если позиции и размеры контролек заданы так, что они не помещаются в группу по ширине и/или высоте, группа позволит их скроллировать внутри себя.
Если хочется переопределить кнопки зума на карте (начиная со сборки 3037), вставьте пару контролек типа "button" в группу карты (тип "map") с предопределенными идентификаторами, либо одну из них. Например:
- Код: Выделить всё
<control type="button" id="PGCID_MAP_ZOOMIN" align="left" valign="top" width="36" height="36"/>
<control type="button" id="PGCID_MAP_ZOOMOUT" align="right" valign="top" width="36" height="36"/>
ПРОГОРОД, встретив такое описание, не будет генерить свои кнопки.
Кнопка (button, radio, checkbox) рисуется либо картинкой, либо заливкой с текстом. Для комбинирования текстов, картинок и заливок в сложные кнопки существуют специальные типы контролек:
icon - "иконка" на кнопку. Выравнивание (атрибуты align и valign) действуют по боксу "родительской" кнопки, т.е. контрольке типа button, описание которой непосредственно предшествует иконке. Состояние "родительской" кнопки (нормальное, активное, нажатое, недоступное) передается и иконке.
label - "надпись" рядом с кнопкой (обычной, радио, чекбоксом). Высота берется по "родительской" кнопке. Активная зона "родительской" кнопки расширяется на размер надписи. Состояние "родительской" кнопки (нормальное, активное, нажатое, недоступное) передается и надписи.