]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - gui/gui.c
* BUGFIX : En grabar registro calculo correctamente el numero de bloque en caso de
[z.facultad/75.06/emufs.git] / gui / gui.c
1
2 #include <stdlib.h>
3 #include <curses.h>
4 #include <menu.h>
5 #include <signal.h>
6 #include <panel.h>
7 #include <string.h>
8
9 #include "form.h"
10 #include "articulos.h"
11
12 #define CTRLD 4
13
14 static void finish(int sig);
15
16 int main_menu();
17 void menu_articulos();
18
19 int main(int argc, char *argv[])
20 {
21         int c, fin=0;
22         if (argc != 2) {
23                 printf("Modo de uso : %s archivo_de_articulos.xml\n", argv[0]);
24                 return 1;
25         }
26
27         /* Inicio Curses */
28         signal(SIGINT, finish);      /* arrange interrupts to terminate */
29         initscr();      /* initialize the curses library */
30         keypad(stdscr, TRUE);  /* enable keyboard mapping */
31         nonl();         /* tell curses not to do NL->CR/NL on output */
32         cbreak();       /* take input chars one at a time, no wait for \n */
33         noecho();       /* don't echo input */
34         
35         /* Verifico un tamaño minimo de consola */
36         if ((LINES < 25) || (COLS < 80)) {
37                 endwin();
38                 printf("El tamaño de la consola debe ser de por lo menos 80x25!\n");
39                 return 1;
40         }
41
42         art_cargar(argv[1]);
43
44         /* Si se soporta color, los inicializo */
45         if (has_colors()) {
46                 start_color();
47                 /* Simple color assignment, often all we need. */
48                 init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); /* COLOR_PAIR(1) */
49                 init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK);
50                 init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK);
51                 init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK);
52                 init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK);
53                 init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
54                 init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
55                 init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
56         }
57         
58         /* Ventana, caracter para linea vertical, caracter para linea horizontal*/
59         box(stdscr, ACS_VLINE, ACS_HLINE);
60         /* Ventana, Y, X, Texto */
61         mvwaddstr(stdscr, 1, 1, "EMUFS");       
62         attron(COLOR_PAIR(2));
63         mvwaddstr(stdscr, LINES-2, 1, "EMUFS (c) The EMUFS Team - Bajo Licencia GNU/GPL");      
64         attroff(COLOR_PAIR(2));
65         wrefresh(stdscr);
66
67         while ((c = main_menu()) != -1) {
68                 switch (c) {
69                         case 0:
70                                 menu_articulos();
71                         break;
72                 //      case 1:
73                 //      case 2:
74                 //      case 3:
75                         case 4:
76                                 fin = 1;
77                         break;
78                 }
79                 if (fin == 1) break;
80         }
81
82         endwin();
83
84         art_liberar(NULL);
85
86         MD_Listar();
87         return 0;
88 }
89
90 void menu_articulos()
91 {
92         WINDOW *menu_win;
93         MENU *menu;
94         ITEM **items;
95         int c, salir;
96         char *opciones[] = {
97                                         "Alta",
98                                         "Baja",
99                                         "Modificacion",
100                                         "Volver"
101         };
102
103         items = (ITEM **)calloc(5, sizeof(ITEM *));
104
105         items[0] = new_item(opciones[0], "Crear un nuevo articulo.");
106         set_item_userptr(items[0], art_agregar);
107         items[1] = new_item(opciones[1], "Eliminar un articulo existente.");
108         set_item_userptr(items[1], art_eliminar);
109         items[2] = new_item(opciones[2], "Modificar un articulo existente.");
110         set_item_userptr(items[2], art_modificar);
111         items[3] = new_item(opciones[3], "Volver al menu anterior.");
112         items[4] = NULL;
113
114         menu = new_menu((ITEM **)items);
115         menu_win = newwin(8, 68, 3, 1);
116         keypad(menu_win, TRUE);
117         set_menu_mark(menu, " > ");
118         set_menu_win(menu, menu_win);
119         set_menu_sub(menu, derwin(menu_win, 5, 66, 3, 1));
120
121         box(menu_win, 0, 0);
122         mvwaddch(menu_win, 2, 0, ACS_LTEE);
123         mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
124         mvwaddch(menu_win, 2, 67, ACS_RTEE);
125         wattron(menu_win, COLOR_PAIR(COLOR_RED));
126         mvwaddstr(menu_win, 1, 1, "Menu Articulos");
127         wattroff(menu_win, COLOR_PAIR(COLOR_RED));
128         post_menu(menu);
129         wrefresh(menu_win);
130
131         curs_set(0);
132         salir = 0;
133         while((!salir) && (c = getch()) != KEY_F(3)) {
134                 switch(c) {
135                         case KEY_DOWN:
136                                 menu_driver(menu, REQ_DOWN_ITEM);
137                                 break;
138                         case KEY_UP:
139                                 menu_driver(menu, REQ_UP_ITEM);
140                         break;
141                         case 13:
142                         case 10: {
143                                 ITEM *cur;
144                                 void (*p)(char *);
145
146                                 cur = current_item(menu);
147                                 if (strcmp(item_name(cur), opciones[3]) == 0) {
148                                         salir = 1;
149                                 } else {
150                                         p = item_userptr(cur);
151                                         unpost_menu(menu);
152                                         refresh();
153                                         p((char *)item_name(cur));
154                                         post_menu(menu);
155                                         box(menu_win,0,0);
156                                         mvwaddch(menu_win, 2, 0, ACS_LTEE);
157                                         mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
158                                         mvwaddch(menu_win, 2, 67, ACS_RTEE);
159                                         wrefresh(menu_win);
160                                 }
161                                 pos_menu_cursor(menu);
162                         }
163                 }
164                 wrefresh(menu_win);
165         }       
166         curs_set(1);
167         
168         unpost_menu(menu);
169         delwin(menu_win);
170         free_item(items[0]);
171         free_item(items[1]);
172         free_item(items[2]);
173         free_item(items[3]);
174         free_menu(menu);
175 }
176
177 int main_menu()
178 {
179         WINDOW *menu_win;
180         MENU *menu;
181         ITEM **items;
182         int c, salir, opcion;
183         char *opciones[] = {
184                                         "Articulos",
185                                         "Facturas",
186                                         "Ver Registros",
187                                         "Ver Bloques",
188                                         "Salir"
189         };
190
191         items = (ITEM **)calloc(5, sizeof(ITEM *));
192
193         items[0] = new_item(opciones[0], "Alta,baja,consulta y modificacion de articulos.");
194         items[1] = new_item(opciones[1], "Alta,baja,consulta y modificacion de facturas.");
195         items[2] = new_item(opciones[2], "Ver registros de un archivo.");
196         items[3] = new_item(opciones[3], "Ver bloques de un archivo.");
197         items[4] = new_item(opciones[4], "Salir del sistema.");
198         items[5] = NULL;
199
200         menu = new_menu((ITEM **)items);
201         menu_win = newwin(9, 68, 3, 1);
202         keypad(menu_win, TRUE);
203         set_menu_mark(menu, " > ");
204         set_menu_win(menu, menu_win);
205         set_menu_sub(menu, derwin(menu_win, 6, 66, 3, 1));
206
207         box(menu_win, 0, 0);
208         mvwaddch(menu_win, 2, 0, ACS_LTEE);
209         mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
210         mvwaddch(menu_win, 2, 67, ACS_RTEE);
211         wattron(menu_win, COLOR_PAIR(COLOR_RED));
212         mvwaddstr(menu_win, 1, 1, "Menu Principal");
213         wattroff(menu_win, COLOR_PAIR(COLOR_RED));
214         post_menu(menu);
215         wrefresh(menu_win);
216
217         curs_set(0);
218         opcion = -1;
219         salir = 0;
220         while((!salir) && (c = getch()) != KEY_F(1)) {
221                 switch(c) {
222                         case KEY_DOWN:
223                                 menu_driver(menu, REQ_DOWN_ITEM);
224                                 break;
225                         case KEY_UP:
226                                 menu_driver(menu, REQ_UP_ITEM);
227                         break;
228                         case 13:
229                         case 10: {
230                                 ITEM *cur;
231                                 int i;
232
233                                 cur = current_item(menu);
234                                 for(i=0; i<5; ++i) {
235                                         if (strcmp(item_name(cur), opciones[i]) == 0)
236                                                 opcion = i;
237                                 }
238                                 pos_menu_cursor(menu);
239                                 salir = 1;
240                         }
241                 }
242                 wrefresh(menu_win);
243         }       
244         curs_set(1);
245         
246         unpost_menu(menu);
247         werase(menu_win);
248         wrefresh(menu_win);
249         delwin(menu_win);
250         free_item(items[0]);
251         free_item(items[1]);
252         free_item(items[2]);
253         free_item(items[3]);
254         free_menu(menu);
255
256         return opcion;
257 }
258
259
260 static void finish(int sig)
261 {
262         endwin();
263
264         /* do your non-curses wrapup here */
265         exit(0);
266 }
267