📄 menu.c
字号:
{ if(!menu->textedit_mode){ (menu->select_index)++; if( menu->select_index >= menu->nr ) menu->select_index=0; *(menu->p_select_id) = menu->entry[menu->select_index].id; }}void menu_select_prev( menuType * menu )/* selects the previous menupoint in the current submenu */{ if(!menu->textedit_mode){ (menu->select_index)--; if( menu->select_index < 0 ) menu->select_index=(menu->nr)-1; *(menu->p_select_id) = menu->entry[menu->select_index].id; }}void menu_choose(menuType ** menu){ DPRINTF("menu_choose:\n"); if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_SUBMENU ) { DPRINTF("menu_choose: switch submenu\n");// menu_texObj_cleanup(menu); (*menu)=(*menu)->entry[(*menu)->select_index].submenu; } else if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_ID ) { DPRINTF("menu_choose: id=%d\n",(*menu)->entry[(*menu)->select_index].id); if( (*menu)->parent_entry != 0 ){ if( (*menu)->parent_entry->show_subsetting ){ menu_entry_set_settingtext( (*menu)->parent_entry, (*menu)->entry[(*menu)->select_index].text ); } } (*menu)->callback( (*menu)->entry[(*menu)->select_index].id, (*menu)->entry[(*menu)->select_index].arg ); menu_exit(menu); } else if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_TEXTFIELD ) { DPRINTF("menu_choose: ENTRY_TYPE_TEXTFIELD\n"); if(!(*menu)->textedit_mode){ DPRINTF("menu_choose: ENTRY_TYPE_TEXTFIELD - !textedit_mode\n"); (*menu)->textedit_mode=1; } else { DPRINTF("menu_choose: ENTRY_TYPE_TEXTFIELD - textedit_mode\n"); (*menu)->textedit_mode=0; strcpy((*menu)->entry[(*menu)->select_index].text, (*menu)->entry[(*menu)->select_index].text_obj->str); /* give the entered string as arg */ (*menu)->entry[(*menu)->select_index].arg = (void *)&((*menu)->entry[(*menu)->select_index].text[(*menu)->entry[(*menu)->select_index].fixedlen]); DPRINTF("printing arg:\n"); DPRINTF("%s\n",(char *)((*menu)->entry[(*menu)->select_index].arg)); (*menu)->callback( (*menu)->entry[(*menu)->select_index].id, (*menu)->entry[(*menu)->select_index].arg ); } } else if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_EXIT ) { menu_exit(menu); }}void menu_exit(menuType ** menu){ DPRINTF("menu_exit:\n"); if(!(*menu)->textedit_mode){/* if( (*menu)->parent != (menuType *)0 ){*/ DPRINTF("menu_exit: switch to parent\n"); menu_texObj_cleanup(*menu); *menu=(*menu)->parent; DPRINTF("menu_exit: switch to parent - end\n");/* } else { fprintf(stderr,"menu_exit: cleanup only\n"); menu_texObj_cleanup(*menu); }*/ } else { textObj_setText( (*menu)->entry[(*menu)->select_index].text_obj, (*menu)->entry[(*menu)->select_index].text ); (*menu)->textedit_mode=0; }}void menu_text_keystroke( menuType * menu, int key ){ if(menu->textedit_mode){ switch(key){ case 8: if(strlen(menu->entry[menu->select_index].text_obj->str) > menu->entry[menu->select_index].fixedlen) textObj_delete_last( menu->entry[menu->select_index].text_obj ); break; default: if (isprint(key)) textObj_append_char( menu->entry[menu->select_index].text_obj, key ); break; } }}static void menu_draw_entry( menuEntry * entry ){ if( entry->text_obj == (textObj *)0 ){ menu_create_textobj( entry ); } textObj_draw_centered(entry->text_obj);/* if( entry->show_subsetting ){ textObj_draw_bound(entry->text_obj, HBOUND_RIGHT, VBOUND_CENTER ); if(entry->settingtext_obj != (textObj *)0 ){ textObj_draw_bound(entry->settingtext_obj, HBOUND_LEFT, VBOUND_CENTER ); } } else { textObj_draw_bound(entry->text_obj, HBOUND_CENTER, VBOUND_CENTER ); }*/}void menu_draw( menuType * menu ){ int i,all_height;// fprintf(stderr,"menu_draw:\n");// fprintf(stderr,"menu_draw: calc total height\n"); all_height=0; for(i=0;i<menu->nr;i++){ all_height+=menu->entry[i].fontsize; }// fprintf(stderr,"menu_draw: draw\n"); glPushMatrix(); glTranslatef(0,all_height/2,0);// for(i=0;i<1/*menu->nr*/;i++){ for(i=0;i<menu->nr;i++){ /* hilight the entry with id=*p_select_id */// fprintf(stderr,"menu_draw: draw entry#%d\n",i); if( i==menu->select_index ){ /* selected menu entry */ if(menu->textedit_mode){ /* if textedit-field */ glColor3f(1.0,0.0,0.0); menu_draw_entry(&(menu->entry[i])); } else { glPushMatrix(); glScalef(1.1,1.1,1.0); glBlendFunc( GL_ZERO, GL_ONE_MINUS_SRC_COLOR ); glColor3f(1.0,1.0,1.0); glTranslatef(2,2,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(-4,0,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(0,-4,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(4,0,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(-2,2,0); glBlendFunc(GL_ONE,GL_ONE); glColor3f(1.0,1.0,0.0); menu_draw_entry(&(menu->entry[i])); glPopMatrix(); } } else { /* normal menu entry */ glPushMatrix(); glBlendFunc(GL_ZERO,GL_ONE_MINUS_SRC_COLOR); glColor3f(1.0,1.0,1.0); glTranslatef(2,2,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(-4,0,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(0,-4,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(4,0,0); menu_draw_entry(&(menu->entry[i])); glTranslatef(-2,2,0); glBlendFunc(GL_ONE,GL_ONE); glColor3f(1.0,1.0,1.0); menu_draw_entry(&(menu->entry[i])); glPopMatrix(); } glTranslatef(0,-menu->entry[i].fontsize,0); } glPopMatrix();// fprintf(stderr,"menu_draw: end\n");}void menu_texObj_cleanup(menuType * menu)/* releases the gl-lists and the allocated textures */{ int i; DPRINTF("menu_texObj_cleanup:\n"); if( menu != (menuType *)0 ){ for ( i=0 ; i<menu->nr ; i++ ) { DPRINTF("menu_texObj_cleanup: i=%d (%s)\n",i,menu->entry[i].text); if( menu->entry[i].text_obj != (textObj *)0 ) textObj_delete(menu->entry[i].text_obj); DPRINTF("menu_texObj_cleanup: 1\n");// if( menu->entry[i].settingtext_obj != (textObj *)0 )// textObj_delete(menu->entry[i].settingtext_obj); if( menu->entry[i].type == ENTRY_TYPE_SUBMENU ){ DPRINTF("menu_texObj_cleanup: menu_texObj_cleanup\n"); menu_texObj_cleanup(menu->entry[i].submenu); } DPRINTF("menu_texObj_cleanup: 2\n"); if( menu->entry[i].text_obj != (textObj *)0 ) free(menu->entry[i].text_obj); DPRINTF("menu_texObj_cleanup: 3\n"); menu->entry[i].text_obj = (textObj *)0; DPRINTF("menu_texObj_cleanup: 4\n"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -