From b1bb0c6a650b6c02472f2fcc5e621a69ad290aff Mon Sep 17 00:00:00 2001 From: Phil Mitchell Date: Sat, 24 Dec 2022 14:55:29 +1100 Subject: [PATCH] Revised input edit page for color LCD radios. --- radio/src/gui/colorlcd/CMakeLists.txt | 1 - radio/src/gui/colorlcd/controls/fm_matrix.cpp | 14 +- radio/src/gui/colorlcd/controls/fm_matrix.h | 5 +- .../gui/colorlcd/controls/input_source.cpp | 2 +- .../src/gui/colorlcd/libui/button_matrix.cpp | 2 +- radio/src/gui/colorlcd/model/input_edit.cpp | 291 +++++++++++++----- radio/src/gui/colorlcd/model/input_edit.h | 5 +- .../src/gui/colorlcd/model/input_edit_adv.cpp | 79 ----- radio/src/gui/colorlcd/model/input_edit_adv.h | 33 -- radio/src/translations.cpp | 1 + radio/src/translations.h | 1 + radio/src/translations/cn.h | 1 + radio/src/translations/cz.h | 1 + radio/src/translations/da.h | 1 + radio/src/translations/de.h | 1 + radio/src/translations/en.h | 1 + radio/src/translations/es.h | 1 + radio/src/translations/fi.h | 1 + radio/src/translations/fr.h | 1 + radio/src/translations/he.h | 1 + radio/src/translations/it.h | 1 + radio/src/translations/jp.h | 1 + radio/src/translations/nl.h | 1 + radio/src/translations/pl.h | 1 + radio/src/translations/pt.h | 1 + radio/src/translations/se.h | 1 + radio/src/translations/tw.h | 1 + 27 files changed, 243 insertions(+), 207 deletions(-) delete mode 100644 radio/src/gui/colorlcd/model/input_edit_adv.cpp delete mode 100644 radio/src/gui/colorlcd/model/input_edit_adv.h diff --git a/radio/src/gui/colorlcd/CMakeLists.txt b/radio/src/gui/colorlcd/CMakeLists.txt index cd607eb6374..0ee17f126ed 100644 --- a/radio/src/gui/colorlcd/CMakeLists.txt +++ b/radio/src/gui/colorlcd/CMakeLists.txt @@ -52,7 +52,6 @@ set(GUI_SRC startup_shutdown.cpp model/curveedit.cpp - model/input_edit_adv.cpp model/input_edit.cpp model/menu_model.cpp model/mixer_edit_adv.cpp diff --git a/radio/src/gui/colorlcd/controls/fm_matrix.cpp b/radio/src/gui/colorlcd/controls/fm_matrix.cpp index 96ff32c8c0c..7d2c884e6d5 100644 --- a/radio/src/gui/colorlcd/controls/fm_matrix.cpp +++ b/radio/src/gui/colorlcd/controls/fm_matrix.cpp @@ -24,11 +24,13 @@ #include "edgetx.h" #include "etx_lv_theme.h" -template -FMMatrix::FMMatrix(Window* parent, const rect_t& r, T* input) : +template +FMMatrix::FMMatrix(Window* parent, const rect_t& r, T* input, uint8_t columns) : ButtonMatrix(parent, r), input(input) { - initBtnMap(FM_COLS, MAX_FLIGHT_MODES); + if (columns == 0) columns = DEF_COLS; + + initBtnMap(columns, MAX_FLIGHT_MODES); for (int i = 0; i < MAX_FLIGHT_MODES; i++) { setTextAndState(i); @@ -36,10 +38,10 @@ FMMatrix::FMMatrix(Window* parent, const rect_t& r, T* input) : update(); - lv_obj_set_width(lvobj, FM_COLS * (FM_BTN_W + PAD_TINY) + PAD_TINY); - lv_obj_set_height(lvobj, FM_ROWS * (EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY) + PAD_TINY); + lv_obj_set_width(lvobj, columns * (FM_BTN_W + PAD_TINY) + PAD_TINY); + lv_obj_set_height(lvobj, ((MAX_FLIGHT_MODES + columns - 1) / columns) * (EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY) + PAD_TINY); - padAll(PAD_SMALL); + padAll(PAD_TINY); } template diff --git a/radio/src/gui/colorlcd/controls/fm_matrix.h b/radio/src/gui/colorlcd/controls/fm_matrix.h index 08c70321dd7..a999e36e38f 100644 --- a/radio/src/gui/colorlcd/controls/fm_matrix.h +++ b/radio/src/gui/colorlcd/controls/fm_matrix.h @@ -29,14 +29,13 @@ struct MixData; template struct FMMatrix : public ButtonMatrix { T* input; - FMMatrix(Window* parent, const rect_t& rect, T* input); + FMMatrix(Window* parent, const rect_t& rect, T* input, uint8_t columns = 0); void onPress(uint8_t btn_id); bool isActive(uint8_t btn_id); void setTextAndState(uint8_t btn_id); static LAYOUT_VAL(FM_BTN_W, 48, 48) - static LAYOUT_VAL(FM_COLS, 5, 3) - static LAYOUT_VAL(FM_ROWS, 2, 3) + static LAYOUT_VAL(DEF_COLS, 5, 3) }; extern template struct FMMatrix; diff --git a/radio/src/gui/colorlcd/controls/input_source.cpp b/radio/src/gui/colorlcd/controls/input_source.cpp index c296839e7b6..ee37c2830ec 100644 --- a/radio/src/gui/colorlcd/controls/input_source.cpp +++ b/radio/src/gui/colorlcd/controls/input_source.cpp @@ -84,7 +84,7 @@ InputSource::InputSource(Window *parent, ExpoData *input) : { padAll(PAD_TINY); lv_obj_set_flex_flow(lvobj, LV_FLEX_FLOW_COLUMN); - lv_obj_set_size(lvobj, lv_pct(100), LV_SIZE_CONTENT); + lv_obj_set_size(lvobj, LV_SIZE_CONTENT, LV_SIZE_CONTENT); new SourceChoice( this, rect_t{}, INPUTSRC_FIRST, INPUTSRC_LAST, GET_DEFAULT(input->srcRaw), diff --git a/radio/src/gui/colorlcd/libui/button_matrix.cpp b/radio/src/gui/colorlcd/libui/button_matrix.cpp index b59f102c048..80197302ec5 100644 --- a/radio/src/gui/colorlcd/libui/button_matrix.cpp +++ b/radio/src/gui/colorlcd/libui/button_matrix.cpp @@ -30,7 +30,7 @@ static void btnmatrix_constructor(const lv_obj_class_t* class_p, lv_obj_t* obj) etx_bg_color(obj, COLOR_THEME_FOCUS_INDEX, LV_PART_MAIN | LV_STATE_FOCUSED); - etx_std_style(obj, LV_PART_ITEMS, PAD_LARGE); + etx_std_style(obj, LV_PART_ITEMS, PAD_ZERO); etx_obj_add_style(obj, styles->border_color[COLOR_THEME_FOCUS_INDEX], LV_PART_ITEMS | LV_STATE_EDITED); diff --git a/radio/src/gui/colorlcd/model/input_edit.cpp b/radio/src/gui/colorlcd/model/input_edit.cpp index 770bee6d99a..27d547fffb7 100644 --- a/radio/src/gui/colorlcd/model/input_edit.cpp +++ b/radio/src/gui/colorlcd/model/input_edit.cpp @@ -23,19 +23,25 @@ #include "curve_param.h" #include "curveedit.h" +#include "edgetx.h" +#include "fm_matrix.h" #include "gvar_numberedit.h" -#include "source_numberedit.h" -#include "input_edit_adv.h" #include "input_source.h" -#include "edgetx.h" -#include "etx_lv_theme.h" +#include "source_numberedit.h" #include "switchchoice.h" +#include "switches.h" #define SET_DIRTY() storageDirty(EE_MODEL) +extern int32_t getSourceNumFieldValue(int16_t val, int16_t min, int16_t max); + InputEditWindow::InputEditWindow(int8_t input, uint8_t index) : Page(ICON_MODEL_INPUTS), input(input), index(index) { + ExpoData* inputData = expoAddress(index); + + body->padAll(PAD_ZERO); + header->setTitle(STR_MENUINPUTS); headerSwitchName = header->setTitle2(""); @@ -45,37 +51,75 @@ InputEditWindow::InputEditWindow(int8_t input, uint8_t index) : setTitle(); - auto body_obj = body->getLvObj(); -#if PORTRAIT_LCD // portrait - lv_obj_set_flex_flow(body_obj, LV_FLEX_FLOW_COLUMN); + // Outer grid form + auto form = new Window(body, rect_t{}); + form->padAll(PAD_ZERO); + +#if PORTRAIT_LCD + form->setFlexLayout(LV_FLEX_FLOW_COLUMN, PAD_TINY); #else // landscape - lv_obj_set_flex_flow(body_obj, LV_FLEX_FLOW_ROW); + form->setFlexLayout(LV_FLEX_FLOW_ROW, PAD_TINY); #endif - lv_obj_set_style_flex_cross_place(body_obj, LV_FLEX_ALIGN_CENTER, 0); - auto box = new Window(body, rect_t{}); - auto box_obj = box->getLvObj(); - lv_obj_set_flex_grow(box_obj, 2); - etx_scrollbar(box_obj); + Window* box; -#if PORTRAIT_LCD // portrait - box->setWidth(body->width() - 2 * PAD_MEDIUM); -#else // landscape - box->setHeight(body->height() - 2 * PAD_MEDIUM); +#if !PORTRAIT_LCD // landscape (preview on left) + // Preview grid box - force width and height + box = new Window(form, + rect_t{0, 0, INPUT_EDIT_CURVE_WIDTH + 8, body->height()}); + box->padAll(PAD_ZERO); + + // Add preview and buttons + buildPreview(box, inputData); #endif - auto form = new Window(box, rect_t{}); - buildBody(form); + // Inner box for main controls - force width and height +#if PORTRAIT_LCD + box = new Window(form, rect_t{0, 0, body->width(), + body->height() - INPUT_EDIT_CURVE_HEIGHT - 68}); +#else + box = + new Window(form, rect_t{0, 0, body->width() - INPUT_EDIT_CURVE_WIDTH - 12, + body->height()}); +#endif + box->padAll(PAD_ZERO); + etx_scrollbar(box->getLvObj()); - preview = new Curve( - body, rect_t{0, 0, INPUT_EDIT_CURVE_WIDTH, INPUT_EDIT_CURVE_HEIGHT}, - [=](int x) -> int { - ExpoData* line = expoAddress(index); - int16_t anas[MAX_INPUTS] = {0}; - applyExpos(anas, e_perout_mode_inactive_flight_mode, line->srcRaw, x); - return anas[line->chn]; - }, - [=]() -> int { return getValue(expoAddress(index)->srcRaw); }); + // Add main controls + buildBody(box, inputData); + +#if PORTRAIT_LCD // portrait (preview below) + // Preview grid box - force width and height + box = new Window(form, + rect_t{0, 0, body->width(), INPUT_EDIT_CURVE_HEIGHT + 62}); + box->padAll(PAD_ZERO); + + // Add preview and buttons + buildPreview(box, inputData); +#endif +} + +int16_t InputEditWindow::getExpo(ExpoData* ed, int16_t val) +{ + int32_t v = 0; + if (EXPO_VALID(ed)) { + v = val; + if (EXPO_MODE_ENABLE(ed, v)) { + //========== CURVE================= + if (ed->curve.value) { + v = applyCurve(v, ed->curve); + } + + //========== WEIGHT =============== + int32_t weight = getSourceNumFieldValue(ed->weight, -100, 100); + v = divRoundClosest((int32_t)v * weight, 1000); + + //========== OFFSET =============== + int32_t offset = getSourceNumFieldValue(ed->offset, -100, 100); + if (offset) v += divRoundClosest(calc100toRESX(offset), 10); + } + } + return v; } void InputEditWindow::setTitle() @@ -87,91 +131,174 @@ static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST}; static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; -void InputEditWindow::buildBody(Window* form) +void InputEditWindow::buildBody(Window* box, ExpoData* inputData) { - FlexGridLayout grid(col_dsc, row_dsc, PAD_TINY); + auto form = new Window(box, rect_t{}); + form->padAll(PAD_TINY); form->setFlexLayout(LV_FLEX_FLOW_COLUMN, PAD_ZERO); - ExpoData* input = expoAddress(index); + FlexGridLayout grid(col_dsc, row_dsc, PAD_TINY); // Input Name auto line = form->newLine(grid); new StaticText(line, rect_t{}, STR_INPUTNAME); - new ModelTextEdit(line, rect_t{}, g_model.inputNames[input->chn], - LEN_INPUT_NAME, - [=]() { - setTitle(); - }); + new ModelTextEdit(line, {0, 0, LCD_W * 3 / 10 - 8, 0}, + g_model.inputNames[inputData->chn], LEN_INPUT_NAME, + [=]() { setTitle(); }); // Line Name line = form->newLine(grid); new StaticText(line, rect_t{}, STR_EXPONAME); - new ModelTextEdit(line, rect_t{}, input->name, LEN_EXPOMIX_NAME); + new ModelTextEdit(line, {0, 0, LCD_W * 3 / 10 - 8, 0}, inputData->name, + LEN_EXPOMIX_NAME); // Source line = form->newLine(grid); new StaticText(line, rect_t{}, STR_SOURCE); - auto src = new InputSource(line, input); - lv_obj_set_style_grid_cell_x_align(src->getLvObj(), LV_GRID_ALIGN_STRETCH, 0); + new InputSource(line, inputData); + + // Switch + line = form->newLine(grid); + new StaticText(line, rect_t{}, STR_SWITCH); + new SwitchChoice(line, rect_t{}, SWSRC_FIRST_IN_MIXES, SWSRC_LAST_IN_MIXES, + GET_SET_DEFAULT(inputData->swtch)); // Weight line = form->newLine(grid); new StaticText(line, rect_t{}, STR_WEIGHT); - auto gvar = - new SourceNumberEdit(line, -100, 100, GET_DEFAULT(input->weight), - [=](int32_t newValue) { - input->weight = newValue; - updatePreview = true; - SET_DIRTY(); - }, MIXSRC_FIRST); + auto gvar = new SourceNumberEdit( + line, -100, 100, GET_DEFAULT(inputData->weight), + [=](int32_t newValue) { + inputData->weight = newValue; + updatePreview = true; + SET_DIRTY(); + }, + MIXSRC_FIRST); gvar->setSuffix("%"); // Offset line = form->newLine(grid); new StaticText(line, rect_t{}, STR_OFFSET); - gvar = new SourceNumberEdit(line, -100, 100, - GET_DEFAULT(input->offset), [=](int32_t newValue) { - input->offset = newValue; - updatePreview = true; - SET_DIRTY(); - }, MIXSRC_FIRST); + gvar = new SourceNumberEdit( + line, -100, 100, GET_DEFAULT(inputData->offset), + [=](int32_t newValue) { + inputData->offset = newValue; + updatePreview = true; + SET_DIRTY(); + }, + MIXSRC_FIRST); gvar->setSuffix("%"); - // Switch - line = form->newLine(grid); - new StaticText(line, rect_t{}, STR_SWITCH); - new SwitchChoice(line, rect_t{}, SWSRC_FIRST_IN_MIXES, SWSRC_LAST_IN_MIXES, - GET_DEFAULT(input->swtch), - [=](int newValue) { - input->swtch = newValue; - updatePreview = true; - SET_DIRTY(); - }); - // Curve line = form->newLine(grid); new StaticText(line, rect_t{}, STR_CURVE); - auto param = - new CurveParam(line, rect_t{}, &input->curve, - [=](int32_t newValue) { - input->curve.value = newValue; - updatePreview = true; - SET_DIRTY(); - }, MIXSRC_FIRST, input->srcRaw, - [=]() { - updatePreview = true; - }); - lv_obj_set_style_grid_cell_x_align(param->getLvObj(), LV_GRID_ALIGN_STRETCH, - 0); + new CurveParam( + line, rect_t{}, &inputData->curve, + [=](int32_t newValue) { + inputData->curve.value = newValue; + updatePreview = true; + SET_DIRTY(); + }, + MIXSRC_FIRST, inputData->srcRaw, + [=]() { + updatePreview = true; + }); + // Trim line = form->newLine(grid); - line->padAll(PAD_LARGE); - auto btn = - new TextButton(line, rect_t{}, LV_SYMBOL_SETTINGS, [=]() -> uint8_t { - new InputEditAdvanced(this->input, index); - return 0; - }); - lv_obj_set_width(btn->getLvObj(), lv_pct(100)); + new StaticText(line, rect_t{}, STR_TRIM); + const auto trimLast = TRIM_OFF + keysGetMaxTrims() - 1; + auto c = new Choice(line, rect_t{}, -TRIM_OFF, trimLast, + GET_VALUE(-inputData->trimSource), + SET_VALUE(inputData->trimSource, -newValue)); + c->setAvailableHandler([=](int value) { + return value != TRIM_ON || inputData->srcRaw <= MIXSRC_LAST_STICK; + }); + c->setTextHandler([=](int value) -> std::string { + return getTrimSourceLabel(inputData->srcRaw, -value); + }); + + // Flight modes + line = form->newLine(grid); + new StaticText(line, rect_t{}, STR_FLMODE); + new FMMatrix(line, rect_t{}, inputData, 3); + +#if !PORTRAIT_LCD + line->padBottom(PAD_LARGE); +#endif +} + +void InputEditWindow::buildPreview(Window* box, ExpoData* inputData) +{ + lv_coord_t xo = (box->width() - INPUT_EDIT_CURVE_WIDTH) / 2; + lv_coord_t yo = (box->height() - (INPUT_EDIT_CURVE_HEIGHT + 56)) / 2; + + static bool showActive = true; + auto aBtn = new TextButton(box, rect_t{xo, yo, INPUT_EDIT_CURVE_WIDTH, 24}, + STR_SHOW_ACTIVE); + aBtn->padAll(PAD_ZERO); + aBtn->check(showActive); + aBtn->setPressHandler([=]() { + showActive = !showActive; + updatePreview = true; + return showActive; + }); + + preview = new Curve( + box, rect_t{xo, yo + 28, INPUT_EDIT_CURVE_WIDTH, INPUT_EDIT_CURVE_HEIGHT}, + [=](int x) -> int { + if (showActive) { + int16_t anas[MAX_INPUTS] = {0}; + applyExpos(anas, e_perout_mode_inactive_flight_mode, + inputData->srcRaw, x); + return anas[inputData->chn]; + } else { + return getExpo(inputData, x); + } + }, + [=]() -> int { return getValue(expoAddress(index)->srcRaw); }); + + auto sBtn1 = new TextButton(box, + rect_t{xo, yo + INPUT_EDIT_CURVE_HEIGHT + 4 + 28, + INPUT_EDIT_CURVE_WIDTH / 2 - 4, 24}, + STR_VCURVEFUNC[2]); + sBtn1->padAll(PAD_ZERO); + + auto sBtn2 = new TextButton(box, + rect_t{xo + INPUT_EDIT_CURVE_WIDTH / 2 + 4, + yo + INPUT_EDIT_CURVE_HEIGHT + 4 + 28, + INPUT_EDIT_CURVE_WIDTH / 2 - 4, 24}, + STR_VCURVEFUNC[1]); + sBtn2->padAll(PAD_ZERO); + + sBtn1->setPressHandler([=]() { + if (sBtn1->checked()) { + inputData->mode = inputData->mode & (~1); + if ((inputData->mode & 3) == 0) inputData->mode = inputData->mode | 2; + } else { + inputData->mode = inputData->mode | 1; + } + SET_DIRTY(); + updatePreview = true; + sBtn2->check(inputData->mode & 2); + return (inputData->mode & 1) != 0; + }); + + sBtn2->setPressHandler([=]() { + if (sBtn2->checked()) { + inputData->mode = inputData->mode & (~2); + if ((inputData->mode & 3) == 0) inputData->mode = inputData->mode | 1; + } else { + inputData->mode = inputData->mode | 2; + } + SET_DIRTY(); + updatePreview = true; + sBtn1->check(inputData->mode & 1); + return (inputData->mode & 2) != 0; + }); + + sBtn1->check(inputData->mode & 1); + sBtn2->check(inputData->mode & 2); } void InputEditWindow::checkEvents() diff --git a/radio/src/gui/colorlcd/model/input_edit.h b/radio/src/gui/colorlcd/model/input_edit.h index 34b6c1e86ac..2658fd4d00f 100644 --- a/radio/src/gui/colorlcd/model/input_edit.h +++ b/radio/src/gui/colorlcd/model/input_edit.h @@ -47,7 +47,10 @@ class InputEditWindow : public Page StaticText * headerSwitchName = nullptr; void setTitle(); - void buildBody(Window *window); + void buildBody(Window *box, ExpoData* inputData); + void buildPreview(Window *box, ExpoData* inputData); + + int16_t getExpo(ExpoData* ed, int16_t val); void checkEvents() override; }; diff --git a/radio/src/gui/colorlcd/model/input_edit_adv.cpp b/radio/src/gui/colorlcd/model/input_edit_adv.cpp deleted file mode 100644 index 6f9fd729312..00000000000 --- a/radio/src/gui/colorlcd/model/input_edit_adv.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program 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 General Public License for more details. - */ - -#include "input_edit_adv.h" - -#include "fm_matrix.h" -#include "edgetx.h" -#include "etx_lv_theme.h" - -#define SET_DIRTY() storageDirty(EE_MODEL) - -static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2), - LV_GRID_TEMPLATE_LAST}; -static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; - -InputEditAdvanced::InputEditAdvanced(uint8_t input_n, uint8_t index) : - Page(ICON_MODEL_INPUTS) -{ - std::string title2(getSourceString(MIXSRC_FIRST_INPUT + input_n)); - header->setTitle(STR_MENUINPUTS); - header->setTitle2(title2); - - FlexGridLayout grid(col_dsc, row_dsc, PAD_TINY); - body->setFlexLayout(); - - ExpoData* input = expoAddress(index); - - // Side - auto line = body->newLine(grid); - new StaticText(line, rect_t{}, STR_SIDE); - new Choice( - line, rect_t{}, STR_VCURVEFUNC, 1, 3, - [=]() -> int16_t { return 4 - input->mode; }, - [=](int16_t newValue) { - input->mode = 4 - newValue; - SET_DIRTY(); - }); - - // Trim - line = body->newLine(grid); - new StaticText(line, rect_t{}, STR_TRIM); - const auto trimLast = TRIM_OFF + keysGetMaxTrims() - 1; - auto c = new Choice(line, rect_t{}, -TRIM_OFF, trimLast, - GET_VALUE(-input->trimSource), - SET_VALUE(input->trimSource, -newValue)); - - uint16_t srcRaw = input->srcRaw; - c->setAvailableHandler([=](int value) { - return value != TRIM_ON || srcRaw <= MIXSRC_LAST_STICK; - }); - c->setTextHandler([=](int value) -> std::string { - return getTrimSourceLabel(srcRaw, -value); - }); - - // Flight modes - if (modelFMEnabled()) { - line = body->newLine(grid); - new StaticText(line, rect_t{}, STR_FLMODE); - new FMMatrix(line, rect_t{}, input); - } -} diff --git a/radio/src/gui/colorlcd/model/input_edit_adv.h b/radio/src/gui/colorlcd/model/input_edit_adv.h deleted file mode 100644 index 11d11e760d8..00000000000 --- a/radio/src/gui/colorlcd/model/input_edit_adv.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program 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 General Public License for more details. - */ - -#pragma once - -#include "page.h" -#include "button_matrix.h" - -struct ExpoData; - -class InputEditAdvanced : public Page -{ - public: - InputEditAdvanced(uint8_t input_n, uint8_t index); -}; diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 0f98cea54a4..797a2593acd 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -805,6 +805,7 @@ const char STR_FAV_MATCH[] = TR_FAV_MATCH; ISTR(LABELS_SELECT_MODE); ISTR(LABELS_MATCH_MODE); ISTR(FAV_MATCH_MODE); +const char STR_SHOW_ACTIVE[] = TR_SHOW_ACTIVE; #endif #if !defined(COLORLCD) diff --git a/radio/src/translations.h b/radio/src/translations.h index f0c0722720c..1361a5b48d9 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -811,6 +811,7 @@ extern const char STR_FAV_MATCH[]; extern const char* const STR_LABELS_SELECT_MODE[]; extern const char* const STR_LABELS_MATCH_MODE[]; extern const char* const STR_FAV_MATCH_MODE[]; +extern const char STR_SHOW_ACTIVE[]; #endif extern const char STR_EXECUTE_FILE[]; extern const char STR_DELETE_FILE[]; diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index 624366daaf4..c0f241125b3 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -717,6 +717,7 @@ #define TR_EDIT_COLOR "编辑颜色" #define TR_NO_THEME_IMAGE "没有预览图" #define TR_BACKLIGHT_TIMER "持续时间" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "快速选择模型" diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index e08b963a011..ec180976e5e 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -728,6 +728,7 @@ #define TR_EDIT_COLOR "Upravit barvu" #define TR_NO_THEME_IMAGE "Náhled motivu nedostupný" #define TR_BACKLIGHT_TIMER "Čas zhasnutí displeje" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Rychlý výběr modelu" diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 452e6d4761f..04a18e420bb 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -721,6 +721,7 @@ #define TR_EDIT_COLOR "Rediger farve" #define TR_NO_THEME_IMAGE "Ingen billede for tema" #define TR_BACKLIGHT_TIMER TR("Inaktivitet", "Ved inaktivitet dæmp efter") +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Hurtigvalg af model" diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index 29c6d5b1154..65ff3cd0971 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -716,6 +716,7 @@ #define TR_EDIT_COLOR "Farbe bearbeiten" #define TR_NO_THEME_IMAGE "Kein Theme Bild" #define TR_BACKLIGHT_TIMER "Inaktivitäts Timeout" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "schnelle Modellauswahl" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index fb433d3c670..bfe9ff8e6dc 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -719,6 +719,7 @@ #define TR_EDIT_COLOR "Edit Color" #define TR_NO_THEME_IMAGE "No theme image" #define TR_BACKLIGHT_TIMER "Inactivity timeout" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Model quick select" diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index df8534f99c0..00a90a7e717 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -712,6 +712,7 @@ #define TR_EDIT_COLOR "Edit Color" #define TR_NO_THEME_IMAGE "No theme image" #define TR_BACKLIGHT_TIMER "Inactivity timeout" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Model quick select" diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index beedb65175d..3e3647714ab 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -726,6 +726,7 @@ #define TR_EDIT_COLOR "Edit Color" #define TR_NO_THEME_IMAGE "No theme image" #define TR_BACKLIGHT_TIMER "Inactivity timeout" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Mallin pikavalinta" diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index 4bff6622015..be22cbdb03c 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -717,6 +717,7 @@ #define TR_EDIT_COLOR "Editer Couleur" #define TR_NO_THEME_IMAGE "Pas d'image de thème" #define TR_BACKLIGHT_TIMER "Durée du rétroéclairage" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Sélect. rapide modèle" diff --git a/radio/src/translations/he.h b/radio/src/translations/he.h index 926fd266555..fae70c0412c 100644 --- a/radio/src/translations/he.h +++ b/radio/src/translations/he.h @@ -720,6 +720,7 @@ #define TR_EDIT_COLOR "עריכת צבע" #define TR_NO_THEME_IMAGE "תמונת ערכת נושא" #define TR_BACKLIGHT_TIMER "זמן אי פעילות" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "בחירת מודל מהירה" diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index f2fc8d763fc..a253b4df2df 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -715,6 +715,7 @@ #define TR_EDIT_COLOR "Edita colore" #define TR_NO_THEME_IMAGE "Nessuna immagine trovata" #define TR_BACKLIGHT_TIMER "Tempo d'inattività" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Selezione rapida modello" diff --git a/radio/src/translations/jp.h b/radio/src/translations/jp.h index 22c8ac7e249..6a4f53c3f15 100644 --- a/radio/src/translations/jp.h +++ b/radio/src/translations/jp.h @@ -720,6 +720,7 @@ #define TR_EDIT_COLOR "カラー編集" #define TR_NO_THEME_IMAGE "テーマ画像はありません" #define TR_BACKLIGHT_TIMER "持続時間" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "モデル クイック選択" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index 85b1e1561a0..0d2bb7f8a2b 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -713,6 +713,7 @@ #define TR_EDIT_COLOR "Edit Color" #define TR_NO_THEME_IMAGE "No theme image" #define TR_BACKLIGHT_TIMER "Inactivity timeout" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Model quick select" diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 540ce9e8adb..c6fe5acc59e 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -714,6 +714,7 @@ #define TR_EDIT_COLOR "Edytuj kolor" #define TR_NO_THEME_IMAGE "Brak obrazu motywu" #define TR_BACKLIGHT_TIMER "Czas bezczynności" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Szybki wybór modelu" diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index 23a3d9a711a..48002ffa62c 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -724,6 +724,7 @@ #define TR_EDIT_COLOR "Editar Cor" #define TR_NO_THEME_IMAGE "Sem image tema" #define TR_BACKLIGHT_TIMER "Timeout inativ" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Sel rapida modelo" diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index c54446da7e7..55eb5fca3e0 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -731,6 +731,7 @@ #define TR_EDIT_COLOR "Redigera färg" #define TR_BACKLIGHT_TIMER "Timeout vid inaktivitet" #define TR_NO_THEME_IMAGE "Ingen temabild" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "Snabbval av modell" diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 19598771195..21a52b2ae1f 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -722,6 +722,7 @@ #define TR_EDIT_COLOR "编辑颜色" #define TR_NO_THEME_IMAGE "没有预览图" #define TR_BACKLIGHT_TIMER "持續時間" +#define TR_SHOW_ACTIVE "Show Active" #if defined(COLORLCD) #define TR_MODEL_QUICK_SELECT "快速選擇模型"