diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 61309d394..b09f954fc 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -152,7 +152,7 @@ configure_file(${COMPANION_SRC_DIRECTORY}/translations.qrc.in ${TRANSLATIONS_QRC ### Add optional "translations" target for updating .ts files if(QT_LUPDATE_EXECUTABLE) - add_custom_target(translations + add_custom_target(companion_translations WORKING_DIRECTORY ${COMPANION_SRC_DIRECTORY} COMMAND ${QT_LUPDATE_EXECUTABLE} ${CMAKE_SOURCE_DIR} -no-obsolete -ts ${companion_TS} ) diff --git a/radio/src/gui/colorlcd/draw_functions.cpp b/radio/src/gui/colorlcd/draw_functions.cpp index 3b507bfa0..b9d12f2bc 100644 --- a/radio/src/gui/colorlcd/draw_functions.cpp +++ b/radio/src/gui/colorlcd/draw_functions.cpp @@ -199,8 +199,8 @@ void drawValueOrGVar(BitmapBuffer * dc, coord_t x, coord_t y, gvar_t value, gvar void drawSleepBitmap() { - lcd->setOffset(0, 0); - lcd->clearClippingRect(); + lcdNextLayer(); + lcd->reset(); lcd->clear(); const BitmapBuffer * bitmap = BitmapBuffer::loadBitmap(static_cast(theme)->getFilePath("sleep.bmp")); @@ -218,28 +218,24 @@ void drawShutdownAnimation(uint32_t duration, uint32_t totalDuration, const char if (totalDuration == 0) return; - static uint32_t lastDuration = 0xffffffff; static const BitmapBuffer * shutdown = BitmapBuffer::loadBitmap(static_cast(theme)->getFilePath("shutdown.bmp")); + lcdNextLayer(); + lcd->reset(); + if (shutdown) { - if (duration < lastDuration) { - static_cast(theme)->drawBackground(lcd); - lcd->drawBitmap((LCD_W-shutdown->width())/2, (LCD_H-shutdown->height())/2, shutdown); - lcdStoreBackupBuffer(); - } - else { - lcdRestoreBackupBuffer(); - int quarter = duration / (totalDuration / 5); - if (quarter >= 1) lcd->drawBitmapPattern(LCD_W/2, (LCD_H-SHUTDOWN_CIRCLE_DIAMETER)/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, 0, SHUTDOWN_CIRCLE_DIAMETER/2); - if (quarter >= 2) lcd->drawBitmapPattern(LCD_W/2, LCD_H/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, SHUTDOWN_CIRCLE_DIAMETER/2, SHUTDOWN_CIRCLE_DIAMETER/2); - if (quarter >= 3) lcd->drawBitmapPattern((LCD_W-SHUTDOWN_CIRCLE_DIAMETER)/2, LCD_H/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, SHUTDOWN_CIRCLE_DIAMETER, SHUTDOWN_CIRCLE_DIAMETER/2); - if (quarter >= 4) lcd->drawBitmapPattern((LCD_W-SHUTDOWN_CIRCLE_DIAMETER)/2, (LCD_H-SHUTDOWN_CIRCLE_DIAMETER)/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, SHUTDOWN_CIRCLE_DIAMETER*3/2, SHUTDOWN_CIRCLE_DIAMETER/2); - } + static_cast(theme)->drawBackground(lcd); + lcd->drawBitmap((LCD_W - shutdown->width()) / 2, (LCD_H - shutdown->height()) / 2, shutdown); + int quarter = duration / (totalDuration / 5); + if (quarter >= 1) lcd->drawBitmapPattern(LCD_W/2, (LCD_H-SHUTDOWN_CIRCLE_DIAMETER)/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, 0, SHUTDOWN_CIRCLE_DIAMETER/2); + if (quarter >= 2) lcd->drawBitmapPattern(LCD_W/2, LCD_H/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, SHUTDOWN_CIRCLE_DIAMETER/2, SHUTDOWN_CIRCLE_DIAMETER/2); + if (quarter >= 3) lcd->drawBitmapPattern((LCD_W-SHUTDOWN_CIRCLE_DIAMETER)/2, LCD_H/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, SHUTDOWN_CIRCLE_DIAMETER, SHUTDOWN_CIRCLE_DIAMETER/2); + if (quarter >= 4) lcd->drawBitmapPattern((LCD_W-SHUTDOWN_CIRCLE_DIAMETER)/2, (LCD_H-SHUTDOWN_CIRCLE_DIAMETER)/2, LBM_SHUTDOWN_CIRCLE, DEFAULT_COLOR, SHUTDOWN_CIRCLE_DIAMETER*3/2, SHUTDOWN_CIRCLE_DIAMETER/2); } else { lcd->clear(); int quarter = duration / (totalDuration / 5); - for (int i=1; i<=4; i++) { + for (int i = 1; i <= 4; i++) { if (quarter >= i) { lcd->drawSolidFilledRect(LCD_W / 2 - 70 + 24 * i, LCD_H / 2 - 10, 20, 20, DEFAULT_BGCOLOR); } @@ -247,7 +243,6 @@ void drawShutdownAnimation(uint32_t duration, uint32_t totalDuration, const char } lcdRefresh(); - lastDuration = duration; } void drawCurveRef(BitmapBuffer * dc, coord_t x, coord_t y, const CurveRef & curve, LcdFlags flags) @@ -335,33 +330,33 @@ void drawDate(BitmapBuffer * dc, coord_t x, coord_t y, TelemetryItem & telemetry if (att & FONT(XL)) { x -= 42; att &= ~FONT_MASK; - dc->drawNumber(x, y, telemetryItem.datetime.day, att|LEADING0|LEFT, 2); - dc->drawText(lcdNextPos-1, y, "-", att); - dc->drawNumber(lcdNextPos-1, y, telemetryItem.datetime.month, att|LEFT, 2); - dc->drawText(lcdNextPos-1, y, "-", att); - dc->drawNumber(lcdNextPos-1, y, telemetryItem.datetime.year-2000, att|LEFT); + x = dc->drawNumber(x, y, telemetryItem.datetime.day, att|LEADING0|LEFT, 2); + x = dc->drawText(x - 1, y, "-", att); + x = dc->drawNumber(x - 1, y, telemetryItem.datetime.month, att|LEFT, 2); + x = dc->drawText(x - 1, y, "-", att); + x = dc->drawNumber(x - 1, y, telemetryItem.datetime.year-2000, att|LEFT); y += FH; - dc->drawNumber(x, y, telemetryItem.datetime.hour, att|LEADING0|LEFT, 2); + /* TODO dc->drawNumber(x, y, telemetryItem.datetime.hour, att|LEADING0|LEFT, 2); dc->drawText(lcdNextPos, y, ":", att); dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.min, att|LEADING0|LEFT, 2); dc->drawText(lcdNextPos, y, ":", att); - dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.sec, att|LEADING0|LEFT, 2); + dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.sec, att|LEADING0|LEFT, 2); */ } else { - dc->drawNumber(x, y, telemetryItem.datetime.day, att|LEADING0|LEFT, 2); - dc->drawText(lcdNextPos-1, y, "-", att); - dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.month, att|LEFT, 2); - dc->drawText(lcdNextPos-1, y, "-", att); - dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.year-2000, att|LEFT); - dc->drawNumber(lcdNextPos+11, y, telemetryItem.datetime.hour, att|LEADING0|LEFT, 2); - dc->drawText(lcdNextPos, y, ":", att); - dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.min, att|LEADING0|LEFT, 2); - dc->drawText(lcdNextPos, y, ":", att); - dc->drawNumber(lcdNextPos, y, telemetryItem.datetime.sec, att|LEADING0|LEFT, 2); + x = dc->drawNumber(x, y, telemetryItem.datetime.day, att|LEADING0|LEFT, 2); + x = dc->drawText(x - 1, y, "-", att); + x = dc->drawNumber(x, y, telemetryItem.datetime.month, att|LEFT, 2); + x = dc->drawText(x - 1, y, "-", att); + x = dc->drawNumber(x, y, telemetryItem.datetime.year-2000, att|LEFT); + x = dc->drawNumber(x + 11, y, telemetryItem.datetime.hour, att|LEADING0|LEFT, 2); + x = dc->drawText(x, y, ":", att); + x = dc->drawNumber(x, y, telemetryItem.datetime.min, att|LEADING0|LEFT, 2); + x = dc->drawText(x, y, ":", att); + dc->drawNumber(x, y, telemetryItem.datetime.sec, att|LEADING0|LEFT, 2); } } -void drawGPSCoord(BitmapBuffer * dc, coord_t x, coord_t y, int32_t value, const char * direction, LcdFlags flags, bool seconds=true) +coord_t drawGPSCoord(BitmapBuffer * dc, coord_t x, coord_t y, int32_t value, const char * direction, LcdFlags flags, bool seconds=true) { char s[32]; uint32_t absvalue = abs(value); @@ -391,6 +386,7 @@ void drawGPSCoord(BitmapBuffer * dc, coord_t x, coord_t y, int32_t value, const *tmp++ = direction[value>=0 ? 0 : 1]; *tmp = '\0'; dc->drawText(x, y, s, flags); + return x; } void drawGPSPosition(BitmapBuffer * dc, coord_t x, coord_t y, int32_t longitude, int32_t latitude, LcdFlags flags) @@ -400,8 +396,8 @@ void drawGPSPosition(BitmapBuffer * dc, coord_t x, coord_t y, int32_t longitude, drawGPSCoord(dc, x, y + FH, longitude, "EW", flags, true); } else { - drawGPSCoord(dc, x, y, latitude, "NS", flags, false); - drawGPSCoord(dc, lcdNextPos+5, y, longitude, "EW", flags, false); + x = drawGPSCoord(dc, x, y, latitude, "NS", flags, false); + drawGPSCoord(dc, x + 5, y, longitude, "EW", flags, false); } } diff --git a/radio/src/gui/colorlcd/lcd.cpp b/radio/src/gui/colorlcd/lcd.cpp index 0b433b93b..c57e992cd 100644 --- a/radio/src/gui/colorlcd/lcd.cpp +++ b/radio/src/gui/colorlcd/lcd.cpp @@ -18,15 +18,12 @@ * GNU General Public License for more details. */ -#include "opentx.h" -#include "strhelpers.h" +#include "lcd.h" #if defined(SIMU) pixel_t displayBuf[DISPLAY_BUFFER_SIZE]; #endif -coord_t lcdNextPos; - uint8_t getMappedChar(uint8_t c) { uint8_t result; diff --git a/radio/src/gui/colorlcd/page.h b/radio/src/gui/colorlcd/page.h index a7226ca17..148884e5e 100644 --- a/radio/src/gui/colorlcd/page.h +++ b/radio/src/gui/colorlcd/page.h @@ -29,7 +29,7 @@ class PageHeader: public FormGroup { public: PageHeader(Page * parent, uint8_t icon); - ~PageHeader(); + ~PageHeader() override; void paint(BitmapBuffer * dc) override; diff --git a/radio/src/gui/colorlcd/radio_calibration.cpp b/radio/src/gui/colorlcd/radio_calibration.cpp index 42276f341..14f0d76d1 100644 --- a/radio/src/gui/colorlcd/radio_calibration.cpp +++ b/radio/src/gui/colorlcd/radio_calibration.cpp @@ -62,7 +62,7 @@ class MultiPosCalibrationWindow: public Window { invalidate(); } - virtual void paint(BitmapBuffer * dc) + void paint(BitmapBuffer * dc) override { drawHorizontalSlider(dc, 5, 8, rect.w - 18, 1 + (potsPos[potIndex] & 0x0f), 1, XPOTS_MULTIPOS_COUNT+1, XPOTS_MULTIPOS_COUNT, OPTION_SLIDER_TICKS | OPTION_SLIDER_BIG_TICKS | OPTION_SLIDER_NUMBER_BUTTON); } @@ -104,6 +104,7 @@ RadioCalibrationPage::RadioCalibrationPage(bool initial): { buildHeader(&header); buildBody(&body); + setFocus(); } void RadioCalibrationPage::buildHeader(Window * window) diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index 4427e21bc..96648a279 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -41,7 +41,7 @@ class SpectrumWindow : public Window coord_t peak_y = 1; coord_t peak_x = 0; for (coord_t i = 0; i < LCD_W; i++) { - coord_t h = min(reusableBuffer.spectrumAnalyser.bars[i], SPECTRUM_HEIGHT); + auto h = min(reusableBuffer.spectrumAnalyser.bars[i], SPECTRUM_HEIGHT); if (h > peak_y) { peak_x = i; peak_y = h; @@ -49,9 +49,9 @@ class SpectrumWindow : public Window dc->drawVerticalLine(i, SPECTRUM_HEIGHT - h, h, SOLID, 0); } - coord_t y = max(FH, SPECTRUM_HEIGHT - peak_y - FH); - dc->drawNumber(min(100, peak_x), y, ((reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2) + peak_x * (reusableBuffer.spectrumAnalyser.span / 128)) / 1000000, FONT(XXS)); - dc->drawText(lcdNextPos, y, "M", FONT(XXS)); + auto y = max(FH, SPECTRUM_HEIGHT - peak_y - FH); + auto x = dc->drawNumber(min(100, peak_x), y, ((reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2) + peak_x * (reusableBuffer.spectrumAnalyser.span / 128)) / 1000000, FONT(XXS)); + dc->drawText(x, y, "M", FONT(XXS)); } protected: @@ -63,7 +63,7 @@ RadioSpectrumAnalyser::RadioSpectrumAnalyser(uint8_t moduleIdx) : moduleIdx(moduleIdx) { buildBody(&body); - + setFocus(); start(); } diff --git a/radio/src/gui/colorlcd/radio_tools.cpp b/radio/src/gui/colorlcd/radio_tools.cpp index 066cc1456..ec900e566 100644 --- a/radio/src/gui/colorlcd/radio_tools.cpp +++ b/radio/src/gui/colorlcd/radio_tools.cpp @@ -73,7 +73,7 @@ bool isRadioScriptTool(const char * filename) } #endif -RadioToolsPage::RadioToolsPage() : +RadioToolsPage::RadioToolsPage(): PageTab(STR_MENUTOOLS, ICON_RADIO_TOOLS) { } @@ -122,6 +122,7 @@ void RadioToolsPage::rebuild(FormWindow * window) grid.setLabelWidth(100); window->clear(); + Window::clearFocus(); // LUA scripts in TOOLS #if defined(LUA) || defined(DEBUG) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 494095495..7b9083566 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -971,7 +971,7 @@ void checkThrottleStick() { if (isThrottleWarningAlertNeeded()) { AUDIO_ERROR_MESSAGE(AU_THROTTLE_ALERT); - auto dialog = new FullScreenDialog(WARNING_TYPE_ALERT, STR_THROTTLE_WARNING, STR_THROTTLE_NOT_IDLE, STR_PRESS_ANY_KEY_TO_SKIP); + auto dialog = new FullScreenDialog(WARNING_TYPE_ALERT, TR_THROTTLE_UPPERCASE, STR_THROTTLE_NOT_IDLE, STR_PRESS_ANY_KEY_TO_SKIP); dialog->setCloseCondition([]() { return !isThrottleWarningAlertNeeded(); }); @@ -1050,7 +1050,7 @@ void alert(const char * title, const char * msg , uint8_t sound) bool refresh = false; #endif - while (1) { + while (true) { RTOS_WAIT_MS(10); if (getEvent()) // wait for key release @@ -2117,10 +2117,11 @@ uint32_t pwrCheck() } if (get_tmr10ms() - pwr_press_time > PWR_PRESS_SHUTDOWN_DELAY()) { #if defined(SHUTDOWN_CONFIRMATION) - while (1) { + while (1) #else - while ((TELEMETRY_STREAMING() && !g_eeGeneral.disableRssiPoweroffAlarm)) { + while ((TELEMETRY_STREAMING() && !g_eeGeneral.disableRssiPoweroffAlarm)) #endif + { #if !defined(COLORLCD) lcdRefreshWait(); diff --git a/radio/src/strhelpers.h b/radio/src/strhelpers.h index e4fc85f3f..671c9a0b2 100644 --- a/radio/src/strhelpers.h +++ b/radio/src/strhelpers.h @@ -21,7 +21,7 @@ #ifndef _STRHELPERS_H_ #define _STRHELPERS_H_ -#include +#include "opentx_types.h" char * strAppend(char * dest, const char * source, int len=0); char * strAppendUnsigned(char * dest, uint32_t value, uint8_t digits=0, uint8_t radix=10); diff --git a/radio/src/targets/horus/libopenui_config.h b/radio/src/targets/horus/libopenui_config.h index a8aadd070..66c0d8ecb 100644 --- a/radio/src/targets/horus/libopenui_config.h +++ b/radio/src/targets/horus/libopenui_config.h @@ -100,14 +100,17 @@ enum LcdColorIndex FOCUS_BGCOLOR_INDEX, TEXT_STATUSBAR_COLOR_INDEX, LINE_COLOR_INDEX, + MENU_LINE_COLOR_INDEX = LINE_COLOR_INDEX, CHECKBOX_COLOR_INDEX, SCROLLBAR_COLOR_INDEX, MENU_BGCOLOR_INDEX, + MENU_HIGHLIGHT_BGCOLOR_INDEX = MENU_BGCOLOR_INDEX, MENU_COLOR_INDEX, MENU_TITLE_DISABLE_COLOR_INDEX, HEADER_COLOR_INDEX, ALARM_COLOR_INDEX, HIGHLIGHT_COLOR_INDEX, + MENU_HIGHLIGHT_COLOR_INDEX = HIGHLIGHT_COLOR_INDEX, TEXT_DISABLE_COLOR_INDEX, DISABLE_COLOR_INDEX, CURVE_COLOR_INDEX, @@ -150,7 +153,12 @@ constexpr coord_t INPUT_EDIT_CURVE_HEIGHT = LCD_H - MENU_HEADER_HEIGHT; constexpr coord_t INPUT_EDIT_CURVE_LEFT = LCD_W - 158; constexpr coord_t INPUT_EDIT_CURVE_TOP = MENU_HEADER_HEIGHT; constexpr coord_t MENUS_LINE_HEIGHT = 30; -constexpr uint8_t MENUS_MAX_LINES = 7; +constexpr coord_t MENUS_WIDTH = 200; +constexpr coord_t MENUS_OFFSET_TOP = 20; +constexpr coord_t MENUS_HEADER_HEIGHT = 30; +constexpr coord_t MENUS_FOOTER_HEIGHT = 0; +constexpr coord_t MENUS_MIN_HEIGHT = 2 * MENUS_LINE_HEIGHT - 1; +constexpr coord_t MENUS_MAX_HEIGHT = 7 * MENUS_LINE_HEIGHT - 1; constexpr int CJK_FIRST_LETTER_INDEX = 187; diff --git a/radio/src/targets/nv14/libopenui_config.h b/radio/src/targets/nv14/libopenui_config.h index 317b0085a..c8b4c48b9 100644 --- a/radio/src/targets/nv14/libopenui_config.h +++ b/radio/src/targets/nv14/libopenui_config.h @@ -98,14 +98,17 @@ enum LcdColorIndex FOCUS_BGCOLOR_INDEX, TEXT_STATUSBAR_COLOR_INDEX, LINE_COLOR_INDEX, + MENU_LINE_COLOR_INDEX = LINE_COLOR_INDEX, CHECKBOX_COLOR_INDEX, SCROLLBAR_COLOR_INDEX, MENU_BGCOLOR_INDEX, + MENU_HIGHLIGHT_BGCOLOR_INDEX = MENU_BGCOLOR_INDEX, MENU_COLOR_INDEX, MENU_TITLE_DISABLE_COLOR_INDEX, HEADER_COLOR_INDEX, ALARM_COLOR_INDEX, HIGHLIGHT_COLOR_INDEX, + MENU_HIGHLIGHT_COLOR_INDEX = HIGHLIGHT_COLOR_INDEX, TEXT_DISABLE_COLOR_INDEX, DISABLE_COLOR_INDEX, CURVE_COLOR_INDEX, @@ -148,7 +151,12 @@ constexpr coord_t INPUT_EDIT_CURVE_HEIGHT = 158; constexpr coord_t INPUT_EDIT_CURVE_LEFT = 0; constexpr coord_t INPUT_EDIT_CURVE_TOP = MENU_HEADER_HEIGHT; constexpr coord_t MENUS_LINE_HEIGHT = 40; -constexpr uint8_t MENUS_MAX_LINES = 8; +constexpr coord_t MENUS_WIDTH = 200; +constexpr coord_t MENUS_OFFSET_TOP = 20; +constexpr coord_t MENUS_HEADER_HEIGHT = 40; +constexpr coord_t MENUS_FOOTER_HEIGHT = 0; +constexpr coord_t MENUS_MIN_HEIGHT = 2 * MENUS_LINE_HEIGHT - 1; +constexpr coord_t MENUS_MAX_HEIGHT = 7 * MENUS_LINE_HEIGHT - 1; constexpr int CJK_FIRST_LETTER_INDEX = 187; diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index c018541f5..d83f02e3f 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit c018541f5d14259deff816279f219700a9462080 +Subproject commit d83f02e3fecd098285b9c3de63440c42753f059d diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 0f214cf8f..c8ad462d8 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -534,7 +534,7 @@ #define TR_SPLASHSCREEN "Splash screen" #define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_OFF_DELAY "Pwr Off delay" -#define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "Throttle state") +#define TR_THROTTLE_WARNING TR(INDENT "T-Warning", INDENT "Throttle state") #define TR_SWITCHWARNING TR(INDENT "S-Warning", INDENT "Switch positions") #define TR_POTWARNINGSTATE TR(INDENT "Pot&Slid.", INDENT "Pots & sliders") #define TR_SLIDERWARNING TR(INDENT "Slid. pos.", INDENT "Slider positions")