]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Se agrega un RADIO BUTTON al formulario :-)
authorRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 30 Mar 2004 05:37:08 +0000 (05:37 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Tue, 30 Mar 2004 05:37:08 +0000 (05:37 +0000)
   Para elegir la opciones usar feclas IZQ y DER y ENTER
 para pasar al campo siguiente.

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

index 45ce6e79db19013830150518f303cb1df80d5abb..cad80918923c615f17cca24763c11f5269be2931 100644 (file)
@@ -2,8 +2,10 @@
 #include "form.h"
                
 static void widget_free(t_Widget *);
-static t_Widget *widget_create(t_Campo tipo, const char *nombre, unsigned int max);
+static t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max);
+static t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max, const char *valores);
 static int form_input(WINDOW *win, int x, int y, t_Widget *w);
+static int form_radio(WINDOW *win, int x, int y, t_Widget *w);
 
 t_Form *form_crear(WINDOW *win)
 {
@@ -28,15 +30,25 @@ int form_destruir(t_Form *f)
        return 1;
 }
 
-void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned int max)
+void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned int max, const char *defecto)
 {
-       t_Widget *tmp = widget_create(tipo, nombre, max);
+       t_Widget *tmp = NULL;
+       
+       switch (tipo) {
+               case INPUT:
+                       tmp = widget_input_create(tipo, nombre, max);
+               break;
+               case RADIO:
+                       tmp = widget_radio_create(tipo, nombre, max, defecto);
+       }
 
-       if (f->primero == NULL) {
-               f->primero = f->ultimo = tmp;
-       } else {
-               f->ultimo->sig = tmp;
-               f->ultimo = tmp;
+       if (tmp) {
+               if (f->primero == NULL) {
+                       f->primero = f->ultimo = tmp;
+               } else {
+                       f->ultimo->sig = tmp;
+                       f->ultimo = tmp;
+               }
        }
 }
 
@@ -64,7 +76,13 @@ void form_ejecutar(t_Form *f, int x, int y)
        while (tmp) {
                ++my_y;
                wmove(f->win, my_y, x);
-               salida = form_input(f->win, x, my_y, tmp);
+               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);
+               }
                tmp = tmp->sig;
        }
        mvwaddstr(f->win, 0, 0, "SALI");
@@ -76,7 +94,12 @@ char *form_obtener_valor(t_Form *f, const char *widget)
        t_Widget *tmp = f->primero;
        while (tmp) {
                if (strcmp(widget, tmp->nombre) == 0) {
-                       return tmp->valor;
+                       switch (tmp->tipo) {
+                               case INPUT:
+                                       return tmp->valor;
+                               case RADIO:
+                                       return tmp->opciones[tmp->actual];
+                       }
                }
                tmp = tmp->sig;
        }
@@ -85,7 +108,7 @@ char *form_obtener_valor(t_Form *f, const char *widget)
 }
 
 
-t_Widget *widget_create(t_Campo tipo, const char *nombre, unsigned int max)
+t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max)
 {
        t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget));
 
@@ -102,6 +125,41 @@ t_Widget *widget_create(t_Campo tipo, const char *nombre, unsigned int max)
        return tmp;
 }
 
+t_Widget *widget_radio_create(t_Campo tipo, const char *nombre, unsigned int max, const char *valores)
+{
+       int ini, fin, actual;
+       t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget));
+
+       tmp->tipo = tipo;
+       tmp->nombre = (char *)malloc(sizeof(char)*(strlen(nombre)+1));
+       strcpy(tmp->nombre, nombre);
+
+       tmp->max = max;
+       tmp->opciones = (char **)malloc(sizeof(char*)*(max));
+       /* Parseo VALOR separado por comas */
+       actual = ini = 0;
+       fin = ini+1;
+       tmp->sig = NULL;
+       while (valores[fin] != '\0') {
+               if (valores[fin] == ',') {
+                       tmp->opciones[actual] = (char *)malloc(sizeof(char)*(fin-ini+1));
+                       strncpy(tmp->opciones[actual], valores+ini, fin-ini);
+                       tmp->opciones[actual][fin-ini] = '\0';
+                       ini = fin+1;
+                       fin = ini+1;
+                       actual++;
+               } else {
+                       fin++;
+               }
+       }
+       /* Me queda el ultimo elemento */
+       tmp->opciones[actual] = (char *)malloc(sizeof(char)*(fin-ini+1));
+       strncpy(tmp->opciones[actual], valores+ini, fin-ini);
+       tmp->opciones[actual][fin-ini] = '\0';
+
+       return tmp;
+}
+
 void widget_free(t_Widget *w)
 {
        free(w->nombre);
@@ -146,3 +204,48 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w)
        /* De esa forma, ESC pasa al campo anterios. ENTER al siguiente */
        return c;
 }
