refactor(color): UI layout logic to better handle different screen sizes and orientations (#6134)
This commit is contained in:
@@ -30,12 +30,12 @@ class ChannelBar : public Window
|
||||
std::function<int16_t()> getValue, LcdColorIndex barColorIndex,
|
||||
LcdColorIndex textColorIndex = COLOR_THEME_SECONDARY1_INDEX);
|
||||
|
||||
static LAYOUT_VAL(BAR_HEIGHT, 13, 13, 9)
|
||||
static LAYOUT_VAL_SCALED(BAR_HEIGHT, 13)
|
||||
|
||||
static LAYOUT_VAL(VAL_W, 45, 45, LS(45))
|
||||
static LAYOUT_VAL(VAL_H, 14, 14, LS(14))
|
||||
static LAYOUT_VAL(VAL_XO, 5, 5, LS(5))
|
||||
static LAYOUT_VAL(VAL_XT, -54, -54, LS(-54))
|
||||
static LAYOUT_VAL_SCALED(VAL_W, 45)
|
||||
static LAYOUT_VAL_SCALED(VAL_H, 14)
|
||||
static LAYOUT_VAL_SCALED(VAL_XO, 5)
|
||||
static LAYOUT_VAL_SCALED(VAL_XT, -54)
|
||||
|
||||
protected:
|
||||
uint8_t channel = 0;
|
||||
|
||||
@@ -411,7 +411,7 @@ class ThemeColorType : public ColorType
|
||||
if (c3 != c2) makeButton(hbox, c3);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(BTN_W, 44, 44, LS(44))
|
||||
static LAYOUT_VAL_SCALED(BTN_W, 44)
|
||||
};
|
||||
|
||||
// Color editor that shows the system fixed colors as buttons
|
||||
@@ -449,7 +449,7 @@ class FixedColorType : public ColorType
|
||||
});
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(BTN_W, 44, 44, LS(44))
|
||||
static LAYOUT_VAL_SCALED(BTN_W, 44)
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -48,11 +48,11 @@ class ColorEditor : public Window
|
||||
|
||||
void setColorEditorType(COLOR_EDITOR_TYPE colorType);
|
||||
|
||||
static LAYOUT_VAL(BAR_MARGIN, 5, 5, 4)
|
||||
static LAYOUT_VAL(BAR_HEIGHT_OFFSET, 25, 25, 16)
|
||||
static LAYOUT_VAL(LBL_YO, 9, 9, 5)
|
||||
static LAYOUT_VAL(VAL_XO, 10, 10, 6)
|
||||
static LAYOUT_VAL(CRSR_SZ, 10, 10, 8)
|
||||
static LAYOUT_VAL_SCALED(BAR_MARGIN, 5)
|
||||
static LAYOUT_VAL_SCALED(BAR_HEIGHT_OFFSET, 25)
|
||||
static LAYOUT_VAL_SCALED(LBL_YO, 9)
|
||||
static LAYOUT_VAL_SCALED(VAL_XO, 10)
|
||||
static LAYOUT_VAL_SCALED_EVEN(CRSR_SZ, 10)
|
||||
|
||||
protected:
|
||||
ColorType* _colorType = nullptr;
|
||||
|
||||
@@ -24,18 +24,14 @@
|
||||
#include "color_list.h"
|
||||
#include "etx_lv_theme.h"
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
// Landscape
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#else
|
||||
// Portrait
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
|
||||
static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT,
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#endif
|
||||
|
||||
class ColorEditorPopup : public BaseDialog
|
||||
@@ -173,11 +169,16 @@ class ColorEditorPopup : public BaseDialog
|
||||
});
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(CE_SZ, 186, 186, LS(186))
|
||||
static LAYOUT_VAL2(COLOR_EDIT_WIDTH, LCD_W * 0.9, LCD_W * 0.9)
|
||||
static LAYOUT_VAL2(COLOR_EDIT_HEIGHT, LCD_H * 0.9, LV_SIZE_CONTENT)
|
||||
static LAYOUT_VAL(COLOR_PAD_WIDTH, 52, 52, LS(52))
|
||||
static LAYOUT_VAL(BTN_W, 80, 80, LS(80))
|
||||
static LAYOUT_VAL_SCALED(CE_SZ, 182)
|
||||
#if NARROW_LAYOUT
|
||||
static LAYOUT_ORIENTATION(COLOR_EDIT_WIDTH, LCD_W * 0.95, LCD_W * 0.7)
|
||||
#else
|
||||
static LAYOUT_ORIENTATION(COLOR_EDIT_WIDTH, LCD_W * 0.8, LCD_W * 0.7)
|
||||
#endif
|
||||
static LAYOUT_ORIENTATION(COLOR_EDIT_HEIGHT, LCD_H * 0.9, LV_SIZE_CONTENT)
|
||||
static LAYOUT_VAL_SCALED(COLOR_PAD_WIDTH, 52)
|
||||
static LAYOUT_VAL_SCALED(BTN_W, 80)
|
||||
static LAYOUT_VAL_SCALED(BTN_PAD_TOP, 60)
|
||||
};
|
||||
|
||||
ColorPicker::ColorPicker(Window* parent, const rect_t& rect,
|
||||
|
||||
@@ -86,8 +86,8 @@ class Curve : public Window
|
||||
|
||||
void checkEvents() override;
|
||||
|
||||
static LAYOUT_VAL(POS_LBL_X, 10, 10, LS(10))
|
||||
static LAYOUT_VAL(POS_LBL_Y, 10, 10, LS(10))
|
||||
static LAYOUT_VAL(POS_LBL_H, 17, 17, LS(17))
|
||||
static LAYOUT_VAL3(POS_PT_SZ, 9, 9, 7, 13)
|
||||
static LAYOUT_VAL_SCALED(POS_LBL_X, 10)
|
||||
static LAYOUT_VAL_SCALED(POS_LBL_Y, 10)
|
||||
static LAYOUT_VAL_SCALED(POS_LBL_H, 17)
|
||||
static LAYOUT_VAL_SCALED_ODD(POS_PT_SZ, 9)
|
||||
};
|
||||
|
||||
@@ -34,9 +34,9 @@ struct FMMatrix : public ButtonMatrix {
|
||||
bool isActive(uint8_t btn_id);
|
||||
void setTextAndState(uint8_t btn_id);
|
||||
|
||||
static LAYOUT_VAL(FM_BTN_W, 48, 48, LS(48))
|
||||
static LAYOUT_VAL2(FM_COLS, 5, 3)
|
||||
static LAYOUT_VAL2(FM_ROWS, 2, 3)
|
||||
static LAYOUT_VAL_SCALED(FM_BTN_W, 48)
|
||||
static LAYOUT_SIZE(FM_COLS, 5, 3)
|
||||
static LAYOUT_SIZE(FM_ROWS, 2, 3)
|
||||
};
|
||||
|
||||
extern template struct FMMatrix<ExpoData>;
|
||||
|
||||
@@ -43,7 +43,7 @@ class GVarNumberEdit : public Window
|
||||
void setAccelFactor(int value) { num_field->setAccelFactor(value); }
|
||||
void setDisplayHandler(std::function<std::string(int value)> function);
|
||||
|
||||
static LAYOUT_VAL(GV_BTN_W, 40, 40, LS(40))
|
||||
static LAYOUT_VAL_SCALED(GV_BTN_W, 40)
|
||||
|
||||
protected:
|
||||
Choice* gvar_field = nullptr;
|
||||
|
||||
@@ -45,7 +45,7 @@ class SourceNumberEdit : public Window
|
||||
|
||||
void update();
|
||||
|
||||
static LAYOUT_VAL(SRC_BTN_W, 38, 38, LS(38))
|
||||
static LAYOUT_VAL_SCALED(SRC_BTN_W, 38)
|
||||
|
||||
protected:
|
||||
Choice* source_field = nullptr;
|
||||
|
||||
@@ -134,7 +134,7 @@ class SourceChoiceMenuToolbar : public MenuToolbar
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(FILTER_COLUMNS, 3, 2)
|
||||
static LAYOUT_SIZE(FILTER_COLUMNS, 3, 2)
|
||||
|
||||
protected:
|
||||
MenuToolbarButton* invertBtn = nullptr;
|
||||
|
||||
@@ -29,13 +29,14 @@
|
||||
|
||||
#if !defined(BOOT)
|
||||
|
||||
extern const etxLz4Font lv_font_en_bold_XXL;
|
||||
|
||||
#define FONT_TABLE(name) \
|
||||
extern const etxLz4Font lv_font_##name##_bold_STD; \
|
||||
extern const etxLz4Font lv_font_##name##_XXS; \
|
||||
extern const etxLz4Font lv_font_##name##_XS; \
|
||||
extern const etxLz4Font lv_font_##name##_L; \
|
||||
extern const etxLz4Font lv_font_##name##_bold_XL; \
|
||||
extern const etxLz4Font lv_font_##name##_bold_XXL; \
|
||||
static const etxLz4Font* lz4FontTable[FONTS_COUNT] = { \
|
||||
nullptr, /* FONT_STD_INDEX */ \
|
||||
&lv_font_##name##_bold_STD, /* FONT_BOLD_INDEX */ \
|
||||
@@ -43,7 +44,7 @@
|
||||
&lv_font_##name##_XS, /* FONT_XS_INDEX */ \
|
||||
&lv_font_##name##_L, /* FONT_L_INDEX */ \
|
||||
&lv_font_##name##_bold_XL, /* FONT_XL_INDEX */ \
|
||||
&lv_font_##name##_bold_XXL, /* FONT_XXL_INDEX */ \
|
||||
&lv_font_en_bold_XXL, /* FONT_XXL_INDEX */ \
|
||||
}; \
|
||||
static const lv_font_t* lvglFontTable[FONTS_COUNT] = { \
|
||||
LV_FONT_DEFAULT, /* FONT_STD_INDEX */ \
|
||||
|
||||
@@ -52,7 +52,7 @@ class ChoiceBase : public FormField
|
||||
|
||||
const char* getTitle() const { return menuTitle; }
|
||||
|
||||
static LAYOUT_VAL(ICON_W, 18, 18, LS(18))
|
||||
static LAYOUT_VAL_SCALED(ICON_W, 18)
|
||||
|
||||
protected:
|
||||
lv_obj_t *label;
|
||||
|
||||
@@ -33,107 +33,88 @@
|
||||
* Layout
|
||||
*********************/
|
||||
|
||||
#if LANDSCAPE_LCD_SML
|
||||
enum PaddingSize {
|
||||
PAD_ZERO = 0,
|
||||
PAD_TINY = 1,
|
||||
PAD_SMALL = 3,
|
||||
PAD_MEDIUM = 4,
|
||||
PAD_LARGE = 6,
|
||||
PAD_SCROLL = 2,
|
||||
PAD_THREE = PAD_SCROLL,
|
||||
PAD_TABLE_V = 3,
|
||||
PAD_TABLE_H = 2,
|
||||
PAD_OUTLINE = 1,
|
||||
PAD_BORDER = 2,
|
||||
};
|
||||
#elif LANDSCAPE_LCD_LRG
|
||||
enum PaddingSize {
|
||||
PAD_ZERO = 0,
|
||||
PAD_TINY = 3,
|
||||
PAD_SMALL = 6,
|
||||
PAD_MEDIUM = 9,
|
||||
PAD_LARGE = 12,
|
||||
PAD_SCROLL = 4,
|
||||
PAD_THREE = PAD_SCROLL,
|
||||
PAD_TABLE_V = 10,
|
||||
PAD_TABLE_H = 6,
|
||||
PAD_OUTLINE = 2,
|
||||
PAD_BORDER = 2,
|
||||
};
|
||||
#if LCD_W > LCD_H
|
||||
#define LANDSCAPE true
|
||||
#define PORTRAIT false
|
||||
#else
|
||||
enum PaddingSize {
|
||||
PAD_ZERO = 0,
|
||||
PAD_TINY = 2,
|
||||
PAD_SMALL = 4,
|
||||
PAD_MEDIUM = 6,
|
||||
PAD_LARGE = 8,
|
||||
PAD_SCROLL = 3,
|
||||
PAD_THREE = PAD_SCROLL,
|
||||
PAD_TABLE_V = 7,
|
||||
PAD_TABLE_H = 4,
|
||||
PAD_OUTLINE = 2,
|
||||
PAD_BORDER = 2,
|
||||
};
|
||||
#define LANDSCAPE false
|
||||
#define PORTRAIT true
|
||||
#endif
|
||||
|
||||
#if !defined(LANDSCAPE_LCD_STD)
|
||||
# error "LANDSCAPE_LCD_STD must be defined"
|
||||
#if PORTRAIT || LCD_W == 320
|
||||
#define NARROW_LAYOUT true
|
||||
#else
|
||||
#define NARROW_LAYOUT false
|
||||
#endif
|
||||
|
||||
#if !defined(LANDSCAPE_LCD_SML)
|
||||
# error "LANDSCAPE_LCD_SML must be defined"
|
||||
#if LANDSCAPE
|
||||
#if LCD_W == 320
|
||||
#define LAYOUT_SCALE(x) (((x) * 4 + 3) / 5)
|
||||
#elif LCD_W == 800
|
||||
#define LAYOUT_SCALE(x) (((x) * 3 + 1) / 2)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(LANDSCAPE_LCD_LRG)
|
||||
# error "LANDSCAPE_LCD_LRG must be defined"
|
||||
#endif
|
||||
|
||||
#if !defined(PORTRAIT_LCD)
|
||||
# error "PORTRAIT_LCD must be defined"
|
||||
#if !defined(LAYOUT_SCALE)
|
||||
#define LAYOUT_SCALE(x) (x)
|
||||
#endif
|
||||
|
||||
// Macros for setting up layout values
|
||||
// LS - scaling factor to convert 480 wide landscape to 320 wide landscape
|
||||
// LAYOUT_VAL - 3 values - landscape, portrait, landscape small
|
||||
// - 800x480 size is calculated
|
||||
#define LS(val) ((val * 4 + 3) / 6)
|
||||
#if LANDSCAPE_LCD_STD
|
||||
#define LAYOUT_VAL(name, landscape, portrait, landscape_small) \
|
||||
constexpr coord_t name = landscape;
|
||||
#elif LANDSCAPE_LCD_SML
|
||||
#define LAYOUT_VAL(name, landscape, portrait, landscape_small) \
|
||||
constexpr coord_t name = landscape_small;
|
||||
#elif LANDSCAPE_LCD_LRG
|
||||
#define LAYOUT_VAL(name, landscape, portrait, landscape_small) \
|
||||
constexpr coord_t name = (((landscape) * 3 + 1) / 2);
|
||||
#if NARROW_LAYOUT
|
||||
#define LV(standard, narrow) LAYOUT_SCALE(narrow)
|
||||
#else
|
||||
#define LAYOUT_VAL(name, landscape, portrait, landscape_small) \
|
||||
constexpr coord_t name = portrait;
|
||||
#define LV(standard, narrow) LAYOUT_SCALE(standard)
|
||||
#endif
|
||||
|
||||
// Macro for value which only differ by orientation
|
||||
#if PORTRAIT_LCD
|
||||
#define LAYOUT_VAL2(name, landscape, portrait) \
|
||||
constexpr int name = portrait;
|
||||
enum PaddingSize {
|
||||
PAD_ZERO = 0,
|
||||
PAD_TINY = LAYOUT_SCALE(2),
|
||||
PAD_SMALL = LAYOUT_SCALE(4),
|
||||
PAD_MEDIUM = LAYOUT_SCALE(6),
|
||||
PAD_LARGE = LAYOUT_SCALE(8),
|
||||
PAD_SCROLL = LAYOUT_SCALE(3),
|
||||
PAD_THREE = PAD_SCROLL,
|
||||
PAD_TABLE_V = LAYOUT_SCALE(7),
|
||||
PAD_TABLE_H = PAD_SMALL,
|
||||
PAD_OUTLINE = PAD_TINY,
|
||||
PAD_BORDER = 2,
|
||||
};
|
||||
|
||||
#define LAYOUT_VAL_SCALED(name, value) \
|
||||
constexpr coord_t name = LAYOUT_SCALE(value);
|
||||
#define LAYOUT_VAL_SCALED_EVEN(name, value) \
|
||||
constexpr coord_t name = (LAYOUT_SCALE(value) + 1) & 0xFFFE;
|
||||
#define LAYOUT_VAL_SCALED_ODD(name, value) \
|
||||
constexpr coord_t name = (LAYOUT_SCALE(value) & 0xFFFE) + 1;
|
||||
|
||||
// Layout values based on available width (standard or narrow)
|
||||
#define LAYOUT_SIZE_SCALED(name, standard, narrow) \
|
||||
constexpr coord_t name = LV(standard, narrow);
|
||||
#define LAYOUT_SIZE_SCALED_EVEN(name, standard, narrow) \
|
||||
constexpr coord_t name = (LV(standard, narrow) + 1) & 0xFFFE;
|
||||
#define LAYOUT_SIZE_SCALED_ODD(name, standard, narrow) \
|
||||
constexpr coord_t name = (LV(standard, narrow) & 0xFFFE) + 1;
|
||||
|
||||
// Macro for value which only differ by whether layout is normal or narrow (no scaling)
|
||||
#if NARROW_LAYOUT
|
||||
#define LAYOUT_SIZE(name, standard, narrow) \
|
||||
constexpr int name = narrow;
|
||||
#else
|
||||
#define LAYOUT_VAL2(name, landscape, portrait) \
|
||||
constexpr int name = landscape;
|
||||
#define LAYOUT_SIZE(name, standard, narrow) \
|
||||
constexpr int name = standard;
|
||||
#endif
|
||||
|
||||
// Macro for all values specified directly
|
||||
#if LANDSCAPE_LCD_STD
|
||||
#define LAYOUT_VAL3(name, landscape, portrait, landscape_small, landscape_big) \
|
||||
constexpr coord_t name = landscape;
|
||||
#elif LANDSCAPE_LCD_SML
|
||||
#define LAYOUT_VAL3(name, landscape, portrait, landscape_small, landscape_big) \
|
||||
constexpr coord_t name = landscape_small;
|
||||
#elif LANDSCAPE_LCD_LRG
|
||||
#define LAYOUT_VAL3(name, landscape, portrait, landscape_small, landscape_big) \
|
||||
constexpr coord_t name = landscape_big;
|
||||
// Layout values based on orientation (landscape or portrait)
|
||||
#if LANDSCAPE
|
||||
#define LAYOUT_ORIENTATION_SCALED(name, landscape, portrait) \
|
||||
constexpr coord_t name = LAYOUT_SCALE(landscape);
|
||||
#define LAYOUT_ORIENTATION(name, landscape, portrait) \
|
||||
constexpr int name = landscape;
|
||||
#else
|
||||
#define LAYOUT_VAL3(name, landscape, portrait, landscape_small, landscape_big) \
|
||||
constexpr coord_t name = portrait;
|
||||
#define LAYOUT_ORIENTATION_SCALED(name, landscape, portrait) \
|
||||
constexpr coord_t name = LAYOUT_SCALE(portrait);
|
||||
#define LAYOUT_ORIENTATION(name, landscape, portrait) \
|
||||
constexpr int name = portrait;
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
@@ -279,11 +260,11 @@ class EdgeTxStyles
|
||||
void init();
|
||||
void applyColors();
|
||||
|
||||
static LAYOUT_VAL(STD_FONT_HEIGHT, 21, 21, 14)
|
||||
static LAYOUT_VAL(UI_ELEMENT_HEIGHT, 32, 32, 24)
|
||||
static LAYOUT_VAL(MENU_HEADER_HEIGHT, 45, 45, LS(45))
|
||||
static LAYOUT_VAL(EDIT_FLD_WIDTH_NARROW, 70, 70, LS(70))
|
||||
static LAYOUT_VAL(EDIT_FLD_WIDTH, 100, 100, LS(100))
|
||||
static LAYOUT_VAL_SCALED(STD_FONT_HEIGHT, 21)
|
||||
static LAYOUT_VAL_SCALED(UI_ELEMENT_HEIGHT, 32)
|
||||
static LAYOUT_VAL_SCALED(MENU_HEADER_HEIGHT, 45)
|
||||
static LAYOUT_VAL_SCALED(EDIT_FLD_WIDTH_NARROW, 70)
|
||||
static LAYOUT_VAL_SCALED(EDIT_FLD_WIDTH, 100)
|
||||
|
||||
protected:
|
||||
bool initDone = false;
|
||||
|
||||
@@ -87,7 +87,7 @@ class FileChoiceMenuToolbar : public MenuToolbar
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(FC_COLS, 3, 2)
|
||||
static LAYOUT_SIZE(FC_COLS, 3, 2)
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
@@ -58,22 +58,22 @@ class FullScreenDialog : public Window
|
||||
|
||||
void closeDialog();
|
||||
|
||||
static LAYOUT_VAL(ALERT_FRAME_TOP, 50, 70, LS(50))
|
||||
static LAYOUT_VAL(ALERT_FRAME_HO, 120, 2 * ALERT_FRAME_TOP, LS(120))
|
||||
static LAYOUT_SIZE_SCALED(ALERT_FRAME_TOP, 50, 70)
|
||||
static LAYOUT_SIZE(ALERT_FRAME_HO, LAYOUT_SCALE(120), 2 * ALERT_FRAME_TOP)
|
||||
static constexpr coord_t ALERT_FRAME_HEIGHT = LCD_H - ALERT_FRAME_HO;
|
||||
static LAYOUT_VAL(ALERT_BMO, 25, 15, LS(25))
|
||||
static LAYOUT_SIZE_SCALED(ALERT_BMO, 25, 15)
|
||||
static constexpr coord_t ALERT_BITMAP_TOP = ALERT_FRAME_TOP + ALERT_BMO;
|
||||
static LAYOUT_VAL(ALERT_BITMAP_LEFT, 20, 15, LS(20))
|
||||
static LAYOUT_VAL(ALERT_TO, 5, 10, LS(5))
|
||||
static LAYOUT_SIZE_SCALED(ALERT_BITMAP_LEFT, 20, 15)
|
||||
static LAYOUT_SIZE_SCALED(ALERT_TO, 5, 10)
|
||||
static constexpr coord_t ALERT_TITLE_TOP = ALERT_FRAME_TOP + ALERT_TO;
|
||||
static LAYOUT_VAL(ALERT_TITLE_LEFT, 146, 140, LS(146))
|
||||
static LAYOUT_VAL(ALERT_MO, 85, 130, LS(85))
|
||||
static LAYOUT_SIZE_SCALED(ALERT_TITLE_LEFT, 146, 140)
|
||||
static LAYOUT_SIZE_SCALED(ALERT_MO, 85, 130)
|
||||
static constexpr coord_t ALERT_MESSAGE_TOP = ALERT_TITLE_TOP + ALERT_MO;
|
||||
static LAYOUT_VAL2(ALERT_MESSAGE_LEFT, ALERT_TITLE_LEFT, 15)
|
||||
static LAYOUT_VAL(ONEBTN_W, 280, 280, LS(280))
|
||||
static LAYOUT_VAL(ONEBTN_H, 40, 40, LS(40))
|
||||
static LAYOUT_VAL(TWOBTN_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(TWOBTN_H, 40, 40, LS(40))
|
||||
static LAYOUT_SIZE_SCALED(ALERT_MESSAGE_LEFT, 146, 15)
|
||||
static LAYOUT_VAL_SCALED(ONEBTN_W, 280)
|
||||
static LAYOUT_VAL_SCALED(ONEBTN_H, 40)
|
||||
static LAYOUT_VAL_SCALED(TWOBTN_W, 100)
|
||||
static LAYOUT_VAL_SCALED(TWOBTN_H, 40)
|
||||
|
||||
protected:
|
||||
uint8_t type;
|
||||
|
||||
@@ -134,7 +134,7 @@ void InputMixButtonBase::setFlightModes(uint16_t modes)
|
||||
free(fm_buffer);
|
||||
fm_canvas = nullptr;
|
||||
fm_buffer = nullptr;
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
setHeight(ListLineButton::BTN_H);
|
||||
#endif
|
||||
return;
|
||||
@@ -146,7 +146,7 @@ void InputMixButtonBase::setFlightModes(uint16_t modes)
|
||||
lv_canvas_set_buffer(fm_canvas, fm_buffer, FM_CANVAS_WIDTH,
|
||||
FM_CANVAS_HEIGHT, LV_IMG_CF_ALPHA_8BIT);
|
||||
lv_obj_set_pos(fm_canvas, FM_X, FM_Y);
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
setHeight(ListLineButton::BTN_H + FM_CANVAS_HEIGHT + 2);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -61,26 +61,26 @@ class InputMixButtonBase : public ListLineButton
|
||||
virtual void swapLvglGroup(InputMixButtonBase* line2) = 0;
|
||||
|
||||
// total: 90 x 17
|
||||
static LAYOUT_VAL(FM_CANVAS_HEIGHT, 17, 17, LS(17))
|
||||
static LAYOUT_VAL(FM_CANVAS_WIDTH, 90, 90, 57)
|
||||
static LAYOUT_VAL_SCALED(FM_CANVAS_HEIGHT, 17)
|
||||
static LAYOUT_VAL_SCALED(FM_CANVAS_WIDTH, 90)
|
||||
|
||||
static LAYOUT_VAL(LN_X, 73, 73, LS(73))
|
||||
static LAYOUT_VAL_SCALED(LN_X, 73)
|
||||
static constexpr coord_t BTN_W = ListLineButton::GRP_W - LN_X - PAD_BORDER * 2 - PAD_OUTLINE;
|
||||
static constexpr coord_t WGT_X = PAD_TINY;
|
||||
static constexpr coord_t WGT_Y = PAD_TINY;
|
||||
static LAYOUT_VAL(WGT_W, 50, 50, LS(50))
|
||||
static LAYOUT_VAL(WGT_H, 21, 21, LS(21))
|
||||
static LAYOUT_VAL_SCALED(WGT_W, 50)
|
||||
static LAYOUT_VAL_SCALED(WGT_H, 21)
|
||||
static constexpr coord_t SRC_X = WGT_X + WGT_W + PAD_TINY;
|
||||
static constexpr coord_t SRC_Y = WGT_Y;
|
||||
static LAYOUT_VAL(SRC_W, 70, 69, LS(70))
|
||||
static LAYOUT_SIZE_SCALED(SRC_W, 70, 69)
|
||||
static constexpr coord_t SRC_H = WGT_H;
|
||||
static constexpr coord_t OPT_X = SRC_X + SRC_W + PAD_TINY;
|
||||
static constexpr coord_t OPT_Y = WGT_Y;
|
||||
static LAYOUT_VAL2(OPT_W, BTN_W - PAD_BORDER * 2 - WGT_W - SRC_W - FM_CANVAS_WIDTH - PAD_TINY * 5, 99)
|
||||
static LAYOUT_SIZE(OPT_W, BTN_W - PAD_BORDER * 2 - WGT_W - SRC_W - FM_CANVAS_WIDTH - PAD_TINY * 5, LAYOUT_SCALE(99))
|
||||
static constexpr coord_t OPT_H = WGT_H;
|
||||
static LAYOUT_VAL2(FM_X, BTN_W - PAD_BORDER * 2 - PAD_TINY - FM_CANVAS_WIDTH, 12)
|
||||
static LAYOUT_VAL2(FM_Y, (WGT_Y + PAD_TINY), (WGT_Y + WGT_H + PAD_TINY))
|
||||
static LAYOUT_VAL(FM_W, 8, 8, 5)
|
||||
static LAYOUT_SIZE(FM_X, BTN_W - PAD_BORDER * 2 - PAD_TINY - FM_CANVAS_WIDTH, PAD_LARGE + PAD_SMALL)
|
||||
static LAYOUT_SIZE(FM_Y, (WGT_Y + PAD_TINY), (WGT_Y + WGT_H + PAD_TINY))
|
||||
static LAYOUT_VAL_SCALED(FM_W, 8)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ class ListBox : public TableField
|
||||
std::string getName() const override { return "ListBox"; }
|
||||
#endif
|
||||
|
||||
static LAYOUT_VAL(MENUS_LINE_HEIGHT, 35, 35, LS(35))
|
||||
static LAYOUT_VAL_SCALED(MENUS_LINE_HEIGHT, 35)
|
||||
|
||||
protected:
|
||||
static void event_cb(lv_event_t* e);
|
||||
|
||||
@@ -145,7 +145,7 @@ class MenuBody : public TableField
|
||||
#endif
|
||||
}
|
||||
|
||||
void addLine(const uint8_t* icon_mask, const std::string& text,
|
||||
void addLine(const MaskBitmap* icon_mask, const std::string& text,
|
||||
std::function<void()> onPress, std::function<bool()> isChecked,
|
||||
bool update = true)
|
||||
{
|
||||
@@ -153,10 +153,9 @@ class MenuBody : public TableField
|
||||
if (icon_mask) {
|
||||
canvas = lv_canvas_create(nullptr);
|
||||
|
||||
lv_coord_t w = *((uint16_t*)icon_mask);
|
||||
lv_coord_t h = *(((uint16_t*)icon_mask) + 1);
|
||||
void* buf = (void*)(icon_mask + 4);
|
||||
lv_canvas_set_buffer(canvas, buf, w, h, LV_IMG_CF_ALPHA_8BIT);
|
||||
lv_coord_t w = icon_mask->width;
|
||||
lv_coord_t h = icon_mask->height;
|
||||
lv_canvas_set_buffer(canvas, (void*)&icon_mask->data[0], w, h, LV_IMG_CF_ALPHA_8BIT);
|
||||
}
|
||||
|
||||
auto l = new MenuLine(text, onPress, isChecked, canvas);
|
||||
@@ -342,7 +341,7 @@ class MenuWindowContent : public Window
|
||||
int selection() { return body->selection(); }
|
||||
void setIndex(int index) { body->setIndex(index); }
|
||||
|
||||
void addLine(const uint8_t* icon_mask, const std::string& text,
|
||||
void addLine(const MaskBitmap* icon_mask, const std::string& text,
|
||||
std::function<void()> onPress, std::function<bool()> isChecked,
|
||||
bool update = true)
|
||||
{
|
||||
@@ -393,7 +392,7 @@ void Menu::setTitle(std::string text)
|
||||
updatePosition();
|
||||
}
|
||||
|
||||
void Menu::addLine(const uint8_t* icon_mask, const std::string& text,
|
||||
void Menu::addLine(const MaskBitmap* icon_mask, const std::string& text,
|
||||
std::function<void()> onPress,
|
||||
std::function<bool()> isChecked)
|
||||
{
|
||||
@@ -401,7 +400,7 @@ void Menu::addLine(const uint8_t* icon_mask, const std::string& text,
|
||||
updatePosition();
|
||||
}
|
||||
|
||||
void Menu::addLineBuffered(const uint8_t* icon_mask, const std::string& text,
|
||||
void Menu::addLineBuffered(const MaskBitmap* icon_mask, const std::string& text,
|
||||
std::function<void()> onPress,
|
||||
std::function<bool()> isChecked)
|
||||
{
|
||||
|
||||
@@ -43,7 +43,7 @@ class Menu : public ModalWindow
|
||||
|
||||
void setTitle(std::string text);
|
||||
|
||||
void addLine(const uint8_t *icon_mask, const std::string &text,
|
||||
void addLine(const MaskBitmap *icon_mask, const std::string &text,
|
||||
std::function<void()> onPress,
|
||||
std::function<bool()> isChecked = nullptr);
|
||||
|
||||
@@ -53,7 +53,7 @@ class Menu : public ModalWindow
|
||||
addLine(nullptr, text, onPress, isChecked);
|
||||
}
|
||||
|
||||
void addLineBuffered(const uint8_t *icon_mask, const std::string &text,
|
||||
void addLineBuffered(const MaskBitmap *icon_mask, const std::string &text,
|
||||
std::function<void()> onPress,
|
||||
std::function<bool()> isChecked = nullptr);
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ MenuToolbarButton::MenuToolbarButton(Window* parent, const rect_t& rect,
|
||||
}
|
||||
|
||||
MenuToolbar::MenuToolbar(Choice* choice, Menu* menu, const int columns) :
|
||||
Window(menu, {0, 0, 0, MENUS_MAX_HEIGHT}),
|
||||
Window(menu, {0, 0, 0, 0}),
|
||||
choice(choice),
|
||||
menu(menu),
|
||||
filterColumns(columns),
|
||||
|
||||
@@ -45,8 +45,7 @@ class MenuToolbar : public Window
|
||||
|
||||
virtual void longPress() {}
|
||||
|
||||
static LAYOUT_VAL(MENUS_TOOLBAR_BUTTON_WIDTH, 36, 36, LS(36))
|
||||
static LAYOUT_VAL3(MENUS_MAX_HEIGHT, ListBox::MENUS_LINE_HEIGHT * 7 + PAD_LARGE, ListBox::MENUS_LINE_HEIGHT * 10, ListBox::MENUS_LINE_HEIGHT * 8 + PAD_LARGE, ListBox::MENUS_LINE_HEIGHT * 8 + PAD_LARGE)
|
||||
static LAYOUT_VAL_SCALED(MENUS_TOOLBAR_BUTTON_WIDTH, 36)
|
||||
|
||||
protected:
|
||||
Choice* choice;
|
||||
|
||||
@@ -36,8 +36,8 @@ class PageHeader : public Window
|
||||
void setTitle(std::string txt) { title->setText(std::move(txt)); }
|
||||
StaticText* setTitle2(std::string txt);
|
||||
|
||||
static LAYOUT_VAL(PAGE_TITLE_LEFT, 50, 50, LS(50))
|
||||
static constexpr coord_t PAGE_TITLE_TOP = 2;
|
||||
static LAYOUT_VAL_SCALED(PAGE_TITLE_LEFT, 50)
|
||||
static constexpr coord_t PAGE_TITLE_TOP = PAD_TINY;
|
||||
|
||||
protected:
|
||||
StaticText* title;
|
||||
@@ -80,7 +80,7 @@ class SubPage : public Page
|
||||
|
||||
Window* setupLine(const char* title, std::function<void(Window*, coord_t, coord_t)> createEdit, coord_t lblYOffset = 0);
|
||||
|
||||
static LAYOUT_VAL(EDT_X, 220, 144, LS(220))
|
||||
static constexpr coord_t EDT_X = LCD_W * 9 / 20;
|
||||
|
||||
protected:
|
||||
coord_t y = 0;
|
||||
|
||||
@@ -63,8 +63,8 @@ class SelectedTabIcon : public StaticIcon
|
||||
std::string getName() const override { return "SelectedTabIcon"; }
|
||||
#endif
|
||||
|
||||
static LAYOUT_VAL(SEL_DOT_X, 10, 10, 6)
|
||||
static LAYOUT_VAL(SEL_DOT_Y, 39, 39, LS(39))
|
||||
static LAYOUT_VAL_SCALED(SEL_DOT_X, 10)
|
||||
static LAYOUT_VAL_SCALED(SEL_DOT_Y, 39)
|
||||
};
|
||||
|
||||
class TabsGroupButton : public ButtonBase
|
||||
@@ -101,7 +101,7 @@ class TabsGroupButton : public ButtonBase
|
||||
pageTab->update(index);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(ICON_Y, 7, 7, LS(7))
|
||||
static LAYOUT_VAL_SCALED(ICON_Y, 7)
|
||||
|
||||
protected:
|
||||
PageTab* pageTab;
|
||||
@@ -147,8 +147,8 @@ class TabsGroupHeader : public Window
|
||||
setTitle("");
|
||||
|
||||
carousel = new Window(this,
|
||||
{TopBar::MENU_HEADER_BUTTONS_LEFT, 0,
|
||||
LCD_W - HDR_DATE_FULL_WIDTH - TopBar::MENU_HEADER_BUTTONS_LEFT, EdgeTxStyles::MENU_HEADER_HEIGHT + 10});
|
||||
{MENU_HEADER_BUTTONS_LEFT, 0,
|
||||
LCD_W - HDR_DATE_FULL_WIDTH - MENU_HEADER_BUTTONS_LEFT, EdgeTxStyles::MENU_HEADER_HEIGHT + 10});
|
||||
carousel->padAll(PAD_ZERO);
|
||||
carousel->setWindowFlag(NO_FOCUS);
|
||||
|
||||
@@ -227,9 +227,9 @@ class TabsGroupHeader : public Window
|
||||
bool isCurrent(uint8_t idx) const { return currentIndex == idx; }
|
||||
uint8_t tabCount() const { return buttons.size(); }
|
||||
|
||||
static LAYOUT_VAL(DATE_XO, 48, 48, LS(48))
|
||||
static LAYOUT_VAL(MENU_HEADER_BUTTON_WIDTH, 33, 33, LS(33))
|
||||
static LAYOUT_VAL(HDR_DATE_FULL_WIDTH, 51, 51, LS(51))
|
||||
static LAYOUT_VAL_SCALED(DATE_XO, 48)
|
||||
static LAYOUT_VAL_SCALED(MENU_HEADER_BUTTON_WIDTH, 33)
|
||||
static LAYOUT_VAL_SCALED(HDR_DATE_FULL_WIDTH, 51)
|
||||
|
||||
protected:
|
||||
uint8_t currentIndex = 0;
|
||||
|
||||
@@ -87,8 +87,8 @@ class TabsGroup : public NavWindow
|
||||
void onClicked() override;
|
||||
void onCancel() override;
|
||||
|
||||
static LAYOUT_VAL(MENU_TITLE_TOP, 48, 48, LS(48))
|
||||
static LAYOUT_VAL(MENU_TITLE_HEIGHT, 21, 21, LS(21))
|
||||
static LAYOUT_VAL_SCALED(MENU_TITLE_TOP, 48)
|
||||
static constexpr coord_t MENU_TITLE_HEIGHT = EdgeTxStyles::STD_FONT_HEIGHT;
|
||||
static constexpr coord_t MENU_BODY_TOP = MENU_TITLE_TOP + MENU_TITLE_HEIGHT;
|
||||
static constexpr coord_t MENU_BODY_HEIGHT = LCD_H - MENU_BODY_TOP;
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class ToggleSwitch : public FormField
|
||||
|
||||
void update() const;
|
||||
|
||||
static LAYOUT_VAL(TOGGLE_W, 52, 52, 40)
|
||||
static LAYOUT_VAL_SCALED(TOGGLE_W, 52)
|
||||
|
||||
protected:
|
||||
std::function<uint8_t()> _getValue;
|
||||
|
||||
@@ -347,7 +347,7 @@ class ViewChecklistWindow : public ViewTextWindow
|
||||
|
||||
lv_obj_set_layout(obj, LV_LAYOUT_FLEX);
|
||||
lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_style_pad_all(obj, 3, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_all(obj, PAD_THREE, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_row(obj, 0, LV_PART_MAIN);
|
||||
|
||||
auto g = lv_group_get_default();
|
||||
@@ -368,18 +368,18 @@ class ViewChecklistWindow : public ViewTextWindow
|
||||
lv_obj_set_flex_flow(row, LV_FLEX_FLOW_ROW);
|
||||
lv_obj_set_width(row, lv_pct(100));
|
||||
lv_obj_set_height(row, LV_SIZE_CONTENT);
|
||||
lv_obj_set_style_pad_all(row, 3, 0);
|
||||
lv_obj_set_style_pad_column(row, 6, 0);
|
||||
lv_obj_set_style_pad_all(row, PAD_THREE, 0);
|
||||
lv_obj_set_style_pad_column(row, PAD_MEDIUM, 0);
|
||||
lv_obj_set_flex_align(row, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER,
|
||||
LV_FLEX_ALIGN_SPACE_EVENLY);
|
||||
|
||||
lv_coord_t w = lv_obj_get_content_width(obj) - 6;
|
||||
lv_coord_t w = lv_obj_get_content_width(obj) - PAD_MEDIUM;
|
||||
|
||||
if (buffer[cur] == '=') {
|
||||
cur++;
|
||||
w -= 46;
|
||||
|
||||
lv_obj_set_style_pad_left(row, 10, 0);
|
||||
lv_obj_set_style_pad_left(row, PAD_LARGE + PAD_TINY, 0);
|
||||
|
||||
auto cb = checkbox_create(row);
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ class LayoutFactory
|
||||
const char* getId() const { return id; }
|
||||
const char* getName() const { return name; }
|
||||
|
||||
virtual const uint8_t* getBitmap() const = 0;
|
||||
virtual const MaskBitmap* getBitmap() const = 0;
|
||||
|
||||
virtual const ZoneOption* getLayoutOptions() const = 0;
|
||||
|
||||
@@ -77,11 +77,8 @@ class LayoutFactory
|
||||
|
||||
WidgetsContainer* createCustomScreen(unsigned customScreenIndex) const;
|
||||
|
||||
static LAYOUT_VAL(TRIM_LINE_WIDTH, 8, 8, LS(8))
|
||||
static LAYOUT_VAL(TRIM_SQUARE_SIZE, 17, 17, 13)
|
||||
|
||||
static LAYOUT_VAL(BM_W, 51, 22, LS(51))
|
||||
static LAYOUT_VAL(BM_H, 25, 34, LS(25))
|
||||
static LAYOUT_ORIENTATION_SCALED(BM_W, 51, 22)
|
||||
static LAYOUT_ORIENTATION_SCALED(BM_H, 25, 34)
|
||||
|
||||
protected:
|
||||
const char* id;
|
||||
|
||||
@@ -69,10 +69,10 @@ rect_t Layout::getMainZone() const
|
||||
rect_t zone = decoration->getMainZone();
|
||||
if (hasSliders() || hasTrims() || hasFlightMode()) {
|
||||
// some decoration activated
|
||||
zone.x += MAIN_ZONE_BORDER;
|
||||
zone.y += MAIN_ZONE_BORDER;
|
||||
zone.w -= 2 * MAIN_ZONE_BORDER;
|
||||
zone.h -= 2 * MAIN_ZONE_BORDER;
|
||||
zone.x += PAD_LARGE;
|
||||
zone.y += PAD_LARGE;
|
||||
zone.w -= 2 * PAD_LARGE;
|
||||
zone.h -= 2 * PAD_LARGE;
|
||||
}
|
||||
return ViewMain::instance()->getMainZone(zone, hasTopbar());
|
||||
}
|
||||
|
||||
@@ -107,8 +107,6 @@ class Layout: public LayoutBase
|
||||
void show(bool visible = true) override;
|
||||
|
||||
bool isLayout() override { return true; }
|
||||
|
||||
static LAYOUT_VAL(MAIN_ZONE_BORDER, 10, 10, 6)
|
||||
|
||||
protected:
|
||||
const LayoutFactory * factory = nullptr;
|
||||
@@ -137,13 +135,11 @@ class BaseLayoutFactory: public LayoutFactory
|
||||
zoneCount(zoneCount),
|
||||
zoneMap(zoneMap)
|
||||
{
|
||||
this->bitmap = (uint8_t*)malloc(align32(BM_W * BM_H + 2 * sizeof(uint16_t) + 4));
|
||||
bitmap = (MaskBitmap*)malloc(align32(BM_W * BM_H + sizeof(MaskBitmap)));
|
||||
bitmap->width = BM_W;
|
||||
bitmap->height = BM_H;
|
||||
|
||||
uint16_t* hdr = (uint16_t*)this->bitmap;
|
||||
hdr[0] = BM_W;
|
||||
hdr[1] = BM_H;
|
||||
|
||||
uint8_t* bm = (uint8_t*)(this->bitmap + 2 * sizeof(uint16_t));
|
||||
uint8_t* bm = (uint8_t*)bitmap->data;
|
||||
memset(bm, 0, BM_W * BM_H);
|
||||
|
||||
memset(bm, 0xFF, BM_W);
|
||||
@@ -178,7 +174,7 @@ class BaseLayoutFactory: public LayoutFactory
|
||||
}
|
||||
}
|
||||
|
||||
const uint8_t* getBitmap() const override { return bitmap; }
|
||||
const MaskBitmap* getBitmap() const override { return bitmap; }
|
||||
|
||||
const ZoneOption * getLayoutOptions() const override
|
||||
{
|
||||
@@ -228,7 +224,7 @@ class BaseLayoutFactory: public LayoutFactory
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint8_t * bitmap = nullptr;
|
||||
MaskBitmap * bitmap = nullptr;
|
||||
const ZoneOption * options;
|
||||
uint8_t zoneCount;
|
||||
uint8_t* zoneMap;
|
||||
|
||||
@@ -44,7 +44,7 @@ class LayoutChoice : public Button
|
||||
|
||||
LayoutChoice(Window* parent, LayoutFactoryGetter getValue,
|
||||
LayoutFactorySetter setValue) :
|
||||
Button(parent, {0, 0, LayoutFactory::BM_W + 12, LayoutFactory::BM_H + 12}),
|
||||
Button(parent, {0, 0, LayoutFactory::BM_W + PAD_LARGE + PAD_SMALL, LayoutFactory::BM_H + PAD_LARGE + PAD_SMALL}),
|
||||
getValue(std::move(getValue)),
|
||||
_setValue(std::move(setValue))
|
||||
{
|
||||
@@ -86,13 +86,12 @@ class LayoutChoice : public Button
|
||||
auto layout = getValue();
|
||||
if (!layout) return;
|
||||
|
||||
const uint8_t* bitmap = layout->getBitmap();
|
||||
const MaskBitmap* bitmap = layout->getBitmap();
|
||||
if (!bitmap) return;
|
||||
|
||||
lv_coord_t w = *((uint16_t*)bitmap);
|
||||
lv_coord_t h = *(((uint16_t*)bitmap) + 1);
|
||||
void* buf = (void*)(bitmap + 4);
|
||||
lv_canvas_set_buffer(canvas, buf, w, h, LV_IMG_CF_ALPHA_8BIT);
|
||||
lv_coord_t w = bitmap->width;
|
||||
lv_coord_t h = bitmap->height;
|
||||
lv_canvas_set_buffer(canvas, (void*)&bitmap->data[0], w, h, LV_IMG_CF_ALPHA_8BIT);
|
||||
}
|
||||
|
||||
void setValue(const LayoutFactory* layout)
|
||||
@@ -117,7 +116,7 @@ void ScreenAddPage::update(uint8_t index)
|
||||
void ScreenAddPage::build(Window* window)
|
||||
{
|
||||
new TextButton(window,
|
||||
rect_t{LCD_W / 2 - 100, window->height() / 2 - 32, 200, 32},
|
||||
rect_t{LCD_W / 2 - ADD_TXT_W / 2, window->height() / 2 - EdgeTxStyles::UI_ELEMENT_HEIGHT, ADD_TXT_W, EdgeTxStyles::UI_ELEMENT_HEIGHT},
|
||||
STR_ADD_MAIN_VIEW, [this]() -> uint8_t {
|
||||
// First page is "User interface", subtract it
|
||||
auto newIdx = pageIndex - 1;
|
||||
@@ -172,7 +171,7 @@ void ScreenAddPage::build(Window* window)
|
||||
});
|
||||
}
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(2), LV_GRID_FR(1),
|
||||
LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST};
|
||||
#else
|
||||
@@ -263,7 +262,7 @@ void ScreenSetupPage::build(Window* window)
|
||||
|
||||
Window* btn = new LayoutChoice(line, getFactory, setLayout);
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
line = window->newLine(grid);
|
||||
grid.nextCell();
|
||||
#endif
|
||||
|
||||
@@ -37,6 +37,8 @@ class ScreenAddPage : public PageTab
|
||||
protected:
|
||||
ScreenMenu* menu;
|
||||
uint8_t pageIndex;
|
||||
|
||||
static LAYOUT_VAL_SCALED(ADD_TXT_W, 200)
|
||||
};
|
||||
|
||||
class ScreenSetupPage : public PageTab
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#include "topbar_impl.h"
|
||||
#include "view_main.h"
|
||||
|
||||
#if !PORTRAIT_LCD // landscape
|
||||
#if LANDSCAPE
|
||||
|
||||
// form grid
|
||||
static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
@@ -39,7 +39,7 @@ static const lv_coord_t line_row_dsc[] = {LV_GRID_CONTENT,
|
||||
static const lv_coord_t* theme_col_dsc = line_col_dsc;
|
||||
static const lv_coord_t* theme_row_dsc = line_row_dsc;
|
||||
|
||||
#else // portrait
|
||||
#else
|
||||
|
||||
// form grid
|
||||
static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2),
|
||||
@@ -123,7 +123,7 @@ class ThemeView : public Window
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(PREVIEW_W, (LCD_W - PAD_MEDIUM * 3) / 2, LCD_W - 12)
|
||||
static LAYOUT_SIZE(PREVIEW_W, (LCD_W - PAD_MEDIUM * 3) / 2, LCD_W - PAD_LARGE - PAD_SMALL)
|
||||
|
||||
protected:
|
||||
Window* details = nullptr;
|
||||
|
||||
@@ -35,7 +35,7 @@ class ScreenUserInterfacePage : public PageTab
|
||||
|
||||
void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL(WWBTN_W, 60, 60, LS(60))
|
||||
static LAYOUT_VAL_SCALED(WWBTN_W, 60)
|
||||
|
||||
protected:
|
||||
ScreenMenu* menu;
|
||||
|
||||
@@ -31,7 +31,7 @@ static void etx_quick_button_constructor(const lv_obj_class_t* class_p,
|
||||
etx_obj_add_style(obj, styles->border_transparent, LV_PART_MAIN);
|
||||
etx_obj_add_style(obj, styles->rounded, LV_PART_MAIN);
|
||||
etx_txt_color(obj, COLOR_WHITE_INDEX, LV_PART_MAIN);
|
||||
etx_obj_add_style(obj, styles->pad_medium, LV_PART_MAIN);
|
||||
etx_obj_add_style(obj, styles->pad_zero, LV_PART_MAIN);
|
||||
|
||||
etx_obj_add_style(obj, styles->border, LV_PART_MAIN | LV_STATE_FOCUSED);
|
||||
etx_obj_add_style(obj, styles->border_color[COLOR_WHITE_INDEX],
|
||||
@@ -74,8 +74,8 @@ static const lv_obj_class_t etx_quick_icon_class = {
|
||||
.destructor_cb = nullptr,
|
||||
.user_data = nullptr,
|
||||
.event_cb = nullptr,
|
||||
.width_def = SelectFabCarousel::FAB_ICON_SIZE,
|
||||
.height_def = SelectFabCarousel::FAB_ICON_SIZE,
|
||||
.width_def = 0,
|
||||
.height_def = 0,
|
||||
.editable = LV_OBJ_CLASS_EDITABLE_FALSE,
|
||||
.group_def = LV_OBJ_CLASS_GROUP_DEF_FALSE,
|
||||
.instance_size = sizeof(lv_obj_t),
|
||||
@@ -95,18 +95,22 @@ class SelectFabButton : public ButtonBase
|
||||
{
|
||||
padAll(PAD_ZERO);
|
||||
|
||||
auto newMask = getBuiltinIcon(icon);
|
||||
coord_t fabIconSize = newMask->width + PAD_MEDIUM * 2;
|
||||
|
||||
auto iconLayout =
|
||||
new Window(this,
|
||||
{(SelectFabCarousel::FAB_BUTTON_INNER_WIDTH - SelectFabCarousel::FAB_ICON_SIZE) / 2,
|
||||
(SelectFabCarousel::FAB_BUTTON_INNER_WIDTH - SelectFabCarousel::FAB_ICON_SIZE) / 2 - 2,
|
||||
SelectFabCarousel::FAB_ICON_SIZE, SelectFabCarousel::FAB_ICON_SIZE},
|
||||
{(SelectFabCarousel::FAB_BUTTON_INNER_WIDTH - fabIconSize) / 2,
|
||||
(SelectFabCarousel::FAB_BUTTON_INNER_WIDTH - fabIconSize) / 2 - PAD_TINY,
|
||||
fabIconSize, fabIconSize},
|
||||
etx_quick_icon_create);
|
||||
iconLayout->setWindowFlag(NO_FOCUS);
|
||||
|
||||
(new StaticIcon(iconLayout, 0, 0, icon, COLOR_WHITE_INDEX))
|
||||
->center(SelectFabCarousel::FAB_ICON_SIZE - 4, SelectFabCarousel::FAB_ICON_SIZE - 4);
|
||||
->center(fabIconSize - PAD_BORDER * 2, fabIconSize - PAD_BORDER * 2);
|
||||
|
||||
new StaticText(this, {0, SelectFabCarousel::FAB_BUTTON_HEIGHT - SelectFabCarousel::FAB_TXT_YO, SelectFabCarousel::FAB_BUTTON_INNER_WIDTH, 0},
|
||||
new StaticText(this, {-PAD_BORDER, SelectFabCarousel::FAB_BUTTON_HEIGHT - SelectFabCarousel::FAB_TXT_YO,
|
||||
SelectFabCarousel::FAB_BUTTON_WIDTH, 0},
|
||||
title, COLOR_WHITE_INDEX, CENTERED);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,10 +37,9 @@ class SelectFabCarousel : public Window
|
||||
void addButton(EdgeTxIcon icon, const char* title,
|
||||
std::function<uint8_t(void)> pressHandler);
|
||||
|
||||
static LAYOUT_VAL(FAB_BUTTON_WIDTH, 80, 80, 54)
|
||||
static LAYOUT_VAL(FAB_BUTTON_HEIGHT, 114, 114, 78)
|
||||
static LAYOUT_VAL_SCALED_EVEN(FAB_BUTTON_WIDTH, 76)
|
||||
static LAYOUT_VAL_SCALED(FAB_BUTTON_HEIGHT, 114)
|
||||
|
||||
static LAYOUT_VAL(FAB_ICON_SIZE, 52, 52, 36)
|
||||
static LAYOUT_VAL(FAB_TXT_YO, 48, 48, LS(48))
|
||||
static constexpr coord_t FAB_BUTTON_INNER_WIDTH = FAB_BUTTON_WIDTH - PAD_MEDIUM;
|
||||
static LAYOUT_VAL_SCALED(FAB_TXT_YO, 48)
|
||||
static constexpr coord_t FAB_BUTTON_INNER_WIDTH = FAB_BUTTON_WIDTH - PAD_BORDER * 2;
|
||||
};
|
||||
|
||||
@@ -49,19 +49,19 @@ static const lv_style_const_prop_t shadow2_props[] = {
|
||||
static LV_STYLE_CONST_MULTI_INIT(shadow2_style, shadow2_props);
|
||||
|
||||
SliderIcon::SliderIcon(Window* parent) :
|
||||
Window(parent, rect_t{0, 0, MainViewSlider::SL_SZ + 2, MainViewSlider::SL_SZ + 2})
|
||||
Window(parent, rect_t{0, 0, MainViewSlider::SLIDER_ICON_SIZE + 2, MainViewSlider::SLIDER_ICON_SIZE + 2})
|
||||
{
|
||||
setWindowFlag(NO_FOCUS);
|
||||
|
||||
auto shad = lv_obj_create(lvobj);
|
||||
etx_obj_add_style(shad, shadow1_style, LV_PART_MAIN);
|
||||
lv_obj_set_pos(shad, 1, 1);
|
||||
lv_obj_set_size(shad, MainViewSlider::SL_SZ, MainViewSlider::SL_SZ);
|
||||
lv_obj_set_size(shad, MainViewSlider::SLIDER_ICON_SIZE, MainViewSlider::SLIDER_ICON_SIZE);
|
||||
|
||||
fill = lv_obj_create(lvobj);
|
||||
etx_obj_add_style(fill, shadow2_style, LV_PART_MAIN);
|
||||
lv_obj_set_pos(fill, 0, 0);
|
||||
lv_obj_set_size(fill, MainViewSlider::SL_SZ, MainViewSlider::SL_SZ);
|
||||
lv_obj_set_size(fill, MainViewSlider::SLIDER_ICON_SIZE, MainViewSlider::SLIDER_ICON_SIZE);
|
||||
etx_solid_bg(fill, COLOR_THEME_FOCUS_INDEX);
|
||||
}
|
||||
|
||||
@@ -72,17 +72,17 @@ MainViewSlider::MainViewSlider(Window* parent, const rect_t& rect, uint8_t idx,
|
||||
potIdx = adcGetInputOffset(ADC_INPUT_FLEX) + idx;
|
||||
|
||||
if (isVertical) {
|
||||
int sliderTicksCount = (height() - LayoutFactory::TRIM_SQUARE_SIZE) / SLIDER_TICK_SPACING;
|
||||
int sliderTicksCount = (height() - SLIDER_BAR_SIZE) / SLIDER_TICK_SPACING;
|
||||
tickPoints = new lv_point_t[(sliderTicksCount + 1) * 2];
|
||||
|
||||
lv_coord_t y = LayoutFactory::TRIM_SQUARE_SIZE / 2;
|
||||
lv_coord_t y = SLIDER_BAR_SIZE / 2;
|
||||
for (uint8_t i = 0; i <= sliderTicksCount; i++) {
|
||||
if (i == 0 || i == sliderTicksCount / 2 || i == sliderTicksCount) {
|
||||
tickPoints[i * 2] = {PAD_TINY, y};
|
||||
tickPoints[i * 2 + 1] = {SL_SZ, y};
|
||||
tickPoints[i * 2 + 1] = {SLIDER_ICON_SIZE, y};
|
||||
} else {
|
||||
tickPoints[i * 2] = {PAD_TINY + 2, y};
|
||||
tickPoints[i * 2 + 1] = {SL_SZ - 2, y};
|
||||
tickPoints[i * 2 + 1] = {SLIDER_ICON_SIZE - 2, y};
|
||||
}
|
||||
auto line = lv_line_create(lvobj);
|
||||
etx_obj_add_style(line, styles->div_line, LV_PART_MAIN);
|
||||
@@ -90,17 +90,17 @@ MainViewSlider::MainViewSlider(Window* parent, const rect_t& rect, uint8_t idx,
|
||||
y += SLIDER_TICK_SPACING;
|
||||
}
|
||||
} else {
|
||||
int sliderTicksCount = (width() - LayoutFactory::TRIM_SQUARE_SIZE) / SLIDER_TICK_SPACING;
|
||||
int sliderTicksCount = (width() - SLIDER_BAR_SIZE) / SLIDER_TICK_SPACING;
|
||||
tickPoints = new lv_point_t[(sliderTicksCount + 1) * 2];
|
||||
|
||||
lv_coord_t x = LayoutFactory::TRIM_SQUARE_SIZE / 2;
|
||||
lv_coord_t x = SLIDER_BAR_SIZE / 2;
|
||||
for (uint8_t i = 0; i <= sliderTicksCount; i++) {
|
||||
if (i == 0 || i == sliderTicksCount / 2 || i == sliderTicksCount) {
|
||||
tickPoints[i * 2] = {x, PAD_TINY};
|
||||
tickPoints[i * 2 + 1] = {x, SL_SZ};
|
||||
tickPoints[i * 2 + 1] = {x, SLIDER_ICON_SIZE};
|
||||
} else {
|
||||
tickPoints[i * 2] = {x, PAD_TINY + 2};
|
||||
tickPoints[i * 2 + 1] = {x, SL_SZ - 2};
|
||||
tickPoints[i * 2 + 1] = {x, SLIDER_ICON_SIZE - 2};
|
||||
}
|
||||
auto line = lv_line_create(lvobj);
|
||||
etx_obj_add_style(line, styles->div_line, LV_PART_MAIN);
|
||||
@@ -126,10 +126,10 @@ void MainViewSlider::setPos()
|
||||
{
|
||||
coord_t x = 0, y = 0;
|
||||
if (isVertical) {
|
||||
y = divRoundClosest((height() - LayoutFactory::TRIM_SQUARE_SIZE) * (-value + RESX),
|
||||
y = divRoundClosest((height() - SLIDER_BAR_SIZE) * (-value + RESX),
|
||||
2 * RESX);
|
||||
} else {
|
||||
x = divRoundClosest((width() - LayoutFactory::TRIM_SQUARE_SIZE) * (value + RESX),
|
||||
x = divRoundClosest((width() - SLIDER_BAR_SIZE) * (value + RESX),
|
||||
2 * RESX);
|
||||
}
|
||||
lv_obj_set_pos(sliderIcon->getLvObj(), x, y);
|
||||
@@ -149,7 +149,7 @@ void MainViewSlider::checkEvents()
|
||||
MainViewHorizontalSlider::MainViewHorizontalSlider(Window* parent,
|
||||
uint8_t idx) :
|
||||
MainViewSlider(parent,
|
||||
rect_t{0, 0, HORIZONTAL_SLIDERS_WIDTH, LayoutFactory::TRIM_SQUARE_SIZE},
|
||||
rect_t{0, 0, HORIZONTAL_SLIDERS_WIDTH, SLIDER_BAR_SIZE},
|
||||
idx, false)
|
||||
{
|
||||
}
|
||||
@@ -162,10 +162,10 @@ MainViewVerticalSlider::MainViewVerticalSlider(Window* parent,
|
||||
}
|
||||
|
||||
MainView6POS::MainView6POS(Window* parent, uint8_t idx) :
|
||||
Window(parent, rect_t{0, 0, MULTIPOS_W, LayoutFactory::TRIM_SQUARE_SIZE}), idx(idx)
|
||||
Window(parent, rect_t{0, 0, MULTIPOS_W, MainViewSlider::SLIDER_BAR_SIZE}), idx(idx)
|
||||
{
|
||||
char num[] = " ";
|
||||
coord_t x = MULTIPOS_W_SPACING / 4 + LayoutFactory::TRIM_SQUARE_SIZE / 4;
|
||||
coord_t x = MULTIPOS_W_SPACING / 4 + MainViewSlider::SLIDER_BAR_SIZE / 4;
|
||||
for (uint8_t value = 0; value < XPOTS_MULTIPOS_COUNT; value++) {
|
||||
num[0] = value + '1';
|
||||
auto p = lv_label_create(lvobj);
|
||||
|
||||
@@ -41,13 +41,13 @@ class MainViewSlider : public Window
|
||||
#if defined(RADIO_PL18) || defined(RADIO_PL18EV)
|
||||
static constexpr coord_t SLIDER_SIZE = 136; // to fit 3 across bottom row
|
||||
#else
|
||||
static LAYOUT_VAL(SLIDER_SIZE, 160, 120, 108)
|
||||
static LAYOUT_SIZE_SCALED_EVEN(SLIDER_SIZE, 160, 120)
|
||||
#endif
|
||||
static LAYOUT_VAL(SLIDER_TICK_SPACING, 4, 4, LS(4))
|
||||
static constexpr coord_t HORIZONTAL_SLIDERS_WIDTH = SLIDER_SIZE + LayoutFactory::TRIM_SQUARE_SIZE;
|
||||
static constexpr coord_t VERTICAL_SLIDERS_HEIGHT = SLIDER_SIZE + LayoutFactory::TRIM_SQUARE_SIZE;
|
||||
|
||||
static LAYOUT_VAL(SL_SZ, 15, 15, 11)
|
||||
static LAYOUT_VAL_SCALED_ODD(SLIDER_ICON_SIZE, 15)
|
||||
static constexpr coord_t SLIDER_BAR_SIZE = SLIDER_ICON_SIZE + 2;
|
||||
static LAYOUT_VAL_SCALED(SLIDER_TICK_SPACING, 4)
|
||||
static constexpr coord_t HORIZONTAL_SLIDERS_WIDTH = SLIDER_SIZE + SLIDER_BAR_SIZE;
|
||||
static constexpr coord_t VERTICAL_SLIDERS_HEIGHT = SLIDER_SIZE + SLIDER_BAR_SIZE;
|
||||
|
||||
protected:
|
||||
uint8_t potIdx;
|
||||
@@ -82,8 +82,8 @@ class MainView6POS : public Window
|
||||
|
||||
void checkEvents() override;
|
||||
|
||||
static LAYOUT_VAL(MULTIPOS_W_SPACING, 12, 12, LS(12))
|
||||
static LAYOUT_VAL(MULTIPOS_SZ, 12, 12, LS(12))
|
||||
static LAYOUT_VAL_SCALED(MULTIPOS_W_SPACING, 12)
|
||||
static LAYOUT_VAL_SCALED(MULTIPOS_SZ, 12)
|
||||
static constexpr coord_t MULTIPOS_W = (XPOTS_MULTIPOS_COUNT + 1) * MULTIPOS_W_SPACING;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -59,11 +59,9 @@ class TopBar: public TopBarBase
|
||||
|
||||
void removeWidget(unsigned int index) override;
|
||||
|
||||
static LAYOUT_VAL3(TOPBAR_ZONE_WIDTH, 70, 70, 47, 118)
|
||||
static constexpr coord_t TOPBAR_ZONE_HEIGHT = EdgeTxStyles::MENU_HEADER_HEIGHT - 2 * PAD_THREE;
|
||||
static LAYOUT_VAL_SCALED(HDR_DATE_XO, 48)
|
||||
|
||||
static LAYOUT_VAL(HDR_DATE_XO, 48, 48, LS(48))
|
||||
static LAYOUT_VAL(MENU_HEADER_BUTTONS_LEFT, 47, 47, LS(47))
|
||||
static constexpr coord_t TOPBAR_ZONE_HEIGHT = EdgeTxStyles::MENU_HEADER_HEIGHT - 2 * PAD_THREE;
|
||||
|
||||
protected:
|
||||
uint32_t lastRefresh = 0;
|
||||
|
||||
@@ -31,35 +31,33 @@ class TrimIcon : public SliderIcon
|
||||
public:
|
||||
TrimIcon(Window* parent, bool isVertical) : SliderIcon(parent)
|
||||
{
|
||||
LAYOUT_VAL(BP_V1, 3, 3, 2)
|
||||
LAYOUT_VAL3(BP_V2, 4, 4, 2, 7)
|
||||
LAYOUT_VAL3(BP_V3, 10, 10, 8, 16)
|
||||
LAYOUT_VAL(BP_V4, 12, 12, 9)
|
||||
lv_coord_t x1 = MainViewSlider::SLIDER_ICON_SIZE / 5;
|
||||
lv_coord_t x2 = MainViewSlider::SLIDER_ICON_SIZE - x1;
|
||||
lv_coord_t y1 = (MainViewSlider::SLIDER_ICON_SIZE + 1) / 4;
|
||||
lv_coord_t y2 = MainViewSlider::SLIDER_ICON_SIZE - 1 - y1;
|
||||
lv_coord_t lw = MainViewSlider::SLIDER_ICON_SIZE > 15 ? 2 : 1;
|
||||
if (lw > 1) y2 += 1;
|
||||
if (isVertical) {
|
||||
barPoints[0] = {BP_V1, BP_V2};
|
||||
barPoints[1] = {BP_V4, BP_V2};
|
||||
barPoints[2] = {BP_V1, BP_V3};
|
||||
barPoints[3] = {BP_V4, BP_V3};
|
||||
barPoints[0] = {x1, y1};
|
||||
barPoints[1] = {x2, y1};
|
||||
barPoints[2] = {x1, y2};
|
||||
barPoints[3] = {x2, y2};
|
||||
} else {
|
||||
barPoints[0] = {BP_V3, BP_V1};
|
||||
barPoints[1] = {BP_V3, BP_V4};
|
||||
barPoints[2] = {BP_V2, BP_V1};
|
||||
barPoints[3] = {BP_V2, BP_V4};
|
||||
barPoints[0] = {y2, x1};
|
||||
barPoints[1] = {y2, x2};
|
||||
barPoints[2] = {y1, x1};
|
||||
barPoints[3] = {y1, x2};
|
||||
}
|
||||
|
||||
bar1 = lv_line_create(lvobj);
|
||||
etx_obj_add_style(bar1, styles->div_line_white, LV_PART_MAIN);
|
||||
etx_obj_add_style(bar1, styles->div_line_black, LV_STATE_USER_1);
|
||||
#if LANDSCAPE_LCD_LRG
|
||||
lv_obj_set_style_line_width(bar1, 2, LV_PART_MAIN);
|
||||
#endif
|
||||
lv_obj_set_style_line_width(bar1, lw, LV_PART_MAIN);
|
||||
lv_line_set_points(bar1, &barPoints[0], 2);
|
||||
bar2 = lv_line_create(lvobj);
|
||||
etx_obj_add_style(bar2, styles->div_line_white, LV_PART_MAIN);
|
||||
etx_obj_add_style(bar2, styles->div_line_black, LV_STATE_USER_1);
|
||||
#if LANDSCAPE_LCD_LRG
|
||||
lv_obj_set_style_line_width(bar2, 2, LV_PART_MAIN);
|
||||
#endif
|
||||
lv_obj_set_style_line_width(bar2, lw, LV_PART_MAIN);
|
||||
lv_line_set_points(bar2, &barPoints[2], 2);
|
||||
|
||||
etx_bg_color(fill, COLOR_THEME_ACTIVE_INDEX, LV_STATE_USER_1);
|
||||
@@ -102,21 +100,21 @@ MainViewTrim::MainViewTrim(Window* parent, const rect_t& rect, uint8_t idx,
|
||||
etx_solid_bg(trimBar, COLOR_THEME_SECONDARY1_INDEX);
|
||||
etx_obj_add_style(trimBar, styles->rounded, LV_PART_MAIN);
|
||||
if (isVertical) {
|
||||
lv_obj_set_pos(trimBar, (LayoutFactory::TRIM_SQUARE_SIZE - LayoutFactory::TRIM_LINE_WIDTH) / 2,
|
||||
LayoutFactory::TRIM_SQUARE_SIZE / 2);
|
||||
lv_obj_set_size(trimBar, LayoutFactory::TRIM_LINE_WIDTH,
|
||||
MainViewSlider::VERTICAL_SLIDERS_HEIGHT - LayoutFactory::TRIM_SQUARE_SIZE + 1);
|
||||
lv_obj_set_pos(trimBar, (MainViewSlider::SLIDER_BAR_SIZE - TRIM_LINE_WIDTH) / 2,
|
||||
MainViewSlider::SLIDER_BAR_SIZE / 2);
|
||||
lv_obj_set_size(trimBar, TRIM_LINE_WIDTH,
|
||||
MainViewSlider::VERTICAL_SLIDERS_HEIGHT - MainViewSlider::SLIDER_BAR_SIZE + 1);
|
||||
} else {
|
||||
lv_obj_set_pos(trimBar, LayoutFactory::TRIM_SQUARE_SIZE / 2,
|
||||
(LayoutFactory::TRIM_SQUARE_SIZE - LayoutFactory::TRIM_LINE_WIDTH - 1) / 2);
|
||||
lv_obj_set_size(trimBar, MainViewSlider::HORIZONTAL_SLIDERS_WIDTH - LayoutFactory::TRIM_SQUARE_SIZE + 1,
|
||||
LayoutFactory::TRIM_LINE_WIDTH);
|
||||
lv_obj_set_pos(trimBar, MainViewSlider::SLIDER_BAR_SIZE / 2,
|
||||
(MainViewSlider::SLIDER_BAR_SIZE - TRIM_LINE_WIDTH - 1) / 2);
|
||||
lv_obj_set_size(trimBar, MainViewSlider::HORIZONTAL_SLIDERS_WIDTH - MainViewSlider::SLIDER_BAR_SIZE + 1,
|
||||
TRIM_LINE_WIDTH);
|
||||
}
|
||||
|
||||
trimIcon = new TrimIcon(this, isVertical);
|
||||
|
||||
trimValue = new DynamicNumber<int16_t>(
|
||||
this, {0, 0, LayoutFactory::TRIM_SQUARE_SIZE, 12},
|
||||
this, {0, 0, MainViewSlider::SLIDER_BAR_SIZE, 12},
|
||||
[=]() { return divRoundClosest(abs(value) * 100, trimMax); },
|
||||
COLOR_THEME_PRIMARY2_INDEX, FONT(XXS) | CENTERED);
|
||||
etx_solid_bg(trimValue->getLvObj(), COLOR_THEME_SECONDARY1_INDEX);
|
||||
@@ -157,8 +155,8 @@ void MainViewTrim::setPos()
|
||||
} else {
|
||||
x = ((value < 0) ? MainViewSlider::HORIZONTAL_SLIDERS_WIDTH * 4 / 5
|
||||
: MainViewSlider::HORIZONTAL_SLIDERS_WIDTH / 5) -
|
||||
LayoutFactory::TRIM_SQUARE_SIZE / 2;
|
||||
y = (LayoutFactory::TRIM_SQUARE_SIZE - 12) / 2;
|
||||
MainViewSlider::SLIDER_BAR_SIZE / 2;
|
||||
y = (MainViewSlider::SLIDER_BAR_SIZE - 12) / 2;
|
||||
}
|
||||
lv_obj_set_pos(trimValue->getLvObj(), x, y);
|
||||
trimValue->show();
|
||||
@@ -224,7 +222,7 @@ coord_t MainViewTrim::sx()
|
||||
if (isVertical) return 0;
|
||||
|
||||
return divRoundClosest(
|
||||
(MainViewSlider::HORIZONTAL_SLIDERS_WIDTH - LayoutFactory::TRIM_SQUARE_SIZE) * (value - trimMin),
|
||||
(MainViewSlider::HORIZONTAL_SLIDERS_WIDTH - MainViewSlider::SLIDER_BAR_SIZE) * (value - trimMin),
|
||||
trimMax - trimMin);
|
||||
}
|
||||
|
||||
@@ -233,20 +231,20 @@ coord_t MainViewTrim::sy()
|
||||
if (!isVertical) return 0;
|
||||
|
||||
return divRoundClosest(
|
||||
(MainViewSlider::VERTICAL_SLIDERS_HEIGHT - LayoutFactory::TRIM_SQUARE_SIZE) * (trimMax - value),
|
||||
(MainViewSlider::VERTICAL_SLIDERS_HEIGHT - MainViewSlider::SLIDER_BAR_SIZE) * (trimMax - value),
|
||||
trimMax - trimMin);
|
||||
}
|
||||
|
||||
MainViewHorizontalTrim::MainViewHorizontalTrim(Window* parent, uint8_t idx) :
|
||||
MainViewTrim(parent,
|
||||
rect_t{0, 0, MainViewSlider::HORIZONTAL_SLIDERS_WIDTH, LayoutFactory::TRIM_SQUARE_SIZE}, idx,
|
||||
rect_t{0, 0, MainViewSlider::HORIZONTAL_SLIDERS_WIDTH, MainViewSlider::SLIDER_BAR_SIZE}, idx,
|
||||
false)
|
||||
{
|
||||
}
|
||||
|
||||
MainViewVerticalTrim::MainViewVerticalTrim(Window* parent, uint8_t idx) :
|
||||
MainViewTrim(parent,
|
||||
rect_t{0, 0, LayoutFactory::TRIM_SQUARE_SIZE, MainViewSlider::VERTICAL_SLIDERS_HEIGHT}, idx,
|
||||
rect_t{0, 0, MainViewSlider::SLIDER_BAR_SIZE, MainViewSlider::VERTICAL_SLIDERS_HEIGHT}, idx,
|
||||
true)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ class MainViewTrim : public Window
|
||||
|
||||
coord_t sx();
|
||||
coord_t sy();
|
||||
|
||||
static LAYOUT_VAL_SCALED(TRIM_LINE_WIDTH, 8)
|
||||
};
|
||||
|
||||
class MainViewHorizontalTrim : public MainViewTrim
|
||||
|
||||
@@ -39,7 +39,7 @@ const std::string copyright_str = "Copyright (C) " BUILD_YEAR " EdgeTX";
|
||||
const std::string edgetx_url = "https://edgetx.org";
|
||||
|
||||
AboutUs::AboutUs() :
|
||||
BaseDialog(STR_ABOUT_US, true, 220, LV_SIZE_CONTENT)
|
||||
BaseDialog(STR_ABOUT_US, true, VIEW_W, LV_SIZE_CONTENT)
|
||||
{
|
||||
new StaticText(form, {0, 0, LV_PCT(100), LV_SIZE_CONTENT},
|
||||
about_str + "\n" + copyright_str,
|
||||
|
||||
@@ -26,5 +26,6 @@ class AboutUs : public BaseDialog
|
||||
public:
|
||||
AboutUs();
|
||||
|
||||
static LAYOUT_VAL(QR_SZ, 150, 150, LS(150))
|
||||
static LAYOUT_VAL_SCALED(QR_SZ, 150)
|
||||
static LAYOUT_VAL_SCALED(VIEW_W, 220)
|
||||
};
|
||||
|
||||
@@ -64,8 +64,8 @@ class ChannelsViewFooter : public Window
|
||||
STR_MONITOR_MIXER_DESC, COLOR_THEME_PRIMARY2_INDEX);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(LEG_COLORBOX, 14, 14, LS(14))
|
||||
static LAYOUT_VAL(TXT_H, 18, 18, LS(18))
|
||||
static LAYOUT_VAL_SCALED(LEG_COLORBOX, 14)
|
||||
static LAYOUT_VAL_SCALED(TXT_H, 18)
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -90,18 +90,18 @@ class ChannelsViewPage : public PageTab
|
||||
|
||||
// Channels bars
|
||||
for (uint8_t chan = pageIndex * 8; chan < 8 + pageIndex * 8; chan++) {
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
coord_t width = window->width() - (hmargin * 2);
|
||||
coord_t xPos = hmargin;
|
||||
coord_t yPos = (chan % 8) *
|
||||
((window->height() - 24) / 8);
|
||||
((window->height() - PAD_LARGE* 3) / 8);
|
||||
#else
|
||||
coord_t width = window->width() / 2 - (hmargin * 2);
|
||||
coord_t xPos = (chan % 8) >= 4 ? width + (hmargin * 2) : hmargin;
|
||||
coord_t yPos = (chan % 4) *
|
||||
((window->height() - 23) / 4);
|
||||
((window->height() - (PAD_LARGE * 3 - 1)) / 4);
|
||||
#endif
|
||||
new ComboChannelBar(window, {xPos, yPos, width, 3 * ChannelBar::BAR_HEIGHT + 3},
|
||||
new ComboChannelBar(window, {xPos, yPos, width, 3 * ChannelBar::BAR_HEIGHT + PAD_THREE},
|
||||
chan);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,19 +25,19 @@
|
||||
#include "switches.h"
|
||||
#include "etx_lv_theme.h"
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
|
||||
// Footer grid
|
||||
static const lv_coord_t f_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#else // Landscape
|
||||
#else
|
||||
|
||||
// Footer grid
|
||||
LAYOUT_VAL(LS_C1, 60, 60, LS(60))
|
||||
LAYOUT_VAL(LS_C3, 112, 112, LS(112))
|
||||
LAYOUT_VAL(LS_C5, 50, 50, LS(50))
|
||||
LAYOUT_VAL_SCALED(LS_C1, 60)
|
||||
LAYOUT_VAL_SCALED(LS_C3, 112)
|
||||
LAYOUT_VAL_SCALED(LS_C5, 50)
|
||||
static const lv_coord_t f_col_dsc[] = {
|
||||
LS_C1, LV_GRID_FR(1), LS_C3, LV_GRID_FR(1), LS_C5, LS_C5, LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
@@ -192,9 +192,9 @@ class LogicalSwitchDisplayFooter : public Window
|
||||
refresh();
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(V2_COL_CNT, 1, 2)
|
||||
static LAYOUT_VAL2(ANDSW_ROW, 0, 1)
|
||||
static LAYOUT_VAL2(ANDSW_COL, 3, 1)
|
||||
static LAYOUT_ORIENTATION(V2_COL_CNT, 1, 2)
|
||||
static LAYOUT_ORIENTATION(ANDSW_ROW, 0, 1)
|
||||
static LAYOUT_ORIENTATION(ANDSW_COL, 3, 1)
|
||||
|
||||
protected:
|
||||
unsigned lsIndex = 0;
|
||||
@@ -251,11 +251,13 @@ void LogicalSwitchesViewPage::build(Window* window)
|
||||
window,
|
||||
{0, window->height() - FOOTER_HEIGHT, window->width(), FOOTER_HEIGHT});
|
||||
|
||||
int btnHeight = (window->height() - FOOTER_HEIGHT) / ((MAX_LOGICAL_SWITCHES + BTN_MATRIX_COL - 1) / BTN_MATRIX_COL) - PAD_TINY;
|
||||
|
||||
// LSW table
|
||||
std::string lsString("L64");
|
||||
for (uint8_t i = 0; i < MAX_LOGICAL_SWITCHES; i++) {
|
||||
coord_t x = (i % BTN_MATRIX_COL) * (BTN_WIDTH + PAD_TINY) + xo;
|
||||
coord_t y = (i / BTN_MATRIX_COL) * (BTN_HEIGHT + PAD_TINY) + yo;
|
||||
coord_t y = (i / BTN_MATRIX_COL) * (btnHeight + PAD_TINY) + yo;
|
||||
|
||||
LogicalSwitchData* ls = lswAddress(i);
|
||||
bool isActive = (ls->func != LS_FUNC_NONE);
|
||||
@@ -264,7 +266,7 @@ void LogicalSwitchesViewPage::build(Window* window)
|
||||
|
||||
if (isActive) {
|
||||
auto button = new LogicalSwitchDisplayButton(
|
||||
window, {x, y, BTN_WIDTH, BTN_HEIGHT}, lsString, i);
|
||||
window, {x, y, BTN_WIDTH, btnHeight}, lsString, i);
|
||||
|
||||
button->setFocusHandler([=](bool focus) {
|
||||
if (focus) {
|
||||
@@ -273,8 +275,10 @@ void LogicalSwitchesViewPage::build(Window* window)
|
||||
return 0;
|
||||
});
|
||||
} else {
|
||||
if (btnHeight > EdgeTxStyles::STD_FONT_HEIGHT)
|
||||
y += (btnHeight - EdgeTxStyles::STD_FONT_HEIGHT) / 2;
|
||||
auto lbl = lv_label_create(window->getLvObj());
|
||||
lv_obj_set_size(lbl, BTN_WIDTH, BTN_HEIGHT);
|
||||
lv_obj_set_size(lbl, BTN_WIDTH, btnHeight);
|
||||
lv_obj_set_pos(lbl, x, y);
|
||||
etx_obj_add_style(lbl, styles->text_align_center, LV_PART_MAIN);
|
||||
etx_txt_color(lbl, COLOR_THEME_DISABLED_INDEX);
|
||||
|
||||
@@ -30,10 +30,9 @@ class LogicalSwitchesViewPage : public PageTab
|
||||
public:
|
||||
LogicalSwitchesViewPage();
|
||||
|
||||
static LAYOUT_VAL(FOOTER_HEIGHT, 20, 40, LS(20))
|
||||
static LAYOUT_VAL(BTN_WIDTH, 57, 76, LS(57))
|
||||
static LAYOUT_VAL(BTN_HEIGHT, 20, 21, 18)
|
||||
static LAYOUT_VAL2(BTN_MATRIX_COL, 8, 4)
|
||||
static LAYOUT_ORIENTATION_SCALED(FOOTER_HEIGHT, 20, 40)
|
||||
static LAYOUT_ORIENTATION(BTN_MATRIX_COL, 8, 6)
|
||||
static constexpr coord_t BTN_WIDTH = (LCD_W - PAD_OUTLINE * 2) / BTN_MATRIX_COL - PAD_OUTLINE;
|
||||
|
||||
protected:
|
||||
void build(Window* window) override;
|
||||
|
||||
@@ -155,22 +155,22 @@ void ViewMainDecoration::createSliders(Window* ml, Window* mr, Window* bl, Windo
|
||||
coord_t rsh = (IS_POT_AVAILABLE(pot + 3)) ? MainViewSlider::VERTICAL_SLIDERS_HEIGHT / 2 : MainViewSlider::VERTICAL_SLIDERS_HEIGHT;
|
||||
|
||||
if (IS_POT_AVAILABLE(pot)) {
|
||||
sliders[pot] = new MainViewVerticalSlider(leftPots, rect_t{0, 0, LayoutFactory::TRIM_SQUARE_SIZE, lsh}, pot);
|
||||
sliders[pot] = new MainViewVerticalSlider(leftPots, rect_t{0, 0, MainViewSlider::SLIDER_BAR_SIZE, lsh}, pot);
|
||||
}
|
||||
pot += 1;
|
||||
|
||||
if (IS_POT_AVAILABLE(pot)) {
|
||||
sliders[pot] = new MainViewVerticalSlider(rightPots, rect_t{0, 0, LayoutFactory::TRIM_SQUARE_SIZE, rsh}, pot);
|
||||
sliders[pot] = new MainViewVerticalSlider(rightPots, rect_t{0, 0, MainViewSlider::SLIDER_BAR_SIZE, rsh}, pot);
|
||||
}
|
||||
pot += 1;
|
||||
|
||||
if (IS_POT_AVAILABLE(pot)) {
|
||||
sliders[pot] = new MainViewVerticalSlider(leftPots, rect_t{0, 0, LayoutFactory::TRIM_SQUARE_SIZE, lsh}, pot);
|
||||
sliders[pot] = new MainViewVerticalSlider(leftPots, rect_t{0, 0, MainViewSlider::SLIDER_BAR_SIZE, lsh}, pot);
|
||||
}
|
||||
pot += 1;
|
||||
|
||||
if (IS_POT_AVAILABLE(pot)) {
|
||||
sliders[pot] = new MainViewVerticalSlider(rightPots, rect_t{0, 0, LayoutFactory::TRIM_SQUARE_SIZE, rsh}, pot);
|
||||
sliders[pot] = new MainViewVerticalSlider(rightPots, rect_t{0, 0, MainViewSlider::SLIDER_BAR_SIZE, rsh}, pot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,12 +65,12 @@ ViewMainMenu::ViewMainMenu(Window* parent, std::function<void()> closeHandler) :
|
||||
// Save focus
|
||||
Layer::push(this);
|
||||
|
||||
coord_t w = SelectFabCarousel::FAB_BUTTON_WIDTH * QM_COLS + PAD_LARGE * 2;
|
||||
coord_t h = SelectFabCarousel::FAB_BUTTON_HEIGHT * QM_ROWS + PAD_LARGE * 2;
|
||||
coord_t w = SelectFabCarousel::FAB_BUTTON_WIDTH * QM_COLS + PAD_SMALL * 2;
|
||||
coord_t h = SelectFabCarousel::FAB_BUTTON_HEIGHT * QM_ROWS + PAD_SMALL * 2;
|
||||
|
||||
bool hasNotes = modelHasNotes();
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
if (hasNotes)
|
||||
w += SelectFabCarousel::FAB_BUTTON_WIDTH;
|
||||
#endif
|
||||
@@ -78,7 +78,7 @@ ViewMainMenu::ViewMainMenu(Window* parent, std::function<void()> closeHandler) :
|
||||
auto box =
|
||||
new Window(this, {(LCD_W - w) / 2, (LCD_H - h) / 2, w, h},
|
||||
etx_modal_dialog_create);
|
||||
box->padAll(PAD_LARGE);
|
||||
box->padAll(PAD_SMALL);
|
||||
|
||||
auto carousel = new SelectFabCarousel(box);
|
||||
carousel->addButton(ICON_MODEL_SELECT, STR_MAIN_MENU_MANAGE_MODELS,
|
||||
|
||||
@@ -32,8 +32,8 @@ class ViewMainMenu : public Window
|
||||
void onClicked() override;
|
||||
void deleteLater(bool detach = true, bool trash = true) override;
|
||||
|
||||
static LAYOUT_VAL2(QM_COLS, 4, 3)
|
||||
static LAYOUT_VAL2(QM_ROWS, 2, 3)
|
||||
static LAYOUT_ORIENTATION(QM_COLS, 4, 3)
|
||||
static LAYOUT_ORIENTATION(QM_ROWS, 2, 3)
|
||||
|
||||
protected:
|
||||
std::function<void()> closeHandler = nullptr;
|
||||
|
||||
@@ -59,32 +59,26 @@ static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t dbg_4col_dsc[] = {LV_GRID_FR(2), LV_GRID_FR(3),
|
||||
LV_GRID_FR(3), LV_GRID_FR(3),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
#define DBG_COL_CNT 4
|
||||
#else
|
||||
static const lv_coord_t dbg_2col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
static const lv_coord_t dbg_3col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
|
||||
#define DBG_COL_CNT 3
|
||||
#endif
|
||||
|
||||
static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#define CV_SCALE 3
|
||||
#define DBG_B_WIDTH (LCD_W - 20) / 4
|
||||
#else
|
||||
#define CV_SCALE 4
|
||||
#define DBG_B_WIDTH (LCD_W - 20) / 2
|
||||
#endif
|
||||
static LAYOUT_ORIENTATION(DBG_COL_CNT, 4, 3)
|
||||
static LAYOUT_ORIENTATION(DBG_B_WIDTH, (LCD_W - 20) / 4, (LCD_W - 20) / 2)
|
||||
static LAYOUT_VAL_SCALED(DBG_B_HEIGHT, 20)
|
||||
static LAYOUT_ORIENTATION(CV_SCALE, 3, 4)
|
||||
#define CV_WIDTH MAXTRACE
|
||||
#define CV_HEIGHT (CV_SCALE * 32 + 5)
|
||||
|
||||
#define DBG_B_HEIGHT 20
|
||||
#define CV_HEIGHT (CV_SCALE * EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_SMALL + 1)
|
||||
static LAYOUT_VAL_SCALED(RST_BTN_H, 24)
|
||||
|
||||
template <class T>
|
||||
class DebugInfoNumber : public Window
|
||||
@@ -121,14 +115,14 @@ class ThrottleCurveWindow : public Window
|
||||
int i;
|
||||
|
||||
axis[0] = {0, 0};
|
||||
axis[1] = {0, (lv_coord_t)(h - 3)};
|
||||
axis[2] = {(lv_coord_t)width(), (lv_coord_t)(h - 3)};
|
||||
axis[1] = {0, (lv_coord_t)(h - PAD_THREE)};
|
||||
axis[2] = {(lv_coord_t)width(), (lv_coord_t)(h - PAD_THREE)};
|
||||
auto axisLine = lv_line_create(lvobj);
|
||||
etx_obj_add_style(axisLine, styles->div_line_black, LV_PART_MAIN);
|
||||
lv_line_set_points(axisLine, axis, 3);
|
||||
|
||||
for (x = 0, i = 0; x < width(); x += 6, i += 2) {
|
||||
ticks[i] = {x, (lv_coord_t)(h - 5)};
|
||||
ticks[i] = {x, (lv_coord_t)(h - PAD_SMALL - 1)};
|
||||
ticks[i + 1] = {x, h};
|
||||
auto tick = lv_line_create(lvobj);
|
||||
lv_line_set_points(tick, &ticks[i], 2);
|
||||
@@ -150,7 +144,7 @@ class ThrottleCurveWindow : public Window
|
||||
for (lv_coord_t x = 0; x < width() && traceRd < s_traceWr;
|
||||
x += 1, traceRd += 1) {
|
||||
uint8_t h = s_traceBuf[traceRd % width()];
|
||||
lv_coord_t y = height() - 3 - CV_SCALE * h;
|
||||
lv_coord_t y = height() - PAD_THREE - CV_SCALE * h;
|
||||
graph[x] = {x, y};
|
||||
graphSize += 1;
|
||||
}
|
||||
@@ -225,7 +219,7 @@ void StatisticsViewPage::build(Window* window)
|
||||
line->padAll(PAD_SMALL);
|
||||
|
||||
// Reset
|
||||
auto btn = new TextButton(line, rect_t{0, 0, 0, 24}, STR_MENUTORESET,
|
||||
auto btn = new TextButton(line, rect_t{0, 0, 0, RST_BTN_H}, STR_MENUTORESET,
|
||||
[=]() -> uint8_t {
|
||||
g_eeGeneral.globalTimer = 0;
|
||||
storageDirty(EE_GENERAL);
|
||||
@@ -244,7 +238,7 @@ void DebugViewPage::build(Window* window)
|
||||
{
|
||||
window->setFlexLayout(LV_FLEX_FLOW_COLUMN, PAD_ZERO);
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
FlexGridLayout grid(dbg_4col_dsc, row_dsc, PAD_ZERO);
|
||||
FlexGridLayout grid2(dbg_4col_dsc, row_dsc, PAD_ZERO);
|
||||
#else
|
||||
@@ -283,10 +277,10 @@ void DebugViewPage::build(Window* window)
|
||||
|
||||
// LUA timing data
|
||||
new StaticText(line, rect_t{}, STR_LUA_SCRIPTS_LABEL);
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
line = window->newLine(grid);
|
||||
line->padAll(PAD_ZERO);
|
||||
line->padLeft(10);
|
||||
line->padLeft(PAD_LARGE);
|
||||
#endif
|
||||
new DebugInfoNumber<uint16_t>(
|
||||
line, rect_t{0, 0, DBG_B_WIDTH, DBG_B_HEIGHT},
|
||||
@@ -297,8 +291,8 @@ void DebugViewPage::build(Window* window)
|
||||
|
||||
line = window->newLine(grid);
|
||||
line->padAll(PAD_ZERO);
|
||||
#if PORTRAIT_LCD
|
||||
line->padLeft(10);
|
||||
#if PORTRAIT
|
||||
line->padLeft(PAD_LARGE);
|
||||
#else
|
||||
grid.nextCell();
|
||||
#endif
|
||||
@@ -311,10 +305,10 @@ void DebugViewPage::build(Window* window)
|
||||
line, rect_t{0, 0, DBG_B_WIDTH, DBG_B_HEIGHT},
|
||||
[] { return luaGetMemUsed(lsWidgets); }, STR_MEM_USED_WIDGET);
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
line = window->newLine(grid);
|
||||
line->padAll(PAD_ZERO);
|
||||
line->padLeft(10);
|
||||
line->padLeft(PAD_LARGE);
|
||||
#endif
|
||||
|
||||
new DebugInfoNumber<uint32_t>(
|
||||
@@ -327,10 +321,10 @@ void DebugViewPage::build(Window* window)
|
||||
|
||||
// Stacks data
|
||||
new StaticText(line, rect_t{}, STR_FREE_STACK);
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
line = window->newLine(grid2);
|
||||
line->padAll(PAD_ZERO);
|
||||
line->padLeft(10);
|
||||
line->padLeft(PAD_LARGE);
|
||||
#endif
|
||||
new DebugInfoNumber<uint32_t>(
|
||||
line, rect_t{0, 0, DBG_B_WIDTH, DBG_B_HEIGHT},
|
||||
@@ -363,10 +357,10 @@ void DebugViewPage::build(Window* window)
|
||||
line->padAll(PAD_TINY);
|
||||
|
||||
new StaticText(line, rect_t{}, STR_INT_GPS_LABEL);
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
line = window->newLine(grid2);
|
||||
line->padAll(PAD_ZERO);
|
||||
line->padLeft(10);
|
||||
line->padLeft(PAD_LARGE);
|
||||
#endif
|
||||
new DynamicText(
|
||||
line, rect_t{0, 0, DBG_B_WIDTH, DBG_B_HEIGHT},
|
||||
@@ -386,7 +380,7 @@ void DebugViewPage::build(Window* window)
|
||||
line->padAll(PAD_SMALL);
|
||||
|
||||
// Reset
|
||||
auto btn = new TextButton(line, rect_t{0, 0, 0, 24}, STR_MENUTORESET,
|
||||
auto btn = new TextButton(line, rect_t{0, 0, 0, RST_BTN_H}, STR_MENUTORESET,
|
||||
[=]() -> uint8_t {
|
||||
maxMixerDuration = 0;
|
||||
#if defined(LUA)
|
||||
|
||||
@@ -156,7 +156,7 @@ void Widget::enableFocus(bool enable)
|
||||
if (enable) {
|
||||
if (!focusBorder) {
|
||||
lv_style_init(&borderStyle);
|
||||
lv_style_set_line_width(&borderStyle, 2);
|
||||
lv_style_set_line_width(&borderStyle, PAD_BORDER);
|
||||
lv_style_set_line_opa(&borderStyle, LV_OPA_COVER);
|
||||
lv_style_set_line_color(&borderStyle, makeLvColor(COLOR_THEME_FOCUS));
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class WidgetSettings : public BaseDialog
|
||||
public:
|
||||
WidgetSettings(Widget* widget);
|
||||
|
||||
static LAYOUT_VAL(SLIDER_W, 150, 120, LS(150))
|
||||
static LAYOUT_SIZE_SCALED(SLIDER_W, 150, 120)
|
||||
|
||||
protected:
|
||||
Widget* widget;
|
||||
|
||||
@@ -27,7 +27,9 @@
|
||||
#define WIDGET_NAME_LEN 20
|
||||
#define MAX_WIDGET_OPTIONS 10
|
||||
|
||||
static LAYOUT_VAL2(MAX_TOPBAR_ZONES, 6, 4)
|
||||
static LAYOUT_VAL_SCALED(MENU_HEADER_BUTTONS_LEFT, 47)
|
||||
static LAYOUT_VAL_SCALED(TOPBAR_ZONE_WIDTH, 70);
|
||||
static constexpr int MAX_TOPBAR_ZONES = (LCD_W - MENU_HEADER_BUTTONS_LEFT - 1 + TOPBAR_ZONE_WIDTH / 2) / TOPBAR_ZONE_WIDTH;
|
||||
|
||||
#define MAX_TOPBAR_OPTIONS 1 // just because of VC++ which doesn't like 0-size arrays :(
|
||||
|
||||
|
||||
@@ -57,10 +57,10 @@ SetupWidgetsPageSlot::SetupWidgetsPageSlot(Window* parent, const rect_t& rect,
|
||||
etx_obj_add_style(lvobj, styles->border_color[COLOR_THEME_FOCUS_INDEX], LV_STATE_FOCUSED);
|
||||
|
||||
lv_style_init(&borderStyle);
|
||||
lv_style_set_line_width(&borderStyle, 2);
|
||||
lv_style_set_line_width(&borderStyle, PAD_BORDER);
|
||||
lv_style_set_line_opa(&borderStyle, LV_OPA_COVER);
|
||||
lv_style_set_line_dash_width(&borderStyle, 2);
|
||||
lv_style_set_line_dash_gap(&borderStyle, 2);
|
||||
lv_style_set_line_dash_width(&borderStyle, PAD_BORDER);
|
||||
lv_style_set_line_dash_gap(&borderStyle, PAD_BORDER);
|
||||
lv_style_set_line_color(&borderStyle, makeLvColor(COLOR_THEME_SECONDARY2));
|
||||
|
||||
borderPts[0] = {1, 1};
|
||||
|
||||
@@ -130,11 +130,13 @@ class CurveDataEdit : public Window
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(ROW_HEIGHT, 82, 82, LS(82))
|
||||
static LAYOUT_VAL(NUM_BTN_WIDTH, 48, 48, LS(48))
|
||||
static LAYOUT_VAL(NUM_HDR_HEIGHT, 15, 15, LS(15))
|
||||
static LAYOUT_VAL(PTNUM_X, 15, 15, LS(15))
|
||||
static LAYOUT_VAL(PTNUM_H, 13, 13, LS(13))
|
||||
static LAYOUT_VAL_SCALED(ROW_HEIGHT, 82)
|
||||
static LAYOUT_VAL_SCALED(NUM_BTN_WIDTH, 47)
|
||||
static LAYOUT_VAL_SCALED(NUM_HDR_HEIGHT, 15)
|
||||
static LAYOUT_VAL_SCALED(PTNUM_X, 15)
|
||||
static LAYOUT_VAL_SCALED(PTNUM_H, 13)
|
||||
static constexpr coord_t PT_EDIT_WIDTH = PTNUM_X + (NUM_BTN_WIDTH + PAD_TINY) * 5;
|
||||
static LAYOUT_ORIENTATION(CURVE_WIDTH, LCD_W - PAD_SMALL - PT_EDIT_WIDTH, LAYOUT_SCALE(200))
|
||||
|
||||
protected:
|
||||
uint8_t index;
|
||||
@@ -270,13 +272,13 @@ void CurveEditWindow::buildBody(Window* window)
|
||||
lv_obj_set_grid_align(line->getLvObj(), LV_GRID_ALIGN_SPACE_BETWEEN,
|
||||
LV_GRID_ALIGN_SPACE_BETWEEN);
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
lv_obj_set_flex_flow(line->getLvObj(), LV_FLEX_FLOW_COLUMN);
|
||||
coord_t boxWidth = window->width();
|
||||
coord_t boxHeight = window->height() - CURVE_WIDTH;
|
||||
coord_t boxHeight = window->height() - CurveDataEdit::CURVE_WIDTH;
|
||||
#else
|
||||
lv_obj_set_flex_flow(line->getLvObj(), LV_FLEX_FLOW_ROW);
|
||||
coord_t boxWidth = window->width() - CURVE_WIDTH;
|
||||
coord_t boxWidth = window->width() - CurveDataEdit::CURVE_WIDTH;
|
||||
coord_t boxHeight = window->height();
|
||||
#endif
|
||||
|
||||
@@ -390,7 +392,7 @@ void CurveEditWindow::buildBody(Window* window)
|
||||
// Curve editor
|
||||
lv_obj_set_flex_align(line->getLvObj(), LV_FLEX_ALIGN_CENTER,
|
||||
LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_AROUND);
|
||||
curveEdit = new CurveEdit(line, {0, 0, CURVE_WIDTH, CURVE_WIDTH}, index);
|
||||
curveEdit = new CurveEdit(line, {0, 0, CurveDataEdit::CURVE_WIDTH, CurveDataEdit::CURVE_WIDTH}, index);
|
||||
|
||||
curveDataEdit->setCurveEdit(curveEdit);
|
||||
}
|
||||
|
||||
@@ -37,8 +37,6 @@ class CurveEditWindow : public Page
|
||||
|
||||
void setCurrentSource(mixsrc_t source);
|
||||
|
||||
static LAYOUT_VAL(CURVE_WIDTH, 215, 232, LS(215))
|
||||
|
||||
protected:
|
||||
uint8_t index;
|
||||
CurveEdit* curveEdit = nullptr;
|
||||
|
||||
@@ -30,23 +30,6 @@
|
||||
|
||||
#define SET_DIRTY() storageDirty(EE_MODEL)
|
||||
|
||||
static const lv_coord_t line_col_dsc1[] = {LV_GRID_CONTENT,
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
static const lv_coord_t line_col_dsc2[] = {
|
||||
LV_GRID_FR(13), LV_GRID_FR(11), LV_GRID_FR(11),
|
||||
LV_GRID_FR(12), LV_GRID_FR(10), LV_GRID_FR(7), LV_GRID_FR(7),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
#else
|
||||
static const lv_coord_t line_col_dsc2[] = {
|
||||
LV_GRID_FR(10), LV_GRID_FR(10), LV_GRID_FR(10),
|
||||
LV_GRID_FR(12), LV_GRID_FR(8), LV_GRID_TEMPLATE_LAST};
|
||||
#endif
|
||||
|
||||
static const lv_coord_t line_row_dsc[] = {LV_GRID_CONTENT,
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
static const char* _fct_sw_start[] = {STR_CHAR_DOWN, STR_CHAR_UP, STR_LAST};
|
||||
|
||||
const std::string edgetx_fs_manual_url =
|
||||
@@ -57,7 +40,7 @@ class FunctionSwitch : public Window
|
||||
{
|
||||
public:
|
||||
FunctionSwitch(Window* parent, uint8_t sw) :
|
||||
Window(parent, {0, 0, LCD_W - PAD_SMALL * 2, EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY * 2}), switchIndex(sw)
|
||||
Window(parent, {0, 0, LCD_W - PAD_SMALL * 2, ROW_H}), switchIndex(sw)
|
||||
{
|
||||
padAll(PAD_TINY);
|
||||
|
||||
@@ -125,11 +108,16 @@ class FunctionSwitch : public Window
|
||||
});
|
||||
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
#if NARROW_LAYOUT
|
||||
new StaticText(this, rect_t{C1_X - C1_W - PAD_TINY, C1_Y + PAD_SMALL, C1_W, 0}, STR_OFF, COLOR_THEME_PRIMARY1_INDEX, FONT(XS) | RIGHT);
|
||||
new StaticText(this, rect_t{C2_X - C2_W - PAD_TINY, C2_Y + PAD_SMALL, C2_W, 0}, STR_ON_ONE_SWITCHES[0], COLOR_THEME_PRIMARY1_INDEX, FONT(XS) | RIGHT);
|
||||
#endif
|
||||
|
||||
offValue = g_model.functionSwitchLedOFFColor[switchIndex];
|
||||
onValue = g_model.functionSwitchLedONColor[switchIndex];
|
||||
|
||||
offColor = new ColorPicker(
|
||||
this, {C1_X, 0, C1_W, 0},
|
||||
this, {C1_X, C1_Y, C1_W, 0},
|
||||
[=]() -> int { // getValue
|
||||
return g_model.functionSwitchLedOFFColor[switchIndex].getColor() | RGB888_FLAG;
|
||||
},
|
||||
@@ -147,7 +135,7 @@ class FunctionSwitch : public Window
|
||||
[=](int newValue) { previewColor(newValue); }, ETX_RGB888);
|
||||
|
||||
onColor = new ColorPicker(
|
||||
this, {C2_X, 0, C2_W, 0},
|
||||
this, {C2_X, C2_Y, C2_W, 0},
|
||||
[=]() -> int { // getValue
|
||||
return g_model.functionSwitchLedONColor[switchIndex].getColor() | RGB888_FLAG;
|
||||
},
|
||||
@@ -169,29 +157,43 @@ class FunctionSwitch : public Window
|
||||
}
|
||||
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
static LAYOUT_VAL(SW_W, 70, 70, LS(70))
|
||||
static LAYOUT_VAL_SCALED(SW_W, 70)
|
||||
static constexpr coord_t NM_X = SW_W + PAD_SMALL;
|
||||
static LAYOUT_VAL(NM_W, 60, 60, LS(60))
|
||||
static LAYOUT_VAL_SCALED(NM_W, 60)
|
||||
static constexpr coord_t TP_X = NM_X + NM_W + PAD_SMALL;
|
||||
static LAYOUT_VAL(TP_W, 78, 78, LS(78))
|
||||
static LAYOUT_VAL_SCALED(TP_W, 78)
|
||||
static constexpr coord_t GR_X = TP_X + TP_W + PAD_SMALL;
|
||||
static LAYOUT_VAL(GR_W, 84, 84, LS(84))
|
||||
static LAYOUT_VAL_SCALED(GR_W, 84)
|
||||
static constexpr coord_t ST_X = GR_X + GR_W + PAD_SMALL;
|
||||
static LAYOUT_VAL(ST_W, 60, 60, LS(60))
|
||||
static constexpr coord_t C1_X = ST_X + ST_W + PAD_SMALL;
|
||||
static LAYOUT_VAL(C1_W, 40, 40, LS(40))
|
||||
static constexpr coord_t C2_X = C1_X + C1_W + PAD_SMALL;
|
||||
static LAYOUT_VAL(C2_W, 40, 40, LS(40))
|
||||
static LAYOUT_VAL_SCALED(ST_W, 60)
|
||||
#if NARROW_LAYOUT
|
||||
static constexpr coord_t ROW_H = EdgeTxStyles::UI_ELEMENT_HEIGHT * 2 + PAD_OUTLINE * 3;
|
||||
static constexpr coord_t C1_X = TP_X;
|
||||
static constexpr coord_t C1_Y = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE;
|
||||
static LAYOUT_VAL_SCALED(C1_W, 40)
|
||||
static constexpr coord_t C2_X = GR_X;
|
||||
static constexpr coord_t C2_Y = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE;
|
||||
static LAYOUT_VAL_SCALED(C2_W, 40)
|
||||
#else
|
||||
static constexpr coord_t ROW_H = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE * 2;
|
||||
static constexpr coord_t C1_X = ST_X + ST_W + PAD_SMALL;
|
||||
static constexpr coord_t C1_Y = 0;
|
||||
static LAYOUT_VAL_SCALED(C1_W, 40)
|
||||
static constexpr coord_t C2_X = C1_X + C1_W + PAD_SMALL;
|
||||
static constexpr coord_t C2_Y = 0;
|
||||
static LAYOUT_VAL_SCALED(C2_W, 40)
|
||||
#endif
|
||||
#else
|
||||
static constexpr coord_t ROW_H = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE * 2;
|
||||
static constexpr coord_t SW_W = (LCD_W - PAD_SMALL * 2 - PAD_TINY * 4) / 5;
|
||||
static constexpr coord_t NM_X = SW_W + PAD_TINY;
|
||||
static LAYOUT_VAL(NM_W, 80, 80, LS(80))
|
||||
static LAYOUT_VAL_SCALED(NM_W, 80)
|
||||
static constexpr coord_t TP_X = NM_X + SW_W + PAD_TINY;
|
||||
static LAYOUT_VAL(TP_W, 86, 86, LS(86))
|
||||
static LAYOUT_VAL_SCALED(TP_W, 86)
|
||||
static constexpr coord_t GR_X = TP_X + SW_W + PAD_TINY;
|
||||
static LAYOUT_VAL(GR_W, 94, 94, LS(94))
|
||||
static LAYOUT_VAL_SCALED(GR_W, 94)
|
||||
static constexpr coord_t ST_X = GR_X + SW_W + PAD_LARGE * 2 + PAD_SMALL;
|
||||
static LAYOUT_VAL(ST_W, 70, 70, LS(70))
|
||||
static LAYOUT_VAL_SCALED(ST_W, 70)
|
||||
#endif
|
||||
|
||||
protected:
|
||||
@@ -245,7 +247,7 @@ class SwitchGroup : public Window
|
||||
{
|
||||
public:
|
||||
SwitchGroup(Window* parent, uint8_t group) :
|
||||
Window(parent, {0, 0, LCD_W - PAD_SMALL * 2, EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY * 2}), groupIndex(group)
|
||||
Window(parent, {0, 0, LCD_W - PAD_SMALL * 2, ROW_H}), groupIndex(group)
|
||||
{
|
||||
padAll(PAD_TINY);
|
||||
|
||||
@@ -294,13 +296,14 @@ class SwitchGroup : public Window
|
||||
startChoice->setValue(groupDefaultSwitch(groupIndex) + 1);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(NM_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL_SCALED(NM_W, 80)
|
||||
static constexpr coord_t AO_X = NM_W + PAD_TINY;
|
||||
static LAYOUT_VAL(AO_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL_SCALED(AO_W, 90)
|
||||
static constexpr coord_t SL_X = AO_X + AO_W + PAD_LARGE * 3 + PAD_MEDIUM;
|
||||
static LAYOUT_VAL(SL_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL_SCALED(SL_W, 80)
|
||||
static constexpr coord_t ST_X = SL_X + SL_W + PAD_TINY;
|
||||
static LAYOUT_VAL(ST_W, 80, 80, LS(80))
|
||||
static LAYOUT_VAL_SCALED(ST_W, 60)
|
||||
static constexpr coord_t ROW_H = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE * 2;
|
||||
|
||||
protected:
|
||||
uint8_t groupIndex;
|
||||
@@ -315,20 +318,17 @@ ModelFunctionSwitches::ModelFunctionSwitches() : Page(ICON_MODEL_SETUP)
|
||||
body->padAll(PAD_TINY);
|
||||
body->setFlexLayout(LV_FLEX_FLOW_COLUMN, PAD_ZERO);
|
||||
|
||||
FlexGridLayout grid1(line_col_dsc1, line_row_dsc, PAD_TINY);
|
||||
FlexGridLayout grid2(line_col_dsc2, line_row_dsc, PAD_TINY);
|
||||
|
||||
auto line = body->newLine(grid2);
|
||||
new StaticText(line, rect_t{}, STR_SWITCHES);
|
||||
new StaticText(line, rect_t{}, STR_NAME, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
new StaticText(line, rect_t{}, STR_SWITCH_TYPE,
|
||||
auto box = new Window(body, {0, 0, LV_PCT(100), LV_SIZE_CONTENT});
|
||||
new StaticText(box, rect_t{0, 0, FunctionSwitch::SW_W, 0}, STR_SWITCHES);
|
||||
new StaticText(box, rect_t{FunctionSwitch::NM_X + PAD_OUTLINE, 0, FunctionSwitch::NM_W, 0}, STR_NAME, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
new StaticText(box, rect_t{FunctionSwitch::TP_X + PAD_OUTLINE, 0, FunctionSwitch::TP_W, 0}, STR_SWITCH_TYPE,
|
||||
COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
new StaticText(line, rect_t{}, STR_GROUP, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
startupHeader = new StaticText(line, rect_t{}, STR_SWITCH_STARTUP,
|
||||
new StaticText(box, rect_t{FunctionSwitch::GR_X + PAD_OUTLINE, 0, FunctionSwitch::GR_W, 0}, STR_GROUP, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
startupHeader = new StaticText(box, rect_t{FunctionSwitch::ST_X + PAD_OUTLINE, 0, FunctionSwitch::ST_W, 0}, STR_SWITCH_STARTUP,
|
||||
COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
new StaticText(line, rect_t{}, STR_OFF, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
new StaticText(line, rect_t{}, STR_ON_ONE_SWITCHES[0], COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS) && !NARROW_LAYOUT
|
||||
new StaticText(box, rect_t{FunctionSwitch::C1_X + PAD_OUTLINE, 0, FunctionSwitch::C1_W, 0}, STR_OFF, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
new StaticText(box, rect_t{FunctionSwitch::C2_X + PAD_OUTLINE, 0, FunctionSwitch::C2_W, 0}, STR_ON_ONE_SWITCHES[0], COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
#endif
|
||||
|
||||
for (uint8_t i = 0; i < NUM_FUNCTIONS_SWITCHES; i += 1) {
|
||||
@@ -339,21 +339,22 @@ ModelFunctionSwitches::ModelFunctionSwitches() : Page(ICON_MODEL_SETUP)
|
||||
groupLines[i - 1] = new SwitchGroup(body, i);
|
||||
}
|
||||
|
||||
setState();
|
||||
#if defined(HARDWARE_TOUCH)
|
||||
body->padBottom(PAD_LARGE);
|
||||
|
||||
line = body->newLine(grid1);
|
||||
box = new Window(body, {0, 0, LV_PCT(100), LV_SIZE_CONTENT});
|
||||
|
||||
new StaticText(line, rect_t{}, STR_MORE_INFO);
|
||||
new StaticText(box, rect_t{}, STR_MORE_INFO);
|
||||
|
||||
line = body->newLine(grid1);
|
||||
line->padBottom(PAD_LARGE);
|
||||
line->padLeft((width() - 150) / 2);
|
||||
|
||||
auto qr = lv_qrcode_create(line->getLvObj(), 150,
|
||||
auto qr = lv_qrcode_create(box->getLvObj(), 150,
|
||||
makeLvColor(COLOR_THEME_SECONDARY1),
|
||||
makeLvColor(COLOR_THEME_SECONDARY3));
|
||||
lv_qrcode_update(qr, edgetx_fs_manual_url.c_str(),
|
||||
edgetx_fs_manual_url.length());
|
||||
lv_obj_set_pos(qr, (LCD_W - 150) / 2, EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
#endif
|
||||
|
||||
setState();
|
||||
}
|
||||
|
||||
void ModelFunctionSwitches::setState()
|
||||
|
||||
@@ -45,30 +45,19 @@ 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);
|
||||
#else // landscape
|
||||
lv_obj_set_flex_flow(body_obj, LV_FLEX_FLOW_ROW);
|
||||
#endif
|
||||
lv_obj_set_style_flex_cross_place(body_obj, LV_FLEX_ALIGN_CENTER, 0);
|
||||
#if PORTRAIT
|
||||
body->padAll(PAD_ZERO);
|
||||
|
||||
auto box = new Window(body, rect_t{});
|
||||
auto box = new Window(body, rect_t{0, 0, body->width(), body->height() - INPUT_EDIT_CURVE_HEIGHT - PAD_TINY * 2});
|
||||
auto box_obj = box->getLvObj();
|
||||
lv_obj_set_flex_grow(box_obj, 2);
|
||||
etx_scrollbar(box_obj);
|
||||
|
||||
#if PORTRAIT_LCD // portrait
|
||||
box->setWidth(body->width() - 2 * PAD_MEDIUM);
|
||||
#else // landscape
|
||||
box->setHeight(body->height() - 2 * PAD_MEDIUM);
|
||||
#endif
|
||||
box->padAll(PAD_SMALL);
|
||||
|
||||
auto form = new Window(box, rect_t{});
|
||||
buildBody(form);
|
||||
|
||||
preview = new Curve(
|
||||
body, rect_t{0, 0, INPUT_EDIT_CURVE_WIDTH, INPUT_EDIT_CURVE_HEIGHT},
|
||||
body, rect_t{(LCD_W - INPUT_EDIT_CURVE_WIDTH) / 2, body->height() - INPUT_EDIT_CURVE_HEIGHT - PAD_TINY, INPUT_EDIT_CURVE_WIDTH, INPUT_EDIT_CURVE_HEIGHT},
|
||||
[=](int x) -> int {
|
||||
ExpoData* line = expoAddress(index);
|
||||
int16_t anas[MAX_INPUTS] = {0};
|
||||
@@ -76,6 +65,20 @@ InputEditWindow::InputEditWindow(int8_t input, uint8_t index) :
|
||||
return anas[line->chn];
|
||||
},
|
||||
[=]() -> int { return getValue(expoAddress(index)->srcRaw); });
|
||||
#else
|
||||
body->padAll(PAD_SMALL);
|
||||
buildBody(body);
|
||||
|
||||
preview = new Curve(
|
||||
this, rect_t{LCD_W - INPUT_EDIT_CURVE_WIDTH - PAD_LARGE, EdgeTxStyles::MENU_HEADER_HEIGHT + PAD_TINY, 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); });
|
||||
#endif
|
||||
}
|
||||
|
||||
void InputEditWindow::setTitle()
|
||||
|
||||
@@ -32,8 +32,8 @@ class InputEditWindow : public Page
|
||||
public:
|
||||
InputEditWindow(int8_t input, uint8_t index);
|
||||
|
||||
static LAYOUT_VAL(INPUT_EDIT_CURVE_WIDTH, 140, 176, 110)
|
||||
static LAYOUT_VAL2(INPUT_EDIT_CURVE_HEIGHT, INPUT_EDIT_CURVE_WIDTH, 132)
|
||||
static LAYOUT_ORIENTATION_SCALED(INPUT_EDIT_CURVE_WIDTH, 138, 176)
|
||||
static LAYOUT_ORIENTATION(INPUT_EDIT_CURVE_HEIGHT, INPUT_EDIT_CURVE_WIDTH, LAYOUT_SCALE(132))
|
||||
|
||||
protected:
|
||||
uint8_t input;
|
||||
|
||||
@@ -48,7 +48,7 @@ class MixerEditStatusBar : public Window
|
||||
channel, true);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(MIX_STATUS_BAR_MARGIN, 3, 0, LS(3))
|
||||
static LAYOUT_SIZE_SCALED(MIX_STATUS_BAR_MARGIN, 3, 0)
|
||||
|
||||
protected:
|
||||
ComboChannelBar *channelBar;
|
||||
@@ -75,7 +75,7 @@ void MixEditWindow::buildHeader(Window *window)
|
||||
channel);
|
||||
}
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2),
|
||||
LV_GRID_FR(1), LV_GRID_FR(3),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
@@ -30,8 +30,8 @@ class MixEditWindow : public Page
|
||||
public:
|
||||
MixEditWindow(int8_t channel, uint8_t index);
|
||||
|
||||
static LAYOUT_VAL(MIX_STATUS_BAR_WIDTH, 250, 180, LS(250))
|
||||
static LAYOUT_VAL2(MIX_RIGHT_MARGIN, 0, 3)
|
||||
static LAYOUT_SIZE_SCALED(MIX_STATUS_BAR_WIDTH, 250, 180)
|
||||
static LAYOUT_SIZE(MIX_RIGHT_MARGIN, 0, 3)
|
||||
|
||||
protected:
|
||||
uint8_t channel;
|
||||
|
||||
@@ -40,7 +40,7 @@ MixEditAdvanced::MixEditAdvanced(int8_t channel, uint8_t index) :
|
||||
buildBody(body);
|
||||
}
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
@@ -88,7 +88,7 @@ void MixEditAdvanced::buildBody(Window* form)
|
||||
edit->setZeroText(STR_OFF);
|
||||
|
||||
// Delay up/down precision
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
grid.setColSpan(2);
|
||||
#endif
|
||||
line = form->newLine(grid);
|
||||
@@ -105,7 +105,7 @@ void MixEditAdvanced::buildBody(Window* form)
|
||||
delayDn->update();
|
||||
SET_DIRTY();
|
||||
});
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
grid.setColSpan(1);
|
||||
#endif
|
||||
|
||||
@@ -125,7 +125,7 @@ void MixEditAdvanced::buildBody(Window* form)
|
||||
delayDn->setSuffix("s");
|
||||
|
||||
// Slow up/down precision
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
grid.setColSpan(2);
|
||||
#endif
|
||||
line = form->newLine(grid);
|
||||
@@ -142,7 +142,7 @@ void MixEditAdvanced::buildBody(Window* form)
|
||||
slowDn->update();
|
||||
SET_DIRTY();
|
||||
});
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
grid.setColSpan(1);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ class CurveButton : public Button
|
||||
s = strAppend(s, ":");
|
||||
strAppend(s, g_model.curves[index].name, LEN_CURVE_NAME);
|
||||
}
|
||||
title = new StaticText(this, {4, -1, width() - PAD_MEDIUM * 2, EdgeTxStyles::STD_FONT_HEIGHT}, buf,
|
||||
title = new StaticText(this, {PAD_SMALL, -1, width() - PAD_MEDIUM * 2, EdgeTxStyles::STD_FONT_HEIGHT}, buf,
|
||||
COLOR_THEME_SECONDARY1_INDEX, CENTERED | FONT(BOLD));
|
||||
etx_txt_color(title->getLvObj(), COLOR_THEME_PRIMARY2_INDEX,
|
||||
LV_PART_MAIN | LV_STATE_USER_1);
|
||||
@@ -52,15 +52,15 @@ class CurveButton : public Button
|
||||
|
||||
hdrLeft = new StaticIcon(this, 0, 0, ICON_ROUND_TITLE_LEFT,
|
||||
COLOR_THEME_SECONDARY2_INDEX);
|
||||
hdrRight = new StaticIcon(this, width() - 8, 0,
|
||||
hdrRight = new StaticIcon(this, width() - PAD_LARGE, 0,
|
||||
ICON_ROUND_TITLE_RIGHT,
|
||||
COLOR_THEME_SECONDARY2_INDEX);
|
||||
|
||||
// Preview
|
||||
preview = new CurveRenderer(
|
||||
this,
|
||||
{PAD_MEDIUM, PAD_MEDIUM + EdgeTxStyles::STD_FONT_HEIGHT, width() - PAD_MEDIUM * 2 - 4,
|
||||
width() - PAD_MEDIUM * 2 - 4},
|
||||
{PAD_MEDIUM, PAD_MEDIUM + EdgeTxStyles::STD_FONT_HEIGHT, width() - PAD_MEDIUM * 2 - PAD_SMALL,
|
||||
width() - PAD_MEDIUM * 2 - PAD_SMALL},
|
||||
[=](int x) -> int { return applyCustomCurve(x, index); });
|
||||
|
||||
// Curve characteristics
|
||||
@@ -73,8 +73,8 @@ class CurveButton : public Button
|
||||
|
||||
void update() { preview->update(); }
|
||||
|
||||
static LAYOUT_VAL(INFO_H, 27, 27, 19)
|
||||
static LAYOUT_VAL(CURVE_BTN_W, 142, 142, LS(142))
|
||||
static LAYOUT_VAL_SCALED(INFO_H, 27)
|
||||
static constexpr coord_t CURVE_BTN_W = (LCD_W - PAD_LARGE * (ModelCurvesPage::PER_ROW + 1)) / ModelCurvesPage::PER_ROW;
|
||||
static constexpr coord_t CURVE_BTH_H = CURVE_BTN_W + EdgeTxStyles::STD_FONT_HEIGHT * 2;
|
||||
|
||||
protected:
|
||||
@@ -202,7 +202,7 @@ void ModelCurvesPage::plusPopup(Window *window)
|
||||
|
||||
void ModelCurvesPage::build(Window *window)
|
||||
{
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
|
||||
#else
|
||||
|
||||
@@ -34,7 +34,7 @@ class ModelCurvesPage : public PageTab
|
||||
|
||||
virtual void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL2(PER_ROW, 3, 2)
|
||||
static LAYOUT_ORIENTATION(PER_ROW, 3, 2)
|
||||
|
||||
protected:
|
||||
uint8_t focusIndex = -1;
|
||||
|
||||
@@ -49,7 +49,7 @@ static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
static const lv_coord_t line_row_dsc[] = {LV_GRID_CONTENT,
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t trims_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
#else
|
||||
@@ -106,7 +106,7 @@ class TrimEdit : public Window
|
||||
showControls();
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(TR_BTN_W, 65, 65, 44)
|
||||
static LAYOUT_VAL_SCALED(TR_BTN_W, 65)
|
||||
|
||||
protected:
|
||||
int trimId;
|
||||
@@ -193,7 +193,7 @@ class FlightModeEdit : public Page
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(TRIMS_PER_LINE, 2, 1)
|
||||
static LAYOUT_SIZE(TRIMS_PER_LINE, 2, 1)
|
||||
|
||||
protected:
|
||||
uint8_t index;
|
||||
@@ -282,7 +282,7 @@ class FlightModeBtn : public ListLineButton
|
||||
ListLineButton::checkEvents();
|
||||
if (!refreshing && init) {
|
||||
refreshing = true;
|
||||
for (int t = 0; t < keysGetMaxTrims(); t += 1) {
|
||||
for (int t = 0; t < keysGetMaxTrims() && t < MAX_FMTRIMS; t += 1) {
|
||||
if (lastTrim[t] != g_model.flightModeData[index].trim[t].value) {
|
||||
setTrimValue(t);
|
||||
}
|
||||
@@ -311,7 +311,7 @@ class FlightModeBtn : public ListLineButton
|
||||
lv_label_set_text(fmSwitch, "");
|
||||
}
|
||||
|
||||
for (int i = 0; i < keysGetMaxTrims(); i += 1) {
|
||||
for (int i = 0; i < keysGetMaxTrims() && i < MAX_FMTRIMS; i += 1) {
|
||||
setTrimValue(i);
|
||||
lv_label_set_text(fmTrimMode[i], getFMTrimStr(fm.trim[i].mode, false).c_str());
|
||||
}
|
||||
@@ -324,24 +324,24 @@ class FlightModeBtn : public ListLineButton
|
||||
formatNumberAsString(fm.fadeOut, PREC1, 0, nullptr, "s").c_str());
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(BTN_H, 36, 56, LS(36))
|
||||
static LAYOUT_VAL2(MAX_FMTRIMS, 6, 4)
|
||||
static LAYOUT_SIZE_SCALED(BTN_H, 36, 56)
|
||||
static LAYOUT_SIZE(MAX_FMTRIMS, 6, 4)
|
||||
static constexpr coord_t FMID_X = PAD_TINY;
|
||||
static LAYOUT_VAL(FMID_Y, 6, 16, 3)
|
||||
static LAYOUT_VAL(FMID_W, 36, 46, LS(36))
|
||||
static LAYOUT_SIZE_SCALED(FMID_Y, 6, 16)
|
||||
static LAYOUT_SIZE_SCALED(FMID_W, 36, 46)
|
||||
static constexpr coord_t NAME_X = FMID_X + FMID_W + PAD_TINY;
|
||||
static LAYOUT_VAL(NAME_Y, 6, 0, 3)
|
||||
static LAYOUT_VAL(NAME_W, 95, 160, LS(95))
|
||||
static LAYOUT_SIZE_SCALED(NAME_Y, 6, 0)
|
||||
static LAYOUT_SIZE_SCALED(NAME_W, 95, 160)
|
||||
static constexpr coord_t SWTCH_X = NAME_X + NAME_W + PAD_TINY;
|
||||
static LAYOUT_VAL(SWTCH_Y, 6, 0, 3)
|
||||
static LAYOUT_VAL(SWTCH_W, 50, 50, LS(50))
|
||||
static LAYOUT_VAL2(TRIM_X, SWTCH_X + SWTCH_W + PAD_TINY, FMID_X + FMID_W + PAD_TINY)
|
||||
static LAYOUT_VAL(TRIM_Y, 0, 20, -1)
|
||||
static LAYOUT_VAL(TRIM_W, 30, 40, LS(30))
|
||||
static LAYOUT_VAL(TRIM_H, 16, 16, 11)
|
||||
static LAYOUT_SIZE_SCALED(SWTCH_Y, 6, 0)
|
||||
static LAYOUT_VAL_SCALED(SWTCH_W, 50)
|
||||
static LAYOUT_SIZE(TRIM_X, SWTCH_X + SWTCH_W + PAD_TINY, FMID_X + FMID_W + PAD_TINY)
|
||||
static LAYOUT_SIZE_SCALED(TRIM_Y, 0, 20)
|
||||
static LAYOUT_SIZE_SCALED(TRIM_W, 30, 40)
|
||||
static LAYOUT_VAL_SCALED(TRIM_H, 16)
|
||||
static constexpr coord_t TRIMC_W = MAX_FMTRIMS * TRIM_W;
|
||||
static LAYOUT_VAL(FADE_W, 45, 45, LS(45))
|
||||
static LAYOUT_VAL(FADE_Y, 6, 24, 3)
|
||||
static LAYOUT_VAL_SCALED(FADE_W, 45)
|
||||
static LAYOUT_SIZE_SCALED(FADE_Y, 6, 24)
|
||||
static constexpr coord_t FADE_X = ListLineButton::GRP_W - PAD_BORDER * 2 - FADE_W * 2 - PAD_TINY * 2;
|
||||
|
||||
protected:
|
||||
@@ -494,7 +494,7 @@ void ModelFlightModesPage::build(Window* form)
|
||||
|
||||
for (int i = 0; i < MAX_FLIGHT_MODES; i++) {
|
||||
auto btn = new FlightModeBtn(form, i);
|
||||
lv_obj_set_pos(btn->getLvObj(), PAD_SMALL, i * (FlightModeBtn::BTN_H + 3) + 4);
|
||||
lv_obj_set_pos(btn->getLvObj(), PAD_SMALL, i * (FlightModeBtn::BTN_H + PAD_THREE) + PAD_SMALL);
|
||||
btn->setWidth(ListLineButton::GRP_W);
|
||||
|
||||
btn->setPressHandler([=]() {
|
||||
@@ -504,7 +504,7 @@ void ModelFlightModesPage::build(Window* form)
|
||||
}
|
||||
|
||||
trimCheck = new TextButton(
|
||||
form, rect_t{6, MAX_FLIGHT_MODES * (FlightModeBtn::BTN_H + 3) + PAD_LARGE, ListLineButton::GRP_W, TRIM_CHK_H}, STR_CHECKTRIMS, [&]() -> uint8_t {
|
||||
form, rect_t{6, MAX_FLIGHT_MODES * (FlightModeBtn::BTN_H + PAD_THREE) + PAD_LARGE, ListLineButton::GRP_W, EdgeTxStyles::UI_ELEMENT_HEIGHT}, STR_CHECKTRIMS, [&]() -> uint8_t {
|
||||
if (trimsCheckTimer)
|
||||
trimsCheckTimer = 0;
|
||||
else
|
||||
|
||||
@@ -33,8 +33,6 @@ class ModelFlightModesPage : public PageTab
|
||||
|
||||
void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL(TRIM_CHK_H, 40, 40, LS(40))
|
||||
|
||||
protected:
|
||||
TextButton* trimCheck = nullptr;
|
||||
|
||||
|
||||
@@ -66,14 +66,19 @@ class GVarButton : public ListLineButton
|
||||
if (line) line->build();
|
||||
}
|
||||
|
||||
static LAYOUT_VAL3(GVAR_NAME_SIZE, 44, 44, LS(44), 74)
|
||||
static LAYOUT_VAL_SCALED(GVAR_NAME_SIZE, 44)
|
||||
static constexpr coord_t GVAR_VAL_H = EdgeTxStyles::STD_FONT_HEIGHT + 2;
|
||||
static LAYOUT_VAL3(GVAR_VAL_W, 45, 50, LS(45), 75)
|
||||
static LAYOUT_VAL2(GVAR_COLS, MAX_FLIGHT_MODES, 5)
|
||||
static LAYOUT_VAL2(BTN_H, EdgeTxStyles::UI_ELEMENT_HEIGHT, 50)
|
||||
static LAYOUT_VAL(GVAR_NM_Y, 4, 13, LS(4))
|
||||
static LAYOUT_VAL(GVAR_YO, 4, 2, LS(4))
|
||||
static LAYOUT_VAL2(HDR_H, EdgeTxStyles::STD_FONT_HEIGHT + PAD_TINY, EdgeTxStyles::STD_FONT_HEIGHT * 2 + PAD_TINY)
|
||||
static constexpr coord_t GVAR_VAL_SPACE = LCD_W - GVAR_NAME_SIZE - PAD_SMALL * 2 - PAD_BORDER * 2 - PAD_TINY * 2;
|
||||
#define GVAR_VAL_MIN_W LAYOUT_SCALE(46)
|
||||
#if GVAR_VAL_SPACE / GVAR_VAL_MIN_W <= MAX_FLIGHT_MODES
|
||||
static constexpr coord_t GVAR_COLS = GVAR_VAL_SPACE / GVAR_VAL_MIN_W;
|
||||
#else
|
||||
static constexpr coord_t GVAR_COLS = MAX_FLIGHT_MODES;
|
||||
#endif
|
||||
static constexpr coord_t GVAR_VAL_W = GVAR_VAL_SPACE / GVAR_COLS;
|
||||
static LAYOUT_SIZE_SCALED(BTN_H, 32, 50)
|
||||
static LAYOUT_SIZE_SCALED(GVAR_NM_Y, 3, 13)
|
||||
static LAYOUT_SIZE_SCALED(GVAR_YO, 3, 2)
|
||||
|
||||
static const lv_obj_class_t gv_label_class;
|
||||
static const lv_obj_class_t gv_value_class;
|
||||
@@ -127,7 +132,7 @@ class GVarButton : public ListLineButton
|
||||
if (modelFMEnabled()) {
|
||||
for (int flightMode = 0; flightMode < MAX_FLIGHT_MODES; flightMode++) {
|
||||
valueTexts[flightMode] = etx_create(&gv_value_class, lvobj);
|
||||
lv_obj_set_pos(valueTexts[flightMode], (flightMode % GVAR_COLS) * GVAR_VAL_W + GVAR_NAME_SIZE + PAD_BORDER * 2,
|
||||
lv_obj_set_pos(valueTexts[flightMode], (flightMode % GVAR_COLS) * GVAR_VAL_W + GVAR_NAME_SIZE + PAD_TINY * 2,
|
||||
(flightMode / GVAR_COLS) * GVAR_VAL_H + GVAR_YO);
|
||||
|
||||
if (flightMode == currentFlightMode) {
|
||||
@@ -229,7 +234,7 @@ class GVarHeader : public Window
|
||||
{
|
||||
public:
|
||||
GVarHeader(Window* parent) :
|
||||
Window(parent, {0, 0, LCD_W, GVarButton::HDR_H})
|
||||
Window(parent, {0, 0, LCD_W, HDR_H})
|
||||
{
|
||||
padAll(PAD_ZERO);
|
||||
etx_solid_bg(lvobj, COLOR_THEME_SECONDARY3_INDEX);
|
||||
@@ -245,6 +250,8 @@ class GVarHeader : public Window
|
||||
if (line) line->build();
|
||||
}
|
||||
|
||||
static LAYOUT_SIZE(HDR_H, EdgeTxStyles::STD_FONT_HEIGHT + PAD_TINY, EdgeTxStyles::STD_FONT_HEIGHT * 2)
|
||||
|
||||
protected:
|
||||
bool init = false;
|
||||
uint8_t currentFlightMode = 0; // used for checking updates
|
||||
@@ -281,7 +288,7 @@ class GVarHeader : public Window
|
||||
|
||||
labelTexts[flightMode] = etx_create(&GVarButton::gv_value_class, lvobj);
|
||||
lv_label_set_text(labelTexts[flightMode], label);
|
||||
lv_obj_set_pos(labelTexts[flightMode], (flightMode % GVarButton::GVAR_COLS) * GVarButton::GVAR_VAL_W + GVarButton::GVAR_NAME_SIZE + HDR_XO,
|
||||
lv_obj_set_pos(labelTexts[flightMode], (flightMode % GVarButton::GVAR_COLS) * GVarButton::GVAR_VAL_W + GVarButton::GVAR_NAME_SIZE + PAD_SMALL + PAD_BORDER + PAD_TINY * 2,
|
||||
(flightMode / GVarButton::GVAR_COLS) * EdgeTxStyles::STD_FONT_HEIGHT + 1);
|
||||
|
||||
if (flightMode == currentFlightMode) {
|
||||
@@ -291,8 +298,6 @@ class GVarHeader : public Window
|
||||
|
||||
lv_obj_update_layout(lvobj);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL3(HDR_XO, 10, 10, 9, 12)
|
||||
};
|
||||
|
||||
class GVarEditWindow : public Page
|
||||
@@ -554,14 +559,15 @@ void ModelGVarsPage::build(Window* window)
|
||||
{
|
||||
coord_t yo = 0;
|
||||
if (modelFMEnabled()) {
|
||||
window->padTop(PAD_OUTLINE);
|
||||
hdr = new GVarHeader(window->getParent());
|
||||
lv_obj_set_pos(hdr->getLvObj(), 0, TabsGroup::MENU_TITLE_TOP + TabsGroup::MENU_TITLE_HEIGHT);
|
||||
yo = GVarButton::HDR_H - PAD_TINY;
|
||||
yo = GVarHeader::HDR_H;
|
||||
}
|
||||
|
||||
for (uint8_t index = 0; index < MAX_GVARS; index++) {
|
||||
auto button = new GVarButton(window, index);
|
||||
lv_obj_set_pos(button->getLvObj(), 0, yo + index * (GVarButton::BTN_H + PAD_TINY));
|
||||
lv_obj_set_pos(button->getLvObj(), 0, yo + index * (GVarButton::BTN_H + PAD_OUTLINE));
|
||||
button->setPressHandler([=]() {
|
||||
Menu* menu = new Menu();
|
||||
menu->addLine(STR_EDIT, [=]() {
|
||||
|
||||
@@ -26,12 +26,12 @@
|
||||
|
||||
#define SET_DIRTY() storageDirty(EE_MODEL)
|
||||
|
||||
#if !PORTRAIT_LCD // landscape
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(2), LV_GRID_FR(1),
|
||||
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};
|
||||
#else // portrait
|
||||
#else
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
static const lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT,
|
||||
|
||||
@@ -189,7 +189,7 @@ class InputGroup : public InputMixGroupBase
|
||||
{
|
||||
adjustHeight();
|
||||
|
||||
lv_obj_set_pos(label, 2, 4);
|
||||
lv_obj_set_pos(label, PAD_TINY, PAD_SMALL);
|
||||
|
||||
refresh();
|
||||
}
|
||||
|
||||
@@ -502,24 +502,24 @@ class LogicalSwitchButton : public ListLineButton
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(LS_BUTTON_H, 32, 44, LS(32))
|
||||
static LAYOUT_SIZE_SCALED(LS_BUTTON_H, 32, 44)
|
||||
|
||||
static constexpr coord_t NM_X = PAD_TINY;
|
||||
static LAYOUT_VAL(NM_Y, 4, 10, 1)
|
||||
static LAYOUT_VAL(NM_W, 30, 36, LS(30))
|
||||
static LAYOUT_SIZE_SCALED(NM_Y, 4, 10)
|
||||
static LAYOUT_SIZE_SCALED(NM_W, 30, 36)
|
||||
static constexpr coord_t FN_X = NM_X + NM_W + PAD_TINY;
|
||||
static constexpr coord_t FN_Y = NM_Y;
|
||||
static LAYOUT_VAL(FN_W, 50, 58, LS(50))
|
||||
static LAYOUT_SIZE_SCALED(FN_W, 50, 58)
|
||||
static constexpr coord_t V1_X = FN_X + FN_W + PAD_TINY;
|
||||
static LAYOUT_VAL2(V1_Y, NM_Y, 0)
|
||||
static LAYOUT_VAL(V1_W, 88, 88, LS(88))
|
||||
static LAYOUT_SIZE(V1_Y, NM_Y, 0)
|
||||
static LAYOUT_VAL_SCALED(V1_W, 88)
|
||||
static constexpr coord_t V2_X = V1_X + V1_W + PAD_TINY;
|
||||
static constexpr coord_t V2_Y = V1_Y;
|
||||
static constexpr coord_t AND_W = V1_W;
|
||||
static LAYOUT_VAL(DUR_W, 40, 54, LS(40))
|
||||
static LAYOUT_SIZE_SCALED(DUR_W, 40, 54)
|
||||
static constexpr coord_t DEL_W = DUR_W;
|
||||
static constexpr coord_t AND_X = ListLineButton::GRP_W - PAD_BORDER * 2 - AND_W - DUR_W - DEL_W - PAD_TINY * 3;
|
||||
static LAYOUT_VAL2(AND_Y, NM_Y, 20)
|
||||
static LAYOUT_SIZE_SCALED(AND_Y, 4, 20)
|
||||
static constexpr coord_t V2_W = AND_X - V2_X - PAD_TINY;
|
||||
static constexpr coord_t DUR_X = ListLineButton::GRP_W - PAD_BORDER * 2 - DUR_W - DEL_W - PAD_TINY * 2;
|
||||
static constexpr coord_t DUR_Y = AND_Y;
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#define SET_DIRTY() storageDirty(EE_MODEL)
|
||||
|
||||
// Edit grid
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t e_col_dsc[] = {LV_GRID_FR(2), LV_GRID_FR(3),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
#else
|
||||
@@ -185,7 +185,7 @@ class ScriptLineButton : public ListLineButton
|
||||
lv_obj_set_layout(lvobj, LV_LAYOUT_GRID);
|
||||
lv_obj_set_grid_dsc_array(lvobj, b_col_dsc, row_dsc);
|
||||
lv_obj_set_style_pad_row(lvobj, 0, 0);
|
||||
lv_obj_set_style_pad_column(lvobj, 4, 0);
|
||||
lv_obj_set_style_pad_column(lvobj, PAD_SMALL, 0);
|
||||
|
||||
lv_obj_update_layout(parent->getLvObj());
|
||||
if (lv_obj_is_visible(lvobj)) delayed_init();
|
||||
|
||||
@@ -67,8 +67,8 @@ class MPlexIcon : public Window
|
||||
index = i;
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(MPLEX_ICON_W, 25, 25, LS(25))
|
||||
static LAYOUT_VAL(MPLEX_ICON_H, 29, 29, 22)
|
||||
static LAYOUT_VAL_SCALED(MPLEX_ICON_W, 25)
|
||||
static LAYOUT_VAL_SCALED(MPLEX_ICON_H, 29)
|
||||
|
||||
protected:
|
||||
uint8_t index;
|
||||
@@ -156,7 +156,7 @@ class MixLineButton : public InputMixButtonBase
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(MPLEX_XO, 28, 28, LS(28))
|
||||
static LAYOUT_VAL_SCALED(MPLEX_XO, 28)
|
||||
|
||||
protected:
|
||||
MPlexIcon* mplex = nullptr;
|
||||
@@ -190,7 +190,7 @@ class MixGroup : public InputMixGroupBase
|
||||
void enableMixerMonitor()
|
||||
{
|
||||
if (!monitor)
|
||||
monitor = new MixerChannelBar(this, {LCD_W - CHBAR_XO, 1, CHBAR_W, CHBAR_H}, idx - MIXSRC_FIRST_CH);
|
||||
monitor = new MixerChannelBar(this, {ListLineButton::GRP_W - CHBAR_W - PAD_LARGE, 1, CHBAR_W, CHBAR_H}, idx - MIXSRC_FIRST_CH);
|
||||
monitorVisible = true;
|
||||
monitor->show();
|
||||
adjustHeight();
|
||||
@@ -214,10 +214,9 @@ class MixGroup : public InputMixGroupBase
|
||||
setHeight(y + PAD_BORDER * 2);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(CHNUM_Y, 17, 17, LS(17))
|
||||
static LAYOUT_VAL(CHBAR_XO, 118, 118, 81)
|
||||
static LAYOUT_VAL(CHBAR_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(CHBAR_H, 14, 14, LS(14))
|
||||
static LAYOUT_VAL_SCALED(CHNUM_Y, 17)
|
||||
static LAYOUT_VAL_SCALED(CHBAR_W, 100)
|
||||
static LAYOUT_VAL_SCALED(CHBAR_H, 14)
|
||||
|
||||
protected:
|
||||
MixerChannelBar* monitor = nullptr;
|
||||
|
||||
@@ -64,10 +64,10 @@ class OutputLineButton : public ListLineButton
|
||||
lv_obj_set_pos(source, SRC_X, SRC_Y);
|
||||
lv_obj_set_size(source, SRC_W, SRC_H);
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
etx_font(source, FONT_XS_INDEX, ETX_STATE_NAME_FONT_SMALL);
|
||||
lv_obj_set_style_pad_top(source, -2, ETX_STATE_NAME_FONT_SMALL);
|
||||
lv_obj_set_style_text_line_space(source, -3, ETX_STATE_NAME_FONT_SMALL);
|
||||
lv_obj_set_style_pad_top(source, -PAD_TINY, ETX_STATE_NAME_FONT_SMALL);
|
||||
lv_obj_set_style_text_line_space(source, -PAD_THREE, ETX_STATE_NAME_FONT_SMALL);
|
||||
#endif
|
||||
|
||||
min = lv_label_create(lvobj);
|
||||
@@ -129,14 +129,14 @@ class OutputLineButton : public ListLineButton
|
||||
|
||||
const LimitData* output = limitAddress(index);
|
||||
if (g_model.limitData[index].name[0] != '\0') {
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
lv_obj_add_state(source, ETX_STATE_NAME_FONT_SMALL);
|
||||
#endif
|
||||
lv_label_set_text_fmt(source, "%s\n" TR_CH "%u",
|
||||
getSourceString(MIXSRC_FIRST_CH + index),
|
||||
index + 1);
|
||||
} else {
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
lv_obj_clear_state(source, ETX_STATE_NAME_FONT_SMALL);
|
||||
#endif
|
||||
lv_label_set_text(source, getSourceString(MIXSRC_FIRST_CH + index));
|
||||
@@ -166,31 +166,31 @@ class OutputLineButton : public ListLineButton
|
||||
curve->show(output->curve);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(CH_LINE_H, 32, 50, LS(32))
|
||||
static LAYOUT_VAL(CH_BAR_WIDTH, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(CH_BAR_HEIGHT, 16, 16, LS(16))
|
||||
static LAYOUT_VAL(BAR_XO, 17, 17, LS(17))
|
||||
static LAYOUT_SIZE_SCALED(CH_LINE_H, 32, 50)
|
||||
static LAYOUT_VAL_SCALED(CH_BAR_WIDTH, 100)
|
||||
static LAYOUT_VAL_SCALED(CH_BAR_HEIGHT, 16)
|
||||
static LAYOUT_VAL_SCALED(BAR_XO, 17)
|
||||
static constexpr coord_t BAR_X = LCD_W - CH_BAR_WIDTH - BAR_XO;
|
||||
|
||||
static constexpr coord_t SRC_X = PAD_TINY;
|
||||
static constexpr coord_t SRC_Y = 1;
|
||||
static LAYOUT_VAL(SRC_W, 80, 80, LS(80))
|
||||
static LAYOUT_VAL_SCALED(SRC_W, 80)
|
||||
static constexpr coord_t SRC_H = CH_LINE_H - PAD_MEDIUM;
|
||||
static constexpr coord_t MIN_X = SRC_X + SRC_W + PAD_TINY;
|
||||
static LAYOUT_VAL(MIN_Y, 4, 2, 2)
|
||||
static LAYOUT_VAL(MIN_W, 52, 52, LS(52))
|
||||
static LAYOUT_SIZE_SCALED(MIN_Y, 4, 2)
|
||||
static LAYOUT_VAL_SCALED(MIN_W, 52)
|
||||
static constexpr coord_t MAX_X = MIN_X + MIN_W + PAD_TINY;
|
||||
static constexpr coord_t MAX_Y = MIN_Y;
|
||||
static LAYOUT_VAL(MAX_W, 52, 60, LS(52))
|
||||
static LAYOUT_VAL(OFF_X, MAX_X + MAX_W + PAD_TINY, SRC_X + SRC_W + PAD_TINY, MAX_X + MAX_W + PAD_TINY)
|
||||
static LAYOUT_VAL(OFF_Y, MIN_Y, 24, MIN_Y)
|
||||
static LAYOUT_VAL(OFF_W, 44, 52, LS(44))
|
||||
static LAYOUT_SIZE_SCALED(MAX_W, 52, 60)
|
||||
static LAYOUT_SIZE(OFF_X, MAX_X + MAX_W + PAD_TINY, SRC_X + SRC_W + PAD_TINY)
|
||||
static LAYOUT_SIZE_SCALED(OFF_Y, 4, 24)
|
||||
static LAYOUT_SIZE_SCALED(OFF_W, 44, 52)
|
||||
static constexpr coord_t CTR_X = OFF_X + OFF_W + PAD_TINY;
|
||||
static constexpr coord_t CTR_Y = OFF_Y;
|
||||
static LAYOUT_VAL(CTR_W, 60, 60, LS(60))
|
||||
static LAYOUT_VAL_SCALED(CTR_W, 60)
|
||||
static constexpr coord_t REV_X = CTR_X + CTR_W + PAD_TINY;
|
||||
static constexpr coord_t REV_Y = CTR_Y;
|
||||
static LAYOUT_VAL(REV_W, 16, 16, LS(16))
|
||||
static LAYOUT_VAL_SCALED(REV_W, 16)
|
||||
static constexpr coord_t CRV_X = REV_X + REV_W + PAD_TINY;
|
||||
static constexpr coord_t CRV_Y = REV_Y + 1;
|
||||
|
||||
@@ -251,7 +251,7 @@ void ModelOutputsPage::build(Window* window)
|
||||
for (uint8_t ch = 0; ch < MAX_OUTPUT_CHANNELS; ch++) {
|
||||
// Channel settings
|
||||
auto btn = new OutputLineButton(window, ch);
|
||||
lv_obj_set_pos(btn->getLvObj(), TRIMB_X, TRIMB_Y + (ch * (OutputLineButton::CH_LINE_H + 2)));
|
||||
lv_obj_set_pos(btn->getLvObj(), TRIMB_X, TRIMB_Y + (ch * (OutputLineButton::CH_LINE_H + PAD_TINY)));
|
||||
btn->setWidth(TRIMB_W);
|
||||
|
||||
LimitData* output = limitAddress(ch);
|
||||
|
||||
@@ -33,15 +33,15 @@ class ModelOutputsPage : public PageTab
|
||||
|
||||
static constexpr coord_t ADD_TRIMS_X = PAD_SMALL;
|
||||
static constexpr coord_t ADD_TRIMS_Y = PAD_SMALL;
|
||||
static LAYOUT_VAL2(ADD_TRIMS_W, (LCD_W / 2) - PAD_LARGE, LCD_W - 12)
|
||||
static LAYOUT_SIZE(ADD_TRIMS_W, (LCD_W / 2) - PAD_LARGE, LCD_W - PAD_LARGE - PAD_SMALL)
|
||||
static constexpr coord_t ADD_TRIMS_H = EdgeTxStyles::UI_ELEMENT_HEIGHT;
|
||||
static LAYOUT_VAL(EXLIM_XO, 58, 58, LS(58))
|
||||
static LAYOUT_VAL_SCALED(EXLIM_XO, 58)
|
||||
static constexpr coord_t EXLIMCB_X = LCD_W - EXLIM_XO;
|
||||
static LAYOUT_VAL(EXLIMCB_Y, 4, ADD_TRIMS_X + ADD_TRIMS_H + 2, LS(4))
|
||||
static LAYOUT_VAL(EXLIMCB_W, 52, 52, LS(52))
|
||||
static LAYOUT_SIZE(EXLIMCB_Y, PAD_SMALL, ADD_TRIMS_Y + ADD_TRIMS_H + PAD_TINY)
|
||||
static LAYOUT_VAL_SCALED(EXLIMCB_W, 52)
|
||||
static constexpr coord_t EXLIMCB_H = EdgeTxStyles::UI_ELEMENT_HEIGHT;
|
||||
static LAYOUT_VAL2(EXLIM_X, ADD_TRIMS_X + ADD_TRIMS_W + PAD_SMALL, 6)
|
||||
static LAYOUT_VAL(EXLIM_Y, 10, ADD_TRIMS_X + ADD_TRIMS_H + 8, LS(10))
|
||||
static LAYOUT_SIZE(EXLIM_X, ADD_TRIMS_X + ADD_TRIMS_W + PAD_SMALL, PAD_MEDIUM)
|
||||
static LAYOUT_SIZE(EXLIM_Y, PAD_LARGE + PAD_TINY, ADD_TRIMS_Y + ADD_TRIMS_H + PAD_LARGE)
|
||||
static constexpr coord_t EXLIM_W = EXLIMCB_X - EXLIM_X - PAD_SMALL;
|
||||
static constexpr coord_t TRIMB_X = PAD_SMALL;
|
||||
static constexpr coord_t TRIMB_Y = EXLIMCB_Y + EXLIMCB_H + PAD_MEDIUM / 2;
|
||||
|
||||
@@ -41,11 +41,11 @@ struct ModelButtonLayout {
|
||||
uint16_t columns;
|
||||
};
|
||||
|
||||
static LAYOUT_VAL(L0_W, 165, 147, LS(165))
|
||||
static LAYOUT_VAL(L0_H, 92, 92, LS(92))
|
||||
static LAYOUT_VAL(L1_W, 108, 96, LS(108))
|
||||
static LAYOUT_VAL(L1_H, 61, 61, LS(61))
|
||||
static LAYOUT_VAL(L3_W, 336, 300, LS(336))
|
||||
static constexpr coord_t L0_W = (ModelLabelsWindow::MDLS_W - PAD_BORDER * 3) / 2;
|
||||
static constexpr coord_t L0_H = L0_W * 11 / 20;
|
||||
static constexpr coord_t L1_W = (ModelLabelsWindow::MDLS_W - PAD_BORDER * 4) / 3;
|
||||
static constexpr coord_t L1_H = L1_W * 11 / 20;
|
||||
static constexpr coord_t L3_W = ModelLabelsWindow::MDLS_W - PAD_BORDER * 2;
|
||||
|
||||
ModelButtonLayout modelLayouts[] = {
|
||||
{L0_W, L0_H, true, FONT(STD), 2},
|
||||
@@ -84,8 +84,8 @@ class ModelButton : public Button
|
||||
if (modelCell->modelBitmap[0] == 0)
|
||||
showNoImgMsg();
|
||||
|
||||
coord_t fh = getFontHeight(font) - ((font == FONT(STD)) ? 4 : (font == FONT(XS)) ? 3 : 1);
|
||||
coord_t fo = (font == FONT(STD)) ? -3 : (font == FONT(XS)) ? -3 : -1;
|
||||
coord_t fh = getFontHeight(font) - ((font == FONT(STD)) ? PAD_SMALL : (font == FONT(XS)) ? PAD_THREE : 1);
|
||||
coord_t fo = (font == FONT(STD)) ? -PAD_THREE : (font == FONT(XS)) ? -PAD_THREE : -1;
|
||||
|
||||
modelName = new StaticText(this, {PAD_TINY, PAD_TINY, w, fh}, modelCell->modelName,
|
||||
COLOR_THEME_SECONDARY1_INDEX, CENTERED | font);
|
||||
@@ -714,7 +714,7 @@ void ModelLabelsWindow::buildHead(Window *hdr)
|
||||
void ModelLabelsWindow::buildBody(Window *window)
|
||||
{
|
||||
// Models List
|
||||
mdlselector = new ModelsPageBody(window, {MDLS_X, PAD_SMALL, MDLS_W, MDLS_H});
|
||||
mdlselector = new ModelsPageBody(window, {MDLS_X, MDLS_Y, MDLS_W, MDLS_H});
|
||||
mdlselector->setLblRefreshFunc([=]() { labelRefreshRequest(); });
|
||||
auto mdl_obj = mdlselector->getLvObj();
|
||||
lv_obj_set_style_max_width(mdl_obj, MDLS_W, LV_PART_MAIN);
|
||||
@@ -726,7 +726,7 @@ void ModelLabelsWindow::buildBody(Window *window)
|
||||
|
||||
// Labels
|
||||
lblselector =
|
||||
new ListBox(window, rect_t{PAD_SMALL, LABELS_Y, LABELS_WIDTH, LABELS_HEIGHT}, getLabels());
|
||||
new ListBox(window, rect_t{LABELS_X, LABELS_Y, LABELS_WIDTH, LABELS_HEIGHT}, getLabels());
|
||||
lblselector->setSmallSelectMarker();
|
||||
auto lbl_obj = lblselector->getLvObj();
|
||||
etx_scrollbar(lbl_obj);
|
||||
@@ -735,7 +735,7 @@ void ModelLabelsWindow::buildBody(Window *window)
|
||||
|
||||
// Sort Button
|
||||
new Choice(
|
||||
window, {PAD_SMALL, LABELS_Y + LABELS_HEIGHT + PAD_SMALL, SORT_BUTTON_W, 0}, STR_SORT_ORDERS, NAME_ASC, DATE_DES,
|
||||
window, {LABELS_X, LABELS_Y + LABELS_HEIGHT + PAD_SMALL, SORT_BUTTON_W, 0}, STR_SORT_ORDERS, NAME_ASC, DATE_DES,
|
||||
[=]() { return mdlselector->getSortOrder(); },
|
||||
[=](int newValue) { mdlselector->setSortOrder((ModelsSortBy)newValue); },
|
||||
STR_SORT_MODELS_BY);
|
||||
|
||||
@@ -34,17 +34,18 @@ class ModelLabelsWindow : public Page
|
||||
public:
|
||||
ModelLabelsWindow();
|
||||
|
||||
static LAYOUT_VAL(NEW_BTN_W, 60, 60, LS(60))
|
||||
static LAYOUT_VAL_SCALED(NEW_BTN_W, 60)
|
||||
static constexpr coord_t LAYOUT_BTN_XO = NEW_BTN_W + PAD_LARGE * 2 + EdgeTxStyles::UI_ELEMENT_HEIGHT;
|
||||
static LAYOUT_VAL(LAYOUT_BTN_YO, 6, 6, LS(6))
|
||||
static LAYOUT_VAL(MDLS_X, 137, 4, LS(137))
|
||||
static LAYOUT_VAL(MDLS_Y, 4, 4, LS(4))
|
||||
static LAYOUT_VAL(MDLS_W, 343, LCD_W - PAD_MEDIUM, LS(343))
|
||||
static LAYOUT_VAL2(MDLS_H, LCD_H - EdgeTxStyles::MENU_HEADER_HEIGHT - PAD_SMALL * 2, 219)
|
||||
static LAYOUT_VAL2(LABELS_Y, PAD_SMALL, MDLS_Y + MDLS_H + PAD_SMALL)
|
||||
static LAYOUT_VAL(LABELS_WIDTH, 131, LCD_W - PAD_SMALL * 2, LS(131))
|
||||
static LAYOUT_VAL2(LABELS_HEIGHT, LCD_H - EdgeTxStyles::MENU_HEADER_HEIGHT - EdgeTxStyles::UI_ELEMENT_HEIGHT - PAD_SMALL * 2 - PAD_MEDIUM, 166)
|
||||
static LAYOUT_VAL2(SORT_BUTTON_W, LABELS_WIDTH, 120)
|
||||
static LAYOUT_VAL_SCALED(LAYOUT_BTN_YO, 6)
|
||||
static constexpr coord_t MDLS_Y = PAD_BORDER;
|
||||
static constexpr coord_t LABELS_X = PAD_BORDER;
|
||||
static LAYOUT_ORIENTATION(MDLS_H, LCD_H - EdgeTxStyles::MENU_HEADER_HEIGHT - PAD_SMALL * 2, LAYOUT_SCALE(219))
|
||||
static LAYOUT_ORIENTATION(LABELS_Y, PAD_SMALL, MDLS_Y + MDLS_H + PAD_SMALL)
|
||||
static LAYOUT_ORIENTATION(LABELS_WIDTH, LCD_W * 131 / 480, LCD_W - PAD_SMALL * 2)
|
||||
static LAYOUT_ORIENTATION(LABELS_HEIGHT, LCD_H - EdgeTxStyles::MENU_HEADER_HEIGHT - EdgeTxStyles::UI_ELEMENT_HEIGHT - PAD_SMALL * 2 - PAD_MEDIUM, LAYOUT_SCALE(166))
|
||||
static LAYOUT_ORIENTATION(SORT_BUTTON_W, LABELS_WIDTH, LAYOUT_SCALE(120))
|
||||
static LAYOUT_ORIENTATION(MDLS_X, LABELS_WIDTH + PAD_BORDER, PAD_SMALL)
|
||||
static LAYOUT_ORIENTATION(MDLS_W, LCD_W - LABELS_WIDTH - PAD_BORDER, LCD_W - PAD_MEDIUM)
|
||||
|
||||
protected:
|
||||
ModelsSortBy sort = DEFAULT_MODEL_SORT;
|
||||
|
||||
@@ -210,15 +210,15 @@ struct CenterBeepsMatrix : public ButtonMatrix {
|
||||
|
||||
update();
|
||||
|
||||
setWidth(min((int)btn_cnt, SW_BTNS) * SW_BTN_W + 4);
|
||||
setWidth(min((int)btn_cnt, SW_BTNS) * SW_BTN_W + PAD_SMALL);
|
||||
|
||||
uint8_t rows = ((btn_cnt - 1) / SW_BTNS) + 1;
|
||||
setHeight((rows * 36) + 4);
|
||||
setHeight((rows * (EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_SMALL)) + PAD_SMALL);
|
||||
|
||||
lv_obj_set_style_pad_all(lvobj, 4, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_all(lvobj, PAD_SMALL, LV_PART_MAIN);
|
||||
|
||||
lv_obj_set_style_pad_row(lvobj, 4, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_column(lvobj, 4, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_row(lvobj, PAD_SMALL, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_column(lvobj, PAD_SMALL, LV_PART_MAIN);
|
||||
}
|
||||
|
||||
void onPress(uint8_t btn_id)
|
||||
@@ -248,9 +248,9 @@ struct CenterBeepsMatrix : public ButtonMatrix {
|
||||
setChecked(btn_id);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(SW_BTNS, 8, 4, 8)
|
||||
static LAYOUT_VAL(SW_BTN_W, 56, 72, 38)
|
||||
static LAYOUT_VAL(SW_BTN_H, 36, 36, LS(36))
|
||||
static LAYOUT_SIZE(SW_BTNS, 8, 4)
|
||||
static LAYOUT_SIZE_SCALED(SW_BTN_W, 56, 72)
|
||||
static LAYOUT_VAL_SCALED(SW_BTN_H, 36)
|
||||
|
||||
private:
|
||||
uint8_t max_analogs;
|
||||
|
||||
@@ -29,10 +29,10 @@ class ModelSetupPage: public PageTab {
|
||||
|
||||
void build(Window * window) override;
|
||||
|
||||
static LAYOUT_VAL2(BTN_COLS, 3, 3)
|
||||
static LAYOUT_VAL(BTN_H, 62, 62, LS(62))
|
||||
static LAYOUT_VAL(OPTS_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(NAM_W, 200, 140, LS(200))
|
||||
static LAYOUT_SIZE(BTN_COLS, 3, 3)
|
||||
static LAYOUT_VAL_SCALED(BTN_H, 62)
|
||||
static LAYOUT_VAL_SCALED(OPTS_W, 100)
|
||||
static LAYOUT_SIZE_SCALED(NAM_W, 200, 140)
|
||||
|
||||
private:
|
||||
TextButton *labelTextButton = nullptr;
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
std::string getSensorCustomValue(uint8_t sensor, int32_t value, LcdFlags flags);
|
||||
|
||||
#if (PORTRAIT_LCD) || defined(TRANSLATIONS_CZ)
|
||||
#if PORTRAIT || defined(TRANSLATIONS_CZ)
|
||||
#define TWOCOLBUTTONS 1
|
||||
#else
|
||||
#define TWOCOLBUTTONS 0
|
||||
@@ -84,11 +84,11 @@ class TSStyle
|
||||
|
||||
lv_style_t tsFreshStyle;
|
||||
|
||||
static LAYOUT_VAL(NUM_W, 36, 36, LS(36))
|
||||
static LAYOUT_VAL(NAME_W, 56, 56, LS(56))
|
||||
static LAYOUT_VAL(ID_Y, 17, 17, LS(17))
|
||||
static LAYOUT_VAL(ID_H, 11, 11, LS(11))
|
||||
static LAYOUT_VAL(FRSH_Y, 10, 10, LS(10))
|
||||
static LAYOUT_VAL_SCALED(NUM_W, 36)
|
||||
static LAYOUT_VAL_SCALED(NAME_W, 56)
|
||||
static LAYOUT_VAL_SCALED(ID_Y, 16)
|
||||
static LAYOUT_VAL_SCALED(ID_H, 12)
|
||||
static LAYOUT_VAL_SCALED(FRSH_Y, 10)
|
||||
|
||||
private:
|
||||
bool styleInitDone;
|
||||
@@ -203,64 +203,6 @@ lv_obj_t* TSStyle::newValue(lv_obj_t* parent)
|
||||
return obj;
|
||||
}
|
||||
|
||||
static void ts_fresh_icon_constructor(const lv_obj_class_t* class_p,
|
||||
lv_obj_t* obj)
|
||||
{
|
||||
#if LANDSCAPE_LCD_SML
|
||||
static uint8_t const freshBitmap[] = {
|
||||
0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
|
||||
};
|
||||
#elif LANDSCAPE_LCD_LRG
|
||||
static uint8_t const freshBitmap[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
#else
|
||||
static uint8_t const freshBitmap[] = {
|
||||
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
|
||||
};
|
||||
#endif
|
||||
|
||||
etx_obj_add_style(obj, tsStyle.tsFreshStyle, LV_PART_MAIN);
|
||||
lv_canvas_set_buffer(obj, (void*)freshBitmap, PAD_LARGE, PAD_LARGE, LV_IMG_CF_ALPHA_8BIT);
|
||||
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
|
||||
static const lv_obj_class_t ts_fresh_icon_class = {
|
||||
.base_class = &lv_canvas_class,
|
||||
.constructor_cb = ts_fresh_icon_constructor,
|
||||
.destructor_cb = nullptr,
|
||||
.user_data = nullptr,
|
||||
.event_cb = nullptr,
|
||||
.width_def = PAD_LARGE,
|
||||
.height_def = PAD_LARGE,
|
||||
.editable = LV_OBJ_CLASS_EDITABLE_FALSE,
|
||||
.group_def = LV_OBJ_CLASS_GROUP_DEF_INHERIT,
|
||||
.instance_size = sizeof(lv_canvas_t),
|
||||
};
|
||||
|
||||
class SensorButton : public ListLineButton
|
||||
{
|
||||
public:
|
||||
@@ -268,7 +210,7 @@ class SensorButton : public ListLineButton
|
||||
ListLineButton(parent, index)
|
||||
{
|
||||
padAll(PAD_ZERO);
|
||||
setHeight(EdgeTxStyles::UI_ELEMENT_HEIGHT);
|
||||
setHeight(EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_SMALL);
|
||||
|
||||
check(isActive());
|
||||
|
||||
@@ -327,7 +269,7 @@ class SensorButton : public ListLineButton
|
||||
lv_obj_enable_style_refresh(false);
|
||||
|
||||
numLabel = tsStyle.newNum(lvobj, index);
|
||||
lv_obj_set_pos(numLabel, PAD_TINY, PAD_MEDIUM/2);
|
||||
lv_obj_set_pos(numLabel, PAD_TINY, PAD_TINY);
|
||||
|
||||
TelemetrySensor* sensor = &g_model.telemetrySensors[index];
|
||||
if (sensor->type == TELEM_TYPE_CUSTOM) {
|
||||
@@ -343,11 +285,14 @@ class SensorButton : public ListLineButton
|
||||
lv_obj_t* nm = tsStyle.newName(lvobj, s);
|
||||
lv_obj_set_pos(nm, TSStyle::NUM_W + PAD_SMALL, PAD_MEDIUM/2);
|
||||
|
||||
fresh = etx_create(&ts_fresh_icon_class, lvobj);
|
||||
lv_obj_set_pos(fresh, TSStyle::NUM_W + TSStyle::NAME_W + PAD_MEDIUM, TSStyle::FRSH_Y);
|
||||
auto mask = getBuiltinIcon(ICON_DOT);
|
||||
fresh = lv_canvas_create(lvobj);
|
||||
lv_obj_set_pos(fresh, TSStyle::NUM_W + TSStyle::NAME_W + PAD_MEDIUM, PAD_LARGE);
|
||||
lv_canvas_set_buffer(fresh, (void*)mask->data, mask->width, mask->height, LV_IMG_CF_ALPHA_8BIT);
|
||||
lv_obj_add_flag(fresh, LV_OBJ_FLAG_HIDDEN);
|
||||
|
||||
valLabel = tsStyle.newValue(lvobj);
|
||||
lv_obj_set_pos(valLabel, TSStyle::NUM_W + TSStyle::NAME_W + PAD_LARGE * 2, PAD_MEDIUM/2);
|
||||
lv_obj_set_pos(valLabel, TSStyle::NUM_W + TSStyle::NAME_W + PAD_LARGE * 3, PAD_MEDIUM/2);
|
||||
|
||||
lv_obj_update_layout(lvobj);
|
||||
|
||||
@@ -815,7 +760,7 @@ class SensorEditWindow : public SubPage
|
||||
updateSensorParameters();
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(NUM_EDIT_W, EdgeTxStyles::EDIT_FLD_WIDTH_NARROW, 80)
|
||||
static LAYOUT_SIZE(NUM_EDIT_W, EdgeTxStyles::EDIT_FLD_WIDTH_NARROW, LAYOUT_SCALE(80))
|
||||
};
|
||||
|
||||
ModelTelemetryPage::ModelTelemetryPage() :
|
||||
|
||||
@@ -33,7 +33,7 @@ class ModelTelemetryPage : public PageTab
|
||||
|
||||
void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL(NUM_EDIT_W, 100, 65, LS(100))
|
||||
static LAYOUT_SIZE_SCALED(NUM_EDIT_W, 100, 65)
|
||||
|
||||
protected:
|
||||
int lastKnownIndex = 0;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#define ETX_STATE_COLLISION_WARN LV_STATE_USER_1
|
||||
|
||||
#if !PORTRAIT_LCD // Landscape
|
||||
#if !NARROW_LAYOUT
|
||||
|
||||
static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
@@ -49,7 +49,7 @@ static const lv_coord_t b_col_dsc[] = {LV_GRID_FR(10), 20,
|
||||
|
||||
static const lv_coord_t b_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#else // Portrait
|
||||
#else
|
||||
|
||||
static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
@@ -82,7 +82,7 @@ class USBChannelEditStatusBar : public Window
|
||||
channel, true);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(USBCH_EDIT_STATUS_BAR_MARGIN, 3, 0, LS(3))
|
||||
static LAYOUT_SIZE_SCALED(USBCH_EDIT_STATUS_BAR_MARGIN, 3, 0)
|
||||
|
||||
protected:
|
||||
ComboChannelBar* channelBar;
|
||||
@@ -215,9 +215,9 @@ class USBChannelEditWindow : public Page
|
||||
buildBody(body);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(USBCH_EDIT_STATUS_BAR_WIDTH, 250, 160, LS(250))
|
||||
static LAYOUT_VAL(USBCH_EDIT_RIGHT_MARGIN, 0, 3, 0)
|
||||
static LAYOUT_VAL2(USBCH_COLS, 4, 2)
|
||||
static LAYOUT_SIZE_SCALED(USBCH_EDIT_STATUS_BAR_WIDTH, 250, 160)
|
||||
static LAYOUT_SIZE(USBCH_EDIT_RIGHT_MARGIN, 0, 3)
|
||||
static LAYOUT_SIZE(USBCH_COLS, 4, 2)
|
||||
|
||||
protected:
|
||||
uint8_t channel;
|
||||
@@ -291,7 +291,7 @@ class USBChannelEditWindow : public Page
|
||||
new Choice(line, rect_t{}, STR_VUSBJOYSTICK_CH_MODE, 0, USBJOYS_CH_LAST,
|
||||
GET_DEFAULT(cch->mode), SET_VALUE_WUPDATE(cch->mode));
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
line = form->newLine(grid);
|
||||
#endif
|
||||
|
||||
@@ -316,7 +316,7 @@ class USBChannelEditWindow : public Page
|
||||
this->update();
|
||||
});
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
line = m_btnModeFrame->newLine(grid);
|
||||
#endif
|
||||
|
||||
@@ -327,7 +327,7 @@ class USBChannelEditWindow : public Page
|
||||
|
||||
line = m_btnModeFrame->newLine(grid);
|
||||
new StaticText(line, rect_t{}, STR_USBJOYSTICK_CH_BTNNUM);
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
line = m_btnModeFrame->newLine(grid);
|
||||
#endif
|
||||
_BtnNumSel = new USBChannelButtonSel(line, rect_t{}, channel,
|
||||
@@ -366,14 +366,14 @@ class USBChannelLineButton : public ListLineButton
|
||||
ListLineButton(parent, index)
|
||||
{
|
||||
setHeight(USBCH_LINE_HEIGHT);
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
padTop(PAD_SMALL);
|
||||
#endif
|
||||
|
||||
lv_obj_set_layout(lvobj, LV_LAYOUT_GRID);
|
||||
lv_obj_set_grid_dsc_array(lvobj, b_col_dsc, b_row_dsc);
|
||||
lv_obj_set_style_pad_row(lvobj, 0, 0);
|
||||
lv_obj_set_style_pad_column(lvobj, 4, 0);
|
||||
lv_obj_set_style_pad_column(lvobj, PAD_SMALL, 0);
|
||||
|
||||
lv_obj_add_event_cb(lvobj, USBChannelLineButton::on_draw,
|
||||
LV_EVENT_DRAW_MAIN_BEGIN, nullptr);
|
||||
@@ -487,10 +487,10 @@ class USBChannelLineButton : public ListLineButton
|
||||
|
||||
bool isActive() const override { return false; }
|
||||
|
||||
static LAYOUT_VAL(USBCH_LINE_HEIGHT, 32, 48, LS(32))
|
||||
static LAYOUT_VAL2(USBCH_CHN_ROWS, 1, 2)
|
||||
static LAYOUT_VAL2(USBCH_BTN_MODE_COL, 4, 2)
|
||||
static LAYOUT_VAL2(USBCH_BTN_MODE_ROW, 0, 1)
|
||||
static LAYOUT_SIZE_SCALED(USBCH_LINE_HEIGHT, 32, 48)
|
||||
static LAYOUT_SIZE(USBCH_CHN_ROWS, 1, 2)
|
||||
static LAYOUT_SIZE(USBCH_BTN_MODE_COL, 4, 2)
|
||||
static LAYOUT_SIZE(USBCH_BTN_MODE_ROW, 0, 1)
|
||||
|
||||
protected:
|
||||
bool init = false;
|
||||
@@ -518,7 +518,7 @@ ModelUSBJoystickPage::ModelUSBJoystickPage() : Page(ICON_MODEL_USB, PAD_BORDER)
|
||||
GET_DEFAULT(g_model.usbJoystickExtMode),
|
||||
SET_VALUE_WUPDATE(g_model.usbJoystickExtMode));
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
line = body->newLine(grid);
|
||||
#endif
|
||||
|
||||
@@ -536,7 +536,7 @@ ModelUSBJoystickPage::ModelUSBJoystickPage() : Page(ICON_MODEL_USB, PAD_BORDER)
|
||||
GET_DEFAULT(g_model.usbJoystickCircularCut),
|
||||
SET_VALUE_WUPDATE(g_model.usbJoystickCircularCut));
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if NARROW_LAYOUT
|
||||
line = body->newLine(grid);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ class OutputEditStatusBar : public Window
|
||||
channel, true);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(OUTPUT_EDIT_STATUS_BAR_MARGIN, 3, 0, LS(3))
|
||||
static LAYOUT_SIZE_SCALED(OUTPUT_EDIT_STATUS_BAR_MARGIN, 3, 0)
|
||||
|
||||
protected:
|
||||
ComboChannelBar *channelBar;
|
||||
@@ -101,7 +101,7 @@ void OutputEditWindow::buildHeader(Window *window)
|
||||
channel);
|
||||
}
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if !NARROW_LAYOUT
|
||||
static const lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2),
|
||||
LV_GRID_FR(1), LV_GRID_FR(2),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
@@ -36,8 +36,8 @@ class OutputEditWindow : public Page
|
||||
public:
|
||||
explicit OutputEditWindow(uint8_t channel);
|
||||
|
||||
static LAYOUT_VAL(OUTPUT_EDIT_STATUS_BAR_WIDTH, 250, 180, LS(250))
|
||||
static LAYOUT_VAL(OUTPUT_EDIT_RIGHT_MARGIN, 0, 3, 0)
|
||||
static LAYOUT_SIZE_SCALED(OUTPUT_EDIT_STATUS_BAR_WIDTH, 250, 180)
|
||||
static LAYOUT_SIZE(OUTPUT_EDIT_RIGHT_MARGIN, 0, 3)
|
||||
|
||||
protected:
|
||||
uint8_t channel;
|
||||
|
||||
@@ -99,9 +99,9 @@ class SwitchWarnMatrix : public ButtonMatrix
|
||||
setChecked(btn_id);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(SW_BTNS, 8, 4)
|
||||
static LAYOUT_VAL(SW_BTN_W, 56, 72, 38)
|
||||
static LAYOUT_VAL(SW_BTN_H, 36, 36, LS(36))
|
||||
static LAYOUT_SIZE(SW_BTNS, 8, 4)
|
||||
static LAYOUT_SIZE_SCALED(SW_BTN_W, 56, 72)
|
||||
static LAYOUT_VAL_SCALED(SW_BTN_H, 36)
|
||||
|
||||
private:
|
||||
uint8_t sw_idx[MAX_SWITCHES];
|
||||
|
||||
@@ -798,7 +798,7 @@ void FunctionsPage::build(Window *window)
|
||||
|
||||
if (isActive) {
|
||||
auto button = functionButton(
|
||||
window, rect_t{0, 0, window->width() - 12, SF_BUTTON_H}, i);
|
||||
window, rect_t{0, 0, window->width() - PAD_LARGE - PAD_SMALL, SF_BUTTON_H}, i);
|
||||
|
||||
lv_obj_set_grid_cell(button->getLvObj(), LV_GRID_ALIGN_CENTER, 0, 1,
|
||||
LV_GRID_ALIGN_CENTER, 0, 1);
|
||||
|
||||
@@ -51,15 +51,15 @@ class FunctionLineButton : public ListLineButton
|
||||
void refresh() override;
|
||||
|
||||
static constexpr coord_t NM_X = PAD_TINY;
|
||||
static LAYOUT_VAL(NM_Y, 4, 10, 1)
|
||||
static LAYOUT_VAL(NM_W, 43, 40, LS(43))
|
||||
static LAYOUT_SIZE_SCALED(NM_Y, 4, 10)
|
||||
static LAYOUT_SIZE_SCALED(NM_W, 43, 40)
|
||||
static constexpr coord_t SW_X = NM_X + NM_W + PAD_TINY;
|
||||
static LAYOUT_VAL2(SW_Y, NM_Y, 0)
|
||||
static LAYOUT_VAL(SW_W, 70, 198, LS(70))
|
||||
static LAYOUT_VAL2(FN_X, SW_X + SW_W + PAD_TINY, NM_X + NM_W + PAD_TINY)
|
||||
static LAYOUT_VAL2(FN_Y, NM_Y, 20)
|
||||
static LAYOUT_VAL(RP_W, 40, 34, LS(40))
|
||||
static LAYOUT_VAL(EN_SZ, 16, 16, 12)
|
||||
static LAYOUT_SIZE(SW_Y, NM_Y, 0)
|
||||
static LAYOUT_SIZE_SCALED(SW_W, 70, 198)
|
||||
static LAYOUT_SIZE(FN_X, SW_X + SW_W + PAD_TINY, NM_X + NM_W + PAD_TINY)
|
||||
static LAYOUT_SIZE_SCALED(FN_Y, 4, 20)
|
||||
static LAYOUT_SIZE_SCALED(RP_W, 40, 34)
|
||||
static LAYOUT_VAL_SCALED(EN_SZ, 16)
|
||||
static constexpr coord_t RP_X = ListLineButton::GRP_W - PAD_BORDER * 2 - RP_W - EN_SZ - PAD_TINY * 2;
|
||||
static constexpr coord_t RP_Y = NM_Y;
|
||||
static constexpr coord_t FN_W = RP_X - FN_X - PAD_TINY;
|
||||
@@ -130,7 +130,7 @@ class FunctionsPage : public PageTab
|
||||
|
||||
void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL(SF_BUTTON_H, 32, 44, LS(32))
|
||||
static LAYOUT_SIZE_SCALED(SF_BUTTON_H, 32, 44)
|
||||
|
||||
protected:
|
||||
int8_t focusIndex = -1;
|
||||
|
||||
@@ -28,10 +28,10 @@ class TimerWindow : public SubPage
|
||||
public:
|
||||
TimerWindow(uint8_t timer);
|
||||
|
||||
static LAYOUT_VAL(COUNTDOWN_W, 144, 144, LS(144))
|
||||
static LAYOUT_VAL2(COUNTDOWN_LBL_YO, 0, (EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY) / 2)
|
||||
static LAYOUT_VAL2(COUNTDOWN_VAL_XO, COUNTDOWN_W + PAD_SMALL, 0)
|
||||
static LAYOUT_VAL2(COUNTDOWN_VAL_YO, 0, EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY)
|
||||
static LAYOUT_VAL_SCALED(COUNTDOWN_W, 144)
|
||||
static LAYOUT_SIZE(COUNTDOWN_LBL_YO, 0, (EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY) / 2)
|
||||
static LAYOUT_SIZE(COUNTDOWN_VAL_XO, COUNTDOWN_W + PAD_SMALL, 0)
|
||||
static LAYOUT_SIZE(COUNTDOWN_VAL_YO, 0, EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_TINY)
|
||||
|
||||
protected:
|
||||
Window* timerDirLine = nullptr;
|
||||
|
||||
@@ -162,14 +162,13 @@ TrainerPage::TrainerPage() : Page(ICON_MODEL_SETUP)
|
||||
|
||||
TrainerModuleData* tr = &g_model.trainerData;
|
||||
trainerChoice->setSetValueHandler([=](int32_t newValue) {
|
||||
|
||||
//TODO: move the BT stuff somewhere else?
|
||||
//TODO: move the BT stuff somewhere else?
|
||||
#if defined(BLUETOOTH)
|
||||
memclear(bluetooth.distantAddr, sizeof(bluetooth.distantAddr));
|
||||
bluetooth.state = BLUETOOTH_STATE_OFF;
|
||||
memclear(bluetooth.distantAddr, sizeof(bluetooth.distantAddr));
|
||||
bluetooth.state = BLUETOOTH_STATE_OFF;
|
||||
#endif
|
||||
tr->mode = newValue;
|
||||
trainerModule->update();
|
||||
SET_DIRTY();
|
||||
});
|
||||
tr->mode = newValue;
|
||||
trainerModule->update();
|
||||
SET_DIRTY();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -28,5 +28,5 @@ class TrimsSetup : public SubPage
|
||||
public:
|
||||
TrimsSetup();
|
||||
|
||||
static LAYOUT_VAL(HATSMODE_W, 120, 120, LS(120))
|
||||
static LAYOUT_VAL_SCALED(HATSMODE_W, 120)
|
||||
};
|
||||
|
||||
@@ -36,12 +36,12 @@ class ChannelFailsafeBargraph : public Window
|
||||
etx_obj_add_style(lvobj, styles->border_thin, LV_PART_MAIN);
|
||||
etx_obj_add_style(lvobj, styles->border_color[COLOR_BLACK_INDEX], LV_PART_MAIN);
|
||||
|
||||
outputsBar = new OutputChannelBar(this, {0, 1, width() - 2, ChannelBar::BAR_HEIGHT},
|
||||
outputsBar = new OutputChannelBar(this, {0, 1, width() - PAD_TABLE_H, ChannelBar::BAR_HEIGHT},
|
||||
channel, false, false);
|
||||
outputsBar->hide();
|
||||
|
||||
failsafeBar = new ChannelBar(
|
||||
this, {0, ChannelBar::BAR_HEIGHT + 3, width() - 2, ChannelBar::BAR_HEIGHT}, channel,
|
||||
this, {0, ChannelBar::BAR_HEIGHT + PAD_THREE, width() - PAD_TABLE_H, ChannelBar::BAR_HEIGHT}, channel,
|
||||
[=] { return g_model.failsafeChannels[channel]; },
|
||||
COLOR_THEME_WARNING_INDEX);
|
||||
failsafeBar->hide();
|
||||
|
||||
@@ -28,5 +28,5 @@ class FailSafePage : public Page
|
||||
public:
|
||||
explicit FailSafePage(uint8_t moduleIdx);
|
||||
|
||||
static LAYOUT_VAL(FS_BARGRAPH_WIDTH, 130, 90, LS(130))
|
||||
static LAYOUT_SIZE_SCALED(FS_BARGRAPH_WIDTH, 130, 90)
|
||||
};
|
||||
|
||||
@@ -37,7 +37,7 @@ struct HWInputEdit : public RadioTextEdit {
|
||||
{
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(HW_INP_W, 64, 64, LS(64))
|
||||
static LAYOUT_VAL_SCALED(HW_INP_W, 64)
|
||||
};
|
||||
|
||||
static const lv_coord_t col_two_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2),
|
||||
@@ -45,7 +45,7 @@ static const lv_coord_t col_two_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2),
|
||||
static const lv_coord_t col_three_dsc[] = {
|
||||
LV_GRID_FR(8), LV_GRID_FR(12), LV_GRID_FR(20), LV_GRID_TEMPLATE_LAST};
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
static const lv_coord_t pots_col_dsc[] = {LV_GRID_FR(2), LV_GRID_FR(2),
|
||||
LV_GRID_FR(5), LV_GRID_FR(2),
|
||||
LV_GRID_TEMPLATE_LAST};
|
||||
@@ -83,7 +83,7 @@ HWSticks::HWSticks(Window* parent) : Window(parent, rect_t{})
|
||||
}
|
||||
|
||||
HWPots::HWPots(Window* parent) :
|
||||
Window(parent, rect_t{0, 0, DIALOG_DEFAULT_WIDTH - 12, LV_SIZE_CONTENT})
|
||||
Window(parent, rect_t{0, 0, LV_PCT(100), LV_SIZE_CONTENT})
|
||||
{
|
||||
padAll(PAD_TINY);
|
||||
|
||||
@@ -100,7 +100,7 @@ HWPots::HWPots(Window* parent) :
|
||||
new StaticText(this, {P_TYP_X, -PAD_TINY, 0, 0}, STR_TYPE, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
new StaticText(this, {P_INV_X, -PAD_TINY, 0, 0}, STR_MENU_INVERT, COLOR_THEME_PRIMARY1_INDEX, FONT(XS));
|
||||
|
||||
coord_t yo = EdgeTxStyles::STD_FONT_HEIGHT - 2;
|
||||
coord_t yo = EdgeTxStyles::STD_FONT_HEIGHT - PAD_TINY;
|
||||
|
||||
auto max_pots = adcGetMaxInputs(ADC_INPUT_FLEX);
|
||||
for (int i = 0; i < max_pots; i++) {
|
||||
@@ -112,7 +112,7 @@ HWPots::HWPots(Window* parent) :
|
||||
// if (!globalData.flyskygimbals && (i >= (NUM_POTS - 2))) continue;
|
||||
// #endif
|
||||
new StaticText(this,
|
||||
rect_t{P_LBL_X, P_Y(i) + yo + PAD_MEDIUM, P_LBL_W, 0},
|
||||
rect_t{0, P_Y(i) + yo + PAD_MEDIUM, P_LBL_W, 0},
|
||||
adcGetInputLabel(ADC_INPUT_FLEX, i));
|
||||
|
||||
new HWInputEdit(this, (char*)analogGetCustomLabel(ADC_INPUT_FLEX, i),
|
||||
@@ -197,15 +197,15 @@ class HWSwitch
|
||||
public:
|
||||
HWSwitch(Window* parent, int swnum, coord_t y)
|
||||
{
|
||||
new SwitchDynamicLabel(parent, swnum, PAD_TINY, y + PAD_MEDIUM, SW_CTRL_W);
|
||||
new SwitchDynamicLabel(parent, swnum, PAD_TINY, y + PAD_SMALL, HWSwitches::SW_CTRL_W);
|
||||
new HWInputEdit(parent, (char*)switchGetCustomName(swnum), LEN_SWITCH_NAME,
|
||||
SW_CTRL_W + 8, y);
|
||||
HWSwitches::SW_CTRL_W + PAD_SMALL, y);
|
||||
|
||||
coord_t x = SW_CTRL_W * 2 + PAD_LARGE + PAD_MEDIUM;
|
||||
coord_t x = HWSwitches::SW_CTRL_W * 2 + PAD_SMALL * 2;
|
||||
|
||||
if (switchIsFlex(swnum)) {
|
||||
channel = new Choice(
|
||||
parent, {x, y, SW_CTRL_W, 0}, -1,
|
||||
parent, {x, y, HWSwitches::SW_CTRL_W, 0}, -1,
|
||||
adcGetMaxInputs(ADC_INPUT_FLEX) - 1,
|
||||
[=]() -> int { return switchGetFlexConfig(swnum); },
|
||||
[=](int newValue) {
|
||||
@@ -219,11 +219,11 @@ class HWSwitch
|
||||
if (val < 0) return STR_NONE;
|
||||
return adcGetInputLabel(ADC_INPUT_FLEX, val);
|
||||
});
|
||||
x += SW_CTRL_W + PAD_MEDIUM;
|
||||
x += HWSwitches::SW_CTRL_W + PAD_SMALL;
|
||||
}
|
||||
|
||||
sw_cfg = new Choice(
|
||||
parent, {x, y, SW_CTRL_W, 0},
|
||||
parent, {x, y, HWSwitches::SW_CTRL_W, 0},
|
||||
STR_SWTYPES, SWITCH_NONE, switchGetMaxType(swnum),
|
||||
[=]() -> int { return SWITCH_CONFIG(swnum); },
|
||||
[=](int newValue) {
|
||||
@@ -246,8 +246,7 @@ class HWSwitch
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(SW_CTRL_W, 86, 75, LS(86))
|
||||
static LAYOUT_VAL(SW_CTRL_H, 36, 36, 26)
|
||||
static constexpr coord_t SW_CTRL_H = EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE;
|
||||
|
||||
protected:
|
||||
Choice* channel = nullptr;
|
||||
@@ -255,19 +254,19 @@ class HWSwitch
|
||||
};
|
||||
|
||||
HWSwitches::HWSwitches(Window* parent) :
|
||||
Window(parent, rect_t{0, 0, DIALOG_DEFAULT_WIDTH - 12, LV_SIZE_CONTENT})
|
||||
Window(parent, rect_t{0, 0, LV_PCT(100), LV_SIZE_CONTENT})
|
||||
{
|
||||
padAll(PAD_TINY);
|
||||
|
||||
auto max_switches = switchGetMaxSwitches();
|
||||
for (int i = 0; i < max_switches; i++) {
|
||||
new HWSwitch(this, i, i * HWSwitch::SW_CTRL_H + PAD_TINY);
|
||||
new HWSwitch(this, i, i * HWSwitch::SW_CTRL_H + PAD_OUTLINE);
|
||||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
HWInputDialog<T>::HWInputDialog(const char* title) :
|
||||
BaseDialog(title, true)
|
||||
HWInputDialog<T>::HWInputDialog(const char* title, coord_t w) :
|
||||
BaseDialog(title, true, w)
|
||||
{
|
||||
new T(form);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "button.h"
|
||||
#include "dialog.h"
|
||||
#include "form.h"
|
||||
#include "toggleswitch.h"
|
||||
#include <vector>
|
||||
|
||||
class ToggleSwitch;
|
||||
@@ -34,24 +35,26 @@ class HWSticks : public Window
|
||||
HWSticks(Window* parent);
|
||||
};
|
||||
|
||||
struct HWPots : public Window
|
||||
class HWPots : public Window
|
||||
{
|
||||
public:
|
||||
HWPots(Window* parent);
|
||||
|
||||
// Absolute layout for Pots popup - due to performance issues with lv_textarea
|
||||
// in a flex layout
|
||||
static LAYOUT_VAL(P_LBL_X, 0, 0, 0)
|
||||
static LAYOUT_VAL3(P_LBL_W, (DIALOG_DEFAULT_WIDTH - 45) * 2 / 11, (DIALOG_DEFAULT_WIDTH - 18) * 13 / 21, (DIALOG_DEFAULT_WIDTH - 30) * 2 / 11, (DIALOG_DEFAULT_WIDTH - 67) * 2 / 11)
|
||||
static LAYOUT_VAL2(P_NM_X, P_LBL_X + P_LBL_W + PAD_MEDIUM, 100);
|
||||
static LAYOUT_VAL(P_NM_W, 70, 70, LS(70))
|
||||
static LAYOUT_VAL2(P_TYP_X, P_NM_X + P_NM_W, 32)
|
||||
static LAYOUT_VAL(P_TYP_W, 160, P_LBL_W, LS(160))
|
||||
static LAYOUT_VAL2(P_INV_X, P_TYP_X + P_TYP_W + PAD_MEDIUM, P_NM_X + P_NM_W + PAD_MEDIUM)
|
||||
static LAYOUT_VAL(P_INV_W, 52, 52, LS(52))
|
||||
static LAYOUT_VAL(P_ROW_H, 36, 72, 26)
|
||||
static LAYOUT_VAL(P_OFST_Y, 0, 36, 0)
|
||||
#define P_Y(i) (i * P_ROW_H + 2)
|
||||
static LAYOUT_ORIENTATION_SCALED(P_LBL_W, 60, 120)
|
||||
static constexpr coord_t P_NM_X = P_LBL_W + PAD_SMALL;
|
||||
static LAYOUT_VAL_SCALED(P_NM_W, 64)
|
||||
static LAYOUT_ORIENTATION(P_TYP_X, P_NM_X + P_NM_W + PAD_SMALL, LAYOUT_SCALE(32))
|
||||
static LAYOUT_ORIENTATION(P_TYP_W, LAYOUT_SCALE(160), P_LBL_W)
|
||||
static LAYOUT_ORIENTATION(P_INV_X, P_TYP_X + P_TYP_W + PAD_SMALL, P_NM_X + P_NM_W + PAD_SMALL)
|
||||
static constexpr coord_t P_INV_W = ToggleSwitch::TOGGLE_W;
|
||||
static LAYOUT_ORIENTATION(P_ROW_H, EdgeTxStyles::UI_ELEMENT_HEIGHT + PAD_OUTLINE, LAYOUT_SCALE(72))
|
||||
static LAYOUT_ORIENTATION_SCALED(P_OFST_Y, 0, 36)
|
||||
static LAYOUT_ORIENTATION(POTS_WINDOW_WIDTH,
|
||||
P_LBL_W + P_NM_W + P_TYP_W + P_INV_W + PAD_TINY * 2 + PAD_SMALL * 5 + PAD_SCROLL,
|
||||
P_LBL_W + P_NM_W + P_INV_W + PAD_TINY * 2 + PAD_SMALL * 4 + PAD_SCROLL)
|
||||
#define P_Y(i) (i * P_ROW_H + PAD_TINY)
|
||||
|
||||
protected:
|
||||
bool potsChanged;
|
||||
@@ -62,9 +65,12 @@ class HWSwitches : public Window
|
||||
{
|
||||
public:
|
||||
HWSwitches(Window* parent);
|
||||
|
||||
static LAYOUT_SIZE_SCALED(SW_CTRL_W, 86, 72)
|
||||
static constexpr coord_t SW_WINDOW_WIDTH = SW_CTRL_W * 4 + PAD_SMALL * 5 + PAD_TINY * 2 + PAD_SCROLL;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct HWInputDialog : public BaseDialog {
|
||||
HWInputDialog(const char* title = nullptr);
|
||||
HWInputDialog(const char* title, coord_t w = DIALOG_DEFAULT_WIDTH);
|
||||
};
|
||||
|
||||
@@ -34,28 +34,28 @@ class PreviewWindow : public Window
|
||||
|
||||
void setColorList(std::vector<ColorEntry> colorList);
|
||||
|
||||
static LAYOUT_VAL(ICON_X1, 5, 5, LS(5))
|
||||
static LAYOUT_VAL(ICON_X2, 38, 38, LS(38))
|
||||
static LAYOUT_VAL(ICON_X3, 71, 71, LS(71))
|
||||
static LAYOUT_VAL(ICON_Y, 5, 5, LS(5))
|
||||
static LAYOUT_VAL(DATE_XO, 44, 44, LS(44))
|
||||
static LAYOUT_VAL(CBT_Y, 44, 44, LS(44))
|
||||
static LAYOUT_VAL(CBT_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(CB1_X, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(CB2_X, 154, 154, LS(154))
|
||||
static LAYOUT_VAL(CB_Y, 40, 40, LS(40))
|
||||
static LAYOUT_VAL(CB_W, 50, 50, LS(50))
|
||||
static LAYOUT_VAL(BTN_X, 210, 210, LS(210))
|
||||
static LAYOUT_VAL(BTN1_Y, 40, 40, LS(40))
|
||||
static LAYOUT_VAL(BTN2_Y, 79, 79, LS(79))
|
||||
static LAYOUT_VAL(BTN_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(TRIM_Y, 79, 79, LS(79))
|
||||
static LAYOUT_VAL(SLIDER_Y, 101, 101, LS(101))
|
||||
static LAYOUT_VAL(TXT1_Y, 122, 122, LS(122))
|
||||
static LAYOUT_VAL(TXT2_Y, 144, 144, LS(144))
|
||||
static LAYOUT_VAL(TXT_W, 100, 100, LS(100))
|
||||
static LAYOUT_VAL(EDT2_X, 114, 114, LS(114))
|
||||
static LAYOUT_VAL(EDT_Y, 170, 170, LS(170))
|
||||
static LAYOUT_VAL_SCALED(ICON_X1, 5)
|
||||
static LAYOUT_VAL_SCALED(ICON_X2, 38)
|
||||
static LAYOUT_VAL_SCALED(ICON_X3, 71)
|
||||
static LAYOUT_VAL_SCALED(ICON_Y, 5)
|
||||
static LAYOUT_VAL_SCALED(DATE_XO, 44)
|
||||
static LAYOUT_VAL_SCALED(CBT_Y, 44)
|
||||
static LAYOUT_VAL_SCALED(CBT_W, 100)
|
||||
static LAYOUT_VAL_SCALED(CB1_X, 100)
|
||||
static LAYOUT_VAL_SCALED(CB2_X, 154)
|
||||
static LAYOUT_VAL_SCALED(CB_Y, 40)
|
||||
static LAYOUT_VAL_SCALED(CB_W, 50)
|
||||
static LAYOUT_VAL_SCALED(BTN_X, 210)
|
||||
static LAYOUT_VAL_SCALED(BTN1_Y, 40)
|
||||
static LAYOUT_VAL_SCALED(BTN2_Y, 79)
|
||||
static LAYOUT_VAL_SCALED(BTN_W, 100)
|
||||
static LAYOUT_VAL_SCALED(TRIM_Y, 79)
|
||||
static LAYOUT_VAL_SCALED(SLIDER_Y, 101)
|
||||
static LAYOUT_VAL_SCALED(TXT1_Y, 122)
|
||||
static LAYOUT_VAL_SCALED(TXT2_Y, 144)
|
||||
static LAYOUT_VAL_SCALED(TXT_W, 100)
|
||||
static LAYOUT_VAL_SCALED(EDT2_X, 114)
|
||||
static LAYOUT_VAL_SCALED(EDT_Y, 170)
|
||||
|
||||
protected:
|
||||
tmr10ms_t ticks;
|
||||
|
||||
@@ -58,8 +58,8 @@ class StickCalibrationWindow : public Window
|
||||
lv_obj_set_pos(calibStick->getLvObj(), dx, dy);
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(CAL_CTR, 9, 9, LS(9))
|
||||
static LAYOUT_VAL(CAL_SIZ, 68, 68, LS(68))
|
||||
static LAYOUT_VAL_SCALED(CAL_CTR, 9)
|
||||
static LAYOUT_VAL_SCALED(CAL_SIZ, 68)
|
||||
|
||||
protected:
|
||||
uint8_t stickX, stickY;
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#define STATSDEPTH 8 // ideally a value of power of 2
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
|
||||
static const lv_coord_t col_dsc[] = {
|
||||
LV_GRID_FR(32), LV_GRID_FR(40), LV_GRID_FR(40), LV_GRID_FR(40), LV_GRID_FR(40),
|
||||
@@ -58,9 +58,9 @@ class AnaViewWindow : public Window
|
||||
grid(col_dsc, row_dsc, PAD_ZERO)
|
||||
{
|
||||
parent->padAll(PAD_ZERO);
|
||||
padAll(PAD_SMALL);
|
||||
padLeft(PAD_LARGE);
|
||||
padRight(PAD_LARGE);
|
||||
padAll(PAD_TINY);
|
||||
padLeft(PAD_SMALL);
|
||||
padRight(PAD_SMALL);
|
||||
setFlexLayout();
|
||||
|
||||
line = newLine(grid);
|
||||
@@ -78,13 +78,13 @@ class AnaViewWindow : public Window
|
||||
if (i >= pot_offset && (POT_CONFIG(i - pot_offset) == FLEX_NONE))
|
||||
continue;
|
||||
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
if ((i & 1) == 0) line = newLine(grid);
|
||||
#else
|
||||
line = newLine(grid);
|
||||
#endif
|
||||
|
||||
lv_obj_set_style_pad_column(line->getLvObj(), 8, 0);
|
||||
lv_obj_set_style_pad_column(line->getLvObj(), PAD_SMALL, LV_PART_MAIN);
|
||||
if (((adcGetInputMask() & (1 << i)) != 0) && i < adcGetMaxInputs(ADC_INPUT_MAIN))
|
||||
sprintf(s, "D%d :", i + 1);
|
||||
else
|
||||
@@ -111,7 +111,7 @@ class AnaViewWindow : public Window
|
||||
std::to_string((int16_t)column4(i));
|
||||
});
|
||||
etx_obj_add_style(lbl->getLvObj(), (column4size() == 2) ? styles->text_align_left : styles->text_align_right, LV_PART_MAIN);
|
||||
#if !PORTRAIT_LCD
|
||||
#if LANDSCAPE
|
||||
lv_obj_set_grid_cell(lbl->getLvObj(), LV_GRID_ALIGN_STRETCH,
|
||||
3 + (i & 1) * 5, column4size(),
|
||||
LV_GRID_ALIGN_CENTER, 0, 1);
|
||||
@@ -166,8 +166,8 @@ class AnaCalibratedViewWindow : public AnaViewWindow
|
||||
lv_obj_add_flag(touchLines[1], LV_OBJ_FLAG_HIDDEN);
|
||||
|
||||
line = newLine(grid);
|
||||
#if PORTRAIT_LCD
|
||||
line->padTop(20);
|
||||
#if PORTRAIT
|
||||
line->padTop(PAD_LARGE * 2 + PAD_SMALL);
|
||||
#else
|
||||
line->padTop(PAD_TINY);
|
||||
#endif
|
||||
@@ -195,7 +195,7 @@ class AnaCalibratedViewWindow : public AnaViewWindow
|
||||
lv_obj_set_grid_cell(lbl2->getLvObj(), LV_GRID_ALIGN_STRETCH, 0, 5,
|
||||
LV_GRID_ALIGN_CENTER, 0, 1);
|
||||
|
||||
#if PORTRAIT_LCD
|
||||
#if PORTRAIT
|
||||
line = newLine(grid);
|
||||
#endif
|
||||
lbl2 = new StaticText(line, rect_t{},
|
||||
@@ -241,7 +241,7 @@ class AnaCalibratedViewWindow : public AnaViewWindow
|
||||
}
|
||||
#endif
|
||||
|
||||
static LAYOUT_VAL2(TSI2CEventsCol, 5, 0)
|
||||
static LAYOUT_SIZE(TSI2CEventsCol, 5, 0)
|
||||
|
||||
protected:
|
||||
#if defined(HARDWARE_TOUCH)
|
||||
@@ -447,7 +447,7 @@ class AnaMinMaxViewWindow : public AnaViewWindow
|
||||
AnaViewWindow::checkEvents();
|
||||
}
|
||||
|
||||
static LAYOUT_VAL2(GRIDCOLS, 10, 5)
|
||||
static LAYOUT_SIZE(GRIDCOLS, 10, 5)
|
||||
};
|
||||
|
||||
class AnaCalibratedViewPage : public PageTab
|
||||
|
||||
@@ -31,9 +31,7 @@
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
#include "color_list.h"
|
||||
#include "hal/rgbleds.h"
|
||||
#endif
|
||||
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
uint16_t getLedColor(int i)
|
||||
{
|
||||
// Convert RBG888 to RGB565
|
||||
@@ -47,13 +45,13 @@ uint16_t getLedColor(int i)
|
||||
|
||||
class RadioCustSwitchesDiagsWindow : public Window
|
||||
{
|
||||
static LAYOUT_VAL(FS_1ST_COLUMN, 95, 62, LS(95))
|
||||
static LAYOUT_VAL(FS_2ND_COLUMN, 160, 107, LS(160))
|
||||
static LAYOUT_VAL(FS_3RD_COLUMN, 260, 173, LS(260))
|
||||
static LAYOUT_VAL(FS_LBL_WIDTH, 60, 40, LS(60))
|
||||
static LAYOUT_VAL_SCALED(FS_1ST_COLUMN, 95)
|
||||
static LAYOUT_VAL_SCALED(FS_2ND_COLUMN, 160)
|
||||
static LAYOUT_VAL_SCALED(FS_3RD_COLUMN, 260)
|
||||
static LAYOUT_VAL_SCALED(FS_LBL_WIDTH, 60)
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
static LAYOUT_VAL(FS_COLOR_WIDTH, 30, 30, LS(30))
|
||||
static LAYOUT_VAL(FS_COLOR_HEIGHT, 15, 15, LS(15))
|
||||
static LAYOUT_VAL_SCALED(FS_COLOR_WIDTH, 30)
|
||||
static LAYOUT_VAL_SCALED(FS_COLOR_HEIGHT, 15)
|
||||
ColorSwatch* colorBox[NUM_FUNCTIONS_SWITCHES];
|
||||
#endif
|
||||
|
||||
@@ -93,15 +91,13 @@ class RadioCustSwitchesDiagsWindow : public Window
|
||||
}
|
||||
|
||||
#if defined(FUNCTION_SWITCHES_RGB_LEDS)
|
||||
void checkEvents() {
|
||||
void checkEvents() override {
|
||||
Window::checkEvents();
|
||||
for (uint8_t i = 0; i < NUM_FUNCTIONS_SWITCHES; i += 1) {
|
||||
colorBox[i]->setColor(getLedColor(i));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
void RadioCustSwitchesDiagsPage::buildHeader(Window *window)
|
||||
|
||||
@@ -57,27 +57,27 @@ class RadioKeyDiagsWindow : public Window
|
||||
{
|
||||
padAll(PAD_ZERO);
|
||||
|
||||
coord_t colWidth = (width() - 24) / 3;
|
||||
coord_t colHeight = height() - 12;
|
||||
coord_t colWidth = (width() - PAD_LARGE * 3) / 3;
|
||||
coord_t colHeight = height() - PAD_LARGE - PAD_SMALL;
|
||||
|
||||
Window* form;
|
||||
coord_t x = 6;
|
||||
coord_t x = PAD_MEDIUM;
|
||||
|
||||
if (keysGetMaxKeys() > 0) {
|
||||
form = new Window(parent, rect_t{x, 6, colWidth, colHeight});
|
||||
form = new Window(parent, rect_t{x, PAD_MEDIUM, colWidth, colHeight});
|
||||
etx_txt_color(form->getLvObj(), COLOR_THEME_PRIMARY1_INDEX);
|
||||
addKeys(form);
|
||||
x += colWidth + 6;
|
||||
x += colWidth + PAD_MEDIUM;
|
||||
} else {
|
||||
colWidth = (width() - 18) / 2;
|
||||
colWidth = (width() - PAD_MEDIUM * 3) / 2;
|
||||
}
|
||||
|
||||
form = new Window(parent, rect_t{x, 6, colWidth, colHeight});
|
||||
form = new Window(parent, rect_t{x, PAD_MEDIUM, colWidth, colHeight});
|
||||
etx_txt_color(form->getLvObj(), COLOR_THEME_PRIMARY1_INDEX);
|
||||
addSwitches(form);
|
||||
x += colWidth + 6;
|
||||
x += colWidth + PAD_MEDIUM;
|
||||
|
||||
form = new Window(parent, rect_t{x, 6, colWidth, colHeight});
|
||||
form = new Window(parent, rect_t{x, PAD_MEDIUM, colWidth, colHeight});
|
||||
etx_txt_color(form->getLvObj(), COLOR_THEME_PRIMARY1_INDEX);
|
||||
addTrims(form);
|
||||
}
|
||||
@@ -105,7 +105,7 @@ class RadioKeyDiagsWindow : public Window
|
||||
|
||||
lbl = lv_label_create(obj);
|
||||
lv_label_set_text(lbl, "");
|
||||
lv_obj_set_pos(lbl, 70, i * EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
lv_obj_set_pos(lbl, KVAL_X, i * EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
keyValues[i] = lbl;
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ class RadioKeyDiagsWindow : public Window
|
||||
|
||||
reValue = lv_label_create(obj);
|
||||
lv_label_set_text(reValue, "");
|
||||
lv_obj_set_pos(reValue, 70, (i + 1) * EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
lv_obj_set_pos(reValue, KVAL_X, (i + 1) * EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -150,26 +150,26 @@ class RadioKeyDiagsWindow : public Window
|
||||
lv_obj_set_pos(lbl, 0, 0);
|
||||
lbl = lv_label_create(obj);
|
||||
lv_label_set_text(lbl, "-");
|
||||
lv_obj_set_pos(lbl, 62, 0);
|
||||
lv_obj_set_pos(lbl, TRIM_MINUS_X, 0);
|
||||
lbl = lv_label_create(obj);
|
||||
lv_label_set_text(lbl, "+");
|
||||
lv_obj_set_pos(lbl, 75, 0);
|
||||
lv_obj_set_pos(lbl, TRIM_PLUS_X, 0);
|
||||
|
||||
// TRIMS
|
||||
for (uint8_t i = 0; i < keysGetMaxTrims(); i++) {
|
||||
lbl = lv_label_create(obj);
|
||||
formatNumberAsString(s, 10, i + 1, 0, 10, "T");
|
||||
lv_label_set_text(lbl, s);
|
||||
lv_obj_set_pos(lbl, 4, i * EdgeTxStyles::STD_FONT_HEIGHT + EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
lv_obj_set_pos(lbl, PAD_SMALL, i * EdgeTxStyles::STD_FONT_HEIGHT + EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
|
||||
lbl = lv_label_create(obj);
|
||||
lv_label_set_text(lbl, "");
|
||||
lv_obj_set_pos(lbl, 60, i * EdgeTxStyles::STD_FONT_HEIGHT + EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
lv_obj_set_pos(lbl, TRIM_MINUS_X - PAD_TINY, i * EdgeTxStyles::STD_FONT_HEIGHT + EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
trimValues[i * 2] = lbl;
|
||||
|
||||
lbl = lv_label_create(obj);
|
||||
lv_label_set_text(lbl, "");
|
||||
lv_obj_set_pos(lbl, 75, i * EdgeTxStyles::STD_FONT_HEIGHT + EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
lv_obj_set_pos(lbl, TRIM_PLUS_X, i * EdgeTxStyles::STD_FONT_HEIGHT + EdgeTxStyles::STD_FONT_HEIGHT);
|
||||
trimValues[i * 2 + 1] = lbl;
|
||||
}
|
||||
}
|
||||
@@ -228,6 +228,10 @@ class RadioKeyDiagsWindow : public Window
|
||||
#endif
|
||||
lv_obj_t **switchValues = nullptr;
|
||||
lv_obj_t **trimValues = nullptr;
|
||||
|
||||
static LAYOUT_VAL_SCALED(KVAL_X, 70)
|
||||
static LAYOUT_VAL_SCALED(TRIM_MINUS_X, 62)
|
||||
static LAYOUT_VAL_SCALED(TRIM_PLUS_X, 75)
|
||||
};
|
||||
|
||||
void RadioKeyDiagsPage::buildHeader(Window *window)
|
||||
|
||||
@@ -33,8 +33,6 @@ class GhostModuleConfigWindow : public Window
|
||||
GhostModuleConfigWindow(Window* parent, const rect_t& rect) :
|
||||
Window(parent, rect)
|
||||
{
|
||||
constexpr coord_t yOffset = 20;
|
||||
constexpr coord_t lineSpacing = 25;
|
||||
coord_t h = getFontHeight(FONT(L));
|
||||
|
||||
for (int i = 0; i < GHST_MENU_LINES; i += 1) {
|
||||
@@ -60,8 +58,10 @@ class GhostModuleConfigWindow : public Window
|
||||
}
|
||||
}
|
||||
|
||||
static LAYOUT_VAL(xOffset, 140, 20, LS(140))
|
||||
static LAYOUT_VAL(xOffset2, 260, 140, LS(260))
|
||||
static LAYOUT_SIZE_SCALED(xOffset, 140, 20)
|
||||
static LAYOUT_VAL_SCALED(yOffset, 20)
|
||||
static LAYOUT_SIZE_SCALED(xOffset2, 260, 140)
|
||||
static LAYOUT_VAL_SCALED(lineSpacing, 25)
|
||||
|
||||
protected:
|
||||
StaticText* menuLines[GHST_MENU_LINES][2];
|
||||
|
||||
@@ -189,8 +189,8 @@ void RadioHardwarePage::build(Window* window)
|
||||
new SetupButtonGroup(window, {0, 0, LCD_W - padding * 2, 0}, STR_INPUTS, BTN_COLS, PAD_ZERO, {
|
||||
{STR_CALIBRATION, []() { new RadioCalibrationPage(); }},
|
||||
{STR_STICKS, []() { new HWInputDialog<HWSticks>(STR_STICKS); }},
|
||||
{STR_POTS, []() { new HWInputDialog<HWPots>(STR_POTS); }},
|
||||
{STR_SWITCHES, []() { new HWInputDialog<HWSwitches>(STR_SWITCHES); }},
|
||||
{STR_POTS, []() { new HWInputDialog<HWPots>(STR_POTS, HWPots::POTS_WINDOW_WIDTH); }},
|
||||
{STR_SWITCHES, []() { new HWInputDialog<HWSwitches>(STR_SWITCHES, HWSwitches::SW_WINDOW_WIDTH); }},
|
||||
});
|
||||
|
||||
// Debugs
|
||||
|
||||
@@ -32,8 +32,8 @@ class RadioHardwarePage : public PageTab
|
||||
|
||||
void build(Window* window) override;
|
||||
|
||||
static LAYOUT_VAL2(BTN_COLS, 4, 3)
|
||||
static LAYOUT_VAL2(FS_BTN_COLS, 2, 2)
|
||||
static LAYOUT_SIZE(BTN_COLS, 4, 3)
|
||||
static LAYOUT_SIZE(FS_BTN_COLS, 2, 2)
|
||||
|
||||
protected:
|
||||
void cleanup() override;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user