Страница 1 из 8

Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 4:35 pm
kis
Надеюсь, посетители этой ветки внимательно прочитают хотя бы этот первый пост.

XML интерфейс ПРОГОРОДа, с моей точки зрения, пока не очень готов для публичного документирования. Может, и не будет готов в обозримом будущем. Но я понимаю, что если даже до релиза 2.0 вы бросились копать и редактировать, после релиза это только продолжится. Посему здесь я буду давать некую информацию, которая должна помочь хотя бы не сломать :)

Я не буду здесь давать информацию по формату файла 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 - "надпись" рядом с кнопкой (обычной, радио, чекбоксом). Высота берется по "родительской" кнопке. Активная зона "родительской" кнопки расширяется на размер надписи. Состояние "родительской" кнопки (нормальное, активное, нажатое, недоступное) передается и надписи.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 5:25 pm
VasAlex
Значит контейнер не совсем нужен, достаточно в UI создать каталог с одноименным названием. Это хорошо.
Осталось дождаться релиза.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 5:31 pm
kis
VasAlex писал(а):Значит контейнер не совсем нужен, достаточно в UI создать каталог с одноименным названием. Это хорошо.
С контейнером работа идёт побыстрее, и ресурсов меньше кушается. Ну и целостность при распространении. Больше ничего.

Но я уже об этом упоминал, когда говорил, как подменить шрифты...

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 6:03 pm
VasAlex
kis писал(а):С контейнером работа идёт побыстрее, и ресурсов меньше кушается. Ну и целостность при распространении. Больше ничего.

контейнер каталогом монтируется в память?

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 6:22 pm
kis
VasAlex писал(а):контейнер каталогом монтируется в память?
Почти, и если возможно. Но, по любому - открыть один файл за сессию и его читать - это быстрее, чес на каждый файл открывать-закрывать.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 8:33 pm
DUK63
kis,
Img_20101227201756.png

подскажи
1 - как избавится от серой кнопки для состояния disabled (или в коде недоработка?). Нажимаются нормально, иконки + и - в touched видно. Если у батона убрать прозрачность, то в рисуется закрашенная кнопка
Код: Выделить всё
<layer width="36" height="100%">
<control type="button" id="PGCID_MAP_ZOOMIN" width="100%" height="50" frame="yes">
 <color background="transparent"/>
 </control>
<control type="icon" frame="yes">
 <image status="normal" name="zoom_in.2.png"/>
 <image status="touched" name="zoom_in.2.png"/>
 <image status="disabled" name="zoom_in_d.2.png"/>
 </control>
<control type="button" id="PGCID_MAP_ZOOMOUT" width="100%" height="50">
 <color background="transparent"/>
 </control>
<control type="icon" frame="yes">
 <image status="normal" name="zoom_out.2.png"/>
 <image status="touched" name="zoom_out.2.png"/>
 <image status="disabled" name="zoom_out_d.2.png"/>
 </control>
 </layer>

2 - как добавить рамку аккумулятору (ну кроме создания иконок в рамке). frame=yes не помогает
Код: Выделить всё
<group id="SOUND" width="25%" height="100%">
<control id="SOUND_BUTTON" type="button" width="100%" height="100%" gap="0" frame="yes">
 <color background="transparent"/>
 <action event="call" id="VOICENSOUND"/>
 </control>
<control id="SOUND_ICON" type="static" width="14" valign="center" align="center" gap="0">
 <image status="normal" name="indi_sound.2.png" index="0"/>
 </control>
 </group>
<group id="BATTERY" width="25%" height="100%">
<control id="BATTERY_ICON" type="button" width="18" align="center" valign="center" frame="yes">
 <image status="normal" name="indi_battery.2.png" index="4"/>
 </control>
 </group>

3 - можно ли избавится от "просвечивающей" иконки сбора треков. формально лежит "ниже" указателя поворота, остальные иконки этого слоя не просвечивают.
Img_20101224061857.png

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 9:55 pm
sam_no
О, классно! а возможно ли сделать прозрачной нижнюю строку?

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 11:19 pm
VasAlex
kis писал(а):
VasAlex писал(а):контейнер каталогом монтируется в память?
Почти, и если возможно. Но, по любому - открыть один файл за сессию и его читать - это быстрее, чес на каждый файл открывать-закрывать.

Если не монтируется как wim, тогда не вижу особого смысла держать в одном контейнере файлы для разных разрешений.
Есть смысл их разделить, к примеру images.vol разделить на каталог IMAGES и в нем low.vol, high.vol, medium.vol.
как это сделано в JUNCTION.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 27th, 2010, 11:25 pm
VasAlex
kis

Выходы из метро в релизных скинах вообще не читаются.
Предлагаю поставить так:

в ночном скине
Screen03.png


Код: Выделить всё
S,   43,   (240,240,240),   (255,0,0),   14,   МЕТРО
.....
T,   52,   (240,240,240),   (255,0,0),   14,   Выход из метро


и в дневном
Screen04.png


Код: Выделить всё
S,   43,   (255,0,0),      (255,255,255),      14,   МЕТРО
...
T,   52,   (255,0,0),      (255,255,255),   14,   Выход из метро

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 8:34 am
DUK63
sam_no писал(а):О, классно! а возможно ли сделать прозрачной нижнюю строку?

У меня не получилось :(.
Делая шаблон заполнения полупрозрачным получаю:
Img_20101228083100.png

с просвечивающей "кнопкой" скриншота и артефактом посредине названия улицы.
И главное меню (со всеми подменюшками) становится полупрозрачным :(

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 10:15 am
DUK63
Alex083 писал(а):...а может тогда можно вынести датчики как батарейку и т.д. на карту а ширину нижней полосы уменьшить? так не не прокатит?

Вот что получается (уже писал об этом): viewtopic.php?f=101&t=441&start=140#p26988
(правда в 3037 не пробовал, не успел еще)
Bond писал(а):я бы поменял местами спидометр с часами

Я хотел на левый край вынести кнопки масштаба и наклона (если kis отдаст "наклон" на кнопки). А актуальная скорость и ограничение друг над другом по мне как раз то, что надо :)

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 10:27 am
DUK63
Коллеги, я, конечно, извиняюсь, но давайте не будем здесь обсуждать то, что я делаю. Это пока только эксперименты и попытка понять, как работать с ХМЛ-ками от ПГ. Скриншоты выложил только для пояснения к вопросам для kis. Давайте оставим эту ветку непосредственно для вопросов/ответов по XML (т.е. не ЧТО делать, а КАК это сделать).
Прошу модераторов/админов перенести сообщения:
1 - sam_no » 27 дек 2010, 21:55
2 - DUK63 » 28 дек 2010, 08:34 и ниже
в ветку по дизайну 2.0
(и затем удалить это сообщение)
Я не против обсудить предложения, но именно в ветке по дизайну и функционалу.
Что бы было понятно добавить ссылку на скриншот из сообщения DUK63 » 27 дек 2010, 20:33

Да и пост VasAlex-а о POI метро я бы тоже туда перенес.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:13 am
kis
DUK63 писал(а):1 - как избавится от серой кнопки для состояния disabled

Код: Выделить всё
<color status="disabled" background="transparent"/>

Всего есть у кнопки 4 статуса: normal, touched, active, disabled. Если в цвете статус не указан, он применяется к нормальному. Но если явно указан статус normal, то надо так же явно описать цвета для всех статусов, которые реально должна принимать кнопка. Иначе, например, она не примет состояние touched при касании.

DUK63 писал(а):2 - как добавить рамку аккумулятору (ну кроме создания иконок в рамке).
Контролька либо рисуется программой, либо картинкой. Так что прямой ответ - никак. Косвенный - подложить вниз контрольку типа static, и её уж залить, обрамить...

DUK63 писал(а):3 - можно ли избавится от "просвечивающей" иконки сбора треков.
Нет. Это совсем особый случай: она рисуется асинхронно со всем остальным, т.к. управляется из потока, который занимается отправкой данных. Она обрезается или прячется прямоугольником информации о точке и быстрым меню, но не более того.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:15 am
kis
sam_no писал(а):О, классно! а возможно ли сделать прозрачной нижнюю строку?
Не меняя программы - тяжело. Это размер карты таков, не до низа экрана, а не строка с фоном рисуется поверх карты.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:23 am
kis
VasAlex писал(а):Выходы из метро в релизных скинах вообще не читаются.
Этим никто серьезно не занимался. Потому в релиз и не стал открывать заливки для метро.
VasAlex писал(а):Предлагаю поставить так:
Мысль хорошая, спасибо!

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:25 am
kis
DUK63 писал(а):Делая шаблон заполнения полупрозрачным получаю:
Это - общий фон окна. Его лучше не делать полупрозрачным - будет "просвечивать" всё, что рисуется, слоями.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:27 am
kis
DUK63 писал(а):Давайте оставим эту ветку непосредственно для вопросов/ответов по XML (т.е. не ЧТО делать, а КАК это сделать).

Выделено мной. Очень правильная мысль!

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:44 am
DUK63
kis писал(а):
DUK63 писал(а):1 - как избавится от серой кнопки для состояния disabled

Код: Выделить всё
<color status="disabled" background="transparent"/>

Всего есть у кнопки 4 статуса: normal, touched, active, disabled. Если в цвете статус не указан, он применяется к нормальному. Но если явно указан статус normal, то надо так же явно описать цвета для всех статусов, которые реально должна принимать кнопка. Иначе, например, она не примет состояние touched при касании.

DUK63 писал(а):2 - как добавить рамку аккумулятору (ну кроме создания иконок в рамке).
Контролька либо рисуется программой, либо картинкой. Так что прямой ответ - никак. Косвенный - подложить вниз контрольку типа static, и её уж залить, обрамить...

DUK63 писал(а):3 - можно ли избавится от "просвечивающей" иконки сбора треков.
Нет. Это совсем особый случай: она рисуется асинхронно со всем остальным, т.к. управляется из потока, который занимается отправкой данных. Она обрезается или прячется прямоугольником информации о точке и быстрым меню, но не более того.

По пунктам 1 и 2 получилось. Спасибо.
По пункту 3 - досадно (для меня). Придется искать "пустое" место под эти иконки или возвращать их вниз. Это состояние навсегда или можно в коде подправить? (в будущем, естественно).

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 11:47 am
kis
DUK63 писал(а):Это состояние навсегда или можно в коде подправить? (в будущем, естественно).
Я не фаталист, чтобы утверждать "навсегда", но... иначе сделать пока чрезвычайно сложно.

Re: Некоторая информация по редактированию XML форм

СообщениеДобавлено: Декабрь 28th, 2010, 9:26 pm
DUK63
kis,
появилась еще одна проблемка - не пойму как обрабатывается скроллер поворота карты.
Имею следующее:
1 - полустандартный вариант: скроллер наклона слева, скроллер поворота внизу (valign=bottom). получается такая картина:
bottom.png

(на высоту скроллера поворота не обращайте внимания)
в левой части "схема" экрана без маршрута, в правой - с маршрутом. Видно, что оба скроллера поднимается над датчиками. как бы все правильно.

2 - нестандартный вариант: скроллер наклона слева, скроллер поворота вверху (valign=top)
top.png

без маршрута все нормально, скроллер поворота по высоте влазит полностью. но с маршрутом именно скроллер поворота уползает на верх на высоту полосы датчиков. Добавление тега top=0 не помогает. При этом скроллер наклона и кнопки зума (а они в одной группе) ведут себя корректно: скроллер наклона уменьшается на высоту датчиков, верх остается на месте, кнопки остаются на месте.

XML такой:
Код: Выделить всё
<group type="map">
<!--Слой скроллеров
 -->
<layer width="100%" height="100%">
 <control type="button" id="PGCID_MAP_TILTBAR" width="30" height="100%" align="left" frame="yes" gap="0"/>
 <control type="button" id="PGCID_MAP_HEADINGBAR" width="100%" height="45" valign="top" frame="yes" gap="0"/>
<control type="icon" valign="center" align="center">
 <image status="touched" name="map/icon_compass.png"/>
 </control>
 </layer>
<!--Слой кнопок
 -->
<layer width="36" height="100%">
<control type="button" id="PGCID_MAP_ZOOMIN" width="100%" height="50">
 <color status="normal" background="transparent"/>
 <color status="touched" background="#0AAAAE"/>
 <color status="disabled" background="transparent"/>
 </control>
<control type="icon" frame="yes">
 <image status="normal" name="zoom_in.2.png"/>
 <image status="touched" name="zoom_in.2.png"/>
 <image status="disabled" name="zoom_in_d.2.png"/>
 </control>
<control type="button" id="PGCID_MAP_ZOOMOUT" width="100%" height="50">
 <color status="normal" background="transparent"/>
 <color status="touched" background="#0AAAAE"/>
 <color status="disabled" background="transparent"/>
 </control>
<control type="icon" frame="yes">
 <image status="normal" name="zoom_out.2.png"/>
 <image status="touched" name="zoom_out.2.png"/>
 <image status="disabled" name="zoom_out_d.2.png"/>
 </control>
 </layer>
 </group>

Это опять частная хитрая обработка скроллера в программе или я что то не догоняю?