Skip to content

Commit

Permalink
Adds option to align value widget label and value to left, center or …
Browse files Browse the repository at this point in the history
…right border of the widget zone.
  • Loading branch information
rotorman committed Jan 22, 2023
1 parent 15dca01 commit 183ed18
Show file tree
Hide file tree
Showing 21 changed files with 532 additions and 366 deletions.
17 changes: 15 additions & 2 deletions radio/src/gui/colorlcd/widget_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ WidgetSettings::WidgetSettings(Window* parent, Widget* widget) :
case ZoneOption::File:
break;

case ZoneOption::TextSize: {
case ZoneOption::TextSize:
new Choice(
line, rect_t{}, STR_FONT_SIZES, 0, FONTS_COUNT - 1,
[=]() -> int { // getValue
Expand All @@ -119,7 +119,20 @@ WidgetSettings::WidgetSettings(Window* parent, Widget* widget) :
SET_DIRTY();
});
break;
}

case ZoneOption::Align:
new Choice(
line, rect_t{}, STR_ALIGN_OPTS, 0, ALIGN_COUNT - 1,
[=]() -> int { // getValue
return (int)widget->getOptionValue(optIdx)->unsignedValue;
},
[=](int newValue) { // setValue
widget->getOptionValue(optIdx)->unsignedValue =
(uint32_t)newValue;
SET_DIRTY();
});
break;

case ZoneOption::Timer: // Unsigned
{
auto tmChoice = new Choice(
Expand Down
86 changes: 74 additions & 12 deletions radio/src/gui/colorlcd/widgets/value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,44 @@ class ValueWidget: public Widget
// get color from options[1]
LcdFlags color = COLOR2FLAGS(persistentData->options[1].value.unsignedValue);

// get label alignment from options[3]
LcdFlags label_alignment = persistentData->options[3].value.unsignedValue;

// get value alignment from options[4]
LcdFlags value_alignment = persistentData->options[4].value.unsignedValue;

coord_t xValue, yValue, xLabel, yLabel;
LcdFlags attrValue, attrLabel = 0;

if (width() < 120 && height() < 50) {
xValue = 0;
yValue = 14;
xLabel = 0;
switch (label_alignment) {
case ALIGN_RIGHT:
xLabel = width() - NUMBERS_PADDING;
attrLabel = RIGHT;
break;
case ALIGN_CENTER:
xLabel = width()/2;
attrLabel = CENTERED;
break;
default: // ALIGN_LEFT:
xLabel = 0;
attrLabel = LEFT;
}
yLabel = 0;
attrValue = LEFT | NO_UNIT | FONT(L);
attrLabel = LEFT;
switch (value_alignment) {
case ALIGN_RIGHT:
xValue = width() - NUMBERS_PADDING;
attrValue = RIGHT | NO_UNIT | FONT(L);
break;
case ALIGN_CENTER:
xValue = width()/2 - NUMBERS_PADDING;
attrValue = CENTERED | NO_UNIT | FONT(L);
break;
default: // ALIGN_LEFT:
xValue = 0;
attrValue = LEFT | NO_UNIT | FONT(L);
}
yValue = 14;
}
else if (height() < 50) {
xValue = width() - NUMBERS_PADDING;
Expand All @@ -60,25 +88,57 @@ class ValueWidget: public Widget
attrValue = RIGHT | NO_UNIT | FONT(L);
}
else {
xValue = NUMBERS_PADDING;
yValue = 18;
xLabel = NUMBERS_PADDING;
switch (label_alignment) {
case ALIGN_RIGHT:
xLabel = width() - NUMBERS_PADDING;
attrLabel = RIGHT;
break;
case ALIGN_CENTER:
xLabel = width()/2 - NUMBERS_PADDING;
attrLabel = CENTERED;
break;
default: // ALIGN_LEFT:
xLabel = NUMBERS_PADDING;
attrLabel = LEFT;
}
yLabel = 2;
switch (value_alignment) {
case ALIGN_RIGHT:
xValue = width() - NUMBERS_PADDING;
break;
case ALIGN_CENTER:
xValue = width()/2;
break;
default: // ALIGN_LEFT:
xValue = NUMBERS_PADDING;
}
yValue = 18;
LcdFlags valalign = LEFT;
switch (value_alignment) {
case ALIGN_RIGHT:
valalign = RIGHT;
break;
case ALIGN_CENTER:
valalign = CENTERED;
break;
default: // ALIGN_LEFT:
valalign = LEFT;
}
if (field >= MIXSRC_FIRST_TELEM) {
if (isGPSSensor(1 + (field - MIXSRC_FIRST_TELEM) / 3)) {
attrValue = LEFT | FONT(L) | PREC1;
attrValue = valalign | FONT(L) | PREC1;
}
else {
attrValue = LEFT | FONT(XL);
attrValue = valalign | FONT(XL);
}
}
#if defined(INTERNAL_GPS)
else if (field == MIXSRC_TX_GPS) {
attrValue = LEFT | FONT(L) | PREC1;
attrValue = valalign | FONT(L) | PREC1;
}
#endif
else {
attrValue = LEFT | FONT(XL);
attrValue = valalign | FONT(XL);
}
}

Expand Down Expand Up @@ -147,6 +207,8 @@ const ZoneOption ValueWidget::options[] = {
{ STR_SOURCE, ZoneOption::Source, OPTION_VALUE_UNSIGNED(MIXSRC_Rud) },
{ STR_COLOR, ZoneOption::Color, OPTION_VALUE_UNSIGNED(COLOR_THEME_PRIMARY2) },
{ STR_SHADOW, ZoneOption::Bool, OPTION_VALUE_BOOL(false) },
{ STR_ALIGN_LABEL, ZoneOption::Align, OPTION_VALUE_UNSIGNED(ALIGN_LEFT) },
{ STR_ALIGN_VALUE, ZoneOption::Align, OPTION_VALUE_UNSIGNED(ALIGN_LEFT) },
{ nullptr, ZoneOption::Bool }
};

Expand Down
15 changes: 14 additions & 1 deletion radio/src/gui/colorlcd/zone.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ struct ZoneOption
TextSize,
Timer,
Switch,
Color
Color,
Align
};

const char * name;
Expand All @@ -80,6 +81,17 @@ struct ZoneOption
const char * displayName;
};

