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