]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Mejoro documentacion.
authorRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 30 Mar 2004 16:25:17 +0000 (16:25 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 30 Mar 2004 16:25:17 +0000 (16:25 +0000)
 * Mejoro abstraccion

gui/form.c
gui/form.h

index 44ad1e8c788abde332a9bd0855f64d02c71e4b22..71973a9cf3e0e38f3fa50b5ecd3f17b0bdefda97 100644 (file)
@@ -1,10 +1,37 @@
 
 #include "form.h"
-               
-static void widget_free(t_Widget *);
+
+/** Libera la memoria ocupada por un widget
+ *
+ *  \param w Widget a liberar
+ */
+static void widget_free(t_Widget *w);
+/** Crea un nuevo campo de entrada de texto
+ *
+ *  \param tipo Debe ser INPUT
+ *  \param nombre Nombre del control (también usada como etiqueta).
+ *  \param max Cantidad máxima de caracteres
+ */
 static t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max);
+/** Crea un nuevo RADIO Group
+ *
+ *  \param tipo Debe ser RADIO
+ *  \param nombre Nombre del campo
+ *  \param max Cantidad de opciones
+ *  \param valores Texto separado con comas con las opciones
+ */
 static t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max, const char *valores);
+/** Ejecuta una consulta sobre un INPUT
+ *
+ *  Permite ingresar texto en el INPUT hasta que se presiona ENTER
+ */
 static int form_input(WINDOW *win, int x, int y, t_Widget *w);
+/** Ejecuta una consulta sobre un RADIO
+ *
+ *  Permite seleccionar una de las múltiples opciones del control.
+ *  Para seleccionar se utilizan las feclas <- y -> y ENTER
+ *  para aceptar.
+ */
 static int form_radio(WINDOW *win, int x, int y, t_Widget *w);
 
 t_Form *form_crear(WINDOW *win)
@@ -23,7 +50,7 @@ int form_destruir(t_Form *f)
 
        while (tmp) {
                f->primero = f->primero->sig;
-               widget_free(tmp);
+               tmp->destruir(tmp);
                tmp = f->primero;
        }
        free(f);
@@ -33,7 +60,8 @@ int form_destruir(t_Form *f)
 void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned int max, const char *defecto)
 {
        t_Widget *tmp = NULL;
-       
+
+       /* Creo el nuevo widget segun el tipo */
        switch (tipo) {
                case INPUT:
                        tmp = widget_input_create(tipo, nombre, max);
@@ -42,6 +70,7 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i
                        tmp = widget_radio_create(tipo, nombre, max, defecto);
        }
 
+       /* Si se creo wl widget, lo agrego al formulario al final */
        if (tmp) {
                if (f->primero == NULL) {
                        f->primero = f->ultimo = tmp;
@@ -62,30 +91,23 @@ void form_ejecutar(t_Form *f, int x, int y)
                my_y++;
                mvwaddstr(f->win, my_y, x, tmp->nombre);
                waddch(f->win, ':');
+               waddch(f->win, ' ');
                if (strlen(tmp->nombre) > offset)
                        offset = strlen(tmp->nombre);
 
                tmp = tmp->sig;
        }
-       /* Agrego el : */
-       ++offset;
-       x += offset;
+       /* Agrego el ": " al offset*/
+       x += offset + 2;
 
        tmp = f->primero;
        my_y = y-1;
        while (tmp) {
                ++my_y;
                wmove(f->win, my_y, x);
-               switch (tmp->tipo) {
-                       case INPUT:
-                               salida = form_input(f->win, x, my_y, tmp);
-                       break;
-                       case RADIO:
-                               salida = form_radio(f->win, x, my_y, tmp);
-               }
+               salida = tmp->ejecutar(f->win, x, my_y, tmp);
                tmp = tmp->sig;
        }
-       mvwaddstr(f->win, 0, 0, "SALI");
 }
 
 char *form_obtener_valor(t_Form *f, const char *widget)
@@ -107,7 +129,6 @@ char *form_obtener_valor(t_Form *f, const char *widget)
        return "";
 }
 
-
 t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max)
 {
        t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget));
@@ -122,6 +143,8 @@ t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max
 
        tmp->sig = NULL;
 
+       tmp->ejecutar = form_input;
+       tmp->destruir = widget_free;
        return tmp;
 }
 
@@ -157,6 +180,8 @@ t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max
        strncpy(tmp->opciones[actual], valores+ini, fin-ini);
        tmp->opciones[actual][fin-ini] = '\0';
 
+       tmp->ejecutar = form_radio;
+       tmp->destruir = widget_free;
        return tmp;
 }
 
@@ -221,6 +246,7 @@ int form_radio(WINDOW *win, int x, int y, t_Widget *w)
        /* Array de posiciones para las Xs */
        int xs[100]; /* TODO : Dinamizar!! */
 
+       curs_set(0);
        wmove(win, y, x);
        _x = x;
        for(i=0; i<w->max; i++) {
@@ -255,6 +281,7 @@ int form_radio(WINDOW *win, int x, int y, t_Widget *w)
        }
 
        w->actual = actual;
+       curs_set(1);
        return 0;
 }
 
index ecec54d596136d09489a109f4358cd336f809a8b..d02da16ee70ab32626373b3b57667fa015eb963a 100644 (file)
@@ -9,18 +9,42 @@
 
 #include "malloc_debug.h"
 
+/** Tipos de Widgets válidos */
 typedef enum {INPUT, RADIO} t_Campo;
 
+/** Tipo de dato Widget */
 typedef struct _elem_ {
-       char *nombre; /* nombre del widget */
-       t_Campo tipo; /* tipo */
+       /** Nombre */
+       char *nombre;
+       /** Tipo */
+       t_Campo tipo;
+       /** Dato a manejar
+        *
+        *  El dato puede ser simple o múltiple, dependiendo
+        *  si se opta por referencias valor u opciones.
+        *
+        *  Consulte la documentación de union de ANSI-C para
+        *  mas datos
+        */
        union {
-               char *valor; /* valor actual */
-               char **opciones; /* array de opciones */
+               char *valor;
+               char **opciones;
        };
-       unsigned int actual; /* En RADIO el seleccionado */
-       unsigned int max; /* INPUT: tamaño maximo RADIO: Cant. Opciones */
-       struct _elem_ *sig; /* siguiente en la lista de foco */
+       /** Elemento actual (si se utiliza valores múltiples */
+       unsigned int actual;
+       /** Máximo de elementos
+        *
+        *  El uso varía según el Widget :
+        *   INPUT : Cantidad máxima de caracteres.
+        *   RADIO : Cantidad de Opciones
+        */
+       unsigned int max;
+       /** Siguiente elemento */
+       struct _elem_ *sig;
+
+       /* Métodos */
+       int (*ejecutar)(WINDOW *win, int x, int y, struct _elem_ *w);
+       void (*destruir)(struct _elem_ *);
 } t_Widget;
 
 typedef struct _form_ {