static const char *okcancelstr_cb(guiObject_t *obj, const void *data) { (void)obj; return data ? _tr("Ok") : _tr("Cancel"); }
static const char *add_dlgbut_str_cb(guiObject_t *obj, const void *data) { (void)obj; return data ? _tr("Add") : _tr("Load"); }
static void _show_titlerow() { (void)okcancel_cb; PAGE_SetActionCB(action_cb); mp->entries_per_page = 4; memset(gui, 0, sizeof(*gui)); labelDesc.style = LABEL_UNDERLINE; u8 w = 50; GUI_CreateLabelBox(&gui->title, 0, 0 , LCD_WIDTH - w, ITEM_HEIGHT, &labelDesc, MIXPAGE_ChanNameProtoCB, NULL, (void *)(long)mp->channel); labelDesc.style = LABEL_CENTER; GUI_CreateButtonPlateText(&gui->revert, LCD_WIDTH - w, 0, w, ITEM_HEIGHT, &labelDesc, NULL, 0, revert_cb, (void *)_tr("Revert")); }
void PAGE_ModelInit(int page) { (void)page; u8 row; mp->last_mixermode = Model.mixer_mode; mp->last_txpower = Model.tx_power; mp->file_state = 0; 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)), }; row = ROW1; GUI_CreateLabel(&gui->filelbl, COL1, row, NULL, DEFAULT_FONT, _tr("File")); GUI_CreateTextSelect(&gui->file, COL2, row, TEXTSELECT_96, file_press_cb, file_val_cb, NULL); #if HAS_STANDARD_GUI row+= 20; GUI_CreateLabel(&gui->guilbl, COL1, row, NULL, DEFAULT_FONT, _tr("Mixer GUI")); GUI_CreateTextSelect(&gui->guits, COL2, row, TEXTSELECT_96, NULL, _mixermode_cb, NULL); #endif row += 20; GUI_CreateLabel(&gui->namelbl, COL1, row, NULL, DEFAULT_FONT, _tr("Model name")); // use the same naming convention for devo8 and devo10 GUI_CreateButton(&gui->name, COL2, row, BUTTON_96x16, show_text_cb, 0x0000, _changename_cb, Model.name); GUI_CreateButton(&gui->icon, COL3, row, BUTTON_64x16, show_text_cb, 0x0000, changeicon_cb, _tr("Icon")); row += 20; GUI_CreateLabel(&gui->typelbl, COL1, row, NULL, DEFAULT_FONT, _tr("Model type")); GUI_CreateTextSelect(&gui->type, COL2, row, TEXTSELECT_96, type_press_cb, type_val_cb, NULL); row += 24; GUI_CreateLabel(&gui->ppmlbl, COL1, row, NULL, DEFAULT_FONT, _tr("PPM In")); GUI_CreateTextSelect(&gui->ppm, COL2, row, TEXTSELECT_96, ppmin_press_cb, ppmin_select_cb, NULL); row += 20; GUI_CreateLabel(&gui->protolbl, COL1, row, NULL, DEFAULT_FONT, _tr("Protocol")); GUI_CreateTextSelect(&gui->proto, COL2, row, TEXTSELECT_96, proto_press_cb, protoselect_cb, NULL); row += 20; GUI_CreateLabel(&gui->numchlbl, COL1, row, NULL, DEFAULT_FONT, _tr("# Channels")); GUI_CreateTextSelect(&gui->numch, COL2, row, TEXTSELECT_96, NULL, numchanselect_cb, NULL); row += 24; GUI_CreateLabel(&gui->pwrlbl, COL1, row, NULL, DEFAULT_FONT, _tr("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_CreateLabel(&gui->fixedidlbl, COL1, row, NULL, DEFAULT_FONT, _tr("Fixed ID")); GUI_CreateButton(&gui->fixedid, COL2, row, BUTTON_96x16, show_text_cb, 0x0000, fixedid_cb, mp->fixed_id); GUI_CreateButton(&gui->bind, COL3, row, BUTTON_64x16, show_bindtext_cb, 0x0000, bind_cb, NULL); configure_bind_button(); }
static const char *label_cb(guiObject_t *obj, const void *data) { (void)obj; snprintf(tempstring, sizeof(tempstring), "%s%d", _tr("Alarm"), (int)((long)data)+1); return tempstring; }
static const char *langstr_cb(guiObject_t *obj, const void *data) { (void)data; (void)obj; return _tr("Change"); }
const char *invalidstdmixer_string_cb(guiObject_t *obj, void *data) { (void)obj; (void)data; return _tr("Model needs reset\nfor standard mixer"); }
const char *RTC_Name(char *str, int i) { sprintf(str, "%s", i == 0 ? _tr("Clock") : _tr("Date")); return str; }
static int expo_row_cb(int absrow, int relrow, int y, void *data) { const char *label = NULL; int underline = 0; void * label_cb = NULL; void *tgl = NULL; void *value = NULL; data = NULL; void *but_tgl = NULL; void *but_txt = NULL; void *but_data = NULL; int disable = 0; int x = 0; int w = LEFT_VIEW_WIDTH; switch(absrow) { case COMMON_SRC: label = _tr("Src"); tgl = sourceselect_cb; value = set_source_cb; data = &mp->cur_mixer->src; break; case COMMON_CURVE: label = _tr("High-Rate"); tgl = curveselect_cb; value = set_curvename_cb; data = &mp->mixer[0]; break; case COMMON_SCALE: label = (void *)0; label_cb = scalestring_cb; value = set_number100_cb; data = &mp->mixer[0].scalar; break; case EXPO_SWITCH1: label = _tr("Switch1"); underline = 1; tgl = sourceselect_cb; value = set_drsource_cb; data = &mp->mixer[1].sw; break; case EXPO_LINK1: but_tgl = toggle_link_cb; but_txt = show_rate_cb; but_data = (void *)0; if(! MIXER_SRC(mp->mixer[1].sw)) disable = 1; break; case EXPO_CURVE1: tgl = curveselect_cb; value = set_curvename_cb; data = &mp->mixer[1]; if(! MIXER_SRC(mp->mixer[1].sw) || mp->link_curves & 0x01) disable = 1; break; case EXPO_SCALE1: label = (void *)1; label_cb = scalestring_cb; value = set_number100_cb; data = &mp->mixer[1].scalar; if(! MIXER_SRC(mp->mixer[1].sw)) disable = 1; break; case EXPO_SWITCH2: label = _tr("Switch2"); underline = 1; tgl = sourceselect_cb; value = set_drsource_cb; data = &mp->mixer[2].sw; break; case EXPO_LINK2: but_tgl = toggle_link_cb; but_txt = show_rate_cb; but_data = (void *)1; if(! MIXER_SRC(mp->mixer[2].sw)) disable = 1; break; case EXPO_CURVE2: tgl = curveselect_cb; value = set_curvename_cb; data = &mp->mixer[2]; if(! MIXER_SRC(mp->mixer[2].sw) || mp->link_curves & 0x02) disable = 1; break; case EXPO_SCALE2: label = (void *)2; label_cb = scalestring_cb; value = set_number100_cb; data = &mp->mixer[2].scalar; if(! MIXER_SRC(mp->mixer[2].sw)) disable = 1; break; } if(label || label_cb) { labelDesc.style = LABEL_LEFTCENTER; GUI_CreateLabelBox(&gui->label[relrow], x, y, w, ITEM_HEIGHT, &labelDesc, label_cb, NULL, label); if(underline) GUI_CreateRect(&gui->rect1, x, y, LEFT_VIEW_WIDTH, 1, &labelDesc); y += ITEM_HEIGHT + 1; } labelDesc.style = LABEL_CENTER; if(but_tgl) { GUI_CreateButtonPlateText(&gui->value[relrow].but, x, y, w, ITEM_HEIGHT, &labelDesc, but_txt, 0xffff, but_tgl, but_data); if(disable) { GUI_ButtonEnable((guiObject_t *)&gui->value[relrow].but, 0); } } else { GUI_CreateTextSelectPlate(&gui->value[relrow].ts, x, y, w, ITEM_HEIGHT, &labelDesc, tgl, value, data); if(disable) { GUI_TextSelectEnable(&gui->value[relrow].ts, 0); } } return 1; }
static void show_iconsel_page(int SelectedIcon) { GUI_RemoveAllObjects(); memset(gui, 0, sizeof(*gui)); current_toggleicon = SelectedIcon; int toggleinput = MIXER_SRC(Model.pagecfg2.elem[tp->tglidx].src); //Header PAGE_ShowHeader(INPUT_SourceNameAbbrevSwitch(tempstring, toggleinput)); labelDesc.style = LABEL_CENTER; GUI_CreateButtonPlateText(&gui->revert, REVERT_X, 0, REVERT_W, HEADER_WIDGET_HEIGHT, &labelDesc, NULL, 0, revert_cb, (void *)_tr("Revert")); #if SEPARATOR GUI_CreateRect(&gui->separator, SEPARATOR_X, HEADER_WIDGET_HEIGHT, 1, LCD_HEIGHT-HEADER_HEIGHT, &labelDesc); #endif int row = ROW_Y; int num_positions = INPUT_NumSwitchPos(toggleinput); if(num_positions < 2) num_positions = 2; static const char * const tglidx[3] = {"0:", "1:", "2:"}; labelDesc.style = LABEL_INVERTED; for (int i = 0; i < num_positions; i++) { GUI_CreateLabelBox(&gui->togglelabel[i], LABEL_X, row, LABEL_W, LABEL_H, SelectedIcon == i ? &labelDesc : &DEFAULT_FONT, NULL, NULL, tglidx[i]); #ifdef HAS_CHAR_ICONS GUI_CreateLabelBox(&gui->toggleicon[i], ICON_X, row, ICON_W, LABEL_H, &DEFAULT_FONT, TGLICO_font_cb, NULL, (void *)(long)Model.pagecfg2.elem[tp->tglidx].extra[i]); #else struct ImageMap img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[i]); GUI_CreateImageOffset(&gui->toggleicon[i], ICON_X, row, ICON_W, LABEL_H, img.x_off, img.y_off, img.file, NULL, //SelectedIcon == 0 ? tglico_reset_cb : tglico_setpos_cb, (void *)(long)i); #endif row += ROW_INCREMENT; } int count = get_toggle_icon_count(); int rows = (count + NUM_COLS - 1) / NUM_COLS; GUI_CreateScrollable(&gui->scrollable, SCROLLABLE_X, SCROLLABLE_Y, LCD_WIDTH - SCROLLABLE_X, SCROLLABLE_H, SCROLL_ROW_H, rows, row_cb, NULL, NULL, (void *)(long)SelectedIcon); }
/* Advanced Standard Row1 Timer Timer Row2 Switch Switch Row3 Reset(perm)/ResetSwitch Reset(perm)/Start Row4 Start/Set-to Set-to */ static int row_cb(int absrow, int relrow, int y, void *data) { (void)data; int COL1 = 30; int COL2 = 130; int selectable = 0; for (int j = 0; j < TIMERCOLUMNS; j++) { int row = y; int i = relrow * TIMERCOLUMNS + j; int timer_num = TIMERCOLUMNS*absrow+j; //Row 1 GUI_CreateLabelBox(&gui->timer[i], COL1, row, COL2-COL1, 18, &LABEL_FONT,timer_str_cb, NULL, (void *)(long)timer_num); GUI_CreateTextSelect(&gui->type[i], COL2, row, TEXTSELECT_96, NULL, set_timertype_cb, (void *)(long)timer_num); //Row 2 row+=20; GUI_CreateLabelBox(&gui->switchlbl[i], COL1, row, COL2-COL1, 18, &LABEL_FONT, switch_str_cb, NULL, (void *)(long)timer_num); GUI_CreateTextSource(&gui->src[i], COL2, row, TEXTSELECT_96, toggle_source_cb, set_source_cb, set_input_source_cb, (void *)(long)timer_num); //Row 3 row+=20; /* Reset Perm timer*/ GUI_CreateLabelBox(&gui->resetpermlbl[i], COL1, row, COL2-COL1, 18, &LABEL_FONT, NULL, NULL, _tr("Reset")); GUI_CreateButton(&gui->resetperm[i], COL2, row, BUTTON_96x16, show_timerperm_cb, reset_timerperm_cb, (void *)(long)timer_num); if(Model.mixer_mode != MIXER_STANDARD) { /* or Reset switch */ GUI_CreateLabelBox(&gui->resetlbl[i], COL1, row, COL2-COL1, 18, &LABEL_FONT, NULL, NULL, _tr("Reset sw")); GUI_CreateTextSource(&gui->resetsrc[i], COL2, row, TEXTSELECT_96, toggle_resetsrc_cb, set_resetsrc_cb, set_input_rstsrc_cb, (void *)(long)timer_num); row+=20; } //Row 4 GUI_CreateLabelBox(&gui->startlbl[i], COL1, row, COL2-COL1, 18, &LABEL_FONT, NULL, NULL, _tr("Start")); GUI_CreateTextSelect(&gui->start[i], COL2, row, TEXTSELECT_96, NULL, set_start_cb, (void *)(long)timer_num); if(Model.mixer_mode == MIXER_STANDARD) row += 20; GUI_CreateButton(&gui->setperm[i], COL2, row, BUTTON_96x16, show_timerperm_cb, reset_timerperm_cb, (void *)(long)(timer_num | 0x80)); update_countdown(timer_num); int tmpselectable = (Model.timer[timer_num].type < TIMER_COUNTDOWN) ? 2 : 3; if (Model.mixer_mode == MIXER_ADVANCED) tmpselectable++; if(HAS_PERMANENT_TIMER && Model.timer[timer_num].type == TIMER_PERMANENT) tmpselectable = 4; selectable += tmpselectable; COL1 = 270; COL2 = 343; } return selectable; }
static int row_cb(int absrow, int relrow, int y, void *data) { int type = (long)data; long elemidx = elem_rel_to_abs(type, absrow); int X = LAYDLG_X + LAYDLG_SCROLLABLE_X - (type == ELEM_TOGGLE ? 68/2 : 0); int width = LAYDLG_MIN_WIDTH + (type == ELEM_TOGGLE ? 64 : 0) - 2 * LAYDLG_SCROLLABLE_X - 16; int del_x = X + 15 + 110; int num_objs = 2; if (type == ELEM_MODELICO) { GUI_CreateLabelBox(&gui->dlglbl[relrow], X, y, 115, LAYDLG_TEXT_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Model")); } else { GUI_CreateLabelBox(&gui->dlglbl[relrow], X, y, 10, 16, &DEFAULT_FONT, label_cb, NULL, (void *)(long)(absrow)); GUI_CreateTextSelect(&gui->dlgts[relrow], X + 15, y, TEXTSELECT_96, NULL, dlgts_cb, (void *)elemidx); if (type == ELEM_TOGGLE) { GUI_CreateButton(&gui->dlgbut2[relrow], del_x, y, BUTTON_64x16, dlgbut_str_cb, 0, toggle_press_cb, (void *)elemidx); //del_x = X + 15 + 168; num_objs++; } } GUI_CreateButton(&gui->dlgbut[relrow], X+width-64, y, BUTTON_64x16, dlgbut_str_cb, 0, dlgbut_cb, (void *)elemidx); return num_objs; }
const char *dlgbut_str_cb(guiObject_t *obj, const void *data) { (void)data; return ((guiButton_t *)obj >= gui->dlgbut2 && (guiButton_t *)obj < gui->dlgbut2 + LAYDLG_NUM_ITEMS) ? _tr("Edit") : _tr("Delete"); }
const char *TIMER_Name(char *str, unsigned timer) { sprintf(str, "%s%d", _tr("Timer"), timer+1); return str; }
static const char *calibratestr_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; return _tr("Calibrate"); }
static void _show_titlerow() { PAGE_SetActionCB(action_cb); mp->entries_per_page = 2; memset(gui, 0, sizeof(*gui)); labelDesc.style = LABEL_UNDERLINE; labelDesc.font_color = labelDesc.fill_color = labelDesc.outline_color = 0xffff; GUI_CreateLabelBox(&gui->chan, 0, 0 , LCD_WIDTH, ITEM_HEIGHT, &labelDesc, MIXPAGE_ChanNameProtoCB, NULL, (void *)((long)mp->cur_mixer->dest)); u8 x =40; u8 w = 50; labelDesc.style = LABEL_CENTER; GUI_CreateTextSelectPlate(&gui->tmpl, x, 0, w, ITEM_HEIGHT, &labelDesc, NULL, templatetype_cb, (void *)((long)mp->channel)); w = 38; GUI_CreateButtonPlateText(&gui->save, LCD_WIDTH - w, 0, w, ITEM_HEIGHT, &labelDesc, NULL, 0, okcancel_cb, (void *)_tr("Save")); }
static const char *clockstr_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; return _tr("Set"); }
static void _show_page() { if (firstObj) { GUI_RemoveHierObjects(firstObj); firstObj = NULL; } #define COL1 16 #define COL2 (COL1+106) #if LCD_WIDTH == 480 #define COL3 (LCD_WIDTH-16-106-96) // border + label + button #define COL4 (LCD_WIDTH-16-96) // border + button #define BUTTON_WIDE BUTTON_96x16 #define BUTTON_TEST BUTTON_48x16 #define BUTTON_TOUCH BUTTON_TEST #define COL2TEST (COL2+48) #define ADDSPACE 0 #define ADDROW 0 #else #define COL3 COL1 #define COL4 COL2 #define BUTTON_WIDE BUTTON_96 #define BUTTON_TEST BUTTON_48 #define BUTTON_TOUCH BUTTON_WIDE #define COL2TEST (COL2+100) #define ADDSPACE 15 #define ADDROW 6 #endif guiObject_t *obj; u8 space = 19; int row = 40; int col1 = COL1; int col2 = COL2; if (page_num == 0 || LCD_WIDTH == 480) { obj = GUI_CreateLabelBox(&gui1->head1_1, col1, row, 0, 0, &SECTION_FONT, NULL, NULL, _tr("Generic settings")); if (firstObj == NULL) firstObj = obj; row += space; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui1->langlbl, col1, row+ADDROW, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Language")); GUI_CreateButton(&gui1->lang, col2, row, BUTTON_WIDE, langstr_cb, 0x0000, lang_select_cb, NULL); row += space + ADDSPACE ; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui1->modelbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Stick mode")); GUI_CreateTextSelect(&gui1->mode, col2, row, TEXTSELECT_96, NULL, modeselect_cb, NULL); row += space + ADDSPACE; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui1->touchlbl, col1, row+ADDROW, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Touch screen")); GUI_CreateButton(&gui1->touchcalib, col2, row, BUTTON_WIDE, calibratestr_cb, 0x0000, press_cb, (void *)CALIB_TOUCH); row += space + ADDSPACE; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui1->sticklbl, col1, row+ADDROW, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Sticks")); GUI_CreateButton(&gui1->stickcalib, col2, row, BUTTON_WIDE, calibratestr_cb, 0x0000, press_cb, (void *)CALIB_STICK); #if HAS_RTC row += space + ADDSPACE; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui1->clocklbl, col1, row+ADDROW, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Clock")); GUI_CreateButton(&gui1->clock, col2, row, BUTTON_WIDE, clockstr_cb, 0x0000, press_cb, (void *)SET_CLOCK); row += space + ADDSPACE; #else row += space + (LCD_WIDTH == 320 ? 8 : 16); // for nicer look #endif //HAS_RTC if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } } if (page_num == 1 || LCD_WIDTH == 480) { obj = GUI_CreateLabelBox(&gui2->head2_1, col1, row, 0, 0, &SECTION_FONT, NULL, NULL, _tr("Buzzer settings")); if (firstObj == NULL) firstObj = obj; row += space; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->power_alarmlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Power On alarm")); GUI_CreateTextSelect(&gui2->power_alarm, col2, row, TEXTSELECT_96, NULL, poweralarm_select_cb, NULL); row += space; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->battalrmlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Battery alarm")); GUI_CreateTextSelect(&gui2->battalrm, col2, row, TEXTSELECT_96, NULL, batalarm_select_cb, NULL); row += space; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->battalrmintvllbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Alarm intvl")); GUI_CreateTextSelect(&gui2->battalrmintvl, col2, row, TEXTSELECT_96, NULL, batalarmwarn_select_cb, NULL); row += space; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->buzzlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Buzz volume")); GUI_CreateTextSelect(&gui2->buzz, col2, row, TEXTSELECT_96, NULL, _buzz_vol_cb, (void *)&Transmitter.volume); row += space; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->musicshutdbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Power-down alert")); GUI_CreateTextSelect(&gui2->music_shutdown, col2, row, TEXTSELECT_96, NULL, _music_shutdown_cb, (void *)&Transmitter.music_shutdown); row += space + 8; if (row+12 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->head2_2, col1, row, 0, 0, &SECTION_FONT, NULL, NULL, _tr("LCD settings")); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->backlightlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Backlight")); GUI_CreateTextSelect(&gui2->backlight, col2, row, TEXTSELECT_96, NULL, brightness_select_cb, NULL); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->dimtimelbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Dimmer time")); GUI_CreateTextSelect(&gui2->dimtime, col2, row, TEXTSELECT_96, NULL, auto_dimmer_time_cb, NULL); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui2->dimtgtlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Dimmer target")); GUI_CreateTextSelect(&gui2->dimtgt, col2, row, TEXTSELECT_96, NULL, common_select_cb, (void *)&Transmitter.auto_dimmer.backlight_dim_value); row += space + 8; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } } if (page_num == 2 || LCD_WIDTH == 480) { obj = GUI_CreateLabelBox(&gui3->head3_1, col1, row, 0, 0, &SECTION_FONT, NULL, NULL, _tr("Timer settings")); if (firstObj == NULL) firstObj = obj; row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui3->prealertlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Prealert time")); GUI_CreateTextSelect(&gui3->prealert, col2, row, TEXTSELECT_96,NULL, prealert_time_cb, (void *)0L); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui3->preintvllbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Prealert intvl")); GUI_CreateTextSelect(&gui3->preintvl, col2, row, TEXTSELECT_96, NULL, timer_interval_cb, &Transmitter.countdown_timer_settings.prealert_interval); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui3->timeuplbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL,_tr("Timeup intvl")); GUI_CreateTextSelect(&gui3->timeup, col2, row, TEXTSELECT_96, NULL, timer_interval_cb, &Transmitter.countdown_timer_settings.timeup_interval); row += space + 8; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui3->head3_2, col1, row, 0, 0, &SECTION_FONT, NULL, NULL, _tr("Telemetry settings")); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui3->templbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Temperature")); GUI_CreateTextSelect(&gui3->temp, col2, row, TEXTSELECT_96, NULL, units_cb, (void *)1L); row += space; if (row+8 >= LCD_HEIGHT) { row = 40; col1 = COL3; col2 = COL4; } GUI_CreateLabelBox(&gui3->lengthlbl, col1, row, 0, 0, &DEFAULT_FONT, NULL, NULL, _tr("Length")); GUI_CreateTextSelect(&gui3->length, col2, row, TEXTSELECT_96, NULL, units_cb, (void *)0L); } }
void PAGE_ShowLowBattDialog() { PAGE_ShowWarning(NULL, _tr("Battery too low,\ncan't save!")); }
const char *invalidstdmixer_string_cb(guiObject_t *obj, void *data) { (void)obj; (void)data; return _tr("Model needs to be reset\nin order to switch to the standard mixer"); }
void PAGE_ShowInvalidModule() { PAGE_ShowWarning(NULL, _tr("Bad/missing\nprotocol modules!")); }
void PAGE_ShowResetPermTimerDialog(void *guiObject, void *data) { (void)guiObject; if (dialog) return; dialogcrc = 0; dialog = GUI_CreateDialog(&gui->dialog, 10 + DLG_XOFFSET, 42 + DLG_YOFFSET, 300, 188, _tr("Reset Permanent Timer?"), reset_timer_string_cb, reset_permtimer_cb, dtOkCancel, data); }
const char *show_bindtext_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; return PROTOCOL_AutoBindEnabled() ? _tr("Re-Init") : _tr("Bind"); }
void PAGE_ShowSafetyDialog() { if (disable_safety) { return; // don't show safety dialog when calibrating } if (dialog) { u64 unsafe = PROTOCOL_CheckSafe(); if (! unsafe) { GUI_RemoveObj(dialog); dialog = NULL; PROTOCOL_Init(0); } else { safety_string_cb(NULL, NULL); u32 crc = Crc(tempstring, strlen(tempstring)); if (crc != dialogcrc) { GUI_Redraw(dialog); dialogcrc = crc; } } } else { tempstring[0] = 0; dialogcrc = 0; dialog = GUI_CreateDialog(&gui->dialog, 10 + DLG_XOFFSET, 42 + DLG_YOFFSET, 300, 188, _tr("Safety"), safety_string_cb, safety_ok_cb, dtOk, NULL); } }
static const char *rtc_text_cb(guiObject_t *obj, const void *data) { (void)obj; unsigned int idx = (long)data; if (idx <= (sizeof(Rtc.value) / sizeof(Rtc.value[0]))) { GUI_DrawBackground(X(idx/3, 32) + ((idx%3 == 2) ? 67 : 0) - ((idx%3 == 0) ? 67 : 0), 84, 64, 16); idx = order[idx]; } switch (idx) { case SECOND: return _tr("Second"); case MINUTE: return _tr("Minute"); case HOUR: return _tr("Hour"); case DAY: return _tr("Day"); case MONTH: return _tr("Month"); case YEAR: return _tr("Year"); case ACTTIME: { RTC_GetTimeFormatted(tempstring, RTC_GetValue()); return tempstring; } case ACTDATE: { RTC_GetDateFormatted(tempstring, RTC_GetValue()); return tempstring; } case NEWTIME: { RTC_GetTimeFormatted(tempstring, RTC_GetSerial(Rtc.value[YEAR], Rtc.value[MONTH], Rtc.value[DAY], Rtc.value[HOUR], Rtc.value[MINUTE], Rtc.value[SECOND])); return tempstring; } case NEWDATE: { RTC_GetDateFormatted(tempstring, RTC_GetSerial(Rtc.value[YEAR], Rtc.value[MONTH], Rtc.value[DAY], Rtc.value[HOUR], Rtc.value[MINUTE], Rtc.value[SECOND])); return tempstring; } case TIMEBUTTON: return _tr("Set time"); case DATEBUTTON: return _tr("Set date"); case TIMELABEL: return _tr("Time format"); case DATELABEL: return _tr("Date format"); case SETLABEL: return _tr("value to set"); case RESULTLABEL: return _tr("resulting value"); } return _tr("Unknown"); }
static const char *enablestr_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; return sp->enable ? _tr("On") : _tr("Off"); }