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