+
+int form_radio(WINDOW *win, int x, int y, t_Widget *w)
+{
+       /* Por ahora solo pongo las cosas y me voy */
+       int i, actual, _x, c;
+       /* Array de posiciones para las Xs */
+       int xs[100]; /* TODO : Dinamizar!! */
+
+       wmove(win, y, x);
+       _x = x;
+       for(i=0; i<w->max; i++) {
+               waddch(win, '('); _x++;
+               waddch(win, ' '); xs[i] = _x; _x++;
+               waddch(win, ')'); _x++;
+               waddstr(win, w->opciones[i]); _x += strlen(w->opciones[i]);
+               waddch(win, ' '); _x++;
+       }
+
+       actual = 0;
+       wmove(win, y, xs[actual]);
+       waddch(win, 'X');
+
+       while ((c=getch()) != 13) {
+               if (c == KEY_LEFT) {
+                       wmove(win, y, xs[actual]);
+                       waddch(win, ' ');       
+                       actual--;
+                       if (actual < 0) actual = 0;
+                       wmove(win, y, xs[actual]);
+                       waddch(win, 'X');       
+               }
+               if (c == KEY_RIGHT) {
+                       wmove(win, y, xs[actual]);
+                       waddch(win, ' ');       
+                       actual++;
+                       if (actual >= w->max) actual = w->max-1;
+                       wmove(win, y, xs[actual]);
+                       waddch(win, 'X');       
+               }
+       }
+
+       w->actual = actual;
+       return 0;
+}
+
index 2d2bf719850e6d188819720536c3baf130dfbb00..9ac2a3c311a5f7b67196334c0fdcd9b582bfae2d 100644 (file)
@@ -7,13 +7,17 @@
 #include <stdlib.h>
 #include <curses.h>
 
-typedef enum {INPUT} t_Campo;
+typedef enum {INPUT, RADIO} t_Campo;
 
 typedef struct _elem_ {
        char *nombre; /* nombre del widget */
        t_Campo tipo; /* tipo */
-       char *valor; /* valor actual */
-       unsigned int max; /*tamaño maximo */
+       union {
+               char *valor; /* valor actual */
+               char **opciones; /* array de 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 */
 } t_Widget;
 
@@ -27,7 +31,7 @@ t_Form *form_crear(WINDOW *win);
 /* Libera un formulario */
 int form_destruir(t_Form *);
 /* Agrega un nuevo campo */
-void form_agregar_widget(t_Form *, t_Campo tipo, const char *nombre, unsigned int max);
+void form_agregar_widget(t_Form *, t_Campo tipo, const char *nombre, unsigned int max, const char *defecto);
 /* Ejecuta una entrada del formulario */
 void form_ejecutar(t_Form *, int x, int y);
 char *form_obtener_valor(t_Form *, const char *widget);
index 8d1da943f5ad836ecd7d7386bd05cc3efa5157bf..898fde9e3343d9b716be14cffa2a4351fbc203d5 100644 (file)
--- a/gui/gui.c
+++ b/gui/gui.c
@@ -51,9 +51,9 @@ int main(int argc, char *argv[])
 
        /* Creo el formulario */
        form = form_crear(mainwin);
-       form_agregar_widget(form, INPUT, "Nombre", 15);
-       form_agregar_widget(form, INPUT, "Padron", 5);
-       form_agregar_widget(form, INPUT, "Datos", 30);
+       form_agregar_widget(form, INPUT, "Nombre", 15, "");
+       form_agregar_widget(form, RADIO, "Voto", 2, "Si,No");
+       form_agregar_widget(form, INPUT, "Datos", 30, "");
 
        form_ejecutar(form, 10, 10);
 
@@ -64,7 +64,7 @@ int main(int argc, char *argv[])
        /* Imprimo los datos! */
        printf("Datos Ingresados : \n");
        printf("\tNombre : %s\n", form_obtener_valor(form, "Nombre"));
-       printf("\tPadron : %s\n", form_obtener_valor(form, "Padron"));
+       printf("\tVoto   : %s\n", form_obtener_valor(form, "Voto"));
        printf("\tDatos  : %s\n", form_obtener_valor(form, "Datos"));
        
        /* Libero el formulario */