static void _show_list(int loadsave,u8 num_models) { if (loadsave == LOAD_ICON) { mp->modeltype = Model.type; guiObject_t *obj = GUI_CreateTextSelectPlate(&gui->ico, 10, ITEM_HEIGHT + 1, LCD_WIDTH - 20, ITEM_HEIGHT, &DEFAULT_FONT, iconpress_cb, iconstr_cb, (void *)(long)num_models); GUI_CreateImage(&gui->image, LCD_WIDTH / 2 - 18, LCD_HEIGHT-37, 52, 36, mp->iconstr); GUI_SetSelected(obj); } else { OBJ_SET_USED(&gui->image, 0); guiObject_t *obj = GUI_CreateListBoxPlateText(&gui->listbox, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, num_models, mp->selected-1, &DEFAULT_FONT, LISTBOX_KEY_UPDOWN, // change listbox's browser key to up/down since there is only 1 widget in this page string_cb, select_cb, _press_cb, (void *)(long)loadsave); GUI_SetSelected(obj); } }
static int row_cb(int absrow, int relrow, int y, void *data) { int row_count = (long)data; struct LabelDesc listbox = { .font = DEFAULT_FONT.font, .style = LABEL_LISTBOX, .font_color = DEFAULT_FONT.font_color, .fill_color = DEFAULT_FONT.fill_color, .outline_color = DEFAULT_FONT.outline_color }; if (absrow >= row_count) { GUI_CreateLabelBox(&gui->label[relrow], LCD_WIDTH/2-100, y, 200 - ARROW_WIDTH, LINE_HEIGHT, &listbox, NULL, NULL, ""); } else { GUI_CreateLabelBox(&gui->label[relrow], LCD_WIDTH/2-100, y, 200 - ARROW_WIDTH, LINE_HEIGHT, &listbox, string_cb, press_cb, (void *)(long)absrow); } return 1; } void PAGE_LanguageInit(int page) { (void)page; int num_lang = count_num_languages(); PAGE_ShowHeader(_tr(PAGE_GetName(PAGEID_LANGUAGE))); int min_rows = num_lang >= LISTBOX_ITEMS ? num_lang : LISTBOX_ITEMS; GUI_CreateScrollable(&gui->scrollable, LCD_WIDTH/2-100, 40, 200, LISTBOX_ITEMS * LINE_HEIGHT, LINE_HEIGHT, min_rows, row_cb, NULL, NULL, (void *)(long)num_lang); GUI_SetSelected(GUI_ShowScrollableRowCol(&gui->scrollable, Transmitter.language, 0)); }
void PAGE_ChangeByID(enum PageID id, s8 menuPage) { if ( modal || GUI_IsModal()) return; PAGE_SaveCurrentPos(); page_scrollable = NULL; PAGE_Exit(); GUI_SelectionNotify(NULL); cur_page = id; BUTTON_InterruptLongPress(); //Make sure button press is not passed to the new page if (pages[cur_page].init == PAGE_MainInit) quick_page_enabled = 1; else if (pages[cur_page].init == PAGE_MenuInit) quick_page_enabled = 0; PAGE_RemoveAllObjects(); if (HAS_TOUCH) { GUI_ChangeSelectionOnTouch(1); } ActionCB = default_button_action_cb; pages[cur_page].init(menuPage); if (page_scrollable) { guiObject_t *obj = GUI_ShowScrollableRowOffset(page_scrollable, *current_selected); if(! HAS_TOUCH || ! GUI_InTouch()) GUI_SetSelected(obj); } }
void PAGE_LoadSaveInit(int page) { const char *name; int num_models; int selected; int width = LCD_WIDTH; mp->menu_type = page; OBJ_SET_USED(&gui->image, 0); if (page == SAVE_MODEL) { name = _tr("Press ENT to copy to"); } else { name = _tr("Press ENT to load"); } if (page == LOAD_ICON) { width = 75; GUI_CreateImage(&gui->image, 75, 20, 52, 36, mp->iconstr); GUI_SelectionNotify(icon_notify_cb); } selected = get_scroll_count(page); num_models = mp->total_items; /* set by get_scroll_page */ PAGE_ShowHeader(name); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, width, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, num_models, row_cb, NULL, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowCol(&gui->scrollable, selected, 0)); }
void show_config() { int count = 0; int row_idx = 0; long type; if (OBJ_IS_USED(&gui->dialog)) { u8 draw_mode = FullRedraw; GUI_RemoveObj((guiObject_t *)&gui->dialog); FullRedraw = draw_mode; } if(lp->selected_for_move >= 0) { type = ELEM_TYPE(pc->elem[lp->selected_for_move]); row_idx = elem_abs_to_rel(lp->selected_for_move); count = elem_get_count(type); } if (! count) { dialog_ok_cb(1, NULL); return; } int x = LAYDLG_X - (type == ELEM_TOGGLE ? 68/2 : 0); int width = LAYDLG_MIN_WIDTH + (type == ELEM_TOGGLE ? 64 : 0); GUI_CreateDialog(&gui->dialog, x, LAYDLG_Y, width, LAYDLG_HEIGHT, _tr("Page Config"), NULL, dialog_ok_cb, dtOk, ""); GUI_CreateScrollable(&gui->scrollable, x + LAYDLG_SCROLLABLE_X, LAYDLG_Y + LAYDLG_SCROLLABLE_Y, width - 2 * LAYDLG_SCROLLABLE_X + 1, LAYDLG_SCROLLABLE_HEIGHT, LAYDLG_TEXT_HEIGHT, count, row_cb, NULL, NULL, (void *)type); GUI_SetSelected(GUI_ShowScrollableRowCol(&gui->scrollable, row_idx, 0)); }
void PAGE_VideoSetupInit(int page) { (void)page; show_titlerow(_tr("Video")); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, 4, row4_cb, NULL, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
void PAGE_LanguageInit(int page) { int num_lang = count_num_languages(); PAGE_ShowHeader(_tr("Press ENT to change")); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, num_lang, row_cb, NULL, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, Transmitter.language)); }
static void _show_page() { PAGE_ShowHeader(_tr("Timers")); // using the same name as related menu item to reduce language strings PAGE_SetActionCB(_action_cb); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, LCD_HEIGHT - ITEM_HEIGHT, NUM_TIMERS, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
void PAGE_LanguageInit(int page) { (void)page; int num_lang = count_num_languages(); PAGE_ShowHeader(PAGE_GetName(PAGEID_LANGUAGE)); int min_rows = num_lang >= LISTBOX_ITEMS ? num_lang : LISTBOX_ITEMS; GUI_CreateScrollable(&gui->scrollable, LCD_WIDTH/2-100, 40, 200, LISTBOX_ITEMS * LINE_HEIGHT, LINE_HEIGHT, min_rows, row_cb, NULL, NULL, (void *)(long)num_lang); GUI_SetSelected(GUI_ShowScrollableRowCol(&gui->scrollable, Transmitter.language, 0)); }
void GUI_Select1stSelectableObj() { struct guiObject *obj = objHEAD; while(obj) { if(OBJ_IS_SELECTABLE(obj)) { GUI_SetSelected(obj); return; } obj = obj->next; } }
static void select_for_move(guiLabel_t *obj) { GUI_SetSelected((guiObject_t *)obj); notify_cb((guiObject_t *)obj); int idx = guielem_idx((guiObject_t *)obj); if (lp->selected_for_move == idx) return; if (lp->selected_for_move >= 0) { GUI_Redraw((guiObject_t *)&gui->elem[lp->selected_for_move]); } set_selected_for_move(idx); }
void PAGE_TrimEditInit(int page) { struct Trim *trim = MIXER_GetAllTrims(); tp->index = page; tp->trim = trim[tp->index]; GUI_CreateLabelBox(&guit->header, 0, 0, LABEL2_WIDTH, HEADER_HEIGHT, &TITLE_FONT, GUI_Localize, NULL, _tr_noop("Edit")); GUI_CreateButtonPlateText(&guit->save, BUTTON2_X, BUTTON2_Y, BUTTON2_WIDTH, LINE_HEIGHT, &BUTTON_FONT, GUI_Localize, okcancel_cb, _tr_noop("Save")); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, ITEM_LAST, row2_cb, getobj2_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
static void navigate_symbolicons(s8 direction) { guiObject_t *obj = GUI_GetSelected(); if (direction == -1) GUI_SetSelected((guiObject_t *)GUI_GetPrevSelectable(obj)); else GUI_SetSelected((guiObject_t *)GUI_GetNextSelectable(obj)); return; #if 0 obj = GUI_GetSelected(); if (obj == (guiObject_t *)&gui->toggleicon[0] || obj == (guiObject_t *)&gui->toggleicon[1] || obj == (guiObject_t *)&gui->toggleicon[2]) { // skip toggle icon for right/left pressing if (direction == -1) GUI_SetSelected((guiObject_t *)&gui->revert); else { GUI_SetSelected((guiObject_t *)&gui->symbolicon[0]); } } #endif }
void PAGE_SwitchAssignInit(int page) { (void)page; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); refresh_switches(); PAGE_ShowHeader(_tr("Press ENT to change")); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, SWITCHFUNC_LAST, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
void PAGE_TrainConfigInit(int page) { (void)page; int mode = PPMin_Mode(); show_titlerow(mode == PPM_IN_TRAIN1 ? _tr("Trainer Cfg (Channel)") : mode == PPM_IN_TRAIN2 ? _tr("Trainer Cfg (Stick)") : _tr("PPMIn Cfg (Extend)")); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, PPMin_Mode() == PPM_IN_SOURCE ? 3 : 3 + MAX_PPM_IN_CHANNELS, row3_cb, NULL, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
void PAGE_TxConfigureInit(int page) { (void)page; cp->enable = CALIB_NONE; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); PAGE_ShowHeader(_tr("Configure")); cp->total_items = 0; GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, ITEM_LAST, row_cb, getobj_cb, size_cb, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
static void _show_page() { PAGE_SetActionCB(_action_cb); //PAGE_ShowHeader(_tr("Trim")); // no title for devo10 PAGE_ShowHeader(_tr("Input")); GUI_CreateLabelBox(&gui->steplbl, 40, 0, 30, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Step")); // no enought space in Devo10, so just display trim + in the 1st page //GUI_CreateLabelBox(w + 40, 0, 0, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Trim -")); GUI_CreateLabelBox(&gui->trimposlbl, 80, 0, 30, ITEM_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Trim +")); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, NUM_TRIMS, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
void PAGE_EditCurvesInit(int page) { (void)page; struct Curve *curve = edit->curveptr; u8 type = CURVE_TYPE(curve); PAGE_SetActionCB(action_cb); edit->pointnum = 0; edit->reverse = MIXER_SRC_IS_INV(pagemem.u.mixer_page.cur_mixer->src); if ((type == CURVE_EXPO || type == CURVE_DEADBAND) && curve->points[0] == curve->points[1]) { edit->pointnum = -1; } edit->curve = *curve; GUI_CreateTextSelectPlate(&gui->name, NAME_X, 0, NAME_W, HEADER_HEIGHT, &TEXTSEL_FONT, NULL, set_curvename_cb, NULL); GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, HEADER_WIDGET_HEIGHT, &BUTTON_FONT , NULL, okcancel_cb, (void *)_tr("Save")); // Draw a line if (UNDERLINE) GUI_CreateRect(&gui->rect, 0, HEADER_WIDGET_HEIGHT, LCD_WIDTH, 1, &DEFAULT_FONT); u8 space = LINE_SPACE; u8 y = space; if (type >= CURVE_3POINT) { GUI_CreateLabelBox(&gui->smoothlbl, LABEL_X, y, LABEL1_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Smooth")); GUI_CreateTextSelectPlate(&gui->smooth, TEXTSEL1_X, y, TEXTSEL1_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_smooth_cb, NULL); y += space; GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL2_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Point")); GUI_CreateTextSelectPlate(&gui->point, TEXTSEL2_X, y, TEXTSEL2_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_pointnum_cb, NULL); } else if(type == CURVE_DEADBAND || type == CURVE_EXPO) { GUI_CreateLabelBox(&gui->pointlbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Pos/Neg")); y += space; GUI_CreateTextSelectPlate(&gui->point, LABEL_X, y, LABEL_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_expopoint_cb, NULL); } y += space; GUI_CreateLabelBox(&gui->valuelbl, LABEL_X, y , LABEL_W, LINE_HEIGHT, &LABEL_FONT, NULL, NULL, _tr("Value")); y += VALUE_Y_OFFSET; GUI_CreateTextSelectPlate(&gui->value, VALUE_X, y, LABEL_W, LINE_HEIGHT, &TEXTSEL_FONT, NULL, set_value_cb, NULL); GUI_CreateXYGraph(&gui->graph, GRAPH_X, GRAPH_Y, GRAPH_W, GRAPH_H, CHAN_MIN_VALUE, CHAN_MIN_VALUE, CHAN_MAX_VALUE, CHAN_MAX_VALUE, 0, 0, //CHAN_MAX_VALUE / 4, CHAN_MAX_VALUE / 4, show_curve_cb, NULL, touch_cb, &edit->curve); GUI_SetSelected((guiObject_t *)&gui->point); }
void select_for_move(guiLabel_t *obj) { GUI_SetSelected((guiObject_t *)obj); notify_cb((guiObject_t *)obj); int idx = guielem_idx((guiObject_t *)obj); if (lp->selected_for_move == idx) return; if (lp->selected_for_move >= 0) { gui->elem[lp->selected_for_move].desc.font_color ^= 0xffff; gui->elem[lp->selected_for_move].desc.fill_color ^= 0xffff; GUI_Redraw((guiObject_t *)&gui->elem[lp->selected_for_move]); } set_selected_for_move(idx); gui->elem[lp->selected_for_move].desc.font_color ^= 0xffff; gui->elem[lp->selected_for_move].desc.fill_color ^= 0xffff; }
void PAGE_ModelConfigInit(int page) { (void)page; switch (Model.type) { case MODELTYPE_HELI: show_titlerow(_tr("Helicopter")); break; case MODELTYPE_PLANE: show_titlerow(_tr("Airplane")); break; case MODELTYPE_MULTI: show_titlerow(_tr("Multirotor")); break; } if (Model.type == MODELTYPE_HELI) { GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, ITEM_LAST, row_cb, NULL, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); } }
void PAGE_LayoutEditInit(int page) { (void)page; PAGE_SetActionCB(_layaction_cb); lp->selected_x = 0; lp->selected_y = 0; for (int i = 0 ; i < 5; i++) gui->desc[i] = (struct LabelDesc){ .font = MICRO_FONT.font, .font_color = 0xffff, .fill_color = 0x0000, .outline_color = 0xffff, .style = LABEL_SQUAREBOX, }; gui->desc[1].style = LABEL_BRACKET; //Special case for trims struct LabelDesc micro = MICRO_FONT; struct LabelDesc rect = MICRO_FONT; micro.style = LABEL_LEFT; rect.fill_color = 0x0000; rect.outline_color = 0x0000; GUI_CreateRect(&gui->editelem, 41, 1, 9, 5, &rect); gui->editelem.CallBack = move_cb; GUI_CreateLabel(&gui->xlbl, 0, 1, NULL, micro, "X:"); GUI_CreateLabelBox(&gui->x, 8, 1, 13, 6, µ, pos_cb, NULL, (void *) 0L); GUI_CreateLabel(&gui->ylbl, 22, 1, NULL, micro, "Y:"); GUI_CreateLabelBox(&gui->y, 30, 1, 9, 6, µ, pos_cb, NULL, (void *) 1L); //gui->y must be the last element! GUI_SelectionNotify(notify_cb); draw_elements(); if(OBJ_IS_USED(&gui->elem[0])) GUI_SetSelected((guiObject_t *)&gui->elem[0]); } static void xpos_cb(guiObject_t *obj, int dir, void *data) { (void)obj; (void)data; if (lp->selected_for_move >= 0) { int x = GUI_TextSelectHelper(lp->selected_x, 0, LCD_WIDTH-lp->selected_w, dir, 1, 10, NULL); if (x != lp->selected_x) { lp->selected_x = x; move_elem(); } } }
void PAGE_ReorderInit(int page) { (void)page; int i; int requested = rl.max; if (rl.max < rl.count) rl.max = rl.count; for(i = 0; i < rl.max; i++) { if (i < rl.count) rl.list[i] = i+1; else rl.list[i] = 0; } u8 space = LINE_HEIGHT; u8 y = 0; guiObject_t *obj = GUI_CreateButtonPlateText(&gui->up, ROW1_X, y, ROW1_W, LINE_HEIGHT, &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)MOVE_UP); GUI_SetSelected(obj); GUI_CreateButtonPlateText(&gui->down, ROW2_X, y, ROW1_W , LINE_HEIGHT, &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)MOVE_DOWN); y += space; GUI_CreateTextSelectPlate(&gui->value, ROW1_X, y, BUTTON_W, LINE_HEIGHT, &DEFAULT_FONT, NULL, value_val_cb, NULL); y += space; GUI_CreateButtonPlateText(&gui->apply, ROW1_X, y, BUTTON_W, LINE_HEIGHT, &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)APPLY); y += space; GUI_CreateTextSelectPlate(&gui->copy, ROW1_X, y, BUTTON_W, LINE_HEIGHT, &DEFAULT_FONT, NULL, copy_val_cb, NULL); if (requested) { y += space; GUI_CreateButtonPlateText(&gui->insert, ROW1_X, y, ROW1_W, LINE_HEIGHT, &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)INSERT); GUI_CreateButtonPlateText(&gui->remove, ROW2_X, y, ROW1_W, LINE_HEIGHT, &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)REMOVE); } GUI_CreateButtonPlateText(&gui->save, SAVE_X, 0, SAVE_W, LINE_HEIGHT, &DEFAULT_FONT, NULL, 0x0000, okcancel_cb, (void *)_tr("Save")); GUI_CreateScrollable(&gui->scrollable, LABEL_X, LINE_HEIGHT, LCD_WIDTH - LABEL_X , LCD_HEIGHT-LINE_HEIGHT, LINE_SPACE, rl.max, row_cb, NULL, NULL, NULL); GUI_SetSelectable((guiObject_t *)&gui->scrollable, 0); }
static void _edit_cb(guiObject_t *obj, const void *data) { (void)obj; PAGE_SetActionCB(_sub_action_cb); struct Trim *trim = MIXER_GetAllTrims(); PAGE_SetModal(1); tp->index = (long)data; tp->trim = trim[tp->index]; PAGE_RemoveAllObjects(); PAGE_ShowHeader(""); // to draw a line only u8 w = 50; GUI_CreateButtonPlateText(&guit->save, LCD_WIDTH - w -1, 0, w, ITEM_HEIGHT, &DEFAULT_FONT, NULL, 0x0000, okcancel_cb, (void *)_tr("Save")); GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, ITEM_LAST, row2_cb, getobj2_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
void PAGE_TravelAdjInit(int page) { (void)page; //if (page < 0 && current_selected > 0) // enter this page from childen page , so we need to get its previous mp->current_selected item // page = current_selected; PAGE_SetActionCB(_action_cb); PAGE_SetModal(0); PAGE_RemoveAllObjects(); PAGE_ShowHeader(("")); // draw a underline only u8 w = 35; u8 x = 50; GUI_CreateLabelBox(&gui->dnlbl, x+2, 0, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Down")); GUI_CreateLabelBox(&gui->uplbl, x + w +5, 0, w, LINE_HEIGHT, &DEFAULT_FONT, NULL, NULL, _tr("Up")); GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, Model.num_channels, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
void PAGE_TelemconfigInit(int page) { (void)label_cb; if (page < 0) page = current_selected; PAGE_SetModal(0); PAGE_RemoveAllObjects(); PAGE_SetActionCB(_action_cb); if (telem_state_check() == 0) { GUI_CreateLabelBox(&gui->msg, 20, 10, 0, 0, &DEFAULT_FONT, NULL, NULL, tp.str); OBJ_SET_USED(&gui->value, 0); // A indication not allow to scroll up/down return; } PAGE_ShowHeader(_tr("Telemetry config")); // using the same name as related menu item to reduce language strings GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LCD_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, ITEM_SPACE, TELEM_NUM_ALARMS, row_cb, getobj_cb, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, current_selected)); }
static void add_dlg_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; GUI_CreateDialog(&gui->dialog, ADD_DIALOG_X, ADD_DIALOG_Y, ADD_DIALOG_W, ADD_DIALOG_H, _tr("Page Config"), NULL, dialog_ok_cb, dtOk, ""); GUI_CreateLabelBox(&gui->dlglbl[0], ADD_LBL_X, ADD_DIALOG_Y + 30, ADD_TS_X - ADD_LBL_X, 0, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Type")); GUI_CreateTextSelect(&gui->dlgts[0], ADD_TS_X, ADD_DIALOG_Y + 30, TEXTSELECT_128, NULL, newelem_cb, NULL); GUI_CreateButton(&gui->dlgbut[0], ADD_ADDBUT_X, ADD_DIALOG_Y + 30, BUTTON_64x16, add_dlgbut_str_cb, newelem_press_cb, (void *)1L); GUI_CreateLabelBox(&gui->dlglbl[1], ADD_LBL_X, ADD_DIALOG_Y + 60, ADD_BUT_X - ADD_LBL_X, 0, &LABEL_FONT, GUI_Localize, NULL, _tr_noop("Template")); GUI_CreateButton(&gui->dlgbut[1], ADD_BUT_X, ADD_DIALOG_Y + 60, BUTTON_96x16, add_dlgbut_str_cb, add_dlgbut_cb, (void *)0L); int y = ADD_DIALOG_Y + 90; for (long i = 0; i < NUM_QUICKPAGES; i++) { GUI_CreateLabelBox(&gui->dlglbl[i+2], ADD_LBL_X, y, ADD_MENU_X - ADD_LBL_X, 0, &LABEL_FONT, menulabel_cb, NULL, (void *)i); GUI_CreateTextSelect(&gui->dlgts[i+2], ADD_MENU_X, y, TEXTSELECT_224, NULL, menusel_cb, (void *)i); y += 24; } GUI_SetSelected((guiObject_t *)&gui->dlgbut[0]); }
void PAGE_ModelProtoInit(int page) { (void) page; show_titlerow(ProtocolNames[Model.protocol]); proto_strs = PROTOCOL_GetOptions(); int idx = 0; int pos = 0; while(idx < NUM_PROTO_OPTS) { if(proto_strs[pos] == NULL) break; while(proto_strs[++pos]) ; pos++; idx++; } GUI_CreateScrollable(&gui->scrollable, 0, HEADER_HEIGHT, LCD_WIDTH, LCD_HEIGHT - HEADER_HEIGHT, LINE_SPACE, idx, row2_cb, NULL, NULL, NULL); GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, 0)); }
static int scroll_cb(guiObject_t *parent, u8 pos, s8 direction, void *data) { (void)parent; (void)pos; int sel_row = -1; int sel_col = 0; guiScrollable_t *scrollable = (guiScrollable_t *)data; int row = scrollable->cur_row; if (direction > 1) row += scrollable->visible_rows; else if (direction < -1) row -= scrollable->visible_rows; else row += direction; if (row < 0) { row = 0; } else if (row > scrollable->item_count - scrollable->visible_rows) { row = scrollable->item_count - scrollable->visible_rows; } guiObject_t *sel = GUI_GetSelected(); if (sel) { if(get_obj_abs_row_col(scrollable, sel, &sel_row, &sel_col)) { if (sel_row < row) { sel_row = row; sel_col = 0; } } else { sel_row = -1; } } create_scrollable_objs(scrollable, -row); if (sel_row >= 0) { if(sel_row >= row + scrollable->visible_rows) { sel_row = row + scrollable->visible_rows - 1; sel_col = 0; } GUI_SetSelected(set_selected_abs_row_col(scrollable, sel_row, sel_col)); } return -1; }
void GUI_TouchRelease() { #if HAS_TOUCH in_touch = 1; #endif if (objTOUCHED) { switch (objTOUCHED->Type) { case Button: GUI_TouchButton(objTOUCHED, -1); break; case Image: GUI_TouchImage(objTOUCHED, NULL, -1); break; case Label: GUI_TouchLabel(objTOUCHED, NULL, -1); break; case TextSelect: GUI_TouchTextSelect(objTOUCHED, NULL, -1); break; case Keyboard: GUI_TouchKeyboard(objTOUCHED, NULL, -1); break; case Scrollbar: GUI_TouchScrollbar(objTOUCHED, NULL, -1); break; default: break; } #if HAS_TOUCH if (change_selection_on_touch) { if (objTOUCHED && OBJ_IS_SELECTABLE(objTOUCHED)) { GUI_SetSelected(objTOUCHED); } } in_touch = 0; #endif objTOUCHED = NULL; } }
static void _show_complex(int page_change) { GUI_SelectionNotify(NULL); mp->max_scroll = 2; int selection = 0; if (page_change) { selection = GUI_ScrollableGetObjRowOffset(&gui->scrollable, GUI_GetSelected()); } mp->firstObj = GUI_CreateScrollable(&gui->scrollable, 0, ITEM_HEIGHT + 1, LEFT_VIEW_WIDTH + ARROW_WIDTH, LCD_HEIGHT - ITEM_HEIGHT -1, 2 * ITEM_SPACE, COMPLEX_LAST - COMMON_LAST, complex_row_cb, simple_getobj_cb, complex_size_cb, NULL); // The following items are not draw in the logical view; GUI_CreateBarGraph(&gui->bar, LEFT_VIEW_WIDTH +10, LCD_HEIGHT - RIGHT_VIEW_HEIGHT -1, 5, RIGHT_VIEW_HEIGHT, CHAN_MIN_VALUE, CHAN_MAX_VALUE, BAR_VERTICAL, eval_chan_cb, NULL); GUI_CreateXYGraph(&gui->graph, 77, LCD_HEIGHT - RIGHT_VIEW_HEIGHT -1, RIGHT_VIEW_HEIGHT, RIGHT_VIEW_HEIGHT, CHAN_MIN_VALUE, CHAN_MIN_VALUE * 5 / 4, CHAN_MAX_VALUE, CHAN_MAX_VALUE * 5 / 4, 0, 0, eval_mixer_cb, curpos_cb, touch_cb, mp->cur_mixer); if (page_change) { GUI_SetSelected(GUI_ShowScrollableRowOffset(&gui->scrollable, selection)); } else { GUI_Select1stSelectableObj(); // bug fix: muset reset to 1st selectable item, otherwise ,the focus will be wrong } }