]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/menu.c
* Agrego abreviaturas para claves de texto usadas en indices.
[z.facultad/75.06/emufs.git] / emufs_gui / menu.c
1
2 #include "menu.h"
3
4 int menu_ejecutar(t_Menu *opciones, int cant, char *title)
5 {
6         WINDOW *menu_win;
7         MENU *menu;
8         ITEM **items;
9         int c, salir;
10         
11         items = (ITEM **)calloc(cant+1, sizeof(ITEM *));
12
13         for(c=0; c<cant; c++) {
14                 items[c] = new_item(opciones[c].opt, opciones[c].desc);
15         }
16         items[cant] = NULL;
17
18         menu = new_menu((ITEM **)items);
19         menu_win = newwin(cant+4, COLS-2, 3, 1);
20         keypad(menu_win, TRUE);
21         set_menu_mark(menu, " > ");
22         set_menu_win(menu, menu_win);
23         set_menu_sub(menu, derwin(menu_win, cant, COLS-4, 3, 1));
24
25         box(menu_win, 0, 0);
26         mvwaddch(menu_win, 2, 0, ACS_LTEE);
27         mvwhline(menu_win, 2, 1, ACS_HLINE, COLS-3);
28         mvwaddch(menu_win, 2, COLS-3, ACS_RTEE);
29         wattron(menu_win, COLOR_PAIR(COLOR_RED));
30         mvwaddstr(menu_win, 1, 1, title);
31         wattroff(menu_win, COLOR_PAIR(COLOR_RED));
32         post_menu(menu);
33         wrefresh(menu_win);
34
35         curs_set(0);
36         salir = 0;
37         while((!salir)) {
38                 c = getch();
39                 switch(c) {
40                         case KEY_DOWN:
41                                 menu_driver(menu, REQ_DOWN_ITEM);
42                                 break;
43                         case KEY_UP:
44                                 menu_driver(menu, REQ_UP_ITEM);
45                         break;
46                         case 13:
47                         case 10: {
48                                 ITEM *cur;
49
50                                 cur = current_item(menu);
51                                 for(c=0; c<cant; c++) {
52                                         if (strcmp(opciones[c].opt, item_name(cur)) == 0) {
53                                                 salir = c+1;
54                                         }
55                                 }
56                         }
57                 }
58                 wrefresh(menu_win);
59         }       
60         curs_set(1);
61         
62         unpost_menu(menu);
63         delwin(menu_win);
64         for(c=0; c<cant; c++)
65                 free_item(items[c]);
66         free_menu(menu);
67         free(items);
68         return salir-1;
69 }
70
71