From 312a2358dcda98c24dbaf79874eaa358090853d4 Mon Sep 17 00:00:00 2001 From: Risto Date: Thu, 16 Mar 2023 08:13:11 +0100 Subject: [PATCH] feat(color): Increase max possible widget screens to 10 (#3073) * Elevate telemetry screen count from 5 to 10 on color radios. * Cpn increase max custom screens * fix(color): Missing Add tab button on max-1 addTab was not called when adding screens dynamically --------- Co-authored-by: elecpower Co-authored-by: Peter Feerick --- companion/src/firmwares/customisation_data.h | 2 +- .../default_theme/mask_theme_view10.png | Bin 0 -> 3345 bytes .../default_theme/mask_theme_view9.png | Bin 0 -> 3197 bytes radio/src/dataconstants.h | 2 +- radio/src/datastructs.h | 6 +++--- radio/src/gui/colorlcd/bitmaps.cpp | 20 ++++++++++++++++++ radio/src/gui/colorlcd/menus.h | 5 +++++ radio/src/gui/colorlcd/screen_setup.cpp | 2 +- radio/src/gui/colorlcd/themes/flysky.cpp | 5 +++++ .../storage/yaml/yaml_datastructs_nv14.cpp | 2 +- .../src/storage/yaml/yaml_datastructs_x10.cpp | 2 +- .../storage/yaml/yaml_datastructs_x12s.cpp | 2 +- 12 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 radio/src/bitmaps/480x272/default_theme/mask_theme_view10.png create mode 100644 radio/src/bitmaps/480x272/default_theme/mask_theme_view9.png diff --git a/companion/src/firmwares/customisation_data.h b/companion/src/firmwares/customisation_data.h index d7c71fb79..9fe6f58a8 100644 --- a/companion/src/firmwares/customisation_data.h +++ b/companion/src/firmwares/customisation_data.h @@ -30,7 +30,7 @@ */ -constexpr int MAX_CUSTOM_SCREENS {5}; +constexpr int MAX_CUSTOM_SCREENS {10}; constexpr int THEME_NAME_LEN {8}; constexpr int MAX_THEME_OPTIONS {5}; constexpr int LEN_ZONE_OPTION_STRING {8}; diff --git a/radio/src/bitmaps/480x272/default_theme/mask_theme_view10.png b/radio/src/bitmaps/480x272/default_theme/mask_theme_view10.png new file mode 100644 index 0000000000000000000000000000000000000000..c7490aea173c7a406a78b7741032d4f74ed4d37a GIT binary patch literal 3345 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 btGRvy(7*=+j;Dd=00000NkvXXu0mjf`Z`_Z literal 0 HcmV?d00001 diff --git a/radio/src/bitmaps/480x272/default_theme/mask_theme_view9.png b/radio/src/bitmaps/480x272/default_theme/mask_theme_view9.png new file mode 100644 index 0000000000000000000000000000000000000000..5fe44287f173e6e9d42e73b7cf6ed1af7bd1f823 GIT binary patch literal 3197 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 literal 0 HcmV?d00001 diff --git a/radio/src/dataconstants.h b/radio/src/dataconstants.h index 67d67d9a3..f147326a9 100644 --- a/radio/src/dataconstants.h +++ b/radio/src/dataconstants.h @@ -54,7 +54,7 @@ #define DEF_TRAINER_CHANNELS 8 #define MAX_TRAINER_CHANNELS 16 #define MAX_TELEMETRY_SENSORS 60 - #define MAX_CUSTOM_SCREENS 5 + #define MAX_CUSTOM_SCREENS 10 #elif defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) #define MAX_MODELS 60 #define MAX_OUTPUT_CHANNELS 32 // number of real output channels CH1-CH32 diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 3e211bd3e..70ff8af95 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -140,14 +140,14 @@ static inline void check_struct() #elif defined(PCBHORUS) #if defined(PCBX10) CHKSIZE(RadioData, 924); - CHKSIZE(ModelData, 11128); + CHKSIZE(ModelData, 15378); #else CHKSIZE(RadioData, 906); - CHKSIZE(ModelData, 11126); + CHKSIZE(ModelData, 15376); #endif #elif defined(PCBNV14) CHKSIZE(RadioData, 852); - CHKSIZE(ModelData, 10942); + CHKSIZE(ModelData, 15192); #endif #undef CHKSIZE diff --git a/radio/src/gui/colorlcd/bitmaps.cpp b/radio/src/gui/colorlcd/bitmaps.cpp index 5c279b55f..90b887164 100644 --- a/radio/src/gui/colorlcd/bitmaps.cpp +++ b/radio/src/gui/colorlcd/bitmaps.cpp @@ -197,6 +197,21 @@ static const uint8_t mask_theme_view4[] = { static const uint8_t mask_theme_view5[] = { #include "mask_theme_view5.lbm" }; +static const uint8_t mask_theme_view6[] = { +#include "mask_theme_view6.lbm" +}; +static const uint8_t mask_theme_view7[] = { +#include "mask_theme_view7.lbm" +}; +static const uint8_t mask_theme_view8[] = { +#include "mask_theme_view8.lbm" +}; +static const uint8_t mask_theme_view9[] = { +#include "mask_theme_view9.lbm" +}; +static const uint8_t mask_theme_view10[] = { +#include "mask_theme_view10.lbm" +}; static const uint8_t stick_pointer[] = { #include "alpha_stick_pointer.lbm" }; @@ -337,6 +352,11 @@ static const _BuiltinIcon _builtinIcons[] = { {ICON_THEME_VIEW3, mask_theme_view3}, {ICON_THEME_VIEW4, mask_theme_view4}, {ICON_THEME_VIEW5, mask_theme_view5}, + {ICON_THEME_VIEW6, mask_theme_view6}, + {ICON_THEME_VIEW7, mask_theme_view7}, + {ICON_THEME_VIEW8, mask_theme_view8}, + {ICON_THEME_VIEW9, mask_theme_view9}, + {ICON_THEME_VIEW10, mask_theme_view10}, {ICON_THEME_ADD_VIEW, mask_theme_add_view}, {ICON_STATS, mask_menu_stats}, {ICON_STATS_THROTTLE_GRAPH, mask_stats_throttle_graph}, diff --git a/radio/src/gui/colorlcd/menus.h b/radio/src/gui/colorlcd/menus.h index 3192414e2..4d5350d1c 100644 --- a/radio/src/gui/colorlcd/menus.h +++ b/radio/src/gui/colorlcd/menus.h @@ -65,6 +65,11 @@ enum MenuIcons { ICON_THEME_VIEW3, ICON_THEME_VIEW4, ICON_THEME_VIEW5, + ICON_THEME_VIEW6, + ICON_THEME_VIEW7, + ICON_THEME_VIEW8, + ICON_THEME_VIEW9, + ICON_THEME_VIEW10, ICON_THEME_ADD_VIEW, ICON_STATS, ICON_STATS_THROTTLE_GRAPH, diff --git a/radio/src/gui/colorlcd/screen_setup.cpp b/radio/src/gui/colorlcd/screen_setup.cpp index a70cd2a41..e7c996760 100644 --- a/radio/src/gui/colorlcd/screen_setup.cpp +++ b/radio/src/gui/colorlcd/screen_setup.cpp @@ -150,7 +150,7 @@ void ScreenAddPage::build(FormWindow * window) menu->addTab(tab); menu->setCurrentTab(pageIndex); - if (menu->getTabs() < MAX_CUSTOM_SCREENS) { + if (menu->getTabs() <= MAX_CUSTOM_SCREENS) { menu->addTab(new ScreenAddPage(menu, menu->getTabs())); } } diff --git a/radio/src/gui/colorlcd/themes/flysky.cpp b/radio/src/gui/colorlcd/themes/flysky.cpp index afeb2006b..b99396881 100644 --- a/radio/src/gui/colorlcd/themes/flysky.cpp +++ b/radio/src/gui/colorlcd/themes/flysky.cpp @@ -150,6 +150,11 @@ class FlyskyTheme: public OpenTxTheme loadMenuIcon(ICON_THEME_VIEW3, "mask_theme_view3.png"); loadMenuIcon(ICON_THEME_VIEW4, "mask_theme_view4.png"); loadMenuIcon(ICON_THEME_VIEW5, "mask_theme_view5.png"); + loadMenuIcon(ICON_THEME_VIEW6, "mask_theme_view6.png"); + loadMenuIcon(ICON_THEME_VIEW7, "mask_theme_view7.png"); + loadMenuIcon(ICON_THEME_VIEW8, "mask_theme_view8.png"); + loadMenuIcon(ICON_THEME_VIEW9, "mask_theme_view9.png"); + loadMenuIcon(ICON_THEME_VIEW10, "mask_theme_view10.png"); loadMenuIcon(ICON_THEME_ADD_VIEW, "mask_theme_add_view.png"); loadMenuIcon(ICON_MONITOR, "mask_monitor.png"); loadMenuIcon(ICON_MONITOR_CHANNELS1, "mask_monitor_channels1.png"); diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index 8e2dc464e..94d24b4dd 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -891,7 +891,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 16 ), YAML_ARRAY("potsWarnPosition", 8, 5, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_ARRAY("screenData", 6800, 5, struct_CustomScreenData, NULL), + YAML_ARRAY("screenData", 6800, 10, struct_CustomScreenData, NULL), YAML_STRUCT("topbarData", 1248, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), diff --git a/radio/src/storage/yaml/yaml_datastructs_x10.cpp b/radio/src/storage/yaml/yaml_datastructs_x10.cpp index 38a99757a..c0a7e4642 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x10.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x10.cpp @@ -922,7 +922,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 16 ), YAML_ARRAY("potsWarnPosition", 8, 11, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_ARRAY("screenData", 6800, 5, struct_CustomScreenData, NULL), + YAML_ARRAY("screenData", 6800, 10, struct_CustomScreenData, NULL), YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), diff --git a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp index bb5a11898..3c5239b9d 100644 --- a/radio/src/storage/yaml/yaml_datastructs_x12s.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_x12s.cpp @@ -920,7 +920,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 16 ), YAML_ARRAY("potsWarnPosition", 8, 9, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_ARRAY("screenData", 6800, 5, struct_CustomScreenData, NULL), + YAML_ARRAY("screenData", 6800, 10, struct_CustomScreenData, NULL), YAML_STRUCT("topbarData", 2400, struct_TopBarPersistentData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8),