Skip to content

Commit 9e18721

Browse files
committed
Cleanup pagecfg
1 parent f84aa67 commit 9e18721

11 files changed

Lines changed: 90 additions & 118 deletions

File tree

src/config/model.c

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -392,18 +392,6 @@ static int parse_int_list(const char *ptr, void *vals, int max_count, int type)
392392
return max_count - count;
393393
}
394394

395-
static void create_element(struct elem *elem, int type, s16 *data)
396-
{
397-
//int x, int y, int src, int e0, int e1, int e2)
398-
ELEM_SET_X(*elem, data[0]);
399-
ELEM_SET_Y(*elem, data[1]);
400-
ELEM_SET_TYPE(*elem, type);
401-
elem->src = data[5];
402-
elem->extra[0] = data[2];
403-
elem->extra[1] = data[3];
404-
elem->extra[2] = data[4];
405-
}
406-
407395
static int layout_ini_handler(void* user, const char* section, const char* name, const char* value)
408396
{
409397
struct Model *m = (struct Model *)user;
@@ -453,20 +441,22 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
453441
return 1;
454442
#endif
455443
for (idx = 0; idx < NUM_ELEMS; idx++) {
456-
if (! ELEM_USED(Model.pagecfg2.elem[idx]))
444+
if (Model.pagecfg2.elem[idx].type == ELEM_NONE)
457445
break;
458446
}
459-
460447
if (idx == NUM_ELEMS) {
461448
printf("No free element available (max = %d)\n", NUM_ELEMS);
462449
return 1;
463450
}
451+
464452
int type;
465-
for (type = 0; type < ELEM_LAST; type++)
453+
for (type = ELEM_NONE + 1; type < ELEM_LAST; type++) {
466454
if(mapstrcasecmp(name, GetElemName(type)) == 0)
467455
break;
456+
}
468457
if (type == ELEM_LAST)
469458
return 1;
459+
470460
int count = 5;
471461
s16 data[6] = {0};
472462
const char *ptr = parse_partial_int_list(value, data, &count, S16);
@@ -476,12 +466,20 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
476466
printf("Could not parse coordinates from %s=%s\n", name,value);
477467
return 1;
478468
}
469+
470+
struct elem *cur_elem;
471+
cur_elem = &Model.pagecfg2.elem[idx];
472+
473+
memset(cur_elem, 0, sizeof(struct elem));
474+
cur_elem->x = data[0];
475+
cur_elem->y = data[1];
476+
cur_elem->type = type;
477+
479478
switch(type) {
480479
//case ELEM_MODEL: //x, y
481480
case ELEM_VTRIM: //x, y, src
482481
case ELEM_HTRIM: //x, y, src
483-
data[5] = data[2];
484-
data[2] = 0;
482+
cur_elem->src = data[2];
485483
break;
486484
case ELEM_SMALLBOX: //x, y, src
487485
case ELEM_BIGBOX: //x. y. src
@@ -522,7 +520,7 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
522520
}
523521
if (src == -1)
524522
src = 0;
525-
data[5] = src;
523+
cur_elem->src = src;
526524
break;
527525
}
528526
case ELEM_BAR: //x, y, src
@@ -532,24 +530,28 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
532530
u8 src = get_source(section, ptr);
533531
if (src < NUM_INPUTS)
534532
src = 0;
535-
data[5] = src - NUM_INPUTS;
533+
cur_elem->src = src - NUM_INPUTS;
536534
break;
537535
}
538536
case ELEM_TOGGLE: //x, y, tgl0, tgl1, tgl2, src
539537
{
540538
if(count)
541539
return 1;
540+
cur_elem->extra.ico[0] = data[2];
541+
cur_elem->extra.ico[1] = data[3];
542+
cur_elem->extra.ico[2] = data[4];
543+
542544
for (int j = 0; j <= NUM_SOURCES; j++) {
543545
char cmp[10];
544546
if(mapstrcasecmp(INPUT_SourceNameAbbrevSwitchReal(cmp, j), ptr+1) == 0) {
545-
data[5] = j;
547+
cur_elem->src = j;
546548
break;
547549
}
548550
}
549551
break;
550552
}
551553
}
552-
create_element(&m->pagecfg2.elem[idx], type, data);
554+
553555
return 1;
554556
}
555557

