]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - gui/gui.c
* La cosa empieza a tomar forma
[z.facultad/75.06/emufs.git] / gui / gui.c
index 898fde9e3343d9b716be14cffa2a4351fbc203d5..9042cbbe4b6cf26d901020022ec02dc339c65a9c 100644 (file)
--- a/gui/gui.c
+++ b/gui/gui.c
@@ -1,36 +1,47 @@
 
 #include <stdlib.h>
 #include <curses.h>
+#include <menu.h>
 #include <signal.h>
 #include <panel.h>
 #include <string.h>
 
 #include "form.h"
+#include "articulos.h"
+
+#define CTRLD 4
 
 static void finish(int sig);
-                               
-/** Simula un TextField
- *
- *  \param win Ventana
- *  \param x Posicion en X
- *  \param y Posicion en Y
- *  \param w Cantidad maxima de caracteres.
- *  \param s Destino donde guardar
- */
+
+int main_menu();
+void menu_articulos();
 
 int main(int argc, char *argv[])
 {
-       /* initialize your non-curses data structures here */
-       WINDOW *mainwin;
-       t_Form *form;
+       int c;
+       if (argc != 2) {
+               printf("Modo de uso : %s archivo_de_articulos.xml\n", argv[0]);
+               return 1;
+       }
 
+       /* Inicio Curses */
        signal(SIGINT, finish);      /* arrange interrupts to terminate */
-       mainwin = initscr();      /* initialize the curses library */
+       initscr();      /* initialize the curses library */
        keypad(stdscr, TRUE);  /* enable keyboard mapping */
        nonl();         /* tell curses not to do NL->CR/NL on output */
        cbreak();       /* take input chars one at a time, no wait for \n */
        noecho();       /* don't echo input */
+       
+       /* Verifico un tamaño minimo de consola */
+       if ((LINES < 25) || (COLS < 80)) {
+               endwin();
+               printf("El tamaño de la consola debe ser de por lo menos 80x25!\n");
+               return 1;
+       }
 
+       art_cargar(argv[1]);
+
+       /* Si se soporta color, los inicializo */
        if (has_colors()) {
                start_color();
                /* Simple color assignment, often all we need. */
@@ -43,35 +54,195 @@ int main(int argc, char *argv[])
                init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
                init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
        }
-
+       
        /* Ventana, caracter para linea vertical, caracter para linea horizontal*/
-       box(mainwin, ACS_VLINE, ACS_HLINE);
+       box(stdscr, ACS_VLINE, ACS_HLINE);
        /* Ventana, Y, X, Texto */
-       mvwaddstr(mainwin, 2, 10, "Ejemplo de Formulario");     
+       mvwaddstr(stdscr, 1, 1, "EMUFS");       
+       attron(COLOR_PAIR(2));
+       mvwaddstr(stdscr, LINES-2, 1, "Presiones <F1> para salir");     
+       attroff(COLOR_PAIR(2));
+       wrefresh(stdscr);
+
+       while ((c = main_menu()) != -1) {
+               switch (c) {
+                       case 0:
+                               menu_articulos();
+                       break;
+               //      case 1:
+               //      case 2:
+               //      case 3:
+               }
+       }
 
-       /* Creo el formulario */
-       form = form_crear(mainwin);
-       form_agregar_widget(form, INPUT, "Nombre", 15, "");
-       form_agregar_widget(form, RADIO, "Voto", 2, "Si,No");
-       form_agregar_widget(form, INPUT, "Datos", 30, "");
+       endwin();
 
-       form_ejecutar(form, 10, 10);
+       art_liberar(NULL);
 
+       MD_Listar();
+       return 0;
+}
 
