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