Skip to content

Commit c835a4b

Browse files
authored
Introduce GUI_Localize as string callback for label and button (#621)
* Introduce GUI_Localize as string callback for label and button In the localize build, GUI_Localize is a wrapper to _tr. In non-localized build, it is NULL, which results the same behavior as today. This also removes the assumption on that _tr returns a memory as static memory region. So this result will be used every time we need the localized string.
1 parent 212fcf1 commit c835a4b

39 files changed

Lines changed: 214 additions & 197 deletions

src/gui/button.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@ guiObject_t *GUI_CreateButton(guiButton_t *button, u16 x, u16 y, enum ButtonType
5050

5151
// bug fix: must set a default font, otherwise language other than English might not be displayed in some dialogs
5252
button->desc.font = DEFAULT_FONT.font;
53-
button->strCallback = strCallback;
53+
#if SUPPORT_MULTI_LANGUAGE
54+
if (strCallback == GUI_Localize)
55+
button->strCallback = _GUI_Localize;
56+
else
57+
#endif
58+
button->strCallback = strCallback;
5459
button->CallBack = CallBack;
5560
button->cb_data = cb_data;
5661
button->flags |= FLAG_ENABLE;

src/gui/gui.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,13 @@ void GUI_SelectionNotify(void (*notify_cb)(guiObject_t *obj))
830830
{
831831
select_notify = notify_cb;
832832
}
833+
834+
const char* _GUI_Localize(struct guiObject *obj, const void* str)
835+
{
836+
(void)obj;
837+
return _tr((const char*)str);
838+
}
839+
833840
#if HAS_TOUCH
834841
void GUI_ChangeSelectionOnTouch(int enable)
835842
{

src/gui/gui.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,4 +480,12 @@ void GUI_SelectionNotify(void (*notify_cb)(guiObject_t *obj));
480480
unsigned GUI_GetRemappedButtons();
481481
void GUI_ChangeSelectionOnTouch(int enable);
482482
int GUI_InTouch();
483+
484+
#if SUPPORT_MULTI_LANGUAGE
485+
const char* _GUI_Localize(struct guiObject *obj, const void* str);
486+
#define GUI_Localize (void*)1
487+
#else
488+
#define GUI_Localize NULL
489+
#endif
490+
483491
#endif /* GUI_H_ */

src/gui/label.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ guiObject_t *GUI_CreateLabelBox(guiLabel_t *label, u16 x, u16 y, u16 width, u16
4444
int underline = label->desc.style == LABEL_UNDERLINE;
4545
if ((width == 0 || height == 0) && ! underline)
4646
label->desc.style = LABEL_NO_BOX;
47-
label->strCallback = strCallback;
47+
#if SUPPORT_MULTI_LANGUAGE
48+
if (strCallback == GUI_Localize)
49+
label->strCallback = _GUI_Localize;
50+
else
51+
#endif
52+
label->strCallback = strCallback;
4853
label->pressCallback = pressCallback;
4954
label->cb_data = data;
5055
if (! label->desc.font)

src/pages/128x64x1/about_page.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ void PAGE_AboutInit(int page)
3535
(void)page;
3636
PAGE_ShowHeader(PAGE_GetName(PAGEID_ABOUT));
3737

38-
tempstring_cpy((const char *) _tr("Deviation FW version:"));
3938
GUI_CreateLabelBox(&gui->label[0], ROW_1_X, ROW_1_Y, LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, "www.deviationtx.com");
40-
GUI_CreateLabelBox(&gui->label[1], ROW_2_X, ROW_2_Y, LCD_WIDTH, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, tempstring);
41-
GUI_CreateLabelBox(&gui->label[2], ROW_3_X, ROW_3_Y, LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, NULL, NULL, _tr_noop(DeviationVersion));
39+
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:"));
40+
GUI_CreateLabelBox(&gui->label[2], ROW_3_X, ROW_3_Y, LCD_WIDTH, LINE_HEIGHT, &TINY_FONT, GUI_Localize, NULL, _tr_noop(DeviationVersion));
4241
}

src/pages/128x64x1/advanced/mixer_curves.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ void PAGE_EditCurvesInit(int page)
5959
edit->curve = *curve;
6060

6161
GUI_CreateTextSelectPlate(&gui->name, NAME_X, 0, NAME_W, HEADER_HEIGHT, &TEXTSEL_FONT, NULL, set_curvename_cb, NULL);
62-
GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT , NULL, okcancel_cb, (void *)_tr("Save"));
62+
GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT , GUI_Localize, okcancel_cb, _tr_noop("Save"));
6363
// Draw a line
6464
if (UNDERLINE)
6565
GUI_CreateRect(&gui->rect, 0, HEADER_WIDGET_HEIGHT, LCD_WIDTH, 1, &DEFAULT_FONT);
@@ -68,19 +68,19 @@ void PAGE_EditCurvesInit(int page)
6868
u8 y = space;
6969

7070
if (type >= CURVE_3POINT) {
71-
GUI_CreateLabelBox(&gui->smoothlbl, LABEL_X, y, LABEL1_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Smooth"));
71+
GUI_CreateLabelBox(&gui->smoothlbl, LABEL_X, y, LABEL1_W, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Smooth"));
7272
GUI_CreateTextSelectPlate(&gui->smooth, TEXTSEL1_X, y, TEXTSEL1_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_smooth_cb, NULL);
7373
y += space;
74-
GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL2_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Point"));
74+
GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL2_W, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Point"));
7575
GUI_CreateTextSelectPlate(&gui->point, TEXTSEL2_X, y, TEXTSEL2_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_pointnum_cb, NULL);
7676
} else if(type == CURVE_DEADBAND || type == CURVE_EXPO) {
77-
GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Pos/Neg"));
77+
GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Pos/Neg"));
7878
y += space;
7979
GUI_CreateTextSelectPlate(&gui->point, LABEL_X, y, LABEL_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_expopoint_cb, NULL);
8080
}
8181

8282
y += space;
83-
GUI_CreateLabelBox(&gui->valuelbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Value"));
83+
GUI_CreateLabelBox(&gui->valuelbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Value"));
8484
y += VALUE_Y_OFFSET;
8585
GUI_CreateTextSelectPlate(&gui->value, VALUE_X, y, LABEL_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_value_cb, NULL);
8686

src/pages/128x64x1/advanced/mixer_limits.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static void _show_titlerow()
3939

4040
GUI_CreateLabelBox(&gui->title, TITLE_X, 0 , TITLE_W, HEADER_HEIGHT, &TITLE_FONT,
4141
MIXPAGE_ChanNameProtoCB, NULL, (void *)(long)mp->channel);
42-
GUI_CreateButtonPlateText(&gui->revert, REVERT_X, 0, REVERT_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT, NULL, revert_cb, (void *)_tr("Revert"));
42+
GUI_CreateButtonPlateText(&gui->revert, REVERT_X, 0, REVERT_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT, GUI_Localize, revert_cb, _tr_noop("Revert"));
4343
}
4444

4545
static guiObject_t *getobj_cb(int relrow, int col, void *data)
@@ -53,34 +53,34 @@ static int row_cb(int absrow, int relrow, int y, void *data)
5353
{
5454
(void)data;
5555
void * tgl = NULL;
56-
void * label_cb = NULL;
56+
void * label_cb = GUI_Localize;
5757
const void * label = NULL;
5858
void * disp = NULL;
5959
void * input_disp = NULL;
6060
void * value = NULL;
6161
switch(absrow) {
6262
case ITEM_REVERSE:
63-
label = _tr("Reverse");
63+
label = _tr_noop("Reverse");
6464
tgl = toggle_reverse_cb; disp = reverse_cb; value = (void *)((long)mp->channel);
6565
break;
6666
case ITEM_FAILSAFE:
67-
label = _tr("Fail-safe");
67+
label = _tr_noop("Fail-safe");
6868
tgl = toggle_failsafe_cb; disp = set_failsafe_cb;
6969
break;
7070
case ITEM_SAFETY:
71-
label = _tr("Safety");
71+
label = _tr_noop("Safety");
7272
tgl = sourceselect_cb; disp = set_source_cb; value = &mp->limit->safetysw; input_disp = set_input_source_cb;
7373
break;
7474
case ITEM_SAFEVAL:
75-
label = _tr("Safe Val");
75+
label = _tr_noop("Safe Val");
7676
disp = set_safeval_cb;
7777
break;
7878
case ITEM_MINLIMIT:
79-
label = _tr("Min Limit");
79+
label = _tr_noop("Min Limit");
8080
disp = set_limits_cb; value = &mp->limit->min;
8181
break;
8282
case ITEM_MAXLIMIT:
83-
label = _tr("Max Limit");
83+
label = _tr_noop("Max Limit");
8484
disp = set_limits_cb; value = &mp->limit->max;
8585
break;
8686
case ITEM_SCALEPOS:
@@ -92,11 +92,11 @@ static int row_cb(int absrow, int relrow, int y, void *data)
9292
disp = set_limitsscale_cb; value = &mp->limit->servoscale_neg;
9393
break;
9494
case ITEM_SUBTRIM:
95-
label = _tr("Subtrim");
95+
label = _tr_noop("Subtrim");
9696
disp = set_trimstep_cb; value = &mp->limit->subtrim;
9797
break;
9898
case ITEM_SPEED:
99-
label = _tr("Speed");
99+
label = _tr_noop("Speed");
100100
disp = set_limits_cb; value = &mp->limit->speed;
101101
break;
102102
}

src/pages/128x64x1/advanced/mixer_setup.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ static void _show_titlerow()
5151
GUI_CreateLabelBox(&gui->chan, LABEL_X, 0 , TYPE_X - LABEL_X, HEADER_HEIGHT, &TITLE_FONT,
5252
MIXPAGE_ChanNameProtoCB, NULL, (void *)((long)mp->cur_mixer->dest));
5353
GUI_CreateTextSelectPlate(&gui->tmpl, TYPE_X, 0, TYPE_W, HEADER_WIDGET_HEIGHT, &TEXTSEL_FONT, NULL, templatetype_cb, (void *)((long)mp->channel));
54-
GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT, NULL, okcancel_cb, (void *)_tr("Save"));
54+
GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT, GUI_Localize, okcancel_cb, _tr_noop("Save"));
5555
}
5656

5757
static guiObject_t *simple_getobj_cb(int relrow, int col, void *data)
@@ -91,7 +91,7 @@ static int simple_row_cb(int absrow, int relrow, int y, void *data)
9191
value = set_number100_cb; data = &mp->mixer[0].offset;
9292
break;
9393
}
94-
GUI_CreateLabelBox(&gui->label[relrow].lbl, LABEL_X, y, LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr(label));
94+
GUI_CreateLabelBox(&gui->label[relrow].lbl, LABEL_X, y, LABEL_W, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, _tr_noop(label));
9595
GUI_CreateTextSourcePlate(&gui->value[relrow].ts, TEXTSEL_X, y + (LINES_PER_ROW - 1) * LINE_SPACE,
9696
TEXTSEL_W, LINE_HEIGHT, &TEXTSEL_FONT,
9797
tgl, value, input_value, data);
@@ -171,7 +171,7 @@ static int complex_row_cb(int absrow, int relrow, int y, void *data)
171171
break;
172172
}
173173
GUI_CreateLabelBox(&gui->label[relrow].lbl, LABEL_X, y, LABEL_W, LINE_HEIGHT,
174-
&LABEL_FONT, NULL, NULL, _tr(label));
174+
&LABEL_FONT, GUI_Localize, NULL, label);
175175
GUI_CreateTextSourcePlate(&gui->value[relrow].ts, TEXTSEL_X, y + (LINES_PER_ROW - 1) * LINE_SPACE,
176176
TEXTSEL_W, LINE_HEIGHT, &TEXTSEL_FONT, tgl, value, input_value, data);
177177
if (absrow + COMMON_LAST == COMPLEX_SRC)
@@ -248,7 +248,7 @@ static int expo_row_cb(int absrow, int relrow, int y, void *data)
248248
{
249249
const char *label = NULL;
250250
int underline = 0;
251-
void * label_cb = NULL;
251+
void * label_cb = GUI_Localize;
252252
void *tgl = NULL;
253253
void *value = NULL;
254254
void *input_value = NULL;
@@ -262,21 +262,21 @@ static int expo_row_cb(int absrow, int relrow, int y, void *data)
262262

263263
switch(absrow) {
264264
case COMMON_SRC:
265-
label = _tr("Src");
265+
label = _tr_noop("Src");
266266
tgl = sourceselect_cb; value = set_source_cb; data = &mp->mixer[0].src; input_value = set_input_source_cb;
267267
break;
268268
case COMMON_CURVE:
269-
label = _tr("High-Rate");
269+
label = _tr_noop("High-Rate");
270270
tgl = curveselect_cb; value = set_curvename_cb; data = &mp->mixer[0];
271271
break;
272272
case COMMON_SCALE:
273-
label = (void *)0; label_cb = scalestring_cb;
273+
label = NULL; label_cb = scalestring_cb;
274274
value = set_number100_cb; data = &mp->mixer[0].scalar;
275275
break;
276276
case EXPO_SWITCH1:
277277
case EXPO_SWITCH2:
278278
idx = (absrow == EXPO_SWITCH1) ? 1 : 2;
279-
label = idx == 1 ? _tr("Switch1") : _tr("Switch2");
279+
label = idx == 1 ? _tr_noop("Switch1") : _tr_noop("Switch2");
280280
underline = UNDERLINE;
281281
tgl = sourceselect_cb; value = set_drsource_cb; data = &mp->mixer[idx].sw; input_value = set_input_source_cb;
282282
break;

src/pages/128x64x1/datalog_page.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ static int row_cb(int absrow, int relrow, int y, void *data)
8383
{
8484
(void)data;
8585
const void *lbl_data = NULL;
86-
void *lbl_cb = NULL;
86+
void *lbl_cb = GUI_Localize;
8787
void *but_press = NULL;
8888
const void *but_data = NULL;
8989
void *but_txt = NULL;
@@ -93,16 +93,16 @@ static int row_cb(int absrow, int relrow, int y, void *data)
9393
void *selpress_cb = NULL;
9494

9595
if (absrow == DL_ENABLE) {
96-
lbl_cb = NULL; lbl_data = _tr("Enable");
96+
lbl_data = _tr_noop("Enable");
9797
sel_cb = sourcesel_cb; sel_data = NULL; sel_input_cb = sourcesel_input_cb;
9898
} else if (absrow == DL_RESET) {
9999
lbl_data = NULL;
100100
but_press = reset_press_cb; but_txt = reset_str_cb;
101101
} else if (absrow == DL_RATE) {
102-
lbl_cb = NULL; lbl_data = _tr("Rate");
102+
lbl_data = _tr_noop("Rate");
103103
sel_cb = ratesel_cb; sel_data = NULL;
104104
} else if (absrow == DL_SELECT) {
105-
lbl_cb = NULL; lbl_data = _tr("Select");
105+
lbl_data = _tr_noop("Select");
106106
selpress_cb = select_press_cb; sel_cb = select_cb; sel_data = NULL;
107107
} else {
108108
long row = absrow-DL_SOURCE;

src/pages/128x64x1/model_config.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,36 +54,36 @@ static int row_cb(int absrow, int relrow, int y, void *data)
5454
void *tgl = NULL;
5555
switch(absrow) {
5656
case ITEM_SWASHTYPE:
57-
label = _tr("SwashType");
57+
label = _tr_noop("SwashType");
5858
value = swash_val_cb;
5959
break;
6060
case ITEM_ELEINV:
61-
label = _tr("ELE Inv");
61+
label = _tr_noop("ELE Inv");
6262
tgl = swashinv_press_cb; value = swashinv_val_cb; data = (void *)1L;
6363
break;
6464
case ITEM_AILINV:
65-
label = _tr("AIL Inv");
65+
label = _tr_noop("AIL Inv");
6666
tgl = swashinv_press_cb; value = swashinv_val_cb; data = (void *)2L;
6767
break;
6868
case ITEM_COLINV:
69-
label = _tr("COL Inv");
69+
label = _tr_noop("COL Inv");
7070
tgl = swashinv_press_cb; value = swashinv_val_cb; data = (void *)4L;
7171
break;
7272
case ITEM_ELEMIX:
73-
label = _tr("ELE Mix");
73+
label = _tr_noop("ELE Mix");
7474
value = swashmix_val_cb; data = (void *)1L;
7575
break;
7676
case ITEM_AILMIX:
77-
label = _tr("AIL Mix");
77+
label = _tr_noop("AIL Mix");
7878
value = swashmix_val_cb; data = (void *)0L;
7979
break;
8080
case ITEM_COLMIX:
81-
label = _tr("COL Mix");
81+
label = _tr_noop("COL Mix");
8282
value = swashmix_val_cb; data = (void *)2L;
8383
break;
8484
}
8585
GUI_CreateLabelBox(&gui->label[relrow], LABEL_X, y,
86-
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, label);
86+
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, label);
8787
GUI_CreateTextSelectPlate(&gui->value[relrow], SELECT_X, y,
8888
SELECT_WIDTH, LINE_HEIGHT, &TEXTSEL_FONT, tgl, value, data);
8989
return 1;
@@ -118,7 +118,7 @@ static int row2_cb(int absrow, int relrow, int y, void *data)
118118
idx++;
119119
}
120120
GUI_CreateLabelBox(&gui->label[relrow], LABEL_X, y,
121-
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr(proto_strs[pos]));
121+
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, proto_strs[pos]);
122122
GUI_CreateTextSelectPlate(&gui->value[relrow], SELECT_X, y,
123123
SELECT_WIDTH, LINE_HEIGHT, &TEXTSEL_FONT, NULL, proto_opt_cb, (void *)(long)absrow);
124124
return 1;
@@ -132,7 +132,7 @@ static int row3_cb(int absrow, int relrow, int y, void *data)
132132
void *ts_press = NULL;
133133
void *ts_data = NULL;
134134
char *label = NULL;
135-
void *label_cmd = NULL;
135+
void *label_cmd = GUI_Localize;
136136

137137
switch (absrow) {
138138
case 0:
@@ -158,7 +158,7 @@ static int row3_cb(int absrow, int relrow, int y, void *data)
158158
break;
159159
}
160160
GUI_CreateLabelBox(&gui->label[relrow], LABEL_X, y,
161-
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, label_cmd, NULL, label_cmd ? label : _tr(label));
161+
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, label_cmd, NULL, label);
162162
GUI_CreateTextSourcePlate(&gui->value[relrow], SELECT_X, y,
163163
SELECT_WIDTH, LINE_HEIGHT, &TEXTSEL_FONT, ts_press, ts, input_ts, ts_data);
164164
return 1;
@@ -193,7 +193,7 @@ static int row4_cb(int absrow, int relrow, int y, void *data)
193193
break;
194194
}
195195
GUI_CreateLabelBox(&gui->label[relrow], LABEL_X, y,
196-
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr(label));
196+
LABEL_WIDTH, LINE_HEIGHT, &LABEL_FONT, GUI_Localize, NULL, label);
197197
GUI_CreateTextSourcePlate(&gui->value[relrow], SELECT_X, y,
198198
SELECT_WIDTH, LINE_HEIGHT, &TEXTSEL_FONT, ts_press, ts, input_ts, ts_data);
199199
return 1;

0 commit comments

Comments
 (0)