@@ -1382,12 +1384,13 @@ u8 CONFIG_WriteModel(u8 model_num) {
13821384
}
13831385
fprintf(fh, "[%s]\n", SECTION_GUI);
13841386
for(idx = 0; idx < NUM_ELEMS; idx++) {
1385-
if (! ELEM_USED(Model.pagecfg2.elem[idx]))
1387+
struct elem *cur_elem = &Model.pagecfg2.elem[idx];
1388+
if (cur_elem->type == ELEM_NONE)
13861389
break;
1387-
int src = Model.pagecfg2.elem[idx].src;
1388-
int x = ELEM_X(Model.pagecfg2.elem[idx]);
1389-
int y = ELEM_Y(Model.pagecfg2.elem[idx]);
1390-
int type = ELEM_TYPE(Model.pagecfg2.elem[idx]);
1390+
int src = cur_elem->src;
1391+
int x = cur_elem->x;
1392+
int y = cur_elem->y;
1393+
int type = cur_elem->type;
13911394
const char *elename = GetElemName(type);
13921395
switch(type) {
13931396
case ELEM_SMALLBOX:
@@ -1400,9 +1403,9 @@ u8 CONFIG_WriteModel(u8 model_num) {
14001403
break;
14011404
case ELEM_TOGGLE:
14021405
fprintf(fh, "%s=%d,%d,%d,%d,%d,%s\n", elename, x, y,
1403-
Model.pagecfg2.elem[idx].extra[0],
1404-
Model.pagecfg2.elem[idx].extra[1],
1405-
INPUT_NumSwitchPos(src) == 2 ? 0 : Model.pagecfg2.elem[idx].extra[2],
1406+
cur_elem->extra.ico[0],
1407+
cur_elem->extra.ico[1],
1408+
INPUT_NumSwitchPos(src) == 2 ? 0 : cur_elem->extra.ico[2],
14061409
INPUT_SourceNameAbbrevSwitchReal(file, src));
14071410
break;
14081411
case ELEM_HTRIM:
@@ -1498,7 +1501,7 @@ u8 CONFIG_ReadModel(u8 model_num) {
14981501
if (CONFIG_IniParse(file, ini_handler, &Model)) {
14991502
printf("Failed to parse Model file: %s\n", file);
15001503
}
1501-
if (! ELEM_USED(Model.pagecfg2.elem[0]))
1504+
if (Model.pagecfg2.elem[0].type == ELEM_NONE)
15021505
CONFIG_ReadLayout("layout/default.ini");
15031506
if(! PROTOCOL_HasPowerAmp(Model.protocol))
15041507
Model.tx_power = TXPOWER_150mW;

src/config/pagecfg.h

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,53 +19,19 @@ enum BarSize {
1919
BARS_LAST,
2020
};
2121

22-
struct elem_xy {
22+
struct elem {
2323
u16 x;
2424
u16 y;
25-
};
26-
struct elem_trim {
27-
struct elem_xy pos;
28-
u8 src;
29-
u8 is_vert;
30-
};
31-
struct elem_toggle {
32-
struct elem_xy pos;
33-
u8 src;
34-
u8 ico[3];
35-
};
36-
struct elem_box {
37-
struct elem_xy pos;
3825
u8 src;
3926
u8 type;
27+
union {
28+
// for vert
29+
// u8 is_vert;
30+
// for toggle
31+
u8 ico[3];
32+
}extra;
4033
};
41-
struct elem_modelico {
42-
struct elem_xy pos;
43-
};
44-
struct elem_bar {
45-
struct elem_xy pos;
46-
u8 src;
47-
};
48-
49-
struct elem {
50-
u8 blob[3];
51-
u8 src;
52-
u8 extra[3];
53-
u8 padding_1[1];
54-
};
55-
56-
#define ELEM_X(elem) (*((u32 *)(&(elem))) & 0x1FF)
57-
#define ELEM_Y(elem) ((*((u32 *)(&(elem))) >> 9) & 0x1FF)
58-
#define ELEM_USED(elem) (*((u32 *)(&(elem))) & 0x3FFFF)
59-
#define ELEM_TYPE(elem) ((*((u32 *)(&(elem))) >> 18) & 0x0F)
60-
#define ELEM_SET_X(elem, x) *((u32 *)(&(elem))) = ((*((u32 *)(&(elem))) & ~0x1FF) | (x))
61-
#define ELEM_SET_Y(elem, y) *((u32 *)(&(elem))) = ((*((u32 *)(&(elem))) & ~(0x1FF << 9)) | ((y) << 9))
62-
#define ELEM_SET_TYPE(elem, type) *((u32 *)(&(elem))) = ((*((u32 *)(&(elem))) & ~(0x0F << 18)) | ((type) << 18))
6334

64-
#define ELEM_ICO(elem, j) ((elem).extra[j])
65-
//#define ELEM_TRIM_IS_VERT(elem) (*((u32 *)((elem).blob)) & (1 << 22))
66-
//#define ELEM_BOX_IS_BIG(elem) (*((u32 *)((elem).blob)) & (1 << 22))
67-
//#define ELEM_TRIM_SET_VERT(elem, val) ((*((u32 *)((elem).blob)) & ~(1 << 22)) | (val) << 22)
68-
//#define ELEM_BOX_SET_BIG(elem, val) ((*((u32 *)((elem).blob)) & ~(1 << 22)) | (val) << 22)
6935
//NUM_TRIM_ELEMS + NUM_BOX_ELEMS + NUM_BAR_ELEMS + NUM_TOGGLE_ELEMS
7036
#ifndef NUM_ELEMS
7137
#define NUM_ELEMS (6 + 8 + 8 + 4 + 1)
@@ -82,6 +48,7 @@ struct PageCfg2 {
8248
};
8349

8450
enum {
51+
ELEM_NONE,
8552
ELEM_SMALLBOX,
8653
ELEM_BIGBOX,
8754
ELEM_TOGGLE,

src/pages/128x64x1/main_config.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ static const char *cfglabel_cb(guiObject_t *obj, const void *data)
7777
{
7878
(void)obj;
7979
int i = (long)data;
80-
int type = ELEM_TYPE(pc->elem[i]);
80+
int type = pc->elem[i].type;
8181
int idx = elem_abs_to_rel(i);
8282
const char *str;
8383
switch(type) {
@@ -205,7 +205,7 @@ void show_config()
205205
{
206206
long count = 0;
207207
for (count = 0; count < NUM_ELEMS; count++) {
208-
if (! ELEM_USED(pc->elem[count]))
208+
if (pc->elem[count].type == ELEM_NONE)
209209
break;
210210
}
211211
#if HAS_LAYOUT_EDITOR

src/pages/128x64x1/toggle_select.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ static void show_iconsel_page(int SelectedIcon) {
100100
GUI_CreateLabelBox(&gui->togglelabel[i], LABEL_X, row, LABEL_W, LABEL_H, SelectedIcon == i ? &inverted : &DEFAULT_FONT, NULL, NULL, tglidx[i]);
101101
#ifdef HAS_CHAR_ICONS
102102
GUI_CreateLabelBox(&gui->toggleicon[i], ICON_X, row, ICON_W, LABEL_H, &DEFAULT_FONT, TGLICO_font_cb,
103-
NULL, (void *)(long)Model.pagecfg2.elem[tp->tglidx].extra[i]);
103+
NULL, (void *)(long)Model.pagecfg2.elem[tp->tglidx].extra.ico[i]);
104104
#else
105-
struct ImageMap img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[i]);
105+
struct ImageMap img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra.ico[i]);
106106
GUI_CreateImageOffset(&gui->toggleicon[i], ICON_X, row, ICON_W, LABEL_H, img.x_off, img.y_off, img.file,
107107
NULL, //SelectedIcon == 0 ? tglico_reset_cb : tglico_setpos_cb,
108108
(void *)(long)i);
@@ -121,7 +121,7 @@ static void show_iconsel_page(int SelectedIcon) {
121121
void PAGE_ToggleEditInit(int page)
122122
{
123123
tp->tglidx = page;
124-
memcpy(tp->tglicons, Model.pagecfg2.elem[tp->tglidx].extra, sizeof(tp->tglicons));
124+
memcpy(tp->tglicons, Model.pagecfg2.elem[tp->tglidx].extra.ico, sizeof(tp->tglicons));
125125
PAGE_SetActionCB(_action_cb);
126126
show_iconsel_page(0);
127127
}

src/pages/320x240x16/main_layout.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ void show_config()
319319
FullRedraw = draw_mode;
320320
}
321321
if(lp->selected_for_move >= 0) {
322-
type = ELEM_TYPE(pc->elem[lp->selected_for_move]);
322+
type = pc->elem[lp->selected_for_move].type;
323323
row_idx = elem_abs_to_rel(lp->selected_for_move);
324324
count = elem_get_count(type);
325325
}

src/pages/320x240x16/toggle_select.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static void show_icons(int SelectedIcon, int idx)
3434
{
3535
int x, y;
3636
struct ImageMap img;
37-
u8 cursel = Model.pagecfg2.elem[tp->tglidx].extra[SelectedIcon];
37+
u8 cursel = Model.pagecfg2.elem[tp->tglidx].extra.ico[SelectedIcon];
3838

3939
for(int i = 0; i < NUM_SYMBOL_ELEMS; i++) {
4040
y = 80 + (i / NUM_SYMBOL_COLS) * 40;
@@ -114,17 +114,17 @@ static void show_iconsel_page(int SelectedIcon)
114114
num_positions = 2;
115115

116116
GUI_CreateLabelBox(&gui->togglelabel[0], 94, 50, 30, 14, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Pos 0"));
117-
img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[0]);
117+
img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra.ico[0]);
118118
GUI_CreateImageOffset(&gui->toggleicon[0], 124, 40, TOGGLEICON_WIDTH, TOGGLEICON_HEIGHT, img.x_off, img.y_off, img.file,
119119
SelectedIcon == 0 ? tglico_reset_cb : tglico_setpos_cb, (void *)0L);
120120

121121
GUI_CreateLabelBox(&gui->togglelabel[1], 174, 50, 30, 14, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Pos 1"));
122-
img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[1]);
122+
img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra.ico[1]);
123123
GUI_CreateImageOffset(&gui->toggleicon[1], 204, 40, TOGGLEICON_WIDTH, TOGGLEICON_HEIGHT, img.x_off, img.y_off, img.file,
124124
SelectedIcon == 1 ? tglico_reset_cb : tglico_setpos_cb, (void *)1L);
125125
if (num_positions == 3) {
126126
GUI_CreateLabelBox(&gui->togglelabel[2], 254, 50, 30, 14, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Pos 2"));
127-
img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[2]);
127+
img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra.ico[2]);
128128
GUI_CreateImageOffset(&gui->toggleicon[2], 284, 40, TOGGLEICON_WIDTH, TOGGLEICON_HEIGHT, img.x_off, img.y_off, img.file,
129129
SelectedIcon == 2 ? tglico_reset_cb : tglico_setpos_cb, (void *)2L);
130130
}
@@ -137,7 +137,7 @@ static void show_iconsel_page(int SelectedIcon)
137137

138138
void PAGE_ToggleEditInit(int page) {
139139
tp->tglidx = page;
140-
memcpy(tp->tglicons, Model.pagecfg2.elem[tp->tglidx].extra, sizeof(tp->tglicons));
140+
memcpy(tp->tglicons, Model.pagecfg2.elem[tp->tglidx].extra.ico, sizeof(tp->tglicons));
141141
show_iconsel_page(0);
142142
}
143143

src/pages/common/_main_config.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
int elem_abs_to_rel(int idx)
1919
{
20-
unsigned type = ELEM_TYPE(pc->elem[idx]);
20+
unsigned type = pc->elem[idx].type;
2121
int nxt = -1;
2222
for (int i = 0; i < NUM_ELEMS-1; i++) {
2323
nxt = MAINPAGE_FindNextElem(type, nxt+1);
@@ -109,7 +109,7 @@ int create_element()
109109
int i;
110110
u16 x,y,w,h;
111111
for (i = 0; i < NUM_ELEMS; i++)
112-
if (! ELEM_USED(pc->elem[i]))
112+
if (pc->elem[i].type == ELEM_NONE)
113113
break;
114114
if (i == NUM_ELEMS)
115115
return -1;
@@ -118,9 +118,9 @@ int create_element()
118118
x = (LCD_WIDTH - w) / 2;
119119
y = (((LCD_HEIGHT - HEADER_Y) - h) / 2) + HEADER_Y;
120120
memset(&pc->elem[i], 0, sizeof(struct elem));
121-
ELEM_SET_X(pc->elem[i], x);
122-
ELEM_SET_Y(pc->elem[i], y);
123-
ELEM_SET_TYPE(pc->elem[i], lp->newelem);
121+
pc->elem[i].x = x;
122+
pc->elem[i].y = y;
123+
pc->elem[i].type = lp->newelem;
124124
return i;
125125
}
126126

@@ -150,7 +150,7 @@ static const char *dlgts_cb(guiObject_t *obj, int dir, void *data)
150150
{
151151
(void)obj;
152152
int idx = (long)data;
153-
int type = ELEM_TYPE(pc->elem[idx]);
153+
int type = pc->elem[idx].type;
154154
switch (type) {
155155
case ELEM_SMALLBOX:
156156
case ELEM_BIGBOX:
@@ -213,14 +213,14 @@ static void dlgbut_cb(struct guiObject *obj, const void *data)
213213
GUI_DrawBackground(x, y, w, h);
214214
#endif
215215
//Remove object
216-
int type = ELEM_TYPE(pc->elem[idx]);
216+
int type = pc->elem[idx].type;
217217
for(i = idx+1; i < NUM_ELEMS; i++) {
218-
if (! ELEM_USED(pc->elem[i]))
218+
if (pc->elem[i].type == ELEM_NONE)
219219
break;
220220
pc->elem[i-1] = pc->elem[i];
221221
}
222-
ELEM_SET_X(pc->elem[i-1], 0);
223-
ELEM_SET_Y(pc->elem[i-1], 0);
222+
pc->elem[i-1].x = 0;
223+
pc->elem[i-1].y = 0;
224224
idx = MAINPAGE_FindNextElem(type, 0);
225225
set_selected_for_move(idx);
226226
//close the dialog and reopen with new elements

src/pages/common/_main_layout.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void draw_elements()
4040
for (i = 0; i < NUM_ELEMS; i++) {
4141
if (! GetWidgetLoc(&pc->elem[i], &x, &y, &w, &h))
4242
break;
43-
int type = ELEM_TYPE(pc->elem[i]);
43+
int type = pc->elem[i].type;
4444
const char *(*strCallback)(guiObject_t *, const void *) = label_cb;
4545
void *data = (void *)(long)elem_abs_to_rel(i);
4646
int desc = 0;
@@ -158,8 +158,8 @@ void move_elem()
158158
h = LCD_HEIGHT - y;
159159
}
160160
GUI_DrawBackground(x, y, w, h);
161-
ELEM_SET_X(pc->elem[idx], lp->selected_x);
162-
ELEM_SET_Y(pc->elem[idx], lp->selected_y);
161+
pc->elem[idx].x = lp->selected_x;
162+
pc->elem[idx].y = lp->selected_y;
163163
draw_elements();
164164
select_for_move((guiLabel_t *)obj);
165165
}
@@ -169,10 +169,10 @@ void notify_cb(guiObject_t *obj)
169169
if ((guiLabel_t *)obj < gui->elem)
170170
return;
171171
int idx = guielem_idx(obj);
172-
lp->selected_x = ELEM_X(pc->elem[idx]);
173-
lp->selected_y = ELEM_Y(pc->elem[idx]);
174-
GetElementSize(ELEM_TYPE(pc->elem[idx]), &lp->selected_w, &lp->selected_h);
175-
if (ELEM_TYPE(pc->elem[idx]) == ELEM_MODELICO)
172+
lp->selected_x = pc->elem[idx].x;
173+
lp->selected_y = pc->elem[idx].y;
174+
GetElementSize(pc->elem[idx].type, &lp->selected_w, &lp->selected_h);
175+
if (pc->elem[idx].type == ELEM_MODELICO)
176176
AdjustIconSize(&lp->selected_x, &lp->selected_y, &lp->selected_h, &lp->selected_w);
177177
GUI_Redraw((guiObject_t *)&gui->xlbl);
178178
GUI_Redraw((guiObject_t *)&gui->x);

0 commit comments

Comments
 (0)