diff --git a/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/crossfire.lua b/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/crossfire.lua index 9d39e90be..7ac2014b7 100644 --- a/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/crossfire.lua +++ b/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/crossfire.lua @@ -97,7 +97,7 @@ local function run(event) lcd.clear() lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5,"CROSSFIRE SETUP", MENU_TITLE_COLOR) + lcd.drawText(1, 5,"CROSSFIRE SETUP", MENU_COLOR) if #devices == 0 then diff --git a/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/device.lua b/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/device.lua index e8d8be6db..e6d8e54fe 100644 --- a/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/device.lua +++ b/radio/sdcard/horus/SCRIPTS/TOOLS/CROSSFIRE/device.lua @@ -470,7 +470,7 @@ local function runDevicePage(event) lcd.clear() lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5,deviceName, MENU_TITLE_COLOR) + lcd.drawText(1, 5,deviceName, MENU_COLOR) for y = 1, 11 do local field = getField(pageOffset+y) diff --git a/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky GaSuite.lua b/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky GaSuite.lua index df7fce8ce..7613742ef 100755 --- a/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky GaSuite.lua +++ b/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky GaSuite.lua @@ -47,8 +47,8 @@ local function drawScreenTitle(title,page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SBEC.lua b/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SBEC.lua index 1b82bc47f..1310fe95d 100644 --- a/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SBEC.lua +++ b/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SBEC.lua @@ -39,8 +39,8 @@ local function drawScreenTitle(title,page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SxR.lua b/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SxR.lua index c49b78f52..31c41a7f3 100755 --- a/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SxR.lua +++ b/radio/sdcard/horus/SCRIPTS/TOOLS/FrSky SxR.lua @@ -86,8 +86,8 @@ local function drawScreenTitle(title, page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W - 40, 5, page .. "/" .. pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W - 40, 5, page .. "/" .. pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/horus/SxR Calibrate/SxR_Calibrate.lua b/radio/sdcard/horus/SxR Calibrate/SxR_Calibrate.lua index c6f5ee269..ac2c6e9ea 100755 --- a/radio/sdcard/horus/SxR Calibrate/SxR_Calibrate.lua +++ b/radio/sdcard/horus/SxR Calibrate/SxR_Calibrate.lua @@ -77,8 +77,8 @@ local calibrationFields = { local function drawScreenTitle(title,page, pages) lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) end -- Change display attribute to current field diff --git a/radio/sdcard/nv14/CROSSFIRE/crossfire.lua b/radio/sdcard/nv14/CROSSFIRE/crossfire.lua index 10f04ce41..96e5ce3e8 100644 --- a/radio/sdcard/nv14/CROSSFIRE/crossfire.lua +++ b/radio/sdcard/nv14/CROSSFIRE/crossfire.lua @@ -97,7 +97,7 @@ local function run(event) lcd.clear() lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5,"CROSSFIRE SETUP", MENU_TITLE_COLOR) + lcd.drawText(1, 5,"CROSSFIRE SETUP", MENU_COLOR) if #devices == 0 then diff --git a/radio/sdcard/nv14/CROSSFIRE/device.lua b/radio/sdcard/nv14/CROSSFIRE/device.lua index 811f01847..fe477825f 100644 --- a/radio/sdcard/nv14/CROSSFIRE/device.lua +++ b/radio/sdcard/nv14/CROSSFIRE/device.lua @@ -471,7 +471,7 @@ local function runDevicePage(event) lcd.clear() lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5,deviceName, MENU_TITLE_COLOR) + lcd.drawText(1, 5,deviceName, MENU_COLOR) for y = 1, 11 do local field = getField(pageOffset+y) diff --git a/radio/sdcard/nv14/SxR/SxR.lua b/radio/sdcard/nv14/SxR/SxR.lua index 8cc704be8..7beab4101 100755 --- a/radio/sdcard/nv14/SxR/SxR.lua +++ b/radio/sdcard/nv14/SxR/SxR.lua @@ -75,8 +75,8 @@ local calibrationFields = { local function drawScreenTitle(title,page, pages) lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) end -- Change display attribute to current field diff --git a/radio/sdcard/nv14/SxR/SxR_Calibrate.lua b/radio/sdcard/nv14/SxR/SxR_Calibrate.lua index c6f5ee269..ac2c6e9ea 100755 --- a/radio/sdcard/nv14/SxR/SxR_Calibrate.lua +++ b/radio/sdcard/nv14/SxR/SxR_Calibrate.lua @@ -77,8 +77,8 @@ local calibrationFields = { local function drawScreenTitle(title,page, pages) lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) end -- Change display attribute to current field diff --git a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky GaSuite.lua b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky GaSuite.lua index df7fce8ce..7613742ef 100755 --- a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky GaSuite.lua +++ b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky GaSuite.lua @@ -47,8 +47,8 @@ local function drawScreenTitle(title,page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SBEC.lua b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SBEC.lua index 1b82bc47f..1310fe95d 100644 --- a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SBEC.lua +++ b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SBEC.lua @@ -39,8 +39,8 @@ local function drawScreenTitle(title,page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SxR.lua b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SxR.lua index c49b78f52..31c41a7f3 100755 --- a/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SxR.lua +++ b/radio/sdcard/taranis-x7/SCRIPTS/TOOLS/FrSky SxR.lua @@ -86,8 +86,8 @@ local function drawScreenTitle(title, page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W - 40, 5, page .. "/" .. pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W - 40, 5, page .. "/" .. pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky GaSuite.lua b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky GaSuite.lua index df7fce8ce..7613742ef 100755 --- a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky GaSuite.lua +++ b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky GaSuite.lua @@ -47,8 +47,8 @@ local function drawScreenTitle(title,page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SBEC.lua b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SBEC.lua index 1b82bc47f..1310fe95d 100644 --- a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SBEC.lua +++ b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SBEC.lua @@ -39,8 +39,8 @@ local function drawScreenTitle(title,page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W-40, 5, page.."/"..pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SxR.lua b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SxR.lua index c49b78f52..31c41a7f3 100755 --- a/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SxR.lua +++ b/radio/sdcard/taranis-x9/SCRIPTS/TOOLS/FrSky SxR.lua @@ -86,8 +86,8 @@ local function drawScreenTitle(title, page, pages) end if LCD_W == 480 then lcd.drawFilledRectangle(0, 0, LCD_W, 30, TITLE_BGCOLOR) - lcd.drawText(1, 5, title, MENU_TITLE_COLOR) - lcd.drawText(LCD_W - 40, 5, page .. "/" .. pages, MENU_TITLE_COLOR) + lcd.drawText(1, 5, title, MENU_COLOR) + lcd.drawText(LCD_W - 40, 5, page .. "/" .. pages, MENU_COLOR) else lcd.drawScreenTitle(title, page, pages) end diff --git a/radio/src/gui/colorlcd/CMakeLists.txt b/radio/src/gui/colorlcd/CMakeLists.txt index 64648e2a5..22424afb7 100644 --- a/radio/src/gui/colorlcd/CMakeLists.txt +++ b/radio/src/gui/colorlcd/CMakeLists.txt @@ -16,8 +16,10 @@ set(GUI_SRC fonts.cpp curves.cpp bitmaps.cpp - theme.cpp + tabsgroup.cpp + page.cpp + fab_button.cpp # topbar.cpp layout.cpp # widget.cpp diff --git a/radio/src/gui/colorlcd/colors.h b/radio/src/gui/colorlcd/colors.h index 222591a10..e163627fb 100644 --- a/radio/src/gui/colorlcd/colors.h +++ b/radio/src/gui/colorlcd/colors.h @@ -38,12 +38,12 @@ #define TEXT_STATUSBAR_COLOR COLOR(TEXT_STATUSBAR_COLOR_INDEX) #define LINE_COLOR COLOR(LINE_COLOR_INDEX) #define HEADER_SEPARATOR_COLOR COLOR(HEADER_SEPARATOR_COLOR_INDEX) -#define MENU_TITLE_BGCOLOR COLOR(MENU_TITLE_BGCOLOR_INDEX) -#define MENU_TITLE_COLOR COLOR(MENU_TITLE_COLOR_INDEX) +#define MENU_BGCOLOR COLOR(MENU_BGCOLOR_INDEX) +#define MENU_COLOR COLOR(MENU_COLOR_INDEX) #define MENU_TITLE_DISABLE_COLOR COLOR(MENU_TITLE_DISABLE_COLOR_INDEX) #define HEADER_COLOR COLOR(HEADER_COLOR_INDEX) #define ALARM_COLOR COLOR(ALARM_COLOR_INDEX) -#define WARNING_COLOR COLOR(WARNING_COLOR_INDEX) +#define HIGHLIGHT_COLOR COLOR(HIGHLIGHT_COLOR_INDEX) #define TEXT_DISABLE_COLOR COLOR(TEXT_DISABLE_COLOR_INDEX) #define CURVE_COLOR COLOR(CURVE_COLOR_INDEX) #define CURVE_CURSOR_COLOR COLOR(CURVE_CURSOR_COLOR_INDEX) diff --git a/radio/src/gui/colorlcd/draw_functions.cpp b/radio/src/gui/colorlcd/draw_functions.cpp index 3d476740a..45c542dbb 100644 --- a/radio/src/gui/colorlcd/draw_functions.cpp +++ b/radio/src/gui/colorlcd/draw_functions.cpp @@ -27,7 +27,7 @@ void drawStatusText(BitmapBuffer * dc, const char * text) void drawColumnHeader(BitmapBuffer * dc, const char * const * headers, const char * const * descriptions, uint8_t index) { - dc->drawText(LCD_W-MENUS_MARGIN_LEFT, MENU_TITLE_TOP + 2, headers[index], RIGHT | SMLSIZE | MENU_TITLE_COLOR); + dc->drawText(LCD_W-MENUS_MARGIN_LEFT, MENU_TITLE_TOP + 2, headers[index], RIGHT | SMLSIZE | MENU_COLOR); if (descriptions) { drawStatusText(dc, descriptions[index]); } @@ -169,7 +169,6 @@ void drawHorizontalSlider(BitmapBuffer * dc, coord_t x, coord_t y, int len, int } } -#if defined(GVARS) bool noZero(int val) { return val != 0; @@ -188,7 +187,6 @@ void drawValueOrGVar(BitmapBuffer * dc, coord_t x, coord_t y, gvar_t value, LcdF { dc->drawNumber(x, y, value, flags, 0, nullptr, "%"); } -#endif void drawSleepBitmap() { diff --git a/radio/src/gui/colorlcd/fab_button.cpp b/radio/src/gui/colorlcd/fab_button.cpp new file mode 100644 index 000000000..70d5f41a2 --- /dev/null +++ b/radio/src/gui/colorlcd/fab_button.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) OpenTX + * + * Source: + * https://github.com/opentx/libopenui + * + * This file is a part of libopenui library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#include "libopenui_config.h" +#include "fab_button.h" +#include "font.h" +#include "theme.h" + +const uint8_t __alpha_button_on[] { +#include "alpha_button_on.lbm" +}; +Bitmap ALPHA_BUTTON_ON(BMP_ARGB4444, (const uint16_t*)__alpha_button_on); + +const uint8_t __alpha_button_off[] { +#include "alpha_button_off.lbm" +}; +Bitmap ALPHA_BUTTON_OFF(BMP_ARGB4444, (const uint16_t*)__alpha_button_off); + + +FabButton::FabButton(Window * parent, coord_t x, coord_t y, uint8_t icon, std::function pressHandler, uint8_t flags): + Button(parent, { x - 34, y - 34, 68, 68 }, pressHandler, flags), + icon(icon) +{ +} + +void FabButton::paint(BitmapBuffer * dc) +{ + dc->drawBitmap(0, 0, checked() ? &ALPHA_BUTTON_ON : &ALPHA_BUTTON_OFF); + const BitmapBuffer * mask = theme->getIconMask(icon); + if (mask) { + dc->drawMask((68 - mask->getWidth()) / 2, (68 - mask->getHeight()) / 2, mask, DEFAULT_BGCOLOR); + } +} diff --git a/radio/src/gui/colorlcd/fab_button.h b/radio/src/gui/colorlcd/fab_button.h new file mode 100644 index 000000000..344474c55 --- /dev/null +++ b/radio/src/gui/colorlcd/fab_button.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) OpenTX + * + * Source: + * https://github.com/opentx/libopenui + * + * This file is a part of libopenui library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#ifndef _FAB_ICON_BUTTON_H_ +#define _FAB_ICON_BUTTON_H_ + +#include "button.h" + +class FabButton: public Button { + public: + FabButton(Window * parent, coord_t x, coord_t y, uint8_t icon, std::function pressHandler, uint8_t flags=0); + +#if defined(DEBUG_WINDOWS) + std::string getName() override + { + return "FabButton(" + std::to_string(icon) + ")"; + } +#endif + + void paint(BitmapBuffer * dc) override; + + protected: + uint8_t icon; +}; + +#endif diff --git a/radio/src/gui/colorlcd/fullscreen_dialog.cpp b/radio/src/gui/colorlcd/fullscreen_dialog.cpp index e08594fd0..d871ad7be 100644 --- a/radio/src/gui/colorlcd/fullscreen_dialog.cpp +++ b/radio/src/gui/colorlcd/fullscreen_dialog.cpp @@ -30,7 +30,7 @@ FullScreenDialog::FullScreenDialog(uint8_t type, std::string title, std::string confirmHandler(confirmHandler) { #if defined(HARDWARE_TOUCH) - new FabIconButton(this, LCD_W - 50, ALERT_BUTTON_TOP, ICON_NEXT, + new FabButton(this, LCD_W - 50, ALERT_BUTTON_TOP, ICON_NEXT, [=]() -> uint8_t { if (confirmHandler) confirmHandler(); diff --git a/radio/src/gui/colorlcd/lcd.cpp b/radio/src/gui/colorlcd/lcd.cpp index fd72e916f..a281bf3ba 100644 --- a/radio/src/gui/colorlcd/lcd.cpp +++ b/radio/src/gui/colorlcd/lcd.cpp @@ -210,3 +210,8 @@ void DMABitmapConvert(uint16_t * dest, const uint8_t * src, uint16_t w, uint16_t } } #endif + +event_t getWindowEvent() +{ + return getEvent(false); +} diff --git a/radio/src/gui/colorlcd/libopenui.h b/radio/src/gui/colorlcd/libopenui.h index 9a581eeae..fc5b2ff46 100644 --- a/radio/src/gui/colorlcd/libopenui.h +++ b/radio/src/gui/colorlcd/libopenui.h @@ -28,7 +28,7 @@ #include "mainwindow.h" #include "static.h" #include "button.h" -#include "fab_icon_button.h" +#include "fab_button.h" #include "checkbox.h" #include "numberedit.h" #include "timeedit.h" diff --git a/radio/src/gui/colorlcd/model_curves.cpp b/radio/src/gui/colorlcd/model_curves.cpp index d1609d4e8..2e052ee6f 100644 --- a/radio/src/gui/colorlcd/model_curves.cpp +++ b/radio/src/gui/colorlcd/model_curves.cpp @@ -40,10 +40,10 @@ class CurveEditWindow : public Page { void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENUCURVE, MENU_TITLE_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENUCURVE, MENU_COLOR); char s[16]; strAppendStringWithIndex(s, STR_CV, index + 1); - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, s, MENU_TITLE_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, s, MENU_COLOR); } #if LCD_W > LCD_H diff --git a/radio/src/gui/colorlcd/model_flightmodes.cpp b/radio/src/gui/colorlcd/model_flightmodes.cpp index b542e682e..4de3fe53f 100644 --- a/radio/src/gui/colorlcd/model_flightmodes.cpp +++ b/radio/src/gui/colorlcd/model_flightmodes.cpp @@ -55,7 +55,7 @@ class FlightModeGroup: public FormGroup void paint(BitmapBuffer * dc) override { if (index == getFlightMode()) { - dc->drawSolidFilledRect(0, 0, width(), height(), WARNING_COLOR); + dc->drawSolidFilledRect(0, 0, width(), height(), HIGHLIGHT_COLOR); } FormGroup::paint(dc); } diff --git a/radio/src/gui/colorlcd/model_gvars.cpp b/radio/src/gui/colorlcd/model_gvars.cpp index 7dc143993..881ec4601 100644 --- a/radio/src/gui/colorlcd/model_gvars.cpp +++ b/radio/src/gui/colorlcd/model_gvars.cpp @@ -132,16 +132,16 @@ void GVarRenderer::paint(BitmapBuffer * dc) { lastFlightMode = getFlightMode(); FlightModeData * fmData = &g_model.flightModeData[lastFlightMode]; lastGVar = fmData->gvars[index]; - drawStringWithIndex(0, TEXT_OFFSET_TOP, TR_GV, index + 1, MENU_TITLE_COLOR); + drawStringWithIndex(0, TEXT_OFFSET_TOP, TR_GV, index + 1, MENU_COLOR); if (lastGVar > GVAR_MAX) { uint8_t fm = lastGVar - GVAR_MAX - 1; if (fm >= lastFlightMode) fm++; char label[16]; getFlightModeString(label, fm + 1); - dc->drawSizedText(GVAR_NAME_SIZE, TEXT_OFFSET_TOP, label, strlen(label), MENU_TITLE_COLOR); + dc->drawSizedText(GVAR_NAME_SIZE, TEXT_OFFSET_TOP, label, strlen(label), MENU_COLOR); } else { - drawGVarValue(dc, GVAR_NAME_SIZE, TEXT_OFFSET_TOP, index, lastGVar, MENU_TITLE_COLOR); + drawGVarValue(dc, GVAR_NAME_SIZE, TEXT_OFFSET_TOP, index, lastGVar, MENU_COLOR); } } @@ -165,7 +165,7 @@ const std::string GVarEditWindow::unitPercent = "%"; void GVarEditWindow::buildHeader(Window * window) { - new StaticText(window, {70, 4, window->width() - 70, 20}, STR_GLOBAL_VAR, MENU_TITLE_COLOR); + new StaticText(window, {70, 4, window->width() - 70, 20}, STR_GLOBAL_VAR, MENU_COLOR); gVarInHeader = new GVarRenderer(window, {70, 28, window->width() - 70, 20}, index); } void GVarEditWindow::checkEvents() { diff --git a/radio/src/gui/colorlcd/model_inputs.cpp b/radio/src/gui/colorlcd/model_inputs.cpp index 493c54f3a..054b05c34 100644 --- a/radio/src/gui/colorlcd/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model_inputs.cpp @@ -119,8 +119,8 @@ class InputEditWindow: public Page { Choice * curveTypeChoice = nullptr; void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENUINPUTS, MENU_TITLE_COLOR); - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, getSourceString(MIXSRC_FIRST_INPUT + input), MENU_TITLE_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENUINPUTS, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, getSourceString(MIXSRC_FIRST_INPUT + input), MENU_COLOR); } void updateCurves() { @@ -312,7 +312,7 @@ void CommonInputOrMixButton::drawFlightModes(BitmapBuffer *dc, FlightModesType v void CommonInputOrMixButton::paint(BitmapBuffer * dc) { if (active) - dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, WARNING_COLOR); + dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, HIGHLIGHT_COLOR); paintBody(dc); dc->drawSolidRect(0, 0, rect.w, rect.h, 2, hasFocus() ? CHECKBOX_COLOR : DISABLE_COLOR); } diff --git a/radio/src/gui/colorlcd/model_logical_switches.cpp b/radio/src/gui/colorlcd/model_logical_switches.cpp index 07b8acbd0..36694b5f6 100644 --- a/radio/src/gui/colorlcd/model_logical_switches.cpp +++ b/radio/src/gui/colorlcd/model_logical_switches.cpp @@ -64,14 +64,14 @@ class LogicalSwitchEditPage: public Page { { Page::checkEvents(); if (active != isActive()) { - headerSwitchName->setFlags(isActive() ? BOLD|WARNING_COLOR : MENU_TITLE_COLOR); + headerSwitchName->setFlags(isActive() ? BOLD|HIGHLIGHT_COLOR : MENU_COLOR); active = !active; } } void buildHeader(Window * window) { - new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT }, STR_MENULOGICALSWITCHES, MENU_TITLE_COLOR); - headerSwitchName = new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT }, getSwitchPositionName(SWSRC_SW1 + index), MENU_TITLE_COLOR); + new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT }, STR_MENULOGICALSWITCHES, MENU_COLOR); + headerSwitchName = new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT }, getSwitchPositionName(SWSRC_SW1 + index), MENU_COLOR); } void updateLogicalSwitchOneWindow(FormField * functionChoice) @@ -311,7 +311,7 @@ class LogicalSwitchButton : public Button { void paint(BitmapBuffer * dc) override { if (active) - dc->drawSolidFilledRect(2, 2, rect.w-4, rect.h-4, WARNING_COLOR); + dc->drawSolidFilledRect(2, 2, rect.w-4, rect.h-4, HIGHLIGHT_COLOR); paintLogicalSwitchLine(dc); diff --git a/radio/src/gui/colorlcd/model_mixes.cpp b/radio/src/gui/colorlcd/model_mixes.cpp index cfefa9436..989fd139a 100644 --- a/radio/src/gui/colorlcd/model_mixes.cpp +++ b/radio/src/gui/colorlcd/model_mixes.cpp @@ -72,8 +72,8 @@ class MixEditWindow : public Page { void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MIXER, MENU_TITLE_COLOR); - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, getSourceString(MIXSRC_CH1 + channel), MENU_TITLE_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MIXER, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, getSourceString(MIXSRC_CH1 + channel), MENU_COLOR); } void updateCurves() diff --git a/radio/src/gui/colorlcd/model_outputs.cpp b/radio/src/gui/colorlcd/model_outputs.cpp index 9521d0e09..132285355 100644 --- a/radio/src/gui/colorlcd/model_outputs.cpp +++ b/radio/src/gui/colorlcd/model_outputs.cpp @@ -39,8 +39,8 @@ class OutputEditWindow : public Page { void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENULIMITS, MENU_TITLE_COLOR); - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, getSourceString(MIXSRC_CH1 + channel), MENU_TITLE_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_MENULIMITS, MENU_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, getSourceString(MIXSRC_CH1 + channel), MENU_COLOR); } void buildBody(Window * window) diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 3d1640417..dcc097fcb 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -497,7 +497,7 @@ class ModuleWindow : public Window { // Module Type new StaticText(this, grid.getLabelSlot(true), STR_MODE); - moduleChoice = new Choice(this, grid.getFieldSlot(), STR_INTERNAL_MODULE_PROTOCOLS, + moduleChoice = new Choice(this, grid.getFieldSlot(2, 0), STR_INTERNAL_MODULE_PROTOCOLS, MODULE_TYPE_NONE, MODULE_TYPE_COUNT - 1, GET_DEFAULT(g_model.moduleData[moduleIdx].type), [=](int32_t newValue) { diff --git a/radio/src/gui/colorlcd/model_telemetry.cpp b/radio/src/gui/colorlcd/model_telemetry.cpp index ee92df68c..6ae4135d5 100644 --- a/radio/src/gui/colorlcd/model_telemetry.cpp +++ b/radio/src/gui/colorlcd/model_telemetry.cpp @@ -74,7 +74,7 @@ class SensorButton : public Button { TelemetryItem &telemetryItem = telemetryItems[index]; if (telemetryItem.isFresh()) { - dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, WARNING_COLOR); + dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, HIGHLIGHT_COLOR); } dc->drawNumber(2, 1, number, LEFT, 0, NULL, ":"); @@ -125,9 +125,9 @@ class SensorEditWindow : public Page { void buildHeader(Window * window) { - new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_SENSOR + std::to_string(index + 1), MENU_TITLE_COLOR); + new StaticText(window, {PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, PAGE_LINE_HEIGHT}, STR_SENSOR + std::to_string(index + 1), MENU_COLOR); // dynamic display of sensor value ? - //new StaticText(window, {70, 28, 100, 20}, "SF" + std::to_string(index), MENU_TITLE_COLOR); + //new StaticText(window, {70, 28, 100, 20}, "SF" + std::to_string(index), MENU_COLOR); } void updateSensorParametersWindow() diff --git a/radio/src/gui/colorlcd/page.cpp b/radio/src/gui/colorlcd/page.cpp new file mode 100644 index 000000000..c41bcf24a --- /dev/null +++ b/radio/src/gui/colorlcd/page.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (C) OpenTX + * + * Source: + * https://github.com/opentx/libopenui + * + * This file is a part of libopenui library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#include "page.h" +#include "mainwindow.h" +#include "keyboard_base.h" +#include "opentx.h" + +PageHeader::PageHeader(Page * parent, uint8_t icon): + Window(parent, { 0, 0, LCD_W, MENU_HEADER_HEIGHT }, OPAQUE), + icon(icon) +#if defined(HARDWARE_TOUCH) + , back(this, { 0, 0, MENU_HEADER_BUTTON_WIDTH, MENU_HEADER_BUTTON_WIDTH }, ICON_BACK, + [=]() -> uint8_t { + parent->deleteLater(); + return 0; + }, BUTTON_NOFOCUS) +#endif +{ +} + +void PageHeader::paint(BitmapBuffer * dc) +{ + static_cast(theme)->drawMenuBackground(dc, getIcon(), ""); + dc->drawSolidFilledRect(MENU_HEADER_HEIGHT, 0, LCD_W - MENU_HEADER_HEIGHT, MENU_HEADER_HEIGHT, MENU_BGCOLOR); +} + +Page::Page(unsigned icon): + Window(&mainWindow, {0, 0, LCD_W, LCD_H}, OPAQUE), + header(this, icon), + body(this, { 0, MENU_HEADER_HEIGHT, LCD_W, LCD_H - MENU_HEADER_HEIGHT }), + previousFocus(focusWindow) +{ + setFocus(); +} + +Page::~Page() +{ +#if defined(HARDWARE_TOUCH) + Keyboard::hide(); +#endif +} + +void Page::deleteLater() +{ + if (previousFocus) { + previousFocus->setFocus(); + } + + Window::deleteLater(); +} + +void Page::paint(BitmapBuffer * dc) +{ + dc->clear(DEFAULT_BGCOLOR); +} + +#if defined(HARDWARE_KEYS) +void Page::onEvent(event_t event) +{ + TRACE_WINDOWS("%s received event 0x%X", getWindowDebugString().c_str(), event); + + if (event == EVT_KEY_LONG(KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT)) { + killEvents(event); + deleteLater(); + } +} +#endif + +#if defined(HARDWARE_TOUCH) +bool Page::onTouchEnd(coord_t x, coord_t y) +{ + if (Window::onTouchEnd(x, y)) + return true; + + Keyboard::hide(); + return true; +} +#endif diff --git a/radio/src/gui/colorlcd/page.h b/radio/src/gui/colorlcd/page.h new file mode 100644 index 000000000..03c714cf5 --- /dev/null +++ b/radio/src/gui/colorlcd/page.h @@ -0,0 +1,89 @@ +/* + * Copyright (C) OpenTX + * + * Source: + * https://github.com/opentx/libopenui + * + * This file is a part of libopenui library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#ifndef _PAGE_H_ +#define _PAGE_H_ + +#include "window.h" +#include "button.h" + +class Page; + +class PageHeader: public Window { + public: + PageHeader(Page * parent, uint8_t icon); + + void paint(BitmapBuffer * dc) override; + + uint8_t getIcon() const + { + return icon; + } + + protected: + uint8_t icon; +#if defined(HARDWARE_TOUCH) + IconButton back; +#endif +}; + +class Page: public Window { + public: + explicit Page(unsigned icon); + + ~Page() override; + +#if defined(DEBUG_WINDOWS) + std::string getName() override + { + return "Page"; + } +#endif + +#if defined(HARDWARE_KEYS) + void onEvent(event_t event) override; +#endif + +#if defined(HARDWARE_TOUCH) + bool onTouchStart(coord_t x, coord_t y) override + { + Window::onTouchStart(x, y); + return true; + } + + bool onTouchEnd(coord_t x, coord_t y) override; + + bool onTouchSlide(coord_t x, coord_t y, coord_t startX, coord_t startY, coord_t slideX, coord_t slideY) override + { + Window::onTouchSlide(x, y, startX, startY, slideX, slideY); + return true; + } +#endif + + void deleteLater(); + + void paint(BitmapBuffer * dc) override; + + protected: + PageHeader header; + FormWindow body; + Window * previousFocus; +}; + +#endif // _PAGE_H_ diff --git a/radio/src/gui/colorlcd/radio_calibration.cpp b/radio/src/gui/colorlcd/radio_calibration.cpp index 031a9550d..ba4d4be4e 100644 --- a/radio/src/gui/colorlcd/radio_calibration.cpp +++ b/radio/src/gui/colorlcd/radio_calibration.cpp @@ -109,8 +109,8 @@ RadioCalibrationPage::RadioCalibrationPage(bool initial): void RadioCalibrationPage::buildHeader(Window * window) { - new StaticText(window, { 55, 0, 300, 20 }, STR_MENUCALIBRATION, MENU_TITLE_COLOR); - text = new StaticText(window, { 55, FH+2, LCD_W-55, 20 }, STR_MENUTOSTART, MENU_TITLE_COLOR); + new StaticText(window, { 55, 0, 300, 20 }, STR_MENUCALIBRATION, MENU_COLOR); + text = new StaticText(window, { 55, FH+2, LCD_W-55, 20 }, STR_MENUTOSTART, MENU_COLOR); } void RadioCalibrationPage::buildBody(FormWindow * window) diff --git a/radio/src/gui/colorlcd/screens_setup_old.cpp b/radio/src/gui/colorlcd/screens_setup_old.cpp index e0d6d16ec..b3431f8cc 100644 --- a/radio/src/gui/colorlcd/screens_setup_old.cpp +++ b/radio/src/gui/colorlcd/screens_setup_old.cpp @@ -351,7 +351,7 @@ bool menuWidgetsSetup(event_t event) LcdFlags color; int padding, thickness; if (currentContainer == topbar) { - color = MENU_TITLE_COLOR; + color = MENU_COLOR; padding = 2; thickness = 1; } diff --git a/radio/src/gui/colorlcd/special_functions.cpp b/radio/src/gui/colorlcd/special_functions.cpp index ae7fd484e..843a71769 100644 --- a/radio/src/gui/colorlcd/special_functions.cpp +++ b/radio/src/gui/colorlcd/special_functions.cpp @@ -51,15 +51,15 @@ class SpecialFunctionEditPage : public Page { Page::checkEvents(); if (active != isActive()) { invalidate(); - headerSF->setFlags(isActive() ? BOLD|WARNING_COLOR : MENU_TITLE_COLOR); + headerSF->setFlags(isActive() ? BOLD|HIGHLIGHT_COLOR : MENU_COLOR); active = !active; } } void buildHeader(Window * window) { - new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, 20 }, functions == g_model.customFn ? STR_MENUCUSTOMFUNC : STR_MENUSPECIALFUNCS, MENU_TITLE_COLOR); - headerSF = new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, 20 }, (functions == g_model.customFn ? "SF" : "GF" ) + std::to_string(index), MENU_TITLE_COLOR); + new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP, LCD_W - PAGE_TITLE_LEFT, 20 }, functions == g_model.customFn ? STR_MENUCUSTOMFUNC : STR_MENUSPECIALFUNCS, MENU_COLOR); + headerSF = new StaticText(window, { PAGE_TITLE_LEFT, PAGE_TITLE_TOP + PAGE_LINE_HEIGHT, LCD_W - PAGE_TITLE_LEFT, 20 }, (functions == g_model.customFn ? "SF" : "GF" ) + std::to_string(index), MENU_COLOR); } void updateSpecialFunctionOneWindow(FormField * previousField, FormField * nextField) @@ -376,7 +376,7 @@ class SpecialFunctionButton : public Button { void paint(BitmapBuffer * dc) override { if (active) - dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, WARNING_COLOR); + dc->drawSolidFilledRect(2, 2, rect.w - 4, rect.h - 4, HIGHLIGHT_COLOR); paintSpecialFunctionLine(dc); diff --git a/radio/src/gui/colorlcd/tabsgroup.cpp b/radio/src/gui/colorlcd/tabsgroup.cpp new file mode 100644 index 000000000..95813c445 --- /dev/null +++ b/radio/src/gui/colorlcd/tabsgroup.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (C) OpenTX + * + * Source: + * https://github.com/opentx/libopenui + * + * This file is a part of libopenui library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#include "tabsgroup.h" +#include "mainwindow.h" +#include "view_main.h" + +#if defined(HARDWARE_TOUCH) +#include "keyboard_base.h" +#endif + +#include "opentx.h" // TODO for constants... + +TabsGroupHeader::TabsGroupHeader(TabsGroup * parent, uint8_t icon): + Window(parent, { 0, 0, LCD_W, MENU_BODY_TOP }, OPAQUE), +#if defined(HARDWARE_TOUCH) + back(this, { 0, 0, MENU_HEADER_BUTTON_WIDTH, MENU_HEADER_BUTTON_WIDTH }, ICON_BACK, + [=]() -> uint8_t { + parent->deleteLater(); + return 1; + }, BUTTON_NOFOCUS), +#endif + icon(icon), + carousel(this, parent) +{ +} + +void TabsGroupHeader::paint(BitmapBuffer * dc) +{ + static_cast(theme)->drawMenuBackground(dc, icon, title); +} + +TabsCarousel::TabsCarousel(Window * parent, TabsGroup * menu): + Window(parent, { MENU_HEADER_BUTTONS_LEFT, 0, LCD_W - MENU_HEADER_BUTTONS_LEFT, MENU_HEADER_HEIGHT + 10 }, TRANSPARENT), + menu(menu) +{ +} + +void TabsCarousel::updateInnerWidth() +{ + setInnerWidth(padding_left + MENU_HEADER_BUTTON_WIDTH * menu->tabs.size()); +} + +void TabsCarousel::paint(BitmapBuffer * dc) +{ + static_cast(theme)->drawMenuHeader(dc, menu->tabs, currentIndex); +} + +#if defined(HARDWARE_TOUCH) +bool TabsCarousel::onTouchEnd(coord_t x, coord_t y) +{ + unsigned index = (x - padding_left) / MENU_HEADER_BUTTON_WIDTH; + menu->setCurrentTab(index); + setCurrentIndex(index); + return true; +} +#endif + +TabsGroup::TabsGroup(uint8_t icon): + Window(&mainWindow, { 0, 0, LCD_W, LCD_H }, OPAQUE), + header(this, icon), + body(this, { 0, MENU_BODY_TOP, LCD_W, MENU_BODY_HEIGHT }) +{ +} + +TabsGroup::~TabsGroup() +{ +#if defined(HARDWARE_TOUCH) + Keyboard::hide(); +#endif + + for (auto tab: tabs) { + delete tab; + } + + body.deleteChildren(); +} + +void TabsGroup::addTab(PageTab * page) +{ + tabs.push_back(page); + if (!currentTab) { + setCurrentTab(0); + } + header.carousel.updateInnerWidth(); +} + +void TabsGroup::removeTab(unsigned index) +{ + if (currentTab == tabs[index]) { + setCurrentTab(max(0, index - 1)); + } + tabs.erase(tabs.begin() + index); + header.carousel.updateInnerWidth(); +} + +void TabsGroup::removeAllTabs() +{ + for (auto * tab: tabs) { + delete tab; + } + tabs.clear(); + currentTab = nullptr; + header.carousel.updateInnerWidth(); +} + +void TabsGroup::setVisibleTab(PageTab * tab) +{ + if (tab != currentTab) { + setFocus(); + FormField::clearCurrentField(); + body.clear(); +#if defined(HARDWARE_TOUCH) + Keyboard::hide(); +#endif + currentTab = tab; + tab->build(&body); + header.setTitle(tab->title.c_str()); + invalidate(); + } +} + +void TabsGroup::checkEvents() +{ + Window::checkEvents(); + if (currentTab) { + currentTab->checkEvents(); + } +} + +#if defined(HARDWARE_KEYS) +void TabsGroup::onEvent(event_t event) +{ + TRACE_WINDOWS("%s received event 0x%X", getWindowDebugString().c_str(), event); + + if (event == EVT_KEY_BREAK(KEY_PGDN)) { + uint8_t current = header.carousel.getCurrentIndex() + 1; + setCurrentTab(current >= tabs.size() ? 0 : current); + } + else if (event == EVT_KEY_LONG(KEY_PGDN)) { + killEvents(event); + uint8_t current = header.carousel.getCurrentIndex(); + setCurrentTab(current == 0 ? tabs.size() - 1 : current - 1); + } + else if (event == EVT_KEY_LONG(KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT)) { + killEvents(event); + ViewMain::instance->setFocus(); + deleteLater(); + } + else if (parent) { + parent->onEvent(event); + } +} +#endif + +void TabsGroup::paint(BitmapBuffer * dc) +{ + dc->clear(DEFAULT_BGCOLOR); +} + +#if defined(HARDWARE_TOUCH) +bool TabsGroup::onTouchEnd(coord_t x, coord_t y) +{ + if (Window::onTouchEnd(x, y)) + return true; + + Keyboard::hide(); + return true; +} +#endif diff --git a/radio/src/gui/colorlcd/tabsgroup.h b/radio/src/gui/colorlcd/tabsgroup.h new file mode 100644 index 000000000..8f36bd2bd --- /dev/null +++ b/radio/src/gui/colorlcd/tabsgroup.h @@ -0,0 +1,191 @@ +/* + * Copyright (C) OpenTX + * + * Source: + * https://github.com/opentx/libopenui + * + * This file is a part of libopenui library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + */ + +#ifndef _TABSGROUP_H_ +#define _TABSGROUP_H_ + +#include +#include "button.h" +#include "form.h" + +class TabsGroup; + +class PageTab { + friend class TabsCarousel; + friend class TabsGroup; + + public: + PageTab(std::string title, unsigned icon): + title(std::move(title)), + icon(icon) + { + } + + virtual ~PageTab() = default; + + virtual void build(FormWindow * window) = 0; + + virtual void checkEvents() + { + } + + void destroy() + { + if (onPageDestroyed) { + onPageDestroyed(); + } + delete this; + } + + void setOnPageDestroyedHandler(std::function handler) + { + onPageDestroyed = std::move(handler); + } + + void setTitle(std::string value) + { + title = std::move(value); + } + + unsigned getIcon() const + { + return icon; + } + + protected: + std::string title; + unsigned icon; + std::function onPageDestroyed; +}; + +class TabsCarousel: public Window { + public: + TabsCarousel(Window * parent, TabsGroup * menu); + +#if defined(DEBUG_WINDOWS) + std::string getName() override + { + return "TabsCarousel"; + } +#endif + + inline void setCurrentIndex(uint8_t index) + { + currentIndex = index; + } + + inline uint8_t getCurrentIndex() + { + return currentIndex; + } + + void updateInnerWidth(); + + void paint(BitmapBuffer * dc) override; + +#if defined(HARDWARE_TOUCH) + bool onTouchEnd(coord_t x, coord_t y) override; +#endif + + protected: + constexpr static uint8_t padding_left = 3; + TabsGroup * menu; + uint8_t currentIndex = 0; +}; + +class TabsGroupHeader: public Window { + friend class TabsGroup; + + public: + TabsGroupHeader(TabsGroup * menu, uint8_t icon); + +#if defined(DEBUG_WINDOWS) + std::string getName() override + { + return "TabsGroupHeader"; + } +#endif + + void paint(BitmapBuffer * dc) override; + + void setTitle(const char * value) + { + title = value; + } + + protected: +#if defined(HARDWARE_TOUCH) + IconButton back; +#endif + uint8_t icon; + TabsCarousel carousel; + const char * title = nullptr; +}; + +class TabsGroup: public Window { + friend class TabsCarousel; + + public: + explicit TabsGroup(uint8_t icon); + + ~TabsGroup() override; + +#if defined(DEBUG_WINDOWS) + std::string getName() override + { + return "TabsGroup"; + } +#endif + + void addTab(PageTab * page); + + void removeTab(unsigned index); + + void removeAllTabs(); + + void setCurrentTab(unsigned index) + { + if (index < tabs.size()) { + header.carousel.setCurrentIndex(index); + setVisibleTab(tabs[index]); + } + } + + void checkEvents() override; + +#if defined(HARDWARE_KEYS) + void onEvent(event_t event) override; +#endif + + void paint(BitmapBuffer * dc) override; + +#if defined(HARDWARE_TOUCH) + bool onTouchEnd(coord_t x, coord_t y) override; +#endif + + protected: + TabsGroupHeader header; + FormWindow body; + std::vector tabs; + PageTab * currentTab = nullptr; + + void setVisibleTab(PageTab * tab); +}; + +#endif diff --git a/radio/src/gui/colorlcd/theme.cpp b/radio/src/gui/colorlcd/theme.cpp index 58b67fac5..2a51c5bfb 100644 --- a/radio/src/gui/colorlcd/theme.cpp +++ b/radio/src/gui/colorlcd/theme.cpp @@ -200,12 +200,6 @@ void ThemeBase::drawSlider(BitmapBuffer * dc, int vmin, int vmax, int value, con } } -void ThemeBase::drawPageHeader(BitmapBuffer * dc, const PageHeader * header) const -{ - drawMenuBackground(dc, header->getIcon(), ""); - dc->drawSolidFilledRect(MENU_HEADER_HEIGHT, 0, LCD_W - MENU_HEADER_HEIGHT, MENU_HEADER_HEIGHT, HEADER_BGCOLOR); -} - ThemeBase * getTheme(const char * name) { std::list::const_iterator it = getRegisteredThemes().cbegin(); diff --git a/radio/src/gui/colorlcd/theme.h b/radio/src/gui/colorlcd/theme.h index af6720366..7e59825d9 100644 --- a/radio/src/gui/colorlcd/theme.h +++ b/radio/src/gui/colorlcd/theme.h @@ -88,8 +88,6 @@ class ThemeBase: public Theme void drawSlider(BitmapBuffer * dc, int vmin, int vmax, int value, const rect_t & rect, bool edit, bool focus) const override; - void drawPageHeader(BitmapBuffer * dc, const PageHeader * page) const override; - protected: const char * name; const ZoneOption * options; diff --git a/radio/src/gui/colorlcd/themes/flysky.cpp b/radio/src/gui/colorlcd/themes/flysky.cpp index 6f76c5e1d..754c06ae6 100644 --- a/radio/src/gui/colorlcd/themes/flysky.cpp +++ b/radio/src/gui/colorlcd/themes/flysky.cpp @@ -47,12 +47,12 @@ class FlyskyTheme: public ThemeBase lcdColorTable[TEXT_STATUSBAR_COLOR_INDEX] = WHITE; lcdColorTable[LINE_COLOR_INDEX] = GREY; lcdColorTable[CHECKBOX_COLOR_INDEX] = RED; - lcdColorTable[MENU_TITLE_BGCOLOR_INDEX] = DARKGREY; - lcdColorTable[MENU_TITLE_COLOR_INDEX] = WHITE; + lcdColorTable[MENU_BGCOLOR_INDEX] = DARKGREY; + lcdColorTable[MENU_COLOR_INDEX] = WHITE; lcdColorTable[MENU_TITLE_DISABLE_COLOR_INDEX] = RGB(GET_RED(RED)>>1, GET_GREEN(RED)>>1, GET_BLUE(RED)>>1); lcdColorTable[HEADER_COLOR_INDEX] = DARKGREY; lcdColorTable[ALARM_COLOR_INDEX] = RED; - lcdColorTable[WARNING_COLOR_INDEX] = YELLOW; + lcdColorTable[HIGHLIGHT_COLOR_INDEX] = YELLOW; lcdColorTable[TEXT_DISABLE_COLOR_INDEX] = GREY; lcdColorTable[DISABLE_COLOR_INDEX] = LIGHTGREY; lcdColorTable[CURVE_COLOR_INDEX] = RED; @@ -78,7 +78,7 @@ class FlyskyTheme: public ThemeBase lcdColorTable[BARGRAPH_BGCOLOR_INDEX] = RGB(222, 222, 222); } - void loadMenuIcon(uint8_t index, const char * filename, uint32_t color=MENU_TITLE_COLOR) const + void loadMenuIcon(uint8_t index, const char * filename, uint32_t color=MENU_COLOR) const { TRACE("loadMenuIcon %s", getFilePath(filename)); @@ -192,7 +192,7 @@ class FlyskyTheme: public ThemeBase currentMenuBackground->drawSolidFilledRect(0, MENU_TITLE_TOP, currentMenuBackground->getWidth(), currentMenuBackground->getHeight() - MENU_TITLE_TOP, TITLE_BGCOLOR); currentMenuBackground->drawMask(0, 0, background, HEADER_CURRENT_BGCOLOR); currentMenuBackground->drawMask(0, 0, shadow, TRIM_SHADOW_COLOR); - currentMenuBackground->drawMask(10, 39, dot, MENU_TITLE_COLOR); + currentMenuBackground->drawMask(10, 39, dot, MENU_COLOR); } delete topleftBitmap; @@ -254,13 +254,13 @@ class FlyskyTheme: public ThemeBase // Mixer setup screen delete mixerSetupMixerBitmap; - mixerSetupMixerBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_mixer.png", MENU_TITLE_COLOR, HEADER_BGCOLOR); + mixerSetupMixerBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_mixer.png", MENU_COLOR, HEADER_BGCOLOR); delete mixerSetupToBitmap; - mixerSetupToBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_to.png", MENU_TITLE_COLOR, HEADER_BGCOLOR); + mixerSetupToBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_to.png", MENU_COLOR, HEADER_BGCOLOR); delete mixerSetupOutputBitmap; - mixerSetupOutputBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_output.png", MENU_TITLE_COLOR, HEADER_BGCOLOR); + mixerSetupOutputBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_output.png", MENU_COLOR, HEADER_BGCOLOR); delete mixerSetupAddBitmap; mixerSetupAddBitmap = BitmapBuffer::loadMaskOnBackground("mask_mplex_add.png", DEFAULT_COLOR, DEFAULT_BGCOLOR); @@ -361,7 +361,7 @@ class FlyskyTheme: public ThemeBase dc->drawSolidFilledRect(0, MENU_TITLE_TOP, LCD_W, MENU_TITLE_HEIGHT, TITLE_BGCOLOR); // the title line background // if (title) { - dc->drawText(MENUS_MARGIN_LEFT, MENU_TITLE_TOP, title, MENU_TITLE_COLOR); + dc->drawText(MENUS_MARGIN_LEFT, MENU_TITLE_TOP, title, MENU_COLOR); } } diff --git a/radio/src/gui/colorlcd/themes/frsky.cpp b/radio/src/gui/colorlcd/themes/frsky.cpp index 0b02c14ba..2e57d156a 100644 --- a/radio/src/gui/colorlcd/themes/frsky.cpp +++ b/radio/src/gui/colorlcd/themes/frsky.cpp @@ -46,12 +46,12 @@ class FrskyTheme: public ThemeBase lcdColorTable[TEXT_STATUSBAR_COLOR_INDEX] = WHITE; lcdColorTable[LINE_COLOR_INDEX] = GREY; lcdColorTable[CHECKBOX_COLOR_INDEX] = RED; - lcdColorTable[MENU_TITLE_BGCOLOR_INDEX] = DARKGREY; - lcdColorTable[MENU_TITLE_COLOR_INDEX] = WHITE; + lcdColorTable[MENU_BGCOLOR_INDEX] = DARKGREY; + lcdColorTable[MENU_COLOR_INDEX] = WHITE; lcdColorTable[MENU_TITLE_DISABLE_COLOR_INDEX] = RGB(GET_RED(RED)>>1, GET_GREEN(RED)>>1, GET_BLUE(RED)>>1); lcdColorTable[HEADER_COLOR_INDEX] = DARKGREY; lcdColorTable[ALARM_COLOR_INDEX] = RED; - lcdColorTable[WARNING_COLOR_INDEX] = YELLOW; + lcdColorTable[HIGHLIGHT_COLOR_INDEX] = YELLOW; lcdColorTable[TEXT_DISABLE_COLOR_INDEX] = GREY; lcdColorTable[DISABLE_COLOR_INDEX] = LIGHTGREY; lcdColorTable[CURVE_COLOR_INDEX] = RED; @@ -61,7 +61,7 @@ class FrskyTheme: public ThemeBase lcdColorTable[TRIM_SHADOW_COLOR_INDEX] = BLACK; lcdColorTable[MAINVIEW_PANES_COLOR_INDEX] = WHITE; lcdColorTable[MAINVIEW_GRAPHICS_COLOR_INDEX] = RED; - lcdColorTable[HEADER_BGCOLOR_INDEX] = DARKRED; + lcdColorTable[MENU_BGCOLOR_INDEX] = DARKRED; lcdColorTable[HEADER_ICON_BGCOLOR_INDEX] = RED; lcdColorTable[HEADER_CURRENT_BGCOLOR_INDEX] = RED; lcdColorTable[OVERLAY_COLOR_INDEX] = BLACK; @@ -70,7 +70,7 @@ class FrskyTheme: public ThemeBase lcdColorTable[BARGRAPH_BGCOLOR_INDEX] = RGB(222, 222, 222); } - void loadMenuIcon(uint8_t index, const char * filename, uint32_t color=MENU_TITLE_COLOR) const + void loadMenuIcon(uint8_t index, const char * filename, uint32_t color=MENU_COLOR) const { TRACE("loadMenuIcon %s", getFilePath(filename)); BitmapBuffer * mask = BitmapBuffer::loadMask(getFilePath(filename)); @@ -81,7 +81,7 @@ class FrskyTheme: public ThemeBase delete menuIconNormal[index]; menuIconNormal[index] = new BitmapBuffer(BMP_RGB565, mask->getWidth(), mask->getHeight()); if (menuIconNormal[index]) { - menuIconNormal[index]->clear(HEADER_BGCOLOR); + menuIconNormal[index]->clear(MENU_BGCOLOR); menuIconNormal[index]->drawMask(0, 0, mask, color); } @@ -157,16 +157,16 @@ class FrskyTheme: public ThemeBase } if (currentMenuBackground) { - currentMenuBackground->drawSolidFilledRect(0, 0, currentMenuBackground->getWidth(), MENU_HEADER_HEIGHT, HEADER_BGCOLOR); + currentMenuBackground->drawSolidFilledRect(0, 0, currentMenuBackground->getWidth(), MENU_HEADER_HEIGHT, MENU_BGCOLOR); currentMenuBackground->drawSolidFilledRect(0, MENU_HEADER_HEIGHT, currentMenuBackground->getWidth(), MENU_TITLE_TOP - MENU_HEADER_HEIGHT, DEFAULT_BGCOLOR); currentMenuBackground->drawSolidFilledRect(0, MENU_TITLE_TOP, currentMenuBackground->getWidth(), currentMenuBackground->getHeight() - MENU_TITLE_TOP, TITLE_BGCOLOR); currentMenuBackground->drawMask(0, 0, background, HEADER_CURRENT_BGCOLOR); currentMenuBackground->drawMask(0, 0, shadow, TRIM_SHADOW_COLOR); - currentMenuBackground->drawMask(10, 39, dot, MENU_TITLE_COLOR); + currentMenuBackground->drawMask(10, 39, dot, MENU_COLOR); } delete topleftBitmap; - topleftBitmap = BitmapBuffer::loadMaskOnBackground(getFilePath("topleft.png"), TITLE_BGCOLOR, HEADER_BGCOLOR); + topleftBitmap = BitmapBuffer::loadMaskOnBackground(getFilePath("topleft.png"), TITLE_BGCOLOR, MENU_BGCOLOR); delete background; delete shadow; @@ -233,13 +233,13 @@ class FrskyTheme: public ThemeBase // Mixer setup screen delete mixerSetupMixerBitmap; - mixerSetupMixerBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_mixer.png", MENU_TITLE_COLOR, HEADER_BGCOLOR); + mixerSetupMixerBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_mixer.png", MENU_COLOR, MENU_BGCOLOR); delete mixerSetupToBitmap; - mixerSetupToBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_to.png", MENU_TITLE_COLOR, HEADER_BGCOLOR); + mixerSetupToBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_to.png", MENU_COLOR, MENU_BGCOLOR); delete mixerSetupOutputBitmap; - mixerSetupOutputBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_output.png", MENU_TITLE_COLOR, HEADER_BGCOLOR); + mixerSetupOutputBitmap = BitmapBuffer::loadMaskOnBackground("mask_sbar_output.png", MENU_COLOR, MENU_BGCOLOR); delete mixerSetupAddBitmap; mixerSetupAddBitmap = BitmapBuffer::loadMaskOnBackground("mask_mplex_add.png", DEFAULT_COLOR, DEFAULT_BGCOLOR); @@ -300,7 +300,7 @@ class FrskyTheme: public ThemeBase lcdColorTable[TRIM_BGCOLOR_INDEX] = color; lcdColorTable[MAINVIEW_GRAPHICS_COLOR_INDEX] = color; #define DARKER(x) ((x * 70) / 100) - lcdColorTable[HEADER_BGCOLOR_INDEX] = RGB(DARKER(GET_RED(color)), DARKER(GET_GREEN(color)), DARKER(GET_BLUE(color))); + lcdColorTable[MENU_BGCOLOR_INDEX] = RGB(DARKER(GET_RED(color)), DARKER(GET_GREEN(color)), DARKER(GET_BLUE(color))); lcdColorTable[HEADER_ICON_BGCOLOR_INDEX] = color; lcdColorTable[HEADER_CURRENT_BGCOLOR_INDEX] = color; #endif @@ -324,10 +324,10 @@ class FrskyTheme: public ThemeBase if (topleftBitmap) { dc->drawBitmap(0, 0, topleftBitmap); uint16_t width = topleftBitmap->getWidth(); - dc->drawSolidFilledRect(width, 0, LCD_W - width, MENU_HEADER_HEIGHT, HEADER_BGCOLOR); + dc->drawSolidFilledRect(width, 0, LCD_W - width, MENU_HEADER_HEIGHT, MENU_BGCOLOR); } else { - dc->drawSolidFilledRect(0, 0, LCD_W, MENU_HEADER_HEIGHT, HEADER_BGCOLOR); + dc->drawSolidFilledRect(0, 0, LCD_W, MENU_HEADER_HEIGHT, MENU_BGCOLOR); } if (icon == ICON_OPENTX) @@ -338,7 +338,7 @@ class FrskyTheme: public ThemeBase dc->drawSolidFilledRect(0, MENU_HEADER_HEIGHT, LCD_W, MENU_TITLE_TOP - MENU_HEADER_HEIGHT, DEFAULT_BGCOLOR); // the white separation line dc->drawSolidFilledRect(0, MENU_TITLE_TOP, LCD_W, MENU_TITLE_HEIGHT, TITLE_BGCOLOR); // the title line background if (title) { - dc->drawText(MENUS_MARGIN_LEFT, MENU_TITLE_TOP + 1, title, MENU_TITLE_COLOR); + dc->drawText(MENUS_MARGIN_LEFT, MENU_TITLE_TOP + 1, title, MENU_COLOR); } drawMenuDatetime(dc); diff --git a/radio/src/gui/colorlcd/topbar.cpp b/radio/src/gui/colorlcd/topbar.cpp index 12e59a935..27ee6cd3f 100644 --- a/radio/src/gui/colorlcd/topbar.cpp +++ b/radio/src/gui/colorlcd/topbar.cpp @@ -44,7 +44,7 @@ void drawTopBar() // USB icon if (usbPlugged()) { - lcdDrawBitmapPattern(LCD_W-98, 8, LBM_TOPMENU_USB, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-98, 8, LBM_TOPMENU_USB, MENU_COLOR); } // RSSI @@ -52,41 +52,41 @@ void drawTopBar() const uint8_t rssiBarsHeight[] = {5, 10, 15, 21, 31}; for (unsigned int i = 0; i < DIM(rssiBarsHeight); i++) { uint8_t height = rssiBarsHeight[i]; - lcdDrawSolidFilledRect(LCD_W-90 + i * 6, 38 - height, 4, height, TELEMETRY_RSSI() >= rssiBarsValue[i] ? MENU_TITLE_COLOR : MENU_TITLE_DISABLE_COLOR); + lcdDrawSolidFilledRect(LCD_W-90 + i * 6, 38 - height, 4, height, TELEMETRY_RSSI() >= rssiBarsValue[i] ? MENU_COLOR : MENU_TITLE_DISABLE_COLOR); } #if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA) if (isModuleXJT(INTERNAL_MODULE) && isExternalAntennaEnabled()) { - lcdDrawBitmapPattern(LCD_W-94, 4, LBM_TOPMENU_ANTENNA, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-94, 4, LBM_TOPMENU_ANTENNA, MENU_COLOR); } #endif /* Audio volume */ lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR); if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet) - lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_0, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_0, MENU_COLOR); else if (requiredSpeakerVolume < 7) - lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_1, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_1, MENU_COLOR); else if (requiredSpeakerVolume < 13) - lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_2, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_2, MENU_COLOR); else if (requiredSpeakerVolume < 19) - lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_3, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_3, MENU_COLOR); else - lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_4, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_4, MENU_COLOR); /* Tx battery */ uint8_t bars = GET_TXBATT_BARS(5); - lcdDrawBitmapPattern(LCD_W-130, 24, LBM_TOPMENU_TXBATT, MENU_TITLE_COLOR); + lcdDrawBitmapPattern(LCD_W-130, 24, LBM_TOPMENU_TXBATT, MENU_COLOR); for (unsigned int i = 0; i < 5; i++) { - lcdDrawSolidFilledRect(LCD_W-122+4*i, 30, 2, 8, i >= bars ? MENU_TITLE_DISABLE_COLOR : MENU_TITLE_COLOR); + lcdDrawSolidFilledRect(LCD_W-122+4*i, 30, 2, 8, i >= bars ? MENU_TITLE_DISABLE_COLOR : MENU_COLOR); } topbar->refresh(); #if 0 // Radio battery - TODO - // drawValueWithUnit(370, 8, g_vbat100mV, UNIT_VOLTS, PREC1|SMLSIZE|MENU_TITLE_COLOR); - // lcdDrawSolidRect(300, 3, 20, 50, MENU_TITLE_COLOR); + // drawValueWithUnit(370, 8, g_vbat100mV, UNIT_VOLTS, PREC1|SMLSIZE|MENU_COLOR); + // lcdDrawSolidRect(300, 3, 20, 50, MENU_COLOR); // lcdDrawRect(batt_icon_x+FW, BAR_Y+1, 13, 7); // lcdDrawSolidVerticalLine(batt_icon_x+FW+13, BAR_Y+2, 5); diff --git a/radio/src/gui/colorlcd/view_main.cpp b/radio/src/gui/colorlcd/view_main.cpp index 3b29f9c63..8c6821da8 100644 --- a/radio/src/gui/colorlcd/view_main.cpp +++ b/radio/src/gui/colorlcd/view_main.cpp @@ -138,19 +138,19 @@ ViewMain::ViewMain(bool icons): #if defined(HARDWARE_TOUCH) if (icons) { - new FabIconButton(this, 50, 100, ICON_MODEL, + new FabButton(this, 50, 100, ICON_MODEL, [=]() -> uint8_t { new ModelMenu(); return 0; }); - new FabIconButton(this, LCD_W / 2, 100, ICON_RADIO, + new FabButton(this, LCD_W / 2, 100, ICON_RADIO, [=]() -> uint8_t { new RadioMenu(); return 0; }); -// new FabIconButton(this, LCD_W - 50, 100, ICON_THEME, +// new FabButton(this, LCD_W - 50, 100, ICON_THEME, // [=]() -> uint8_t { // new ScreensMenu(); // return 0; diff --git a/radio/src/gui/colorlcd/view_statistics.cpp b/radio/src/gui/colorlcd/view_statistics.cpp index 56ebcbd4f..c00f3fb48 100644 --- a/radio/src/gui/colorlcd/view_statistics.cpp +++ b/radio/src/gui/colorlcd/view_statistics.cpp @@ -89,7 +89,7 @@ bool menuStatsGraph(event_t event) prev_yv = yv; } - lcdDrawText(LCD_W/2, MENU_FOOTER_TOP, STR_MENUTORESET, MENU_TITLE_COLOR | CENTERED); + lcdDrawText(LCD_W/2, MENU_FOOTER_TOP, STR_MENUTORESET, MENU_COLOR | CENTERED); return true; } @@ -184,7 +184,7 @@ bool menuStatsDebug(event_t event) lcdDrawNumber(lcdNextPos+5, y, gpsData.hdop, PREC2|LEFT); #endif - lcdDrawText(LCD_W/2, MENU_FOOTER_TOP, STR_MENUTORESET, MENU_TITLE_COLOR | CENTERED); + lcdDrawText(LCD_W/2, MENU_FOOTER_TOP, STR_MENUTORESET, MENU_COLOR | CENTERED); return true; } @@ -248,10 +248,10 @@ bool menuStatsTraces(event_t event) uint8_t k = 0; int8_t sub = menuVerticalPosition; - lcdDrawChar(STATS_TRACES_INDEX_POS, MENU_TITLE_TOP+2, '#', MENU_TITLE_COLOR); - lcdDrawText(STATS_TRACES_TIME_POS, MENU_TITLE_TOP+2, "Time", MENU_TITLE_COLOR); - lcdDrawText(STATS_TRACES_EVENT_POS, MENU_TITLE_TOP+2, "Event", MENU_TITLE_COLOR); - lcdDrawText(STATS_TRACES_DATA_POS, MENU_TITLE_TOP+2, "Data", MENU_TITLE_COLOR); + lcdDrawChar(STATS_TRACES_INDEX_POS, MENU_TITLE_TOP+2, '#', MENU_COLOR); + lcdDrawText(STATS_TRACES_TIME_POS, MENU_TITLE_TOP+2, "Time", MENU_COLOR); + lcdDrawText(STATS_TRACES_EVENT_POS, MENU_TITLE_TOP+2, "Event", MENU_COLOR); + lcdDrawText(STATS_TRACES_DATA_POS, MENU_TITLE_TOP+2, "Data", MENU_COLOR); for (uint8_t i=0; i= 0) { lcdDrawBitmapPatternPie( diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 7926ac9d9..dd5d5bf30 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1642,11 +1642,11 @@ const luaR_value_entry opentxConstants[] = { { "FOCUS_BGCOLOR", FOCUS_BGCOLOR }, { "LINE_COLOR", LINE_COLOR }, { "CHECKBOX_COLOR", CHECKBOX_COLOR }, - { "MENU_TITLE_BGCOLOR", MENU_TITLE_BGCOLOR }, - { "MENU_TITLE_COLOR", MENU_TITLE_COLOR }, + { "MENU_BGCOLOR", MENU_BGCOLOR }, + { "MENU_COLOR", MENU_COLOR }, { "MENU_TITLE_DISABLE_COLOR", MENU_TITLE_DISABLE_COLOR }, { "ALARM_COLOR", ALARM_COLOR }, - { "WARNING_COLOR", WARNING_COLOR }, + { "HIGHLIGHT_COLOR", HIGHLIGHT_COLOR }, { "TEXT_DISABLE_COLOR", TEXT_DISABLE_COLOR }, { "HEADER_COLOR", HEADER_COLOR }, { "DISABLE_COLOR", DISABLE_COLOR }, diff --git a/radio/src/lua/api_lcd.cpp b/radio/src/lua/api_lcd.cpp index 775ac4eae..790dda798 100644 --- a/radio/src/lua/api_lcd.cpp +++ b/radio/src/lua/api_lcd.cpp @@ -783,12 +783,12 @@ Set a color for specific area * `FOCUS_BGCOLOR` * `LINE_COLOR` * `CHECKBOX_COLOR` - * `MENU_TITLE_BGCOLOR` - * `MENU_TITLE_COLOR` + * `MENU_BGCOLOR` + * `MENU_COLOR` * `MENU_TITLE_DISABLE_COLOR` * `HEADER_COLOR` * `ALARM_COLOR` - * `WARNING_COLOR` + * `HIGHLIGHT_COLOR` * `TEXT_DISABLE_COLOR` * `HEADER_COLOR` * `DISABLE_COLOR` @@ -798,7 +798,7 @@ Set a color for specific area * `TRIM_SHADOW_COLOR` * `MAINVIEW_PANES_COLOR` * `MAINVIEW_GRAPHICS_COLOR` - * `HEADER_BGCOLOR` + * `MENU_BGCOLOR` * `HEADER_ICON_BGCOLOR` * `HEADER_CURRENT_BGCOLOR` * `OVERLAY_COLOR` diff --git a/radio/src/targets/horus/libopenui_config.h b/radio/src/targets/horus/libopenui_config.h index bc07e4a97..d13c282d3 100644 --- a/radio/src/targets/horus/libopenui_config.h +++ b/radio/src/targets/horus/libopenui_config.h @@ -101,12 +101,12 @@ enum LcdColorIndex TEXT_STATUSBAR_COLOR_INDEX, LINE_COLOR_INDEX, CHECKBOX_COLOR_INDEX, - MENU_TITLE_BGCOLOR_INDEX, - MENU_TITLE_COLOR_INDEX, + MENU_BGCOLOR_INDEX, + MENU_COLOR_INDEX, MENU_TITLE_DISABLE_COLOR_INDEX, HEADER_COLOR_INDEX, ALARM_COLOR_INDEX, - WARNING_COLOR_INDEX, + HIGHLIGHT_COLOR_INDEX, TEXT_DISABLE_COLOR_INDEX, DISABLE_COLOR_INDEX, CURVE_COLOR_INDEX, diff --git a/radio/src/targets/nv14/libopenui_config.h b/radio/src/targets/nv14/libopenui_config.h index 216462dc8..cfa1f84ee 100644 --- a/radio/src/targets/nv14/libopenui_config.h +++ b/radio/src/targets/nv14/libopenui_config.h @@ -99,12 +99,12 @@ enum LcdColorIndex TEXT_STATUSBAR_COLOR_INDEX, LINE_COLOR_INDEX, CHECKBOX_COLOR_INDEX, - MENU_TITLE_BGCOLOR_INDEX, - MENU_TITLE_COLOR_INDEX, + MENU_BGCOLOR_INDEX, + MENU_COLOR_INDEX, MENU_TITLE_DISABLE_COLOR_INDEX, HEADER_COLOR_INDEX, ALARM_COLOR_INDEX, - WARNING_COLOR_INDEX, + HIGHLIGHT_COLOR_INDEX, TEXT_DISABLE_COLOR_INDEX, DISABLE_COLOR_INDEX, CURVE_COLOR_INDEX, diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index 8d71d3f25..86ddbfa3f 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit 8d71d3f25bbf5eb06b687cee2fbacf8f6bc37391 +Subproject commit 86ddbfa3f41393b089297cf8e5f14fce2ec00af4