]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* La cosa empieza a tomar forma
authorRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 2 Apr 2004 04:24:50 +0000 (04:24 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 2 Apr 2004 04:24:50 +0000 (04:24 +0000)
 * Menues anidados (Solo funciona Articulos->Modificar y Articulos->Volver,
 cualquier otro causa cuelgue porque no inicie algunos puntero!!!!!!)

gui/articulos.c
gui/articulos.h
gui/form.c
gui/gui.c

index af349ddfeb9a5827a819bad59d4c09ab3b95beff..cce691a481ec57b42363fdf780bff5f83edbb3e5 100644 (file)
@@ -1,6 +1,8 @@
 
 #include "articulos.h"
 
+t_LstArticulos *lst_articulos;
+
 t_LstArticulos *art_cargar(const char *filename)
 {
        xmlDocPtr document;
@@ -75,16 +77,19 @@ t_LstArticulos *art_cargar(const char *filename)
        xmlFreeDoc(document);
        xmlCleanupParser();
 
+       lst_articulos = tmp;
        return tmp;
 }
 
 int art_liberar(t_LstArticulos *l)
 {
+       if (l == NULL) l = lst_articulos;
        if (l == NULL) return 1;
 
        free(l->array);
        free(l);
 
+       lst_articulos = NULL;
        return 0;
 }
 
@@ -92,6 +97,9 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
 {
        int i, j;
        int n = atoi(numero);
+
+       if (lst == NULL) lst = lst_articulos;
+
        for(i=0; i<lst->cant; i++) {
                j = atoi(lst->array[i].numero);
                if (n == j)
@@ -101,3 +109,36 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
        return NULL;
 }
 
+void art_modificar(char *s)
+{
+       WINDOW *win;
+       t_Form *form;
+       t_Articulo *articulo;
+
+       win = newwin(8, 68, 13, 1);
+       box(win, 0, 0);
+       wrefresh(win);
+
+       form = form_crear(win);
+       form_agregar_widget(form, INPUT, "Numero de Artículo", 8, "");
+       form_ejecutar(form, 1,1);
+       articulo = art_obtener(NULL, form_obtener_valor(form, "Numero de Artículo"));
+       form_destruir(form);
+
+       if (articulo != NULL) {
+               form = form_crear(win);
+               form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
+               form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
+               form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
+               form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
+               form_agregar_widget(form, INPUT, "PVU", 30, articulo->pvu);
+               form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
+               form_ejecutar(form, 1,1);
+               form_destruir(form);
+       }       
+
+       werase(win);
+       wrefresh(win);
+       delwin(win);
+}
+
index 8472556cf8e4da06739759894230f4a541b7cfc0..e95adf50938fb38408d05f31780645af7486322c 100644 (file)
@@ -2,10 +2,12 @@
 #ifndef _ARTICULOS_H_
 #define _ARTICULOS_H_
 
+#include <menu.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 #include <string.h>
 #include "malloc_debug.h"
+#include "form.h"
 
 /* FACTURAS!!
        char numero[9];
@@ -38,7 +40,8 @@ typedef struct _lista_articulos_ {
 t_LstArticulos *art_cargar(const char *filename);
 int art_liberar(t_LstArticulos *l);
 t_Articulo *art_obtener(t_LstArticulos *, const char *numero);
-//t_Articulo *art_obtener(t_LstArticulos *, int numero);
-
+void art_agregar(char *);
+void art_eliminar(char *);
+void art_modificar(char *);
 #endif
 
index d6a13bb3f86c0ef8295865c6b85369e1175e7f2c..38d93738ca929589b423a4099a8c41f6fb14609e 100644 (file)
@@ -100,13 +100,14 @@ void form_ejecutar(t_Form *f, int x, int y)
        }
        /* Agrego el ": " al offset*/
        x += offset + 2;
-
+       wrefresh(f->win);
        tmp = f->primero;
        my_y = y-1;
        while (tmp) {
                ++my_y;
                wmove(f->win, my_y, x);
                salida = tmp->ejecutar(f->win, x, my_y, tmp);
+               wrefresh(f->win);
                tmp = tmp->sig;
        }
 }
@@ -214,6 +215,7 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w)
                current++;
        }
 
+       wrefresh(win);
        while ((c=getch()) != 13) {
                /* Verifico si se apreto basckspace */
                if (c == KEY_BACKSPACE) {
@@ -232,6 +234,7 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w)
                wmove(win, y, x+current);
                waddch(win, c);
                w->valor[current++] = c;
+               wrefresh(win);
        }
        /* Cierro el string con el \0 */
        w->valor[current+1] = '\0';
@@ -263,6 +266,7 @@ int form_radio(WINDOW *win, int x, int y, t_Widget *w)
        wmove(win, y, xs[actual]);
        waddch(win, 'X');
 
+       wrefresh(win);
        while ((c=getch()) != 13) {
                if (c == KEY_LEFT) {
                        wmove(win, y, xs[actual]);
@@ -280,6 +284,7 @@ int form_radio(WINDOW *win, int x, int y, t_Widget *w)
                        wmove(win, y, xs[actual]);
                        waddch(win, 'X');       
                }
+               wrefresh(win);
        }
 
        w->actual = actual;
index 6a820ac31040daa46b61b18a26bc6c38321d8ce7..9042cbbe4b6cf26d901020022ec02dc339c65a9c 100644 (file)
--- a/gui/gui.c
+++ b/gui/gui.c
@@ -1,5 +1,6 @@
 
 #include <stdlib.h>
+#include <curses.h>
 #include <menu.h>
 #include <signal.h>
 #include <panel.h>
@@ -8,27 +9,16 @@
 #include "form.h"
 #include "articulos.h"
 
-static void finish(int sig);
-
-typedef struct _my_menu_ {
-       MENU *menu;
-       ITEM *items[5];
-       WINDOW *win;
-} MyMENU;
+#define CTRLD 4
 
-void editar_articulo(WINDOW *win, t_Articulo *articulo);
+static void finish(int sig);
 
-MyMENU *build_mymenu(WINDOW *win);
-void free_mymenu(MyMENU *);
+int main_menu();
+void menu_articulos();
 
 int main(int argc, char *argv[])
 {
-       /* initialize your non-curses data structures here */
        int c;
-       WINDOW *mainwin;
-       MyMENU *menu;
-
-
        if (argc != 2) {
                printf("Modo de uso : %s archivo_de_articulos.xml\n", argv[0]);
                return 1;
@@ -36,21 +26,20 @@ int main(int argc, char *argv[])
 
        /* Inicio Curses */
        signal(SIGINT, finish);      /* arrange interrupts to terminate */
-       mainwin = initscr();      /* initialize the curses library */
-       menu = build_mymenu(mainwin);
+       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)) {
-               delwin(mainwin);
                endwin();
                printf("El tamaño de la consola debe ser de por lo menos 80x25!\n");
                return 1;
        }
 
-       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 */
+       art_cargar(argv[1]);
 
        /* Si se soporta color, los inicializo */
        if (has_colors()) {
@@ -65,103 +54,196 @@ 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, 1, 1, "EMUFS");      
+       mvwaddstr(stdscr, 1, 1, "EMUFS");       
        attron(COLOR_PAIR(2));
-       mvwaddstr(mainwin, LINES-2, 1, "Presiones <F1> para salir");    
+       mvwaddstr(stdscr, LINES-2, 1, "Presiones <F1> para salir");     
        attroff(COLOR_PAIR(2));
-       wrefresh(mainwin);
+       wrefresh(stdscr);
+
+       while ((c = main_menu()) != -1) {
+               switch (c) {
+                       case 0:
+                               menu_articulos();
+                       break;
+               //      case 1:
+               //      case 2:
+               //      case 3:
+               }
+       }
+
+       endwin();
 
-       post_menu(menu->menu);
-       wrefresh(menu->win);
+       art_liberar(NULL);
 
-       refresh();
-       while((c = getch()) != KEY_F(1)) {
+       MD_Listar();
+       return 0;
+}
+
+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->menu, REQ_DOWN_ITEM);
+                               menu_driver(menu, REQ_DOWN_ITEM);
                                break;
                        case KEY_UP:
-                               menu_driver(menu->menu, REQ_UP_ITEM);
-//                             break;
-//                     case 10: 
-                               /*ITEM *cur;
+                               menu_driver(menu, REQ_UP_ITEM);
+                       break;
+                       case 13:
+                       case 10: {
+                               ITEM *cur;
                                void (*p)(char *);
 
-                               cur = current_item(my_menu);
-                               p = item_userptr(cur);
-                               p((char *)item_name(cur));
-                               pos_menu_cursor(my_menu);
-                               */
+                               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);
+               wrefresh(menu_win);
        }       
+       curs_set(1);
        
-       unpost_menu(menu->menu);
-       free_mymenu(menu);
-       delwin(mainwin);
-       endwin();
-
-       MD_Listar();
-       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);
 }
 
-MyMENU *build_mymenu(WINDOW *win)
+int main_menu()
 {
        WINDOW *menu_win;
-       MyMENU *tmp = (MyMENU *)malloc(sizeof(MyMENU));
-       if (tmp == NULL) return NULL;
-
-       tmp->items[0] = new_item("Artículos", "Alta,baja,consulta y modificación de artículos.");
-       tmp->items[1] = new_item("Facturas", "Alta,baja,consulta y modificación de facturas.");
-       tmp->items[2] = new_item("Ver Registros", "Ver registros de un archivo.");
-       tmp->items[3] = new_item("Ver Bloques", "Ver bloques de un archivo.");
-       tmp->items[4] = NULL;
-
-       tmp->menu = new_menu(tmp->items);
-       
-       tmp->win = menu_win = derwin(win, 8, 68, 3, 1); 
+       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(tmp->menu, " > ");
-       set_menu_win(tmp->menu, menu_win);
-       set_menu_sub(tmp->menu, derwin(menu_win, 8, 68, 3, 1));
+       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, 68);
-       mvwaddch(menu_win, 2, 68, ACS_RTEE);
-       return tmp;
-}
-
-void free_mymenu(MyMENU *menu)
-{
-       delwin(menu->win);
-       free_item(menu->items[0]);
-       free_item(menu->items[1]);
-       free_item(menu->items[2]);
-       free_item(menu->items[3]);
-       free_menu(menu->menu);
-       free(menu);
+       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;
 }
 
-void editar_articulo(WINDOW *win, t_Articulo *articulo)
-{
-       t_Form *form;
-       form = form_crear(win);
-       form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
-       form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
-       form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
-       form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
-       form_agregar_widget(form, INPUT, "PVU", 30, articulo->pvu);
-       form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
-
-       form_ejecutar(form, 10, 10);
-
-       form_destruir(form);
-}
 
 static void finish(int sig)
 {