diff --git a/src/pages/128x64x1/about_page.c b/src/pages/128x64x1/about_page.c
index 36aa998579..8292316602 100644
--- a/src/pages/128x64x1/about_page.c
+++ b/src/pages/128x64x1/about_page.c
@@ -13,21 +13,10 @@
along with Deviation. If not, see .
*/
-#ifndef OVERRIDE_PLACEMENT
#include "common.h"
#include "pages.h"
#include "gui/gui.h"
-enum {
- ROW_1_X = 0,
- ROW_1_Y = 15,
- ROW_2_X = 0,
- ROW_2_Y = 30,
- ROW_3_X = 0,
- ROW_3_Y = 45
-};
-#endif //OVERRIDE_PLACEMENT
-
static struct about_obj * const gui = &gui_objs.u.about;
void PAGE_AboutInit(int page)
@@ -35,7 +24,9 @@ void PAGE_AboutInit(int page)
(void)page;
PAGE_ShowHeader(PAGE_GetName(PAGEID_ABOUT));
- GUI_CreateLabelBox(&gui->label[0], ROW_1_X, ROW_1_Y, LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, "www.deviationtx.com");
- GUI_CreateLabelBox(&gui->label[1], ROW_2_X, ROW_2_Y, LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, GUI_Localize, NULL, _tr_noop("Deviation FW version:"));
- GUI_CreateLabelBox(&gui->label[2], ROW_3_X, ROW_3_Y, LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, GUI_Localize, NULL, _tr_noop(DeviationVersion));
+ BeginGridLayout(4, 1) {
+ GUI_CreateLabelBox(&gui->label[0], Grid_XY(1, 1), LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, "www.deviationtx.com");
+ GUI_CreateLabelBox(&gui->label[1], Grid_XY(2, 1), LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, GUI_Localize, NULL, _tr_noop("Deviation FW version:"));
+ GUI_CreateLabelBox(&gui->label[2], Grid_XY(3, 1), LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, GUI_Localize, NULL, _tr_noop(DeviationVersion));
+ }
}
diff --git a/src/pages/320x240x16/lang_select.c b/src/pages/320x240x16/lang_select.c
index c02e2ec76d..8c710ae40c 100644
--- a/src/pages/320x240x16/lang_select.c
+++ b/src/pages/320x240x16/lang_select.c
@@ -20,7 +20,6 @@
#include
#include "../common/_lang_select.c"
-#define LINE_HEIGHT 24
static struct lang_obj * const gui = &gui_objs.u.lang;
static int row_cb(int absrow, int relrow, int y, void *data)
diff --git a/src/pages/320x240x16/menus.c b/src/pages/320x240x16/menus.c
index f36036d60b..2912fb3a49 100644
--- a/src/pages/320x240x16/menus.c
+++ b/src/pages/320x240x16/menus.c
@@ -26,9 +26,6 @@ enum {
MENU_X = 20,
MENU_WIDTH = (LCD_WIDTH - MENU_X * 2),
};
-#define HEADER_HEIGHT (LCD_HEIGHT==240 ? 37 : 40)
-#define LINE_SPACE 29
-#define LINE_HEIGHT 20
#include "../common/_menus.c"
static void menu_press_cb(guiObject_t *obj, s8 press_type, const void *data)
diff --git a/src/pages/320x240x16/model_page.c b/src/pages/320x240x16/model_page.c
index 9b4aa94647..baa3549b96 100644
--- a/src/pages/320x240x16/model_page.c
+++ b/src/pages/320x240x16/model_page.c
@@ -44,7 +44,6 @@ static const char *_mixermode_cb(guiObject_t *obj, int dir, void *data)
void PAGE_ModelInit(int page)
{
(void)page;
- u8 row;
mp->last_mixermode = Model.mixer_mode;
mp->last_txpower = Model.tx_power;
@@ -52,57 +51,42 @@ void PAGE_ModelInit(int page)
PAGE_SetModal(0);
PAGE_ShowHeader(PAGE_GetName(PAGEID_MODEL));
- enum {
- COL1 = (8 + ((LCD_WIDTH - 320) / 2)),
- COL2 = (COL1 + 128),
- COL3 = (COL1 + 228),
- ROW1 = (44 + ((LCD_HEIGHT - 240) / 2)),
- LABEL_WIDTH = (COL2 - COL1),
- };
- row = ROW1;
- GUI_CreateLabelBox(&gui->filelbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("File"));
- GUI_CreateTextSelect(&gui->file, COL2, row, TEXTSELECT_96, file_press_cb, file_val_cb, NULL);
+ BeginGridLayout(9, 8) {
+ GUI_CreateLabelBox(&gui->filelbl, Grid_XY(1, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("File"));
+ GUI_CreateTextSelect(&gui->file, Grid_XY(1, 4), TEXTSELECT_96, file_press_cb, file_val_cb, NULL);
-#if HAS_STANDARD_GUI
- row+= 20;
- GUI_CreateLabelBox(&gui->guilbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Mixer GUI"));
- GUI_CreateTextSelect(&gui->guits, COL2, row, TEXTSELECT_96, NULL, _mixermode_cb, NULL);
-#endif
+ GUI_CreateLabelBox(&gui->namelbl, Grid_XY(2, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model name")); // use the same naming convention for devo8 and devo10
+ GUI_CreateButton(&gui->name, Grid_XY(2, 4), BUTTON_96x16, show_text_cb, _changename_cb, Model.name);
+ GUI_CreateButton(&gui->icon, Grid_XY(2, 7), BUTTON_64x16, show_text_cb, changeicon_cb, _tr("Icon"));
- row += 20;
- GUI_CreateLabelBox(&gui->namelbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model name")); // use the same naming convention for devo8 and devo10
- GUI_CreateButton(&gui->name, COL2, row, BUTTON_96x16, show_text_cb, _changename_cb, Model.name);
- GUI_CreateButton(&gui->icon, COL3, row, BUTTON_64x16, show_text_cb, changeicon_cb, _tr("Icon"));
+ GUI_CreateLabelBox(&gui->typelbl, Grid_XY(3, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model type"));
+ GUI_CreateTextSelect(&gui->type, Grid_XY(3, 4), TEXTSELECT_96, type_press_cb, type_val_cb, NULL);
- row += 20;
- GUI_CreateLabelBox(&gui->typelbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Model type"));
- GUI_CreateTextSelect(&gui->type, COL2, row, TEXTSELECT_96, type_press_cb, type_val_cb, NULL);
+ GUI_CreateLabelBox(&gui->ppmlbl, Grid_XY(4, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("PPM In"));
+ GUI_CreateTextSelect(&gui->ppm, Grid_XY(4, 4), TEXTSELECT_96, ppmin_press_cb, ppmin_select_cb, NULL);
- row += 24;
- GUI_CreateLabelBox(&gui->ppmlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("PPM In"));
- GUI_CreateTextSelect(&gui->ppm, COL2, row, TEXTSELECT_96, ppmin_press_cb, ppmin_select_cb, NULL);
+ GUI_CreateLabelBox(&gui->protolbl, Grid_XY(5, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Protocol"));
+ GUI_CreateTextSelect(&gui->proto, Grid_XY(5, 4), TEXTSELECT_96, proto_press_cb, protoselect_cb, NULL);
- row += 20;
- GUI_CreateLabelBox(&gui->protolbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Protocol"));
- GUI_CreateTextSelect(&gui->proto, COL2, row, TEXTSELECT_96, proto_press_cb, protoselect_cb, NULL);
+ GUI_CreateLabelBox(&gui->numchlbl, Grid_XY(6, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("# Channels"));
+ GUI_CreateTextSelect(&gui->numch, Grid_XY(6, 4), TEXTSELECT_96, NULL, numchanselect_cb, NULL);
- row += 20;
- GUI_CreateLabelBox(&gui->numchlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("# Channels"));
- GUI_CreateTextSelect(&gui->numch, COL2, row, TEXTSELECT_96, NULL, numchanselect_cb, NULL);
+ GUI_CreateLabelBox(&gui->pwrlbl, Grid_XY(7, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Tx power"));
+ GUI_CreateTextSelect(&gui->pwr, Grid_XY(7, 4), TEXTSELECT_96, NULL, powerselect_cb, NULL);
+ if (Model.fixed_id == 0)
+ strlcpy(mp->fixed_id, _tr("None"), sizeof(mp->fixed_id));
+ else
+ sprintf(mp->fixed_id, "%d", (int)Model.fixed_id);
+ GUI_CreateLabelBox(&gui->fixedidlbl, Grid_XY(8, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Fixed ID"));
+ GUI_CreateButton(&gui->fixedid, Grid_XY(8, 4), BUTTON_96x16, show_text_cb, fixedid_cb, mp->fixed_id);
+ GUI_CreateButton(&gui->bind, Grid_XY(8, 7), BUTTON_64x16, show_bindtext_cb, bind_cb, NULL);
- row += 24;
- GUI_CreateLabelBox(&gui->pwrlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Tx power"));
- GUI_CreateTextSelect(&gui->pwr, COL2, row, TEXTSELECT_96, NULL, powerselect_cb, NULL);
-
- row += 20;
- if(Model.fixed_id == 0)
- strlcpy(mp->fixed_id, _tr("None"), sizeof(mp->fixed_id));
- else
- sprintf(mp->fixed_id, "%d", (int)Model.fixed_id);
- GUI_CreateLabelBox(&gui->fixedidlbl, COL1, row, LABEL_WIDTH, 18, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Fixed ID"));
- GUI_CreateButton(&gui->fixedid, COL2, row, BUTTON_96x16, show_text_cb, fixedid_cb, mp->fixed_id);
- GUI_CreateButton(&gui->bind, COL3, row, BUTTON_64x16, show_bindtext_cb, bind_cb, NULL);
+ #if HAS_STANDARD_GUI
+ GUI_CreateLabelBox(&gui->guilbl, Grid_XY(9, 1), Grid_WH_Span(3, 1), &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Mixer GUI"));
+ GUI_CreateTextSelect(&gui->guits, Grid_XY(9, 4), TEXTSELECT_96, NULL, _mixermode_cb, NULL);
+ #endif
+ }
configure_bind_button();
}
diff --git a/src/pages/320x240x16/pages.h b/src/pages/320x240x16/pages.h
index 665a526b1a..bf464fad73 100644
--- a/src/pages/320x240x16/pages.h
+++ b/src/pages/320x240x16/pages.h
@@ -39,6 +39,10 @@ struct pagemem {
u8 modal_page;
};
+#define HEADER_HEIGHT (LCD_HEIGHT == 240 ? 37 : 40)
+#define LINE_SPACE 29
+#define LINE_HEIGHT 20
+
#define TOGGLE_FILE ("media/toggle" IMG_EXT)
#define MODELMENU_FILE ("media/modelmnu" IMG_EXT)
#define SPLASH_FILE ("media/splash" IMG_EXT)
diff --git a/src/pages/common/_pages.h b/src/pages/common/_pages.h
index c8943441d9..2665988aa8 100644
--- a/src/pages/common/_pages.h
+++ b/src/pages/common/_pages.h
@@ -25,6 +25,8 @@
#include "voiceconfig_page.h"
#include "scanner_page.h"
+#include "layout.h"
+
#define PAGE_NAME_MAX 10
#define PAGEDEF(id, init, event, exit, menu, name) id,
diff --git a/src/pages/common/layout.h b/src/pages/common/layout.h
new file mode 100644
index 0000000000..253cf605c6
--- /dev/null
+++ b/src/pages/common/layout.h
@@ -0,0 +1,23 @@
+#ifndef _LAYOUT_H_
+#define _LAYOUT_H_
+
+typedef struct _grid_layout_data {
+ int w, h, x, y;
+}GridData;
+
+#define BeginGridLayout(row, col) BeginGridLayout2(0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, row, col)
+
+#define BeginGridLayout2(startx, starty, width, height, row, col) \
+ unsigned _d = 1; \
+ for (const GridData _grid = { (width)/(col), (height)/(row), (startx), (starty)}; _d > 0 ; _d = 0 )
+
+#define Grid_XY(row, col) \
+ (_grid.x + _grid.w * ((col) - 1)), (_grid.y + _grid.h * ((row) - 1))
+
+#define Grid_WH() \
+ _grid.w, _grid.h
+
+#define Grid_WH_Span(span_w, span_h) \
+ _grid.w * span_w, _grid.h * span_h
+
+#endif // _LAYOUT_H_
diff --git a/src/pages/text/about_page.c b/src/pages/text/about_page.c
index 82a3ca2313..82a9a078a3 100644
--- a/src/pages/text/about_page.c
+++ b/src/pages/text/about_page.c
@@ -13,17 +13,4 @@
along with Deviation. If not, see .
*/
-#include "common.h"
-#include "pages.h"
-#include "gui/gui.h"
-
-#define OVERRIDE_PLACEMENT
-enum {
- ROW_1_X = 0,
- ROW_1_Y = 1*LINE_HEIGHT,
- ROW_2_X = 0,
- ROW_2_Y = 4 * LINE_HEIGHT,
- ROW_3_X = 0,
- ROW_3_Y = 5 * LINE_HEIGHT,
-};
#include "../128x64x1/about_page.c"