]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Ajustes pequeños al codigo.
authorRicardo Markiewicz <gazer.arg@gmail.com>
Thu, 8 Apr 2004 21:36:27 +0000 (21:36 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Thu, 8 Apr 2004 21:36:27 +0000 (21:36 +0000)
emufs_gui/articulos.c
emufs_gui/articulos.h
emufs_gui/form.c
emufs_gui/form.h
emufs_gui/gui.c

index 8480a3fa6121d19bbda73f066cc1fe020164a3ab..8e53638b01ddc10b9fa2a0c74aaedd3b1fd2a0fd 100644 (file)
@@ -65,7 +65,7 @@ t_LstArticulos *art_cargar(const char *filename)
        for ( ; node ; node = node->next) {
                if (node->type == XML_ELEMENT_NODE) {
                        if (strcmp(node->name, "ARTICULO") == 0) {
-                               strncpy(tmp->array[cant].numero, xmlGetProp(node, "NroArtículo"), 8);
+                               tmp->array[cant].numero = atoi(xmlGetProp(node, "NroArtículo"));
                                strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripción"), 50);
                                strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentación"), 30);
                                strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8);
@@ -103,7 +103,7 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
        if (lst == NULL) lst = lst_articulos;
 
        for(i=0; i<lst->cant; i++) {
-               j = atoi(lst->array[i].numero);
+               j = lst->array[i].numero;
                if (n == j)
                        return &lst->array[i];
        }
@@ -130,6 +130,7 @@ void art_modificar(char *s)
        WINDOW *win;
        t_Form *form;
        t_Articulo *articulo;
+       char num[8];
 
        win = newwin(8, 68, 13, 1);
        box(win, 0, 0);
@@ -139,7 +140,8 @@ void art_modificar(char *s)
 
        if (articulo != NULL) {
                form = form_crear(win);
-               form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
+               sprintf(num, "%07d", articulo->numero);
+               form_agregar_widget(form, INPUT, "Numero de Artículo", 8, num);
                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);
index 3e35b80db6a83db4297dcff4245bc0d0b991045f..2957c3bff8a7c29dab724aebc5ee60c4f7f2f589 100644 (file)
@@ -24,7 +24,7 @@
        
 typedef struct _articulo_ {
        unsigned int idREG; /* Registro Fisico donde esta guardado */
-       char numero[9];
+       int numero;
        char desc[51];
        char presentacion[31];
        char existencia[9];
index a97e3ba93159506f2e2190f448ba42f0c93e28ef..5a76a4d8ebabb31bacbd705d66f8c5bc8bdc5e0b 100644 (file)
@@ -38,16 +38,21 @@ static int form_radio(WINDOW *win, int x, int y, t_Widget *w);
 t_Form *form_crear(WINDOW *win)
 {
        t_Form *tmp = (t_Form *)malloc(sizeof(t_Form));
+       if (tmp == NULL) {
+               return NULL;
+       }
        tmp->primero = tmp->ultimo = NULL;
        tmp->win = win;
 
-       /* TODO : El error se debe verificar afuera? */
        return tmp;
 }
 
 int form_destruir(t_Form *f)
 {
-       t_Widget *tmp = f->primero;
+       t_Widget *tmp;
+       if (f == NULL) return 0;
+
+       tmp = f->primero;
 
        while (tmp) {
                f->primero = f->primero->sig;
@@ -62,6 +67,8 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i
 {
        t_Widget *tmp = NULL;
 
+       if (f == NULL) return;
+
        /* Creo el nuevo widget segun el tipo */
        switch (tipo) {
                case INPUT:
@@ -87,7 +94,8 @@ void form_ejecutar(t_Form *f, int x, int y)
        int offset = 0, my_y, salida;
        t_Widget *tmp = f->primero;
        my_y = y-1;
-       /* Pongo las etiquetas de los campos, y me fijo el mayor offset */
+       
+       /* Calculo cual es la etiqueta más larga de FORM */
        while (tmp) {
                my_y++;
                if (strlen(tmp->nombre) > offset)
@@ -100,11 +108,13 @@ void form_ejecutar(t_Form *f, int x, int y)
 
        tmp = f->primero;
        my_y = y-1;
+       /* Agrego el etiqueta y el valor actual para cada elemento */
        while (tmp) {
                ++my_y;
                mvwaddstr(f->win, my_y, x, tmp->nombre);
                waddch(f->win, ':');
                waddch(f->win, ' ');
+               /* TODO : VER QUE SI ES UNA OPCION ES DISTINTO!! */
                mvwaddstr(f->win, my_y, x+offset, tmp->valor);
                tmp = tmp->sig;
        }
@@ -112,6 +122,7 @@ void form_ejecutar(t_Form *f, int x, int y)
 
        tmp = f->primero;
        my_y = y-1;
+       /* Ejecuto el formulario */
        while (tmp) {
                ++my_y;
                wmove(f->win, my_y, x+offset);
@@ -156,12 +167,23 @@ t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max
 {
        t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget));
 
+       if (tmp == NULL) return NULL;
+
        tmp->tipo = tipo;
        tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1));
+       if (tmp->nombre == NULL) {
+               free(tmp);
+               return NULL;
+       }
        strcpy(tmp->nombre, nombre);
 
        tmp->max = max;
        tmp->valor = (char *)malloc(sizeof(char)*(max+1));
+       if (tmp->valor == NULL) {
+               free(tmp->nombre);
+               free(tmp);
+               return NULL;
+       }
        tmp->valor[0] = '\0';
        strncpy(tmp->valor, defecto, max);
 
@@ -176,13 +198,26 @@ t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max
 {
        int ini, fin, actual;
        t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget));
+       if (tmp == NULL) {
+               return NULL;
+       }
 
        tmp->tipo = tipo;
        tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1));
+       if (tmp->nombre == NULL) {
+               free(tmp);
+               return NULL;
+       }
        strcpy(tmp->nombre, nombre);
 
        tmp->max = max;
        tmp->opciones = (char **)malloc(sizeof(char*)*(max));
+       if (tmp->opciones == NULL) {
+               free(tmp->nombre);
+               free(tmp);
+               return NULL;
+       }
+
        /* Parseo VALOR separado por comas */
        actual = ini = 0;
        fin = ini+1;
@@ -212,6 +247,8 @@ t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max
 void widget_free(t_Widget *w)
 {
        int i;
+       if (w == NULL) return ;
+
        free(w->nombre);
        switch (w->tipo) {
                case INPUT:
@@ -237,7 +274,8 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w)
        }
 
        wrefresh(win);
-       while ((c=getch()) != 13) {
+       c = getch();
+       while ((c != KEY_ENTER) && (c != 13)) {
                /* Verifico si se apreto basckspace */
                if (c == KEY_BACKSPACE) {
                        if (current > 0) {
@@ -248,15 +286,20 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w)
                        /* Este va para dejar el cursor bien, ya que addch mueve el cursor*/
                        wmove(win, y, x+current);
                        wrefresh(win);
+                       c = getch();
                        continue;
                }
                /* Si no entra mas, ignoro toda entrada */
-               if (current >= w->max) continue;
-
+               if (current >= w->max) {
+                       c = getch();
+                       continue;
+               }
+               
                wmove(win, y, x+current);
                waddch(win, c);
                w->valor[current++] = c;
                wrefresh(win);
+               c = getch();
        }
        /* Cierro el string con el \0 */
        w->valor[current+1] = '\0';
index 49051969d33b0eeec66dd556239f3dc8177df451..8316e8556a11cae3c426f224503d68088c99f38c 100644 (file)
@@ -39,6 +39,8 @@ typedef struct _elem_ {
         *   RADIO : Cantidad de Opciones
         */
        unsigned int max;
+       /** Formato del campo de entrada */
+       char *format;
        /** Siguiente elemento */
        struct _elem_ *sig;
 
@@ -91,7 +93,7 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i
  */
 void form_ejecutar(t_Form *f, int x, int y);
 
-/** Obtiene el valor asociado a un campo
+/** Obtiene el valor asociado a un campo como char *
  *
  *  \param f Formulario.
  *  \param widget Nombre del campo.
@@ -99,8 +101,12 @@ void form_ejecutar(t_Form *f, int x, int y);
  */
 char *form_obtener_valor_char(t_Form *f, const char *widget);
 
+/** Obtiene el valor asociado a un campo como int
+ */
 int form_obtener_valor_int(t_Form *f, const char *widget);
 
+/** Obtiene el valor asociado a un campo como float 
+ */
 float form_obtener_valor_float(t_Form *f, const char *widget);
 
 #endif
index 95c55bfeffb71f56b21109e3853033c224d105fe..19daa730c6c835f0603e864da5bf4b8b12bca00c 100644 (file)
@@ -25,22 +25,12 @@ int main(int argc, char *argv[])
        }
 
        /* Inicio Curses */
-       signal(SIGINT, finish);      /* arrange interrupts to terminate */
-       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]);
-
+       signal(SIGINT, finish);
+       initscr();
+       keypad(stdscr, TRUE);
+       nonl();
+       cbreak();
+       noecho();
        /* Si se soporta color, los inicializo */
        if (has_colors()) {
                start_color();
@@ -55,6 +45,15 @@ int main(int argc, char *argv[])
                init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
        }
        
+       /* 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]);
+       
        /* Ventana, caracter para linea vertical, caracter para linea horizontal*/
        box(stdscr, ACS_VLINE, ACS_HLINE);
        /* Ventana, Y, X, Texto */
@@ -64,6 +63,7 @@ int main(int argc, char *argv[])
        attroff(COLOR_PAIR(2));
        wrefresh(stdscr);
 
+       /* CICLO PRINCIPAL DE LA APLICACION */
        while ((c = main_menu()) != -1) {
                switch (c) {
                        case 0:
@@ -217,7 +217,7 @@ int main_menu()
        curs_set(0);
        opcion = -1;
        salir = 0;
-       while((!salir) && (c = getch()) != KEY_F(1)) {
+       while((!salir) && (c = getch())) {
                switch(c) {
                        case KEY_DOWN:
                                menu_driver(menu, REQ_DOWN_ITEM);
@@ -226,7 +226,8 @@ int main_menu()
                                menu_driver(menu, REQ_UP_ITEM);
                        break;
                        case 13:
-                       case 10: {
+                       case 10: 
+                       {
                                ITEM *cur;
                                int i;