]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - gui/form.c
* La cosa empieza a tomar forma
[z.facultad/75.06/emufs.git] / gui / form.c
index 71973a9cf3e0e38f3fa50b5ecd3f17b0bdefda97..38d93738ca929589b423a4099a8c41f6fb14609e 100644 (file)
@@ -10,9 +10,10 @@ static void widget_free(t_Widget *w);
  *
  *  \param tipo Debe ser INPUT
  *  \param nombre Nombre del control (también usada como etiqueta).
- *  \param max Cantidad máxima de caracteres
+ *  \param max Cantidad máxima de caracteres.
+ *  \param defecto Valor inicial del campo.
  */
-static t_Widget *widget_input_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, const char *defecto);
 /** Crea un nuevo RADIO Group
  *
  *  \param tipo Debe ser RADIO
@@ -64,7 +65,7 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i
        /* Creo el nuevo widget segun el tipo */
        switch (tipo) {
                case INPUT:
-                       tmp = widget_input_create(tipo, nombre, max);
+                       tmp = widget_input_create(tipo, nombre, max, defecto);
                break;
                case RADIO:
                        tmp = widget_radio_create(tipo, nombre, max, defecto);
@@ -99,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;
        }
 }
@@ -129,7 +131,7 @@ 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 *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max, const char *defecto)
 {
        t_Widget *tmp = (t_Widget *)malloc(sizeof(t_Widget));
 
@@ -140,6 +142,7 @@ t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max
        tmp->max = max;
        tmp->valor = (char *)malloc(sizeof(char)*(max+1));
        tmp->valor[0] = '\0';
+       strncpy(tmp->valor, defecto, max);
 
        tmp->sig = NULL;
 
@@ -212,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) {
@@ -230,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';
@@ -261,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]);
@@ -278,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;