]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - gui/gui.c
6a820ac31040daa46b61b18a26bc6c38321d8ce7
[z.facultad/75.06/emufs.git] / gui / gui.c
1
2 #include <stdlib.h>
3 #include <menu.h>
4 #include <signal.h>
5 #include <panel.h>
6 #include <string.h>
7
8 #include "form.h"
9 #include "articulos.h"
10
11 static void finish(int sig);
12
13 typedef struct _my_menu_ {
14         MENU *menu;
15         ITEM *items[5];
16         WINDOW *win;
17 } MyMENU;
18
19 void editar_articulo(WINDOW *win, t_Articulo *articulo);
20
21 MyMENU *build_mymenu(WINDOW *win);
22 void free_mymenu(MyMENU *);
23
24 int main(int argc, char *argv[])
25 {
26         /* initialize your non-curses data structures here */
27         int c;
28         WINDOW *mainwin;
29         MyMENU *menu;
30
31
32         if (argc != 2) {
33                 printf("Modo de uso : %s archivo_de_articulos.xml\n", argv[0]);
34                 return 1;
35         }
36
37         /* Inicio Curses */
38         signal(SIGINT, finish);      /* arrange interrupts to terminate */
39         mainwin = initscr();      /* initialize the curses library */
40         menu = build_mymenu(mainwin);
41         
42         /* Verifico un tamaño minimo de consola */
43         if ((LINES < 25) || (COLS < 80)) {
44                 delwin(mainwin);
45                 endwin();
46                 printf("El tamaño de la consola debe ser de por lo menos 80x25!\n");
47                 return 1;
48         }
49
50         keypad(stdscr, TRUE);  /* enable keyboard mapping */
51         nonl();         /* tell curses not to do NL->CR/NL on output */
52         cbreak();       /* take input chars one at a time, no wait for \n */
53         noecho();       /* don't echo input */
54
55         /* Si se soporta color, los inicializo */
56         if (has_colors()) {
57                 start_color();
58                 /* Simple color assignment, often all we need. */
59                 init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK);
60                 init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK);
61                 init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK);
62                 init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK);
63                 init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK);
64                 init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
65                 init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
66                 init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
67         }
68
69         /* Ventana, caracter para linea vertical, caracter para linea horizontal*/
70         box(mainwin, ACS_VLINE, ACS_HLINE);
71         /* Ventana, Y, X, Texto */
72         mvwaddstr(mainwin, 1, 1, "EMUFS");      
73         attron(COLOR_PAIR(2));
74         mvwaddstr(mainwin, LINES-2, 1, "Presiones <F1> para salir");    
75         attroff(COLOR_PAIR(2));
76         wrefresh(mainwin);
77
78         post_menu(menu->menu);
79         wrefresh(menu->win);
80
81         refresh();
82         while((c = getch()) != KEY_F(1)) {
83                 switch(c) {
84                         case KEY_DOWN:
85                                 menu_driver(menu->menu, REQ_DOWN_ITEM);
86                                 break;
87                         case KEY_UP:
88                                 menu_driver(menu->menu, REQ_UP_ITEM);
89 //                              break;
90 //                      case 10: 
91                                 /*ITEM *cur;
92                                 void (*p)(char *);
93
94                                 cur = current_item(my_menu);
95                                 p = item_userptr(cur);
96                                 p((char *)item_name(cur));
97                                 pos_menu_cursor(my_menu);
98                                 */
99                 }
100                 wrefresh(menu->win);
101         }       
102         
103         unpost_menu(menu->menu);
104         free_mymenu(menu);
105         delwin(mainwin);
106         endwin();
107
108         MD_Listar();
109         return 0;
110 }
111
112 MyMENU *build_mymenu(WINDOW *win)
113 {
114         WINDOW *menu_win;
115         MyMENU *tmp = (MyMENU *)malloc(sizeof(MyMENU));
116         if (tmp == NULL) return NULL;
117
118         tmp->items[0] = new_item("Artículos", "Alta,baja,consulta y modificación de artículos.");
119         tmp->items[1] = new_item("Facturas", "Alta,baja,consulta y modificación de facturas.");
120         tmp->items[2] = new_item("Ver Registros", "Ver registros de un archivo.");
121         tmp->items[3] = new_item("Ver Bloques", "Ver bloques de un archivo.");
122         tmp->items[4] = NULL;
123
124         tmp->menu = new_menu(tmp->items);
125         
126         tmp->win = menu_win = derwin(win, 8, 68, 3, 1); 
127         keypad(menu_win, TRUE);
128         set_menu_mark(tmp->menu, " > ");
129         set_menu_win(tmp->menu, menu_win);
130         set_menu_sub(tmp->menu, derwin(menu_win, 8, 68, 3, 1));
131
132         box(menu_win, 0, 0);
133         mvwaddch(menu_win, 2, 0, ACS_LTEE);
134         mvwhline(menu_win, 2, 1, ACS_HLINE, 68);
135         mvwaddch(menu_win, 2, 68, ACS_RTEE);
136         return tmp;
137 }
138
139 void free_mymenu(MyMENU *menu)
140 {
141         delwin(menu->win);
142         free_item(menu->items[0]);
143         free_item(menu->items[1]);
144         free_item(menu->items[2]);
145         free_item(menu->items[3]);
146         free_menu(menu->menu);
147         free(menu);
148 }
149
150 void editar_articulo(WINDOW *win, t_Articulo *articulo)
151 {
152         t_Form *form;
153         form = form_crear(win);
154         form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
155         form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
156         form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
157         form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
158         form_agregar_widget(form, INPUT, "PVU", 30, articulo->pvu);
159         form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
160
161         form_ejecutar(form, 10, 10);
162
163         form_destruir(form);
164 }
165
166 static void finish(int sig)
167 {
168         endwin();
169
170         /* do your non-curses wrapup here */
171         exit(0);
172 }
173