enum ZoneOptionAlign
{
ALIGN_LEFT,
ALIGN_CENTER,
ALIGN_RIGHT,

// this one MUST be last
ALIGN_COUNT
};


struct ZoneOptionValueTyped
{
ZoneOptionValueEnum type;
Expand Down Expand Up @@ -109,6 +121,7 @@ inline ZoneOptionValueEnum zoneValueEnumFromType(ZoneOption::Type type)
case ZoneOption::Timer:
case ZoneOption::Switch:
case ZoneOption::TextSize:
case ZoneOption::Align:
default:
return ZOV_Unsigned;
}
Expand Down
1 change: 1 addition & 0 deletions radio/src/lua/api_general.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2809,6 +2809,7 @@ const luaR_value_entry opentxConstants[] = {
{ "STRING", ZoneOption::String },
{ "TIMER", ZoneOption::Timer },
{ "TEXT_SIZE", ZoneOption::TextSize },
{ "ALIGNMENT", ZoneOption::Align },
{ "MENU_HEADER_HEIGHT", COLOR2FLAGS(MENU_HEADER_HEIGHT) },

// Colors gui/colorlcd/colors.h
Expand Down
3 changes: 2 additions & 1 deletion radio/src/lua/widgets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ ZoneOption *createOptionsArray(int reference, uint8_t maxOptions)
option->deflt.signedValue = lua_tointeger(lsWidgets, -1);
// TRACE("default signed = %d", option->deflt.signedValue);
} else if (option->type == ZoneOption::Source ||
option->type == ZoneOption::TextSize) {
option->type == ZoneOption::TextSize ||
option->type == ZoneOption::Align) {
luaL_checktype(lsWidgets, -1, LUA_TNUMBER); // value is number
option->deflt.unsignedValue = lua_tounsigned(lsWidgets, -1);
// TRACE("default unsigned = %u", option->deflt.unsignedValue);
Expand Down
3 changes: 3 additions & 0 deletions radio/src/translations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -804,6 +804,9 @@ const char STR_INVALID_FILE[] = TR_INVALID_FILE;
const char STR_TIMER_SOURCE[] = TR_TIMER_SOURCE;
const char STR_SIZE[] = TR_SIZE;
const char STR_SHADOW[] = TR_SHADOW;
const char STR_ALIGN_LABEL[] = TR_ALIGN_LABEL;
const char STR_ALIGN_VALUE[] = TR_ALIGN_VALUE;
const char* const STR_ALIGN_OPTS[] = TR_ALIGN_OPTS;
const char STR_TEXT[] = TR_TEXT;
const char STR_COLOR[] = TR_COLOR;
const char STR_MAIN_VIEW_X[] = TR_MAIN_VIEW_X;
Expand Down
3 changes: 3 additions & 0 deletions radio/src/translations.h
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,9 @@ extern const char* const STR_TEXT_SIZE[];
extern const char* const STR_SUBTRIMMODES[];
extern const char STR_SIZE[];
extern const char STR_SHADOW[];
extern const char STR_ALIGN_LABEL[];
extern const char STR_ALIGN_VALUE[];
extern const char* const STR_ALIGN_OPTS[];
extern const char STR_TEXT[];
extern const char STR_COLOR[];
extern const char STR_MAIN_VIEW_X[];
Expand Down
55 changes: 30 additions & 25 deletions radio/src/translations/cn.h
Original file line number Diff line number Diff line change
Expand Up @@ -1056,31 +1056,36 @@
#define TR_GVAR_HEADERS_FM7 "FM7值"
#define TR_GVAR_HEADERS_FM8 "FM8值"

// Horus footer descriptions
#define TR_LSW_DESCRIPTIONS { "比较类型或功能", "第一个变量", "第二个变量或常量", "第二个变量或常量", "启用本行的附加条件", "逻辑开关持续时间", "逻辑开关延时开启" }

// Horus layouts and widgets
#define TR_FIRST_CHANNEL "起始通道"
#define TR_FILL_BACKGROUND "是否填充背景?"
#define TR_BG_COLOR "背景颜色"
#define TR_SLIDERS_TRIMS "滑块和微调"
#define TR_SLIDERS "滑块"
#define TR_FLIGHT_MODE "飞行模式"
#define TR_INVALID_FILE "无效的文件"
#define TR_TIMER_SOURCE "计时器选择"
#define TR_SIZE "尺寸"
#define TR_SHADOW "阴影"
#define TR_TEXT "文本"
#define TR_COLOR "颜色"
#define TR_MAIN_VIEW_X "Main view X"
#define TR_PANEL1_BACKGROUND "面板1背景"
#define TR_PANEL2_BACKGROUND "面板2背景"
#define TR_WIDGET_GAUGE "行程"
#define TR_WIDGET_MODELBMP "模型信息"
#define TR_WIDGET_OUTPUTS "输出"
#define TR_WIDGET_TEXT "文本"
#define TR_WIDGET_TIMER "计时器"
#define TR_WIDGET_VALUE "数值"
#if defined(COLORLCD)
// Horus footer descriptions
#define TR_LSW_DESCRIPTIONS { "比较类型或功能", "第一个变量", "第二个变量或常量", "第二个变量或常量", "启用本行的附加条件", "逻辑开关持续时间", "逻辑开关延时开启" }

// Horus layouts and widgets
#define TR_FIRST_CHANNEL "起始通道"
#define TR_FILL_BACKGROUND "是否填充背景?"
#define TR_BG_COLOR "背景颜色"
#define TR_SLIDERS_TRIMS "滑块和微调"
#define TR_SLIDERS "滑块"
#define TR_FLIGHT_MODE "飞行模式"
#define TR_INVALID_FILE "无效的文件"
#define TR_TIMER_SOURCE "计时器选择"
#define TR_SIZE "尺寸"
#define TR_SHADOW "阴影"
#define TR_ALIGN_LABEL "对齐名称"
#define TR_ALIGN_VALUE "对齐值"
#define TR_ALIGN_OPTS { "左", "中", "右" }
#define TR_TEXT "文本"
#define TR_COLOR "颜色"
#define TR_MAIN_VIEW_X "Main view X"
#define TR_PANEL1_BACKGROUND "面板1背景"
#define TR_PANEL2_BACKGROUND "面板2背景"
#define TR_WIDGET_GAUGE "行程"
#define TR_WIDGET_MODELBMP "模型信息"
#define TR_WIDGET_OUTPUTS "输出"
#define TR_WIDGET_TEXT "文本"
#define TR_WIDGET_TIMER "计时器"
#define TR_WIDGET_VALUE "数值"
#endif

// About screen
#define TR_ABOUTUS TR(" 关于 ", "关于")
Expand Down
55 changes: 30 additions & 25 deletions radio/src/translations/cz.h
Original file line number Diff line number Diff line change
Expand Up @@ -1078,31 +1078,36 @@
#define TR_GVAR_HEADERS_FM7 "Hodnota v režimu LR7"
#define TR_GVAR_HEADERS_FM8 "Hodnota v režimu LR8"

// Horus footer descriptions
#define TR_LSW_DESCRIPTIONS { "Typ porovnávací funkce", "První proměnná", "Druhá proměnná nebo konstanta", "Druhá proměnná nebo konstanta", "Další stav povolující tenko spínač", "Minimální doba trvání sepnutého stavu", "Minimální doba platné podmínky pro aktivaci" }

// Horus layouts and widgets
#define TR_FIRST_CHANNEL "První kanál"
#define TR_FILL_BACKGROUND "Vyplnit pozadí?"
#define TR_BG_COLOR "Barva pozadí"
#define TR_SLIDERS_TRIMS "Slidery+Trimy"
#define TR_SLIDERS "Slidery"
#define TR_FLIGHT_MODE "Letový režim"
#define TR_INVALID_FILE "Neplatní soubor"
#define TR_TIMER_SOURCE "Časovač zdroj"
#define TR_SIZE "Velikost"
#define TR_SHADOW "Stíny"
#define TR_TEXT "Text"
#define TR_COLOR "Barva"
#define TR_MAIN_VIEW_X "Hlavní pohled X"
#define TR_PANEL1_BACKGROUND "Panel1 pozadí"
#define TR_PANEL2_BACKGROUND "Panel2 pozadí"
#define TR_WIDGET_GAUGE "Měřidlo"
#define TR_WIDGET_MODELBMP "Model info"
#define TR_WIDGET_OUTPUTS "Výstupy"
#define TR_WIDGET_TEXT "Text"
#define TR_WIDGET_TIMER "Časovač"
#define TR_WIDGET_VALUE "Hodnota"
#if defined(COLORLCD)
// Horus footer descriptions
#define TR_LSW_DESCRIPTIONS { "Typ porovnávací funkce", "První proměnná", "Druhá proměnná nebo konstanta", "Druhá proměnná nebo konstanta", "Další stav povolující tenko spínač", "Minimální doba trvání sepnutého stavu", "Minimální doba platné podmínky pro aktivaci" }

// Horus layouts and widgets
#define TR_FIRST_CHANNEL "První kanál"
#define TR_FILL_BACKGROUND "Vyplnit pozadí?"
#define TR_BG_COLOR "Barva pozadí"
#define TR_SLIDERS_TRIMS "Slidery+Trimy"
#define TR_SLIDERS "Slidery"
#define TR_FLIGHT_MODE "Letový režim"
#define TR_INVALID_FILE "Neplatní soubor"
#define TR_TIMER_SOURCE "Časovač zdroj"
#define TR_SIZE "Velikost"
#define TR_SHADOW "Stíny"
#define TR_ALIGN_LABEL "Zarovnat název"
#define TR_ALIGN_VALUE "Zarovnat hodnotu"
#define TR_ALIGN_OPTS { "Vlevo", "Uprostřed", "Vpravo" }
#define TR_TEXT "Text"
#define TR_COLOR "Barva"
#define TR_MAIN_VIEW_X "Hlavní pohled X"
#define TR_PANEL1_BACKGROUND "Panel1 pozadí"
#define TR_PANEL2_BACKGROUND "Panel2 pozadí"
#define TR_WIDGET_GAUGE "Měřidlo"
#define TR_WIDGET_MODELBMP "Model info"
#define TR_WIDGET_OUTPUTS "Výstupy"
#define TR_WIDGET_TEXT "Text"
#define TR_WIDGET_TIMER "Časovač"
#define TR_WIDGET_VALUE "Hodnota"
#endif

// Taranis About screen
#define TR_ABOUTUS "O nás"
Expand Down
Loading

0 comments on commit 183ed18

Please sign in to comment.