示例#1
0
文件: dialogs.c 项目: F-D-R/deviation
void PAGE_ShowSafetyDialog()
{
    if (dialog) {
        u64 unsafe = safety_check();
        if (! unsafe) {
            DialogClose(dialog, 0);
            safety_confirmed();
        } 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, DIALOG1_X, DIALOG1_Y,
                 DIALOG1_WIDTH, DIALOG1_HEIGHT, NULL, safety_string_cb, safety_ok_cb, dtOk, NULL);
    }
}
示例#2
0
void dlgbut_presscancel_cb(struct guiObject *obj, const void *data)
{
    (void)obj;
    struct guiObject *dlgObj = (struct guiObject *)data;
    DialogClose(dlgObj, 0);
}
示例#3
0
文件: dialogs.c 项目: F-D-R/deviation
void PAGE_CloseBindingDialog()
{
    if (dialog) {
        DialogClose(dialog, 0);
    }
}
示例#4
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;
}