Example #1
0
static void show_page(int page)
{
    enum {
        COL1 = (30 + ((LCD_WIDTH - 320) / 2)),
        COL2 = (150 + ((LCD_WIDTH - 320) / 2)),
        LABEL_WIDTH = (COL2 - COL1),
        ROW1 = (40 + ((LCD_HEIGHT - 240) / 2)),
        ROW_HEIGHT = 24,
    };
    struct mixer_page * mp = &pagemem.u.mixer_page;
    if (mp->firstObj) {
        GUI_RemoveHierObjects(mp->firstObj);
        FullRedraw = REDRAW_ONLY_DIRTY;
        mp->firstObj = NULL;
        GUI_DrawBackground(0, 32, LCD_WIDTH - 16, LCD_HEIGHT - 32);
    }
    for (long i = 0; i < ENTRIES_PER_PAGE; i++) {
        int row = ROW1 + ROW_HEIGHT * i;
        long ch = page  + i;
        if (ch >= Model.num_channels)
            break;
        guiObject_t *obj = GUI_CreateLabelBox(&gui->name[i], COL1, row, LABEL_WIDTH, 16, &LABEL_FONT, STDMIX_channelname_cb, NULL, (void *)(ch));
        if (! mp->firstObj)
            mp->firstObj = obj;
        GUI_CreateTextSelect(&gui->value[i], COL2, row, TEXTSELECT_128, toggle_reverse_cb, reverse_cb, (void *)(ch));
    }
}
Example #2
0
static int scroll_cb(guiObject_t *parent, u8 pos, s8 direction, void *data)
{
    (void)data;
    (void)parent;
    int page = pos + (direction > 0 ? 1 : -1);
    if (page < 0) {
        return pos;
    } else if(page >= GUI_GetScrollbarNumItems(&gui->scrollbar)) {
        return pos;
    }
    int idx = 0;
    if (page) {
        for(int i = 0; i < NUM_SYMBOL_COLS * page; i++) {
            idx = get_next_icon(idx);
            if (idx < 0) {
                idx = 0;
                break;
            }
        }
    }
    GUI_RemoveHierObjects((guiObject_t *)&gui->symbolicon[0]);
    FullRedraw = REDRAW_ONLY_DIRTY;
    GUI_DrawBackground(0, 79, LCD_WIDTH - 16, LCD_HEIGHT - 79);
    show_icons((long)data, idx);
    return page;
}
Example #3
0
static void show_page(int page)
{
    enum {
        COL1 = (10 + ((LCD_WIDTH - 320) / 2)),
        COL2 = (90 + ((LCD_WIDTH - 320) / 2)),
        COL3 = (196 + ((LCD_WIDTH - 320) / 2)),
        LABEL_WIDTH = (COL2 - COL1),
        ROW1 = (56 + ((LCD_HEIGHT - 240) / 2)),
        ROW_HEIGHT = 22,
    };
    struct mixer_page * mp = &pagemem.u.mixer_page;
    if (mp->firstObj) {
        GUI_RemoveHierObjects(mp->firstObj);
        mp->firstObj = NULL;       
    }   
    for (long i = 0; i < ENTRIES_PER_PAGE; i++) {
        int row = ROW1 + ROW_HEIGHT * i;
        long ch = page  + i;
        if (ch >= Model.num_channels)
            break;
        mp->limit = MIXER_GetLimit(ch);
        guiObject_t *obj = GUI_CreateLabelBox(&gui->name[i], COL1, row, LABEL_WIDTH, 16, &LABEL_FONT, STDMIX_channelname_cb, NULL, (void *)ch);
        if (! mp->firstObj)
            mp->firstObj = obj;
        GUI_CreateTextSelect(&gui->down[i], COL2, row, TEXTSELECT_96, NULL, traveldown_cb, (void *)ch);
        GUI_CreateTextSelect(&gui->up[i], COL3, row, TEXTSELECT_96, NULL, travelup_cb, (void *)ch);
    }
}
Example #4
0
void show_config()
{
    int count = 0;
    int row_idx = 0;
    long type;
    if (OBJ_IS_USED(&gui->dialog))
        GUI_RemoveHierObjects((guiObject_t *)&gui->dialog);
    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));
}
Example #5
0
void GUI_RemoveObj(struct guiObject *obj)
{
    switch(obj->Type) {
    case Dialog: {
        GUI_HandleModalButtons(0);
        GUI_RemoveHierObjects(obj->next);
        objDIALOG = NULL;
        break;
    }
    case Scrollbar:
        BUTTON_UnregisterCallback(&((guiScrollbar_t *)obj)->action);
        break;
    case Scrollable:
        GUI_RemoveScrollableObjs(obj);
        GUI_RemoveObj((guiObject_t *)&((guiScrollable_t *)obj)->scrollbar);
        break;
    case Keyboard:
        BUTTON_UnregisterCallback(&((guiKeyboard_t *)obj)->action);
        break;
    case Image:
    case XYGraph:
        _GUI_UnmapWindow(1);
        break;
    default: break;
    }
    
    if (objTOUCHED == obj)
        objTOUCHED = NULL;
    if (objSELECTED == obj)
        objSELECTED = NULL;
    OBJ_SET_USED(obj, 0);
    // Reattach linked list
    struct guiObject *prev = objHEAD;
    if (prev == obj) {
        objHEAD = obj->next;
    } else {
        while(prev) {
            if(prev->next == obj) {
                prev->next = obj->next;
                break;
            }
            prev = prev->next;
        }
    }
    FullRedraw = objHEAD ? REDRAW_IF_NOT_MODAL : REDRAW_EVERYTHING;
}
Example #6
0
static void show_page(int page)
{
    struct mixer_page * mp = &pagemem.u.mixer_page;
    if (mp->firstObj) {
        GUI_RemoveHierObjects(mp->firstObj);
        mp->firstObj = NULL;       
    }   
    for (long i = 0; i < ENTRIES_PER_PAGE; i++) {
        int row = 40 + ((LCD_HEIGHT - 240) / 2) + 24 * i;
        long ch = page  + i;
        if (ch >= Model.num_channels)
            break;
        guiObject_t *obj = GUI_CreateLabelBox(&gui->name[i], 30 + ((LCD_WIDTH - 320) / 2), row, 0, 16, &DEFAULT_FONT, STDMIX_channelname_cb, NULL, (void *)(ch));
        if (! mp->firstObj)
            mp->firstObj = obj;
        GUI_CreateTextSelect(&gui->value[i], 150 + ((LCD_WIDTH - 320) / 2), row, TEXTSELECT_128, toggle_reverse_cb, reverse_cb, (void *)(ch));
    }
}
Example #7
0
static void show_page(int page)
{
    struct mixer_page * mp = &pagemem.u.mixer_page;
    if (mp->firstObj) {
        GUI_RemoveHierObjects(mp->firstObj);
        mp->firstObj = NULL;       
    }   
    for (long i = 0; i < ENTRIES_PER_PAGE; i++) {
        int row = 56 + ((LCD_HEIGHT - 240) / 2) + 22 * i;
        long ch = page  + i;
        if (ch >= Model.num_channels)
            break;
        mp->limit = MIXER_GetLimit(ch);
        guiObject_t *obj = GUI_CreateLabelBox(&gui->name[i], 10 + ((LCD_WIDTH - 320) / 2), row, 0, 16, &DEFAULT_FONT, STDMIX_channelname_cb, NULL, (void *)ch);
        if (! mp->firstObj)
            mp->firstObj = obj;
        GUI_CreateTextSelect(&gui->down[i], 90 + ((LCD_WIDTH - 320) / 2), row, TEXTSELECT_96, NULL, traveldown_cb, (void *)ch);
        GUI_CreateTextSelect(&gui->up[i], 196 + ((LCD_WIDTH - 320) / 2), row, TEXTSELECT_96, NULL, travelup_cb, (void *)ch);
    }
}
Example #8
0
static void _show_page()
{
    // Note for future maintenance: DO NOT use logical view to draw all the channel items at a time for this page:  I just
    // gave it a try, it spent very long time to construct all the 30 items and could trigger watch-dog to reboot !!!
    static const int XOFFSET = ((LCD_WIDTH - 320) / 2);
    int init_y = LCD_HEIGHT == 240 ? 44 : 36;
    int i;
    if (mp->firstObj) {
        GUI_RemoveHierObjects(mp->firstObj);
        mp->firstObj = NULL;
    }
    struct Mixer *mix = MIXER_GetAllMixers();
    for (i = 0; i < ENTRIES_PER_PAGE; i++) {
        guiObject_t *obj;
        u8 idx;
        int row = init_y + 24 * i;
        u8 ch = mp->top_channel + i;
        if (ch >= Model.num_channels)
            ch += (NUM_OUT_CHANNELS - Model.num_channels);
        if (ch < NUM_OUT_CHANNELS) {
            obj = GUI_CreateButton(&gui->name[i].but, XOFFSET+4, row, BUTTON_64x16, MIXPAGE_ChanNameProtoCB,
                                   0x0000, limitselect_cb, (void *)((long)ch));
        } else if(! _is_virt_cyclic(ch)) {
            obj = GUI_CreateButton(&gui->name[i].but, XOFFSET+4, row, BUTTON_64x16, MIXPAGE_ChanNameProtoCB,
                                   0x0000, virtname_cb, (void *)(long)ch);
        } else {
            obj = GUI_CreateLabelBox(&gui->name[i].lbl, XOFFSET+4, row, 64, 16, &DEFAULT_FONT,
                                   MIXPAGE_ChanNameProtoCB, NULL, (void *)((long)ch));
        }
        if (! mp->firstObj)
            mp->firstObj = obj;
        GUI_CreateButton(&gui->tmpl[i], XOFFSET+132, row, BUTTON_64x16, template_name_cb, 0x0000,
                         templateselect_cb, (void *)((long)ch));
        for (idx = 0; idx < NUM_MIXERS; idx++)
            if (mix[idx].src && mix[idx].dest == ch)
                break;
        if (idx != NUM_MIXERS) {
            enum TemplateType template = MIXER_GetTemplate(ch);
            GUI_CreateLabelBox(&gui->src[i], XOFFSET+68, row, 60, 16, &NARROW_FONT, show_source, NULL, &mix[idx].src);
            if (template == MIXERTEMPLATE_EXPO_DR) {
Example #9
0
void MIXPAGE_ChangeTemplate(int show_header)
{
    if (mp->cur_template != MIXERTEMPLATE_COMPLEX
        || mp->cur_mixer < mp->mixer
        || mp->cur_mixer > mp->mixer + mp->num_mixers)
    {
        mp->cur_mixer = mp->mixer;
    }
    if (Model.type == MODELTYPE_PLANE && mp->cur_template > MIXERTEMPLATE_MAX_PLANE) {
        mp->cur_template = MIXERTEMPLATE_NONE;
    }
    sync_mixers();
    if (show_header) {
        PAGE_RemoveAllObjects();
        _show_titlerow();
    } else {
        GUI_RemoveHierObjects(mp->firstObj); 
    }
    mp->firstObj = NULL;
    switch(mp->cur_template)  {
    case MIXERTEMPLATE_NONE:
    case MIXERTEMPLATE_CYC1:
    case MIXERTEMPLATE_CYC2:
    case MIXERTEMPLATE_CYC3:
        show_none();
        return;
    case MIXERTEMPLATE_SIMPLE:
        _show_simple();
        break;
    case MIXERTEMPLATE_EXPO_DR:
        _show_expo_dr();
        break;
    case MIXERTEMPLATE_COMPLEX:
        _show_complex(0);
        break;
    }
    set_src_enable(CURVE_TYPE(&mp->mixer[0].curve));
}
Example #10
0
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);
    }
}
Example #11
0
static void toggle_press_cb(guiObject_t *obj, const void *data)
{
    if (OBJ_IS_USED(&gui->dialog))
        GUI_RemoveHierObjects((guiObject_t *)&gui->dialog);
    TGLICO_Select(obj, data);
}