-       delwin(mainwin);
-       endwin();
-       
-       /* Imprimo los datos! */
-       printf("Datos Ingresados : \n");
-       printf("\tNombre : %s\n", form_obtener_valor(form, "Nombre"));
-       printf("\tVoto   : %s\n", form_obtener_valor(form, "Voto"));
-       printf("\tDatos  : %s\n", form_obtener_valor(form, "Datos"));
+void menu_articulos()
+{
+       WINDOW *menu_win;
+       MENU *menu;
+       ITEM **items;
+       int c, salir;
+       char *opciones[] = {
+                                       "Alta",
+                                       "Baja",
+                                       "Modificacion",
+                                       "Volver"
+       };
+
+       items = (ITEM **)calloc(5, sizeof(ITEM *));
+
+       items[0] = new_item(opciones[0], "Crear un nuevo articulo.");
+       //set_item_userptr(items[0], art_agregar);
+       items[1] = new_item(opciones[1], "Eliminar un articulo existente.");
+       //set_item_userptr(items[0], art_eliminar);
+       items[2] = new_item(opciones[2], "Modificar un articulo existente.");
+       set_item_userptr(items[2], art_modificar);
+       items[3] = new_item(opciones[3], "Volver al menu anterior.");
+       items[4] = NULL;
+
+       menu = new_menu((ITEM **)items);
+       menu_win = newwin(8, 68, 3, 1);
+       keypad(menu_win, TRUE);
+       set_menu_mark(menu, " > ");
+       set_menu_win(menu, menu_win);
+       set_menu_sub(menu, derwin(menu_win, 5, 66, 3, 1));
+
+       box(menu_win, 0, 0);
+       mvwaddch(menu_win, 2, 0, ACS_LTEE);
+       mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
+       mvwaddch(menu_win, 2, 67, ACS_RTEE);
+       mvwaddstr(menu_win, 1, 1, "Menu Articulos");
+       post_menu(menu);
+       wrefresh(menu_win);
+
+       curs_set(0);
+       salir = 0;
+       while((!salir) && (c = getch()) != KEY_F(1)) {
+               switch(c) {
+                       case KEY_DOWN:
+                               menu_driver(menu, REQ_DOWN_ITEM);
+                               break;
+                       case KEY_UP:
+                               menu_driver(menu, REQ_UP_ITEM);
+                       break;
+                       case 13:
+                       case 10: {
+                               ITEM *cur;
+                               void (*p)(char *);
+
+                               cur = current_item(menu);
+                               if (strcmp(item_name(cur), opciones[3]) == 0) {
+                                       salir = 1;
+                               } else {
+                                       p = item_userptr(cur);
+                                       unpost_menu(menu);
+                                       refresh();
+                                       p((char *)item_name(cur));
+                                       post_menu(menu);
+                                       box(menu_win,0,0);
+                                       mvwaddch(menu_win, 2, 0, ACS_LTEE);
+                                       mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
+                                       mvwaddch(menu_win, 2, 67, ACS_RTEE);
+                                       wrefresh(menu_win);
+                               }
+                               pos_menu_cursor(menu);
+                       }
+               }
+               wrefresh(menu_win);
+       }       
+       curs_set(1);
        
-       /* Libero el formulario */
-       form_destruir(form);
-       return 0;
+       unpost_menu(menu);
+       delwin(menu_win);
+       free_item(items[0]);
+       free_item(items[1]);
+       free_item(items[2]);
+       free_item(items[3]);
+       free_menu(menu);
 }
 
+int main_menu()
+{
+       WINDOW *menu_win;
+       MENU *menu;
+       ITEM **items;
+       int c, salir, opcion;
+       char *opciones[] = {
+                                       "Articulos",
+                                       "Facturas",
+                                       "Ver Registros",
+                                       "Ver Bloques"
+       };
+
+       items = (ITEM **)calloc(5, sizeof(ITEM *));
+
+       items[0] = new_item(opciones[0], "Alta,baja,consulta y modificacion de articulos.");
+       items[1] = new_item(opciones[1], "Alta,baja,consulta y modificacion de facturas.");
+       items[2] = new_item(opciones[2], "Ver registros de un archivo.");
+       items[3] = new_item(opciones[3], "Ver bloques de un archivo.");
+       items[4] = NULL;
+
+       menu = new_menu((ITEM **)items);
+       menu_win = newwin(8, 68, 3, 1);
+       keypad(menu_win, TRUE);
+       set_menu_mark(menu, " > ");
+       set_menu_win(menu, menu_win);
+       set_menu_sub(menu, derwin(menu_win, 5, 66, 3, 1));
+
+       box(menu_win, 0, 0);
+       mvwaddch(menu_win, 2, 0, ACS_LTEE);
+       mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
+       mvwaddch(menu_win, 2, 67, ACS_RTEE);
+       mvwaddstr(menu_win, 1, 1, "Menu Principal");
+       post_menu(menu);
+       wrefresh(menu_win);
+
+       curs_set(0);
+       opcion = -1;
+       salir = 0;
+       while((!salir) && (c = getch()) != KEY_F(1)) {
+               switch(c) {
+                       case KEY_DOWN:
+                               menu_driver(menu, REQ_DOWN_ITEM);
+                               break;
+                       case KEY_UP:
+                               menu_driver(menu, REQ_UP_ITEM);
+                       break;
+                       case 13:
+                       case 10: {
+                               ITEM *cur;
+                               int i;
+
+                               cur = current_item(menu);
+                               for(i=0; i<4; ++i) {
+                                       if (strcmp(item_name(cur), opciones[i]) == 0)
+                                               opcion = i;
+                               }
+                               pos_menu_cursor(menu);
+                               salir = 1;
+                       }
+               }
+               wrefresh(menu_win);
+       }       
+       curs_set(1);
+       
+       unpost_menu(menu);
+       delwin(menu_win);
+       free_item(items[0]);
+       free_item(items[1]);
+       free_item(items[2]);
+       free_item(items[3]);
+       free_menu(menu);
+
+       return opcion;
+}
 
 
 static void finish(int sig)
@@ -79,7 +250,6 @@ static void finish(int sig)
        endwin();
 
        /* do your non-curses wrapup here */
-
        exit(0);
 }