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