static void show_iconsel_page(int SelectedIcon) { struct ImageMap img; int toggleinput = MIXER_SRC(Model.pagecfg2.elem[tp->tglidx].src); PAGE_RemoveAllObjects(); PAGE_ShowHeader(INPUT_SourceNameAbbrevSwitch(tempstring, toggleinput)); GUI_CreateButton(&gui->revert, LCD_WIDTH-96-8, 4, BUTTON_96, revert_str_cb, revert_cb, NULL); // Show name of source for toggle icon // style the switch textbox struct LabelDesc outline = { .font = DEFAULT_FONT.font, .style = LABEL_TRANSPARENT, .font_color = DEFAULT_FONT.font_color, .fill_color = DEFAULT_FONT.fill_color, .outline_color = DEFAULT_FONT.outline_color }; GUI_CreateRect(&gui->toggleframe, 80+80*SelectedIcon, 39, 77, 33, &outline); GUI_CreateLabelBox(&gui->switchbox, 4, 47, 70, 22, &NORMALBOX_FONT, NULL, NULL, INPUT_SourceNameAbbrevSwitch(tempstring, Model.pagecfg2.elem[tp->tglidx].src)); int num_positions = INPUT_NumSwitchPos(toggleinput); if(num_positions < 2) num_positions = 2; GUI_CreateLabelBox(&gui->togglelabel[0], 94, 50, 30, 14, &LABEL_FONT, NULL, NULL, _tr("Pos 0")); img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[0]); GUI_CreateImageOffset(&gui->toggleicon[0], 124, 40, TOGGLEICON_WIDTH, TOGGLEICON_HEIGHT, img.x_off, img.y_off, img.file, SelectedIcon == 0 ? tglico_reset_cb : tglico_setpos_cb, (void *)0L); GUI_CreateLabelBox(&gui->togglelabel[1], 174, 50, 30, 14, &LABEL_FONT, NULL, NULL, _tr("Pos 1")); img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[1]); GUI_CreateImageOffset(&gui->toggleicon[1], 204, 40, TOGGLEICON_WIDTH, TOGGLEICON_HEIGHT, img.x_off, img.y_off, img.file, SelectedIcon == 1 ? tglico_reset_cb : tglico_setpos_cb, (void *)1L); if (num_positions == 3) { GUI_CreateLabelBox(&gui->togglelabel[2], 254, 50, 30, 14, &LABEL_FONT, NULL, NULL, _tr("Pos 2")); img = TGLICO_GetImage(Model.pagecfg2.elem[tp->tglidx].extra[2]); GUI_CreateImageOffset(&gui->toggleicon[2], 284, 40, TOGGLEICON_WIDTH, TOGGLEICON_HEIGHT, img.x_off, img.y_off, img.file, SelectedIcon == 2 ? tglico_reset_cb : tglico_setpos_cb, (void *)2L); } int count = get_toggle_icon_count(); int max_scroll = (count + NUM_SYMBOL_COLS - 1) / NUM_SYMBOL_COLS - (NUM_SYMBOL_ROWS - 1); if (max_scroll > 1) GUI_CreateScrollbar(&gui->scrollbar, LCD_WIDTH-16, 80, LCD_HEIGHT-80, max_scroll, NULL, scroll_cb, (void *)(long)SelectedIcon); show_icons(SelectedIcon, 0); } void PAGE_ToggleEditInit(int page) { tp->tglidx = page; memcpy(tp->tglicons, Model.pagecfg2.elem[tp->tglidx].extra, sizeof(tp->tglicons)); show_iconsel_page(0); }
const char *MIXPAGE_ChanNameProtoCB(guiObject_t *obj, const void *data) { (void)obj; u8 ch = (long)data; u8 proto_map_length = PROTO_MAP_LEN; char tmp1[30]; /* See if we need to name the cyclic virtual channels */ if (_is_virt_cyclic(ch)) { switch(ch - NUM_OUT_CHANNELS) { case 0: snprintf(tempstring, sizeof(tempstring), "%s-%s", _tr("CYC"), _tr("AIL")); return tempstring; case 1: snprintf(tempstring, sizeof(tempstring), "%s-%s", _tr("CYC"), _tr("ELE")); return tempstring; case 2: snprintf(tempstring, sizeof(tempstring), "%s-%s", _tr("CYC"), _tr("COL")); return tempstring; } } #if defined(_DEVO7E_256_TARGET_H_) || defined(_T8SG_TARGET_H_) #define SWITCH_NOSTOCK ((1 << INP_HOLD0) | (1 << INP_HOLD1) | \ (1 << INP_FMOD0) | (1 << INP_FMOD1)) if ((Transmitter.ignore_src & SWITCH_NOSTOCK) == SWITCH_NOSTOCK) proto_map_length = PROTO_MAP_LEN - 1; #endif if (ch < proto_map_length && ProtocolChannelMap[Model.protocol]) { INPUT_SourceNameAbbrevSwitch(tmp1, ProtocolChannelMap[Model.protocol][ch]); sprintf(tempstring, "%s%d-%s", (Model.limits[ch].flags & CH_REVERSE) ? "!" : "", (int)(ch + 1), tmp1); } else { INPUT_SourceName(tmp1, ch + NUM_INPUTS + 1); sprintf(tempstring, "%s%s", (ch < Model.num_channels && Model.limits[ch].flags & CH_REVERSE) ? "!" : "", tmp1); } return tempstring; }
static const char *dlgts_cb(guiObject_t *obj, int dir, void *data) { (void)obj; int idx = (long)data; int type = ELEM_TYPE(pc->elem[idx]); switch (type) { case ELEM_SMALLBOX: case ELEM_BIGBOX: { u8 changed = 0; pc->elem[idx].src = GUI_TextSelectHelper(pc->elem[idx].src, 0, NUM_RTC + NUM_TELEM + NUM_TIMERS + NUM_CHANNELS, dir, 1, 1, &changed); if(changed && dir) { pc->elem[idx].src = _adjust_src_for_telemetry(pc->elem[idx].src, dir); } return GetBoxSource(tempstring, pc->elem[idx].src); } case ELEM_BAR: pc->elem[idx].src = GUI_TextSelectHelper(pc->elem[idx].src, 0, NUM_CHANNELS, dir, 1, 1, NULL); return INPUT_SourceName(tempstring, pc->elem[idx].src ? pc->elem[idx].src + NUM_INPUTS : 0); case ELEM_TOGGLE: { pc->elem[idx].src = INPUT_SelectAbbrevSource(pc->elem[idx].src, dir); return INPUT_SourceNameAbbrevSwitch(tempstring, pc->elem[idx].src); } case ELEM_HTRIM: case ELEM_VTRIM: pc->elem[idx].src = GUI_TextSelectHelper(pc->elem[idx].src, 0, NUM_TRIMS, dir, 1, 1, NULL); if (pc->elem[idx].src == 0) return _tr("None"); snprintf(tempstring, sizeof(tempstring), "%s%d", _tr("Trim"),pc->elem[idx].src); return tempstring; } return _tr("None"); }
const char *title_cb(guiObject_t *obj, const void *data) { (void)obj; (void)data; sprintf(tempstring, "%s - ", PAGE_GetName(PAGEID_GYROSENSE)); INPUT_SourceNameAbbrevSwitch(tempstring+strlen(tempstring), mapped_std_channels.switches[SWITCHFUNC_GYROSENSE]); return tempstring; }
const char *STDMIX_TitleString(guiObject_t *obj, const void *data) { (void)obj; int pageid = ((unsigned long)data) & 0xFFFF; int sw = (((unsigned long)data) >> 16) & 0xFFFF; sprintf(tempstring, "%s - ", PAGE_GetName(pageid)); INPUT_SourceNameAbbrevSwitch(tempstring+strlen(tempstring), mapped_std_channels.switches[sw]); return tempstring; }
const char *STDMIX_channelname_cb(guiObject_t *obj, const void *data) { (void)obj; u8 ch = (long)data; if (ch < PROTO_MAP_LEN && ProtocolChannelMap[Model.protocol]) { char tmp1[30]; INPUT_SourceNameAbbrevSwitch(tmp1, ProtocolChannelMap[Model.protocol][ch]); snprintf(tempstring, sizeof(tempstring), "%d-%s", ch+1, tmp1); } else if (ch == 5) snprintf(tempstring, sizeof(tempstring), "%d-%s", ch+1, _tr("PIT")); // aux1 else sprintf(tempstring, "%d-%s%d",ch+1, "AUX", ch -4); //AUX no need to translate return tempstring; }
static const char *set_switch_cb(guiObject_t *obj, int dir, void *data) { if(! GUI_IsTextSelectEnabled(obj)){ return _tr("None"); } u8 *source = (u8 *)data; u8 changed; u8 val = MIXER_SRC(*source); int newval = GUI_TextSelectHelper(val, 0, NUM_SOURCES, dir, 1, 1, &changed); newval = INPUT_GetAbbrevSource(val, newval, dir); if (val != newval) { val = newval; *source = val; } return INPUT_SourceNameAbbrevSwitch(tp->tmpstr, *source); }
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); }
static const char *dlgts_cb(guiObject_t *obj, int dir, void *data) { (void)obj; int idx = (long)data; int type = ELEM_TYPE(pc.elem[idx]); switch (type) { case ELEM_SMALLBOX: case ELEM_BIGBOX: { pc.elem[idx].src = GUI_TextSelectHelper(pc.elem[idx].src, 0, NUM_RTC + NUM_TELEM + NUM_TIMERS + NUM_CHANNELS, dir, 1, 1, NULL); return GetBoxSource(lp.tmp, pc.elem[idx].src); } case ELEM_BAR: pc.elem[idx].src = GUI_TextSelectHelper(pc.elem[idx].src, 0, NUM_CHANNELS, dir, 1, 1, NULL); return INPUT_SourceName(lp.tmp, pc.elem[idx].src ? pc.elem[idx].src + NUM_INPUTS : 0); case ELEM_TOGGLE: { int val = MIXER_SRC(pc.elem[idx].src); int newval = GUI_TextSelectHelper(val, 0, NUM_SOURCES, dir, 1, 1, NULL); newval = INPUT_GetAbbrevSource(val, newval, dir); if (val != newval) { val = newval; pc.elem[idx].src = val; } return INPUT_SourceNameAbbrevSwitch(lp.tmp, pc.elem[idx].src); } case ELEM_HTRIM: case ELEM_VTRIM: pc.elem[idx].src = GUI_TextSelectHelper(pc.elem[idx].src, 0, NUM_TRIMS, dir, 1, 1, NULL); if (pc.elem[idx].src == 0) return _tr("None"); sprintf(lp.tmp, "%s%d", _tr("Trim"),pc.elem[idx].src); return lp.tmp; } return ""; }