struct guiObject *GUI_GetNextSelectable(struct guiObject *origObj) { struct guiObject *obj = origObj, *foundObj = NULL; if (! objHEAD) return NULL; struct guiObject *modalObj = GUI_IsModal(); if (obj && OBJ_IS_SCROLLABLE(obj)) { //The current selected object is scrollable guiScrollable_t *scroll = GUI_FindScrollableParent(obj); obj = GUI_ScrollableGetNextSelectable(scroll, obj); if (obj) return obj; obj = (guiObject_t *)scroll; } obj = obj ? obj->next : modalObj ? modalObj : objHEAD; while(obj) { if (! OBJ_IS_HIDDEN(obj) && OBJ_IS_SELECTABLE(obj)) { if(obj->Type == Scrollable) { foundObj = GUI_ScrollableGetNextSelectable((guiScrollable_t *)obj, NULL); } else { foundObj = obj; } break; } obj = obj->next; } if (! foundObj && origObj) { return GUI_GetNextSelectable(NULL); } return foundObj; }
static void notify_cb(guiObject_t * obj) { if(obj && mp->cur_template == MIXERTEMPLATE_EXPO_DR && OBJ_IS_SCROLLABLE(obj)) { /* We exploit the fact that each row has only one selecteable object */ int row_offset = GUI_ScrollableGetObjRowOffset(&gui->scrollable, obj); int idx = (row_offset >> 8) + (row_offset & 0xff); if(idx >= EXPO_SWITCH1 && idx <= EXPO_SCALE1) { if(mp->cur_mixer != &mp->mixer[1]) { sync_mixers(); mp->cur_mixer = &mp->mixer[1]; GUI_Redraw(&gui->graph); } } else if(idx >= EXPO_SWITCH2 && idx <= EXPO_SCALE2) { if(mp->cur_mixer != &mp->mixer[2]) { sync_mixers(); mp->cur_mixer = &mp->mixer[2]; GUI_Redraw(&gui->graph); } } else { if(mp->cur_mixer != &mp->mixer[0]) { mp->cur_mixer = &mp->mixer[0]; GUI_Redraw(&gui->graph); } } }
struct guiObject *GUI_GetPrevSelectable(struct guiObject *origObj) { struct guiObject *obj, *objLast = NULL; struct guiObject *modalObj; if (origObj && OBJ_IS_SCROLLABLE(origObj)) { //The current selected object is scrollable guiScrollable_t *scroll = GUI_FindScrollableParent(origObj); origObj = GUI_ScrollableGetPrevSelectable(scroll, origObj); if (origObj) return origObj; origObj = (guiObject_t *)scroll; } modalObj = GUI_IsModal(); obj = modalObj ? modalObj : objHEAD; while(obj) { if (obj == origObj) break; if (! OBJ_IS_HIDDEN(obj) && OBJ_IS_SELECTABLE(obj)) { objLast = obj; } obj = obj->next; } if (obj && ! objLast) { obj = obj->next; while(obj) { if (obj == origObj) break; if (! OBJ_IS_HIDDEN(obj) && OBJ_IS_SELECTABLE(obj)) { objLast = obj; } obj = obj->next; } } if (! objLast) objLast = origObj; if (objLast && objLast->Type == Scrollable) return GUI_ScrollableGetPrevSelectable((guiScrollable_t *)objLast, NULL); return objLast; }