feat(color): allow changing the size of topbar widgets (#5235)
This commit is contained in:
@@ -1179,6 +1179,9 @@ Node convert<ModelData>::encode(const ModelData& rhs)
|
||||
if (topbarData && topbarData.IsMap()) {
|
||||
node["topbarData"] = topbarData;
|
||||
}
|
||||
for (int i = 0; i < MAX_TOPBAR_ZONES; i += 1)
|
||||
if (rhs.topbarWidgetWidth[i] > 0)
|
||||
node["topbarWidgetWidth"][std::to_string(i)]["val"] = (int)rhs.topbarWidgetWidth[i];
|
||||
node["view"] = rhs.view;
|
||||
}
|
||||
|
||||
@@ -1447,8 +1450,15 @@ bool convert<ModelData>::decode(const Node& node, ModelData& rhs)
|
||||
|
||||
node["screenData"] >> rhs.customScreens.customScreenData;
|
||||
node["topbarData"] >> rhs.topBarData;
|
||||
|
||||
if (node["topbarWidgetWidth"]) {
|
||||
for (int i = 0; i < MAX_TOPBAR_ZONES; i += 1) {
|
||||
if (node["topbarWidgetWidth"][std::to_string(i)]) {
|
||||
node["topbarWidgetWidth"][std::to_string(i)]["val"] >> rhs.topbarWidgetWidth[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
node["view"] >> rhs.view;
|
||||
|
||||
node["modelRegistrationID"] >> rhs.registrationId;
|
||||
node["hatsMode"] >> hatsModeLut >> rhs.hatsMode;
|
||||
|
||||
|
||||
@@ -188,6 +188,7 @@ class ModelData {
|
||||
|
||||
RadioLayout::CustomScreens customScreens;
|
||||
TopBarPersistentData topBarData;
|
||||
uint8_t topbarWidgetWidth[MAX_TOPBAR_ZONES];
|
||||
unsigned int view;
|
||||
|
||||
char registrationId[8+1];
|
||||
|
||||
@@ -101,13 +101,13 @@ static inline void check_struct()
|
||||
#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE)
|
||||
CHKSIZE(ModelData, 6329);
|
||||
#elif defined(PCBNV14)
|
||||
CHKSIZE(ModelData, 15655);
|
||||
CHKSIZE(ModelData, 15659);
|
||||
#elif defined(PCBPL18)
|
||||
CHKSIZE(ModelData, 15835);
|
||||
CHKSIZE(ModelData, 15841);
|
||||
#elif defined(RADIO_T15)
|
||||
CHKSIZE(ModelData, 15824);
|
||||
CHKSIZE(ModelData, 15830);
|
||||
#elif defined(PCBHORUS)
|
||||
CHKSIZE(ModelData, 15799);
|
||||
CHKSIZE(ModelData, 15805);
|
||||
#else
|
||||
#error CHKSIZE not set up
|
||||
#endif
|
||||
|
||||
@@ -95,7 +95,7 @@ PACK(struct MixData {
|
||||
uint16_t mltpx:2 ENUM(MixerMultiplex);
|
||||
uint16_t speedPrec:1;
|
||||
uint16_t flightModes:9 CUST(r_flightModes, w_flightModes);
|
||||
uint16_t spare:2;
|
||||
uint16_t spare:2 SKIP;
|
||||
uint32_t weight:11 CUST(r_sourceNumVal,w_sourceNumVal);
|
||||
uint32_t offset:11 CUST(r_sourceNumVal,w_sourceNumVal);
|
||||
int32_t swtch:10 CUST(r_swtchSrc,w_swtchSrc);
|
||||
@@ -123,7 +123,7 @@ PACK(struct ExpoData {
|
||||
CurveRef curve;
|
||||
uint16_t chn:5;
|
||||
uint16_t flightModes:9 CUST(r_flightModes, w_flightModes);
|
||||
uint16_t spare:2;
|
||||
uint16_t spare:2 SKIP;
|
||||
NOBACKUP(char name[LEN_EXPOMIX_NAME]);
|
||||
});
|
||||
|
||||
@@ -596,6 +596,7 @@ PACK(struct CustomScreenData {
|
||||
#define CUSTOM_SCREENS_DATA \
|
||||
NOBACKUP(CustomScreenData screenData[MAX_CUSTOM_SCREENS]); \
|
||||
NOBACKUP(TopBarPersistentData topbarData); \
|
||||
NOBACKUP(uint8_t topbarWidgetWidth[MAX_TOPBAR_ZONES]); \
|
||||
NOBACKUP(uint8_t view);
|
||||
#else
|
||||
#define CUSTOM_SCREENS_DATA \
|
||||
|
||||
@@ -50,24 +50,25 @@ TopBar::TopBar(Window * parent) :
|
||||
|
||||
unsigned int TopBar::getZonesCount() const
|
||||
{
|
||||
return MAX_TOPBAR_ZONES;
|
||||
unsigned int zoneCount = 0;
|
||||
for (int i = 0; i < MAX_TOPBAR_ZONES; i += 1)
|
||||
if (g_model.topbarWidgetWidth[i] > 0)
|
||||
zoneCount += 1;
|
||||
return zoneCount;
|
||||
}
|
||||
|
||||
rect_t TopBar::getZone(unsigned int index) const
|
||||
{
|
||||
#if PORTRAIT_LCD
|
||||
if (index == MAX_TOPBAR_ZONES - 1) {
|
||||
coord_t size = LCD_W - HDR_DATE_XO - (MAX_TOPBAR_ZONES - 1) * (TOPBAR_ZONE_WIDTH + TOPBAR_ZONE_HMARGIN);
|
||||
return {LCD_W - size, TOPBAR_ZONE_VMARGIN, size, TOPBAR_ZONE_HEIGHT};
|
||||
}
|
||||
#endif
|
||||
coord_t x = MENU_HEADER_BUTTONS_LEFT + 1;
|
||||
|
||||
return {
|
||||
coord_t(MENU_HEADER_BUTTONS_LEFT + 1 + (TOPBAR_ZONE_WIDTH + TOPBAR_ZONE_HMARGIN) * index),
|
||||
TOPBAR_ZONE_VMARGIN,
|
||||
TOPBAR_ZONE_WIDTH,
|
||||
TOPBAR_ZONE_HEIGHT
|
||||
};
|
||||
for (int i = 0; i < index; i += 1)
|
||||
x += (g_model.topbarWidgetWidth[i] * (TOPBAR_ZONE_WIDTH + TOPBAR_ZONE_HMARGIN));
|
||||
|
||||
coord_t size = ((g_model.topbarWidgetWidth[index] - 1) * (TOPBAR_ZONE_WIDTH + TOPBAR_ZONE_HMARGIN) + TOPBAR_ZONE_WIDTH);
|
||||
|
||||
if ((x + size) > LCD_W) size = LCD_W - x;
|
||||
|
||||
return {x, TOPBAR_ZONE_VMARGIN, size, TOPBAR_ZONE_HEIGHT};
|
||||
}
|
||||
|
||||
void TopBar::setVisible(float visible) // 0.0 -> 1.0
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
#include "file_preview.h"
|
||||
#include "menu_screen.h"
|
||||
#include "theme_manager.h"
|
||||
#include "topbar_impl.h"
|
||||
#include "view_main.h"
|
||||
|
||||
#if !PORTRAIT_LCD // landscape
|
||||
|
||||
@@ -146,12 +148,64 @@ void ScreenUserInterfacePage::build(Window* window)
|
||||
auto line = window->newLine(grid);
|
||||
new StaticText(line, rect_t{}, STR_TOP_BAR);
|
||||
|
||||
auto setupTopbarWidgets = new TextButton(line, rect_t{}, STR_SETUP_WIDGETS);
|
||||
setupTopbarWidgets->setPressHandler([=]() -> uint8_t {
|
||||
menu->deleteLater();
|
||||
new SetupTopBarWidgetsPage();
|
||||
return 0;
|
||||
});
|
||||
auto setupTopbarWidgets = new TextButton(line, rect_t{}, STR_SETUP_WIDGETS,
|
||||
[=]() -> uint8_t {
|
||||
menu->deleteLater();
|
||||
new SetupTopBarWidgetsPage();
|
||||
return 0;
|
||||
});
|
||||
|
||||
line = window->newLine(grid);
|
||||
new StaticText(line, rect_t{}, STR_WIDGET_SIZE);
|
||||
line = window->newLine(grid);
|
||||
auto box = new Window(line, rect_t{});
|
||||
box->setFlexLayout(LV_FLEX_FLOW_ROW, PAD_TINY);
|
||||
box->padAll(PAD_TINY);
|
||||
box->padLeft(PAD_MEDIUM);
|
||||
for (int i = 0; i < MAX_TOPBAR_ZONES; i += 1) {
|
||||
coord_t w = (g_model.topbarWidgetWidth[i] * (WWBTN_W + PAD_TINY)) - PAD_TINY;
|
||||
if (w < WWBTN_W) w = WWBTN_W;
|
||||
widths[i] = new Choice(box, {0, 0, w, 0}, 0, MAX_TOPBAR_ZONES,
|
||||
[=]() {
|
||||
return g_model.topbarWidgetWidth[i];
|
||||
},
|
||||
[=](int value) {
|
||||
g_model.topbarWidgetWidth[i] = value;
|
||||
coord_t w = (g_model.topbarWidgetWidth[i] * (WWBTN_W + PAD_TINY)) - PAD_TINY;
|
||||
widths[i]->setWidth(w);
|
||||
int remaining = MAX_TOPBAR_ZONES;
|
||||
for (int n = 0; n < MAX_TOPBAR_ZONES; n += 1) {
|
||||
if (n > i) {
|
||||
if (remaining > 0) {
|
||||
if (g_model.topbarWidgetWidth[n] == 0) {
|
||||
g_model.topbarWidgetWidth[n] = 1;
|
||||
widths[n]->setWidth(WWBTN_W);
|
||||
widths[n]->show();
|
||||
widths[n]->update();
|
||||
}
|
||||
} else {
|
||||
if (g_model.topbarWidgetWidth[n] != 0) {
|
||||
g_model.topbarWidgetWidth[n] = 0;
|
||||
widths[n]->setWidth(WWBTN_W);
|
||||
widths[n]->hide();
|
||||
ViewMain::instance()->getTopbar()->removeWidget(n);
|
||||
}
|
||||
}
|
||||
}
|
||||
ViewMain::instance()->getTopbar()->load();
|
||||
remaining -= g_model.topbarWidgetWidth[n];
|
||||
}
|
||||
storageDirty(EE_MODEL);
|
||||
}, STR_WIDGET_SIZE);
|
||||
widths[i]->setAvailableHandler([=](int value) {
|
||||
int remaining = MAX_TOPBAR_ZONES;
|
||||
for (int n = 0; n < i; n += 1)
|
||||
remaining -= g_model.topbarWidgetWidth[n];
|
||||
return value > 0 && value <= remaining;
|
||||
});
|
||||
if (g_model.topbarWidgetWidth[i] == 0)
|
||||
widths[i]->hide();
|
||||
}
|
||||
|
||||
// Theme choice
|
||||
line = window->newLine(grid);
|
||||
|
||||
@@ -22,9 +22,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "tabsgroup.h"
|
||||
#include "widgets_container.h"
|
||||
|
||||
class ScreenMenu;
|
||||
class ThemeView;
|
||||
class Choice;
|
||||
|
||||
class ScreenUserInterfacePage : public PageTab
|
||||
{
|
||||
@@ -33,7 +35,10 @@ class ScreenUserInterfacePage : public PageTab
|
||||
|
||||
void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL(WWBTN_W, 60, 60)
|
||||
|
||||
protected:
|
||||
ScreenMenu* menu;
|
||||
Choice* widths[MAX_TOPBAR_ZONES];
|
||||
ThemeView* themeView = nullptr;
|
||||
};
|
||||
|
||||
@@ -161,23 +161,29 @@ static void sanitizeMixerLines()
|
||||
void postModelLoad(bool alarms)
|
||||
{
|
||||
#if defined(COLORLCD)
|
||||
// Load 'date time' widget if slot is empty
|
||||
if (g_model.topbarData.zones[MAX_TOPBAR_ZONES-1].widgetName[0] == 0) {
|
||||
strAppend(g_model.topbarData.zones[MAX_TOPBAR_ZONES-1].widgetName, "Date Time", WIDGET_NAME_LEN);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
// Load 'radio info' widget if slot is empty
|
||||
if (g_model.topbarData.zones[MAX_TOPBAR_ZONES-2].widgetName[0] == 0) {
|
||||
strAppend(g_model.topbarData.zones[MAX_TOPBAR_ZONES-2].widgetName, "Radio Info", WIDGET_NAME_LEN);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
if (g_model.topbarWidgetWidth[0] == 0) {
|
||||
// Set default width for top bar widgets
|
||||
for (int i = 0; i < MAX_TOPBAR_ZONES; i += 1)
|
||||
g_model.topbarWidgetWidth[i] = 1;
|
||||
|
||||
// Load 'date time' widget if slot is empty
|
||||
if (g_model.topbarData.zones[MAX_TOPBAR_ZONES-1].widgetName[0] == 0) {
|
||||
strAppend(g_model.topbarData.zones[MAX_TOPBAR_ZONES-1].widgetName, "Date Time", WIDGET_NAME_LEN);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
// Load 'radio info' widget if slot is empty
|
||||
if (g_model.topbarData.zones[MAX_TOPBAR_ZONES-2].widgetName[0] == 0) {
|
||||
strAppend(g_model.topbarData.zones[MAX_TOPBAR_ZONES-2].widgetName, "Radio Info", WIDGET_NAME_LEN);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
#if defined(INTERNAL_GPS)
|
||||
// Load 'internal gps' widget if slot is empty
|
||||
if (g_model.topbarData.zones[MAX_TOPBAR_ZONES-3].widgetName[0] == 0) {
|
||||
strAppend(g_model.topbarData.zones[MAX_TOPBAR_ZONES-3].widgetName, "Internal GPS", WIDGET_NAME_LEN);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
// Load 'internal gps' widget if slot is empty
|
||||
if (g_model.topbarData.zones[MAX_TOPBAR_ZONES-3].widgetName[0] == 0) {
|
||||
strAppend(g_model.topbarData.zones[MAX_TOPBAR_ZONES-3].widgetName, "Internal GPS", WIDGET_NAME_LEN);
|
||||
storageDirty(EE_MODEL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#elif LCD_W == 128
|
||||
// Prevent GVARS to be off when imported or manually modified yaml
|
||||
// Since there is no way to have those back
|
||||
|
||||
@@ -403,7 +403,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -440,7 +440,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
@@ -429,7 +429,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -466,7 +466,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
@@ -864,6 +864,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL),
|
||||
YAML_ARRAY("screenData", 6816, 10, struct_CustomScreenData, NULL),
|
||||
YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL),
|
||||
YAML_ARRAY("topbarWidgetWidth", 8, 4, struct_unsigned_8, NULL),
|
||||
YAML_UNSIGNED( "view", 8 ),
|
||||
YAML_STRING("modelRegistrationID", 8),
|
||||
YAML_UNSIGNED( "usbJoystickExtMode", 1 ),
|
||||
|
||||
@@ -429,7 +429,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -466,7 +466,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
@@ -864,6 +864,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL),
|
||||
YAML_ARRAY("screenData", 6816, 10, struct_CustomScreenData, NULL),
|
||||
YAML_STRUCT("topbarData", 3552, struct_TopBarPersistentData, NULL),
|
||||
YAML_ARRAY("topbarWidgetWidth", 8, 6, struct_unsigned_8, NULL),
|
||||
YAML_UNSIGNED( "view", 8 ),
|
||||
YAML_STRING("modelRegistrationID", 8),
|
||||
YAML_UNSIGNED( "usbJoystickExtMode", 1 ),
|
||||
|
||||
@@ -431,7 +431,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -468,7 +468,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
@@ -870,6 +870,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL),
|
||||
YAML_ARRAY("screenData", 6816, 10, struct_CustomScreenData, NULL),
|
||||
YAML_STRUCT("topbarData", 3552, struct_TopBarPersistentData, NULL),
|
||||
YAML_ARRAY("topbarWidgetWidth", 8, 6, struct_unsigned_8, NULL),
|
||||
YAML_UNSIGNED( "view", 8 ),
|
||||
YAML_STRING("modelRegistrationID", 8),
|
||||
YAML_UNSIGNED( "functionSwitchConfig", 16 ),
|
||||
|
||||
@@ -403,7 +403,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -440,7 +440,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
@@ -403,7 +403,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -440,7 +440,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
@@ -431,7 +431,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -468,7 +468,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
@@ -865,6 +865,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL),
|
||||
YAML_ARRAY("screenData", 6816, 10, struct_CustomScreenData, NULL),
|
||||
YAML_STRUCT("topbarData", 3552, struct_TopBarPersistentData, NULL),
|
||||
YAML_ARRAY("topbarWidgetWidth", 8, 6, struct_unsigned_8, NULL),
|
||||
YAML_UNSIGNED( "view", 8 ),
|
||||
YAML_STRING("modelRegistrationID", 8),
|
||||
YAML_UNSIGNED( "usbJoystickExtMode", 1 ),
|
||||
|
||||
@@ -431,7 +431,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -468,7 +468,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
@@ -865,6 +865,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL),
|
||||
YAML_ARRAY("screenData", 6816, 10, struct_CustomScreenData, NULL),
|
||||
YAML_STRUCT("topbarData", 3552, struct_TopBarPersistentData, NULL),
|
||||
YAML_ARRAY("topbarWidgetWidth", 8, 6, struct_unsigned_8, NULL),
|
||||
YAML_UNSIGNED( "view", 8 ),
|
||||
YAML_STRING("modelRegistrationID", 8),
|
||||
YAML_UNSIGNED( "usbJoystickExtMode", 1 ),
|
||||
|
||||
@@ -402,7 +402,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -439,7 +439,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
@@ -403,7 +403,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -440,7 +440,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
@@ -406,7 +406,7 @@ static const struct YamlNode struct_MixData[] = {
|
||||
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
|
||||
YAML_UNSIGNED( "speedPrec", 1 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
|
||||
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
|
||||
@@ -443,7 +443,7 @@ static const struct YamlNode struct_ExpoData[] = {
|
||||
YAML_STRUCT("curve", 16, struct_CurveRef, NULL),
|
||||
YAML_UNSIGNED( "chn", 5 ),
|
||||
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
|
||||
YAML_UNSIGNED( "spare", 2 ),
|
||||
YAML_PADDING( 2 ),
|
||||
YAML_STRING("name", 6),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ std::string Choice::getLabelText()
|
||||
if (val >= 0 && val < (int)values.size()) {
|
||||
text = values[val];
|
||||
} else {
|
||||
text = std::to_string(val);
|
||||
text = std::to_string(val + vmin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1107,6 +1107,7 @@ const char STR_RADIO_INFO_WIDGET[] = TR_RADIO_INFO_WIDGET;
|
||||
const char STR_LOW_BATT_COLOR[] = TR_LOW_BATT_COLOR;
|
||||
const char STR_MID_BATT_COLOR[] = TR_MID_BATT_COLOR;
|
||||
const char STR_HIGH_BATT_COLOR[] = TR_HIGH_BATT_COLOR;
|
||||
const char STR_WIDGET_SIZE[] = TR_WIDGET_SIZE;
|
||||
#endif
|
||||
|
||||
const char STR_MIX_SLOW_PREC[] = TR_MIX_SLOW_PREC;
|
||||
|
||||
@@ -1272,6 +1272,7 @@ extern const char STR_RADIO_INFO_WIDGET[];
|
||||
extern const char STR_LOW_BATT_COLOR[];
|
||||
extern const char STR_MID_BATT_COLOR[];
|
||||
extern const char STR_HIGH_BATT_COLOR[];
|
||||
extern const char STR_WIDGET_SIZE[];
|
||||
#endif
|
||||
|
||||
extern const char STR_MIX_SLOW_PREC[];
|
||||
|
||||
@@ -1302,3 +1302,5 @@
|
||||
#define TR_LOW_BATT_COLOR "低电量"
|
||||
#define TR_MID_BATT_COLOR "中电量"
|
||||
#define TR_HIGH_BATT_COLOR "高电量"
|
||||
|
||||
#define TR_WIDGET_SIZE "小部件尺寸"
|
||||
|
||||
@@ -1315,3 +1315,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Vybitá baterie"
|
||||
#define TR_MID_BATT_COLOR "Středně nabitá baterie"
|
||||
#define TR_HIGH_BATT_COLOR "Plně nabitá baterie"
|
||||
|
||||
#define TR_WIDGET_SIZE "Velikost widgetu"
|
||||
|
||||
@@ -1315,3 +1315,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Batteri lavt"
|
||||
#define TR_MID_BATT_COLOR "Batteri medio"
|
||||
#define TR_HIGH_BATT_COLOR "Batteri højt"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget størrelse"
|
||||
|
||||
@@ -1306,3 +1306,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Farbe Akku fast leer"
|
||||
#define TR_MID_BATT_COLOR "Farbe Akku mittel"
|
||||
#define TR_HIGH_BATT_COLOR "Farbe Akku voll"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget Größe"
|
||||
|
||||
@@ -1301,3 +1301,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Low battery"
|
||||
#define TR_MID_BATT_COLOR "Mid battery"
|
||||
#define TR_HIGH_BATT_COLOR "High battery"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget size"
|
||||
|
||||
@@ -1303,3 +1303,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Low battery"
|
||||
#define TR_MID_BATT_COLOR "Mid battery"
|
||||
#define TR_HIGH_BATT_COLOR "High battery"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget size"
|
||||
|
||||
@@ -1319,3 +1319,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Low battery"
|
||||
#define TR_MID_BATT_COLOR "Mid battery"
|
||||
#define TR_HIGH_BATT_COLOR "High battery"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget size"
|
||||
|
||||
@@ -1318,3 +1318,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Low battery"
|
||||
#define TR_MID_BATT_COLOR "Mid battery"
|
||||
#define TR_HIGH_BATT_COLOR "High battery"
|
||||
|
||||
#define TR_WIDGET_SIZE "Taille Widget"
|
||||
|
||||
@@ -1302,3 +1302,5 @@
|
||||
#define TR_LOW_BATT_COLOR "מתח סוללה נמוך"
|
||||
#define TR_MID_BATT_COLOR "מתח סוללה בינוני"
|
||||
#define TR_HIGH_BATT_COLOR "מתח סוללה גבוה"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget size"
|
||||
|
||||
@@ -1280,7 +1280,6 @@
|
||||
#define TR_RADIO_MENU_TABS "Schede del Menu Radio"
|
||||
#define TR_MODEL_MENU_TABS "Schede del Menu Modello"
|
||||
|
||||
|
||||
#define TR_SELECT_MENU_ALL "Tutto"
|
||||
#define TR_SELECT_MENU_CLR "Pulisci"
|
||||
#define TR_SELECT_MENU_INV "Inverti"
|
||||
@@ -1298,3 +1297,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Batteria scarica"
|
||||
#define TR_MID_BATT_COLOR "Batteria media"
|
||||
#define TR_HIGH_BATT_COLOR "Batteria carica"
|
||||
|
||||
#define TR_WIDGET_SIZE "Dimensione widget"
|
||||
|
||||
@@ -1302,3 +1302,5 @@
|
||||
#define TR_LOW_BATT_COLOR "バッテリー低"
|
||||
#define TR_MID_BATT_COLOR "バッテリー中"
|
||||
#define TR_HIGH_BATT_COLOR "バッテリー高"
|
||||
|
||||
#define TR_WIDGET_SIZE "ウィジェットサイズ"
|
||||
|
||||
@@ -1309,3 +1309,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Low battery"
|
||||
#define TR_MID_BATT_COLOR "Mid battery"
|
||||
#define TR_HIGH_BATT_COLOR "High battery"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget size"
|
||||
|
||||
@@ -1302,3 +1302,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Rozładowana bateria"
|
||||
#define TR_MID_BATT_COLOR "Średni stan baterii"
|
||||
#define TR_HIGH_BATT_COLOR "Naładowana bateria"
|
||||
|
||||
#define TR_WIDGET_SIZE "Rozmiar widżetu"
|
||||
|
||||
@@ -1306,3 +1306,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Bateria Baixa"
|
||||
#define TR_MID_BATT_COLOR "Bateria Média"
|
||||
#define TR_HIGH_BATT_COLOR "Bateria Alta"
|
||||
|
||||
#define TR_WIDGET_SIZE "Tamanho do widget"
|
||||
|
||||
@@ -1305,3 +1305,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Разряженная АКБ"
|
||||
#define TR_MID_BATT_COLOR "Середина АКБ "
|
||||
#define TR_HIGH_BATT_COLOR "Заряженная АКБ"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widget size"
|
||||
|
||||
@@ -1337,3 +1337,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Lågt batteri"
|
||||
#define TR_MID_BATT_COLOR "Medium batteri"
|
||||
#define TR_HIGH_BATT_COLOR "Högt batteri"
|
||||
|
||||
#define TR_WIDGET_SIZE "Widgetstorlek"
|
||||
|
||||
@@ -1307,3 +1307,5 @@
|
||||
#define TR_LOW_BATT_COLOR "低電量"
|
||||
#define TR_MID_BATT_COLOR "中電量"
|
||||
#define TR_HIGH_BATT_COLOR "高電量"
|
||||
|
||||
#define TR_WIDGET_SIZE "小部件尺寸"
|
||||
|
||||
@@ -1301,3 +1301,5 @@
|
||||
#define TR_LOW_BATT_COLOR "Розряджена батарея"
|
||||
#define TR_MID_BATT_COLOR "Середній заряд батареї"
|
||||
#define TR_HIGH_BATT_COLOR "Заряджена батарея"
|
||||
|
||||
#define TR_WIDGET_SIZE "Розмір віджета"
|
||||
|
||||
Reference in New Issue
Block a user