Esempio n. 1
0
unsigned GUI_GetRemappedButtons()
{
    if (USE_4BUTTON_MODE) {
        if (objACTIVE) {
            return CHAN_ButtonMask(BUT_UP) | CHAN_ButtonMask(BUT_DOWN);
        }
    }
    return 0;
}
Esempio n. 2
0
void MIXER_RegisterTrimButtons()
{
    int i;
    BUTTON_UnregisterCallback(&button_action);
    u32 mask = 0;
    for (i = 0; i < NUM_TRIMS; i++) {
        mask |= CHAN_ButtonMask(Model.trims[i].neg);
        mask |= CHAN_ButtonMask(Model.trims[i].pos);
    }
    BUTTON_RegisterCallback(&button_action, mask, BUTTON_PRESS | BUTTON_LONGPRESS | BUTTON_RELEASE, MIXER_UpdateTrim, NULL);
}
Esempio n. 3
0
void PAGE_Init()
{
    cur_page = sizeof(pages) / sizeof(struct page) - 1;
    cur_section = 0;
    modal = 0;
    GUI_RemoveAllObjects();
    enter_cmd = NULL;
    exit_cmd = NULL;
    BUTTON_RegisterCallback(&button_action,
        CHAN_ButtonMask(BUT_ENTER) | CHAN_ButtonMask(BUT_EXIT)
        | CHAN_ButtonMask(BUT_RIGHT) | CHAN_ButtonMask(BUT_LEFT),
        BUTTON_PRESS | BUTTON_LONGPRESS, page_change_cb, NULL);
    PAGE_ChangeByID(PAGEID_SPLASH);
    //PAGE_ChangeByID(PAGEID_MAIN);
}
Esempio n. 4
0
void PAGE_USBInit(int page)
{
    (void)page;
    PAGE_SetModal(0);
    _draw_page(0);
    BUTTON_RegisterCallback(&up->action, CHAN_ButtonMask(BUT_ENTER), BUTTON_PRESS | BUTTON_RELEASE | BUTTON_PRIORITY, usb_cb, NULL);
}
Esempio n. 5
0
void PAGE_MainLayoutInit(int page)
{
     (void)page;
    memset(lp, 0, sizeof(*lp));
    BUTTON_RegisterCallback(&action,
          CHAN_ButtonMask(BUT_ENTER)
          | CHAN_ButtonMask(BUT_EXIT)
          | CHAN_ButtonMask(BUT_LEFT)
          | CHAN_ButtonMask(BUT_LEFT)
          | CHAN_ButtonMask(BUT_RIGHT)
          | CHAN_ButtonMask(BUT_UP)
          | CHAN_ButtonMask(BUT_DOWN),
          BUTTON_PRESS | BUTTON_LONGPRESS | BUTTON_PRIORITY, _action_cb, NULL);
    PAGE_ShowHeader(NULL);
    lp->long_press = 0;
    lp->newelem = 0;
    lp->selected_x = 0;
    const u16 color[5] = {
        RGB888_to_RGB565(0xaa, 0x44, 0x44),
        RGB888_to_RGB565(0x44, 0xaa, 0x44),
        RGB888_to_RGB565(0x44, 0x44, 0xaa),
        RGB888_to_RGB565(0x44, 0x44, 0x44),
        RGB888_to_RGB565(0x33, 0x33, 0x33),
        };
    for (int i = 0 ; i < 5; i++)
        gui->desc[i] = (struct LabelDesc){
            .font = 0,
            .font_color = 0xffff,
            .fill_color = color[i],
            .outline_color = 0,
            .style = LABEL_FILL};
    gui->desc[1].font = TINY_FONT.font; //Special case for trims
    GUI_CreateIcon(&gui->newelem, 32, 0, &icons[ICON_LAYOUT_ADD], add_dlg_cb, NULL);
    GUI_CreateIcon(&gui->editelem, 64, 0, &icons[ICON_LAYOUT_CFG], cfg_cb, NULL);
    GUI_SetHidden((guiObject_t *)&gui->editelem, 1);
    //GUI_CreateTextSelect(&gui->newelem, 36, 12, TEXTSELECT_96, newelem_press_cb, newelem_cb, NULL);
    GUI_CreateLabel(&gui->xlbl, 80+18, 9, NULL, TITLE_FONT, "X");
    GUI_CreateTextSelect(&gui->x, 88+18, 8, TEXTSELECT_64, NULL, xpos_cb, NULL);
    GUI_CreateLabel(&gui->ylbl, 164+16, 9, NULL, TITLE_FONT, "Y");
    GUI_CreateTextSelect(&gui->y, 172+16, 8, TEXTSELECT_64, NULL, ypos_cb, NULL);

    GUI_SelectionNotify(notify_cb);
    draw_elements();
    if (show_config_menu) {
        lp->selected_for_move = show_config_menu;
        show_config();
        show_config_menu = 0;
    }
}
void PAGE_MainLayoutEvent()
{
}
void PAGE_MainLayoutExit()
{
    BUTTON_UnregisterCallback(&action);
}
Esempio n. 6
0
u32 ROTARY_Scan()
{
    int last_rotary;
    u32 result = 0;

    result |= !GPIO_pin_get(ROTARY_PRESS_PIN) ? CHAN_ButtonMask(BUT_ENTER) : 0;

    last_rotary = rotary;
    if (last_rotary) {
        u32 rotary_clock = CLOCK_getms();
        // To prevent rotary to generate button clicks too frequently we register
        // an event in 'result' not more often than every ROTARY_TIMEOUT msec
        if (rotary_clock > last_rotary_clock) {
            result |= last_rotary > 0 ? CHAN_ButtonMask(BUT_DOWN) : CHAN_ButtonMask(BUT_UP);
            last_rotary_clock = rotary_clock + ROTARY_TIMEOUT;
        }
        rotary = 0;
    }

    return result;
}
Esempio n. 7
0
guiObject_t *GUI_CreateKeyboard(guiKeyboard_t *keyboard, enum KeyboardType type, char *text, s32 max_size,
        void (*CallBack)(struct guiObject *obj, void *data), void *cb_data)
{
    struct guiObject   *obj = (guiObject_t *)keyboard;
    CLEAR_OBJ(keyboard);

    obj->Type = Keyboard;
    OBJ_SET_MODAL(obj, 1);
    connect_object(obj);

    keyboard->type = type;
    keyboard->text = text;
    keyboard->flags = FLAG_BUTTON;
    keyboard->max_size = max_size;
    keyboard->last_row = 0;
    keyboard->last_col = 0;
    keyboard->lastchar = array[keyboard->type][0][0];
    BUTTON_RegisterCallback(&keyboard->action,
         CHAN_ButtonMask(BUT_LEFT)
         | CHAN_ButtonMask(BUT_RIGHT)
         | CHAN_ButtonMask(BUT_UP)
         | CHAN_ButtonMask(BUT_DOWN)
         | CHAN_ButtonMask(BUT_ENTER)
         | CHAN_ButtonMask(BUT_EXIT),
         BUTTON_PRESS | BUTTON_LONGPRESS | BUTTON_PRIORITY,
         press_cb, obj);
    keyboard->CallBack = CallBack;
    keyboard->cb_data = cb_data;
    
    return obj;
}
Esempio n. 8
0
void GUI_HandleButtons(u8 enable)
{
    if (! enable)
        BUTTON_UnregisterCallback(&button_action);
    else 
        BUTTON_RegisterCallback(&button_action,
                CHAN_ButtonMask(BUT_LEFT)
                | CHAN_ButtonMask(BUT_RIGHT)
                | CHAN_ButtonMask(BUT_UP)
                | CHAN_ButtonMask(BUT_DOWN)
                | CHAN_ButtonMask(BUT_ENTER)
                | CHAN_ButtonMask(BUT_EXIT),
                BUTTON_PRESS | BUTTON_RELEASE | BUTTON_LONGPRESS | BUTTON_PRIORITY,
                handle_buttons,
                NULL);
}
Esempio n. 9
0
void PAGE_Init()
{
    cur_page = 0;
    modal = 0;
    page_scrollable = NULL;
    GUI_RemoveAllObjects();
    enter_cmd = NULL;
    exit_cmd = NULL;
    BUTTON_RegisterCallback(&button_action,
          CHAN_ButtonMask(BUT_ENTER)
          | CHAN_ButtonMask(BUT_EXIT)
          | CHAN_ButtonMask(BUT_LEFT)
          | CHAN_ButtonMask(BUT_RIGHT)
          | CHAN_ButtonMask(BUT_UP)
          | CHAN_ButtonMask(BUT_DOWN),
          BUTTON_PRESS | BUTTON_LONGPRESS | BUTTON_RELEASE | BUTTON_PRIORITY, page_change_cb, NULL);
    PAGE_ChangeByID(PAGEID_SPLASH, 0);
    //PAGE_ChangeByID(PAGEID_MAIN);
}
Esempio n. 10
0
void PAGE_ShowReorderList(u8 *list, u8 count, u8 selected, u8 max_allowed, const char *(*text_cb)(u8 idx), void(*return_page)(u8 *))
{
    rl.return_page = return_page;
    rl.list = list;
    rl.selected = selected;
    rl.copyto = selected;
    rl.count = count;
    rl.text_cb = text_cb;
    rl.max = max_allowed;
    if (rl.max < count)
        rl.max = count;

    PAGE_RemoveAllObjects();
    PAGE_SetModal(1);
    current_selected = 0;
    int i;
    for(i = 0; i < rl.max; i++) {
        if (i < count)
            list[i] = i+1;
        else
            list[i] = 0;
    }

    u8 space = LINE_HEIGHT;
    u8 y = 0;
    u8 w = 55;

    guiObject_t *obj = GUI_CreateButtonPlateText(&gui->up, 0, y, w/2 -2, LINE_HEIGHT,
            &DEFAULT_FONT,  _show_button_cb, 0x0000, press_button_cb, (void *)MOVE_UP);
    GUI_SetSelected(obj);
    GUI_CreateButtonPlateText(&gui->down, w/2, y, w/2 -2 , LINE_HEIGHT,
            &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)MOVE_DOWN);
    y += space;
    GUI_CreateTextSelectPlate(&gui->value, 0, y, w, LINE_HEIGHT,
            &DEFAULT_FONT, NULL, copy_val_cb, NULL);
    y += space;
    GUI_CreateButtonPlateText(&gui->apply, 0, y, w, LINE_HEIGHT,
            &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)APPLY);
    if (max_allowed) {
        y += space;
        GUI_CreateButtonPlateText(&gui->insert, 0, y, w/2 -2, LINE_HEIGHT,
                    &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)INSERT);
        GUI_CreateButtonPlateText(&gui->remove, w/2, y, w/2 - 2, LINE_HEIGHT,
                    &DEFAULT_FONT, _show_button_cb, 0x0000, press_button_cb, (void *)REMOVE);
    }
    y += space;
    GUI_CreateButtonPlateText(&gui->save, (w -30)/2, y, 30, LINE_HEIGHT,
        &DEFAULT_FONT, NULL, 0x0000, _okcancel_cb, (void *)_tr("Save"));

    u8 x = w + 4;
    GUI_CreateListBoxPlateText(&gui->list, x, 0, LCD_WIDTH - x , LCD_HEIGHT, rl.max, selected, &DEFAULT_FONT,
        LISTBOX_KEY_RIGHTLEFT, string_cb, select_cb, NULL, NULL);
    GUI_SetSelectable((guiObject_t *)&gui->list, 0);

    PAGE_SetActionCB(NULL);
    // we need to grab the key handler from the listbox to let rl.textsel catch left/right keys when it is selected
    // hence registerCallback has to be used here
    BUTTON_RegisterCallback(&action,
            CHAN_ButtonMask(BUT_ENTER)
            | CHAN_ButtonMask(BUT_EXIT)
            | CHAN_ButtonMask(BUT_LEFT)
            | CHAN_ButtonMask(BUT_RIGHT)
            | CHAN_ButtonMask(BUT_UP)
            | CHAN_ButtonMask(BUT_DOWN),
            BUTTON_PRESS | BUTTON_LONGPRESS | BUTTON_PRIORITY,
            _action_cb, obj);
}
Esempio n. 11
0
unsigned handle_buttons(u32 button, unsigned flags, void *data)
{
    (void)data;
    //When modal, we capture all button presses
    int modalActive = GUI_IsModal() ? 1 : 0;

    if(USE_4BUTTON_MODE) {
        // IN 4 button mode, up/down can also act as left/right for TextSelect
        if (objACTIVE) {
            if (CHAN_ButtonIsPressed(button, BUT_UP)) {
                button = CHAN_ButtonMask(BUT_LEFT);
            } else if (CHAN_ButtonIsPressed(button, BUT_DOWN)) {
                button = CHAN_ButtonMask(BUT_RIGHT);
            } else if (CHAN_ButtonIsPressed(button, BUT_ENTER)) {
                if (flags & BUTTON_RELEASE)
                    objACTIVE = NULL;
            } else if (CHAN_ButtonIsPressed(button, BUT_EXIT)) {
                if (flags & BUTTON_RELEASE)
                    objACTIVE = NULL;
                return 1;
            }
        } else {
            if (objSELECTED && CHAN_ButtonIsPressed(button, BUT_ENTER) && objSELECTED->Type == TextSelect) {
                if (flags & BUTTON_RELEASE) {
                    objACTIVE = objSELECTED;
                }
                return 1;
            }
        }
    }
    //printf("Button: %08x Flags: %08x Active: %08x\n", button, flags, objACTIVE);
    if (CHAN_ButtonIsPressed(button, BUT_LEFT) ||
        CHAN_ButtonIsPressed(button, BUT_RIGHT) ||
        CHAN_ButtonIsPressed(button, BUT_ENTER))
    {
        // Widgets can only handle Left, Right and Enter
        if (objSELECTED)
             return GUI_ObjButton(objSELECTED, button, flags) || modalActive;
        return modalActive;
    }
    if (flags & (BUTTON_LONGPRESS | BUTTON_RELEASE)) {
       if ((flags & BUTTON_HAD_LONGPRESS) & (flags & BUTTON_RELEASE)) {
            //ignore long-press release
            return modalActive;
        }
        else if (CHAN_ButtonIsPressed(button, BUT_DOWN) || CHAN_ButtonIsPressed(button, BUT_UP)) 
        {
            
            struct guiObject *obj = (CHAN_ButtonIsPressed(button, BUT_DOWN) || ! objSELECTED)
                    ? GUI_GetNextSelectable(objSELECTED)
                    : GUI_GetPrevSelectable(objSELECTED);
            if (obj && obj != objSELECTED) {
                GUI_SetSelected(obj);
            }
        } else if (! (flags & BUTTON_LONGPRESS) && objSELECTED && CHAN_ButtonIsPressed(button, BUT_EXIT)) {
            if (objDIALOG) {
                //Why doesn't the dialog handle its own buttons?
                DialogClose(objDIALOG, 0);
            } else {
                OBJ_SET_DIRTY(objSELECTED, 1);
                objSELECTED = NULL;
                if (select_notify)
                    select_notify(objSELECTED);
            }
        }
    } else if (! objSELECTED && CHAN_ButtonIsPressed(button, BUT_EXIT)) {
        // We need to tell the button handler that we will handle this press
        // But we ignore an EXIT if there is nothing selected
        return modalActive;
    }
    return 1;
}