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