void menu_run(const menu_type * menu) { while (1) { int cmd; menu_display(menu); cmd = menu_read_cmd(menu); if (strchr(menu->quit_keys , cmd) != NULL) /* We have recieved a quit command - leave the building. */ break; /* OK - we start looking through all the available commands to see which this is. */ { int item_index = 0; while (1) { const menu_item_type * item = vector_iget_const(menu->items , item_index); if (!item->separator) { if(!item->helptext) { if (strchr(item->key_set , cmd) != NULL) { /* Calling the function ... */ menu_item_call( item ); break; } } } item_index++; } } } }
static int cmd_filter(mp_cmd_t* cmd, int paused, struct vf_priv_s * priv) { switch(cmd->id) { case MP_CMD_PAUSE : #if 0 // http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2003-March/017286.html if(!paused && !go2pause) { // Initial pause cmd -> wait the next put_image go2pause = 1; return 1; } #endif if(go2pause == 2) // Msg resent by put_image after saving the image go2pause = 0; break; case MP_CMD_MENU : { // Convert txt cmd from the users into libmenu stuff char* arg = cmd->args[0].v.s; if(!priv->current->show && !(strcmp(arg,"hide") == 0) ) priv->current->show = 1; else if(strcmp(arg,"up") == 0) menu_read_cmd(priv->current,MENU_CMD_UP); else if(strcmp(arg,"down") == 0) menu_read_cmd(priv->current,MENU_CMD_DOWN); else if(strcmp(arg,"left") == 0) menu_read_cmd(priv->current,MENU_CMD_LEFT); else if(strcmp(arg,"right") == 0) menu_read_cmd(priv->current,MENU_CMD_RIGHT); else if(strcmp(arg,"ok") == 0) menu_read_cmd(priv->current,MENU_CMD_OK); else if(strcmp(arg,"cancel") == 0) menu_read_cmd(priv->current,MENU_CMD_CANCEL); else if(strcmp(arg,"hide") == 0 || strcmp(arg,"toggle") == 0) priv->current->show = 0; else mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_UnknownMenuCommand,arg); return 1; } case MP_CMD_SET_MENU : { char* menu = cmd->args[0].v.s; menu_t* l = priv->current; priv->current = menu_open(menu); if(!priv->current) { mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_FailedToOpenMenu,menu); priv->current = l; priv->current->show = 0; } else { priv->current->show = 1; priv->current->parent = l; } return 1; } } return 0; }
static int cmd_filter(mp_cmd_t* cmd, int paused, struct vf_priv_s * priv) { switch(cmd->id) { case MP_CMD_MENU : { // Convert txt cmd from the users into libmenu stuff char* arg = cmd->args[0].v.s; if(!priv->current->show && !(strcmp(arg,"hide") == 0) ) priv->current->show = 1; else if(strcmp(arg,"up") == 0) menu_read_cmd(priv->current,MENU_CMD_UP); else if(strcmp(arg,"down") == 0) menu_read_cmd(priv->current,MENU_CMD_DOWN); else if(strcmp(arg,"left") == 0) menu_read_cmd(priv->current,MENU_CMD_LEFT); else if(strcmp(arg,"right") == 0) menu_read_cmd(priv->current,MENU_CMD_RIGHT); else if(strcmp(arg,"ok") == 0) menu_read_cmd(priv->current,MENU_CMD_OK); else if(strcmp(arg,"cancel") == 0) menu_read_cmd(priv->current,MENU_CMD_CANCEL); else if(strcmp(arg,"hide") == 0 || strcmp(arg,"toggle") == 0) priv->current->show = 0; else mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_UnknownMenuCommand,arg); return 1; } case MP_CMD_SET_MENU : { char* menu = cmd->args[0].v.s; menu_t* l = priv->current; priv->current = menu_open(menu); if(!priv->current) { mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_FailedToOpenMenu,menu); priv->current = l; priv->current->show = 0; } else { priv->current->show = 1; priv->current->parent = l; } return 1; } } return 0; }
void menu_list_read_cmd(menu_t* menu,int cmd) { list_entry_t* m; int i; #ifdef GEKKO if(mpriv->current == NULL) { printf("mpriv->current == NULL ??\n"); mpriv->current = mpriv->menu; //strange return; } #endif switch(cmd) { case MENU_CMD_UP: while(mpriv->current->prev) { mpriv->current = mpriv->current->prev; if(!mpriv->current->hide) return; } for( ; mpriv->current->next != NULL ; mpriv->current = mpriv->current->next) /* NOTHING */; if(!mpriv->current->hide) return; while(mpriv->current->prev) { mpriv->current = mpriv->current->prev; if(!mpriv->current->hide) return; } break; case MENU_CMD_DOWN: while(mpriv->current->next) { mpriv->current = mpriv->current->next; if(!mpriv->current->hide) return; } mpriv->current = mpriv->menu; if(!mpriv->current->hide) return; while(mpriv->current->next) { mpriv->current = mpriv->current->next; if(!mpriv->current->hide) return; } break; case MENU_CMD_HOME: mpriv->current = mpriv->menu; break; case MENU_CMD_END: for(m = mpriv->current ; m && m->next ; m = m->next) /**/; if(m) mpriv->current = m; break; case MENU_CMD_PAGE_UP: for(i = 0, m = mpriv->current ; m && m->prev && i < mpriv->disp_lines ; m = m->prev, i++) /**/; if(m) mpriv->current = m; break; case MENU_CMD_PAGE_DOWN: for(i = 0, m = mpriv->current ; m && m->next && i < mpriv->disp_lines ; m = m->next, i++) /**/; if(m) mpriv->current = m; break; case MENU_CMD_LEFT: case MENU_CMD_CANCEL: menu->show = 0; menu->cl = 1; break; case MENU_CMD_CLICK: if (mouse_x >= selection_x && mouse_x < selection_x + selection_w && mouse_y >= selection_y && mouse_y < selection_y + selection_h) menu_read_cmd(menu, MENU_CMD_OK); break; } }