Динамические выражения в файлах настроек
С версии 1.2.11 в хобдрайв внедрен анализатор выражений, позволяющий сильно увеличить гибкость описаний раскладок, формат отображения сенсоров. В будущем анализатор будет добавлен и в ecuxml, что позволит использовать произвольные математические выражения для описания вычисляемых датчиков.
Для использования выражений в gauge и layout файлах, применяется специальная форма записи атрибутов.
Например precision='${1+2}' превратится в precision='3'
Переменные
Анализатор поддерживает переменные, что позволяет в хобдрайве создавать гибкие описания, адаптированные например к разным цветовым темам.
Переменные можно использовать в двух видах - $name или ${name}.
Хобдрайв при загрузке определяет группы переменных, доступные во всех layout/gauge файлах:
$daynight - значение day или night - текущий режим работы.
$layout - значение portrait или landscape - текущая ориентация экрана
$Color_normal - группа цветов текущей темы. Помимо normal доступны $Color_back, $Color_contrast, $Color_minor, $Color_subtle.
$Theme_brightness - Группа переменных начинающихся с $Theme_, весь список можно найти в файле темы. Указанный $Theme_brightness принимает значения light или dark - и позволяет разделять светлые и темные темы.
Переменные можно определять и в самом gauge файле:
<variable id="Color_red" value="${color(lerp(Color_normal; 0xFF0000; 0.7))}"/>
Создает переменную Color_red, значение ее - красный цвет, приближенный к текущему цвету текста. Для светлых тем оформления это будет темнокрасный, бардовый, для темных тем -светлокрасный, розовый.
Пример
<gauge id="TireSensorLF,TireSensorRF,TireSensorLR,TireSensorRR" precision="1" color-map="${Tires_normal_pressure-2}:$Color_red, ${Tires_normal_pressure}:$Color_green, ${Tires_normal_pressure+2}:$Color_red"/>
Определяет сенсоры давления шин. Их цвет зависит от карты цветов (color-map).
Tires_normal_pressure - переменная, со значением по умолчанию 32 (бара).
${Tires_normal_pressure-2}:$Color_red, - превратится в 30:#FF0000 - что означает что давление 30бар и ниже должно рисоваться красным цветом.
${Tires_normal_pressure}:$Color_green - давление 32бар будет рисоваться зеленым цветом
${Tires_normal_pressure+2}:$Color_red - давление 34бар и выше будет рисоваться опять красным цветом.
Динамическая интерпретация
Указанный выше способ интерполяции с одинарным $ является статическим. Т.е. система один раз анализирует данные при загрузке файлов раскладок. После загрузки эти выражения замораживаются и превращаются в обычный текст.
Но в некоторых описаниях сенсоров и декораторов можно использовать динамическую интерполяцию. Её отличие - она вычисляется каждый раз при отрисовке сенсора.
Такая интерполяция начинается с двойного знака $$
Например:
<item id="DistanceRun_primary" precision="3" text-evaluator='${Sensor_Text}(газ), ${svaluef("DistanceRun_secondary"; 3)} (бенз)' description="hidden"/>
Здесь атрибут text-evaluator в датчике используется чтобы создать спецфичный текст для отображения значения датчика. Есть несколько функций и переменных, применимых только к таким динамическим интерполяторам.
Sensor_Text - это текущее текстовое представление сенсора. То, какой текст рисуется обычно, если интерполятор отсутствует.
svaluef - это функция берет значение произвольного датчика из аргумента, и форматирует его значение, возможно преобразуя единицы измерения в нужные для отображения. Можно использовать как svaluef("YourSensor", 3) - для явного указания числа знаков после запятой при форматировании
svaluef_units - то же что и выше, но рядом со значением выведется единица измерения.
svalid - Валиден ли сенсор указанный в аргументе (Булево значение).
svalue - цифровое (double) значение датчика без преобразования единиц.
Описание синтаксиса
The functionality of the tool is based on the implementation as used in Excel. Currently the expression evaluator supports the following features:
It can parse mathematical expressions, including support for the most commonly used functions,e.g.:
4*(24/2-5)+14
cos(Pi/4)*sin(Pi/6)^2
1-1/E^(0.5^2)
min(5;2;9;10;42;35)
svalue('Speed')
Текущее значение указанного датчика. Заметьте что обновления виджета происходят только при изменении основного датчика, указанного в атрибуте id.
svalue_ex('FuelEconomy', 'day')
Значение расширенных опций датчика.
sexists('Speed')
True если датчик существует в текущей конфигурации.
svalid('Speed')
True если датчик существует и имеет валидное прочитанное значение
svaluef('LitersPerHour'; 2)
Текущее значение в текстовом виде с указанием точности (числа знаков после запятой)
Returns formatted sensor value in display units with specified precision
svaluef_units("Sensor"; 1)
t('SomeText')
Средствами хобдрайва перевести указанный ключ
Customer support service by UserEcho