static int PreviousField(lua_State *L) { Ihandle *h1 = iuplua_checkihandle(L,1); Ihandle *h2 = IupPreviousField(h1); iuplua_pushihandle(L,h2); return 1; }
int iupKeyProcessNavigation(Ihandle* ih, int code, int shift) { /* this is called after K_ANY is processed, so the user may change its behavior */ if (code == K_cTAB) { int is_multiline = iupAttribGetInt(ih, "_IUP_MULTILINE_TEXT"); if (is_multiline) { if (shift) IupPreviousField(ih); else IupNextField(ih); return 1; } } else if (code == K_TAB || code == K_sTAB) { int is_multiline = iupAttribGetInt(ih, "_IUP_MULTILINE_TEXT"); if (!is_multiline) { if (code == K_sTAB || shift) IupPreviousField(ih); else IupNextField(ih); return 1; } } else if (code == K_UP || code == K_DOWN) { int is_button = (IupClassMatch(ih, "button") || IupClassMatch(ih, "toggle")); if (is_button) { if (code == K_UP) iupFocusPrevious(ih); else iupFocusNext(ih); return 1; } } else if (code==K_ESC) { Ihandle* bt = IupGetAttributeHandle(IupGetDialog(ih), "DEFAULTESC"); if (iupObjectCheck(bt) && IupClassMatch(bt, "button")) iupdrvActivate(bt); return 1; } else if (code==K_CR || code==K_cCR) { int is_multiline = iupAttribGetInt(ih, "_IUP_MULTILINE_TEXT"); if ((code==K_CR && !is_multiline) || (code==K_cCR && is_multiline)) { Ihandle* bt = IupGetAttributeHandle(IupGetDialog(ih), "DEFAULTENTER"); if (iupObjectCheck(bt) && IupClassMatch(bt, "button")) iupdrvActivate(bt); return 1; } } return 0; }
int iupKeyProcessNavigation(Ihandle* ih, int key, int shift) { /* this is called after K_ANY is processed, so the user may change its behavior */ if (key == K_cTAB) { int is_multiline = (iupStrEqual(ih->iclass->name, "multiline") || (iupStrEqual(ih->iclass->name, "text") && IupGetInt(ih, "MULTILINE"))); if (is_multiline) { if (shift) IupPreviousField(ih); else IupNextField(ih); return 0; /* abort default processing */ } } else if (key == K_TAB || key == K_sTAB) { int is_multiline = (iupStrEqual(ih->iclass->name, "multiline") || (iupStrEqual(ih->iclass->name, "text") && IupGetInt(ih, "MULTILINE"))); if (!is_multiline) { if (key == K_sTAB) IupPreviousField(ih); else IupNextField(ih); return 0; /* abort default processing */ } } else if (key == K_UP || key == K_DOWN) { int is_button = (iupStrEqual(ih->iclass->name, "button") || iupStrEqual(ih->iclass->name, "toggle")); if (is_button) { if (key == K_UP) iupFocusPrevious(ih); else iupFocusNext(ih); return 0; /* abort default processing */ } } else if (key==K_ESC) { Ihandle* bt = IupGetAttributeHandle(IupGetDialog(ih), "DEFAULTESC"); if (iupObjectCheck(bt) && iupStrEqual(bt->iclass->name, "button")) iupdrvActivate(bt); return 0; /* abort default processing */ } else if (key==K_CR || key==K_cCR) { int is_multiline = (iupStrEqual(ih->iclass->name, "multiline") || (iupStrEqual(ih->iclass->name, "text") && IupGetInt(ih, "MULTILINE"))); if ((key==K_CR && !is_multiline) || (key==K_cCR && is_multiline)) { Ihandle* bt = IupGetAttributeHandle(IupGetDialog(ih), "DEFAULTENTER"); if (iupObjectCheck(bt) && iupStrEqual(bt->iclass->name, "button")) iupdrvActivate(bt); return 0; /* abort default processing */ } } return 1; }
static void PreviousField(void) { iuplua_pushihandle(IupPreviousField(iuplua_checkihandle(1))); }