X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/5552879516ba6ae3139d3317ae17ca53540ba74b..af17bf78b31b1cdb1ed6823344bb945add1700e2:/gui/form.c diff --git a/gui/form.c b/gui/form.c index 71973a9..21e7d48 100644 --- a/gui/form.c +++ b/gui/form.c @@ -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); @@ -89,23 +90,33 @@ void form_ejecutar(t_Form *f, int x, int y) /* Pongo las etiquetas de los campos, y me fijo el mayor offset */ while (tmp) { 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 ": " al offset*/ - x += offset + 2; + offset += 2; 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); + mvwaddstr(f->win, my_y, x, tmp->nombre); + waddch(f->win, ':'); + waddch(f->win, ' '); + mvwaddstr(f->win, my_y, x+offset, tmp->valor); + tmp = tmp->sig; + } + wrefresh(f->win); + + tmp = f->primero; + my_y = y-1; + while (tmp) { + ++my_y; + wmove(f->win, my_y, x+offset); + salida = tmp->ejecutar(f->win, x+offset, my_y, tmp); + wrefresh(f->win); tmp = tmp->sig; } } @@ -129,7 +140,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 +151,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; @@ -206,12 +218,13 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w) char *tmp = w->valor; int current = 0, c; mvwaddstr(win, y, x, w->valor); - + curs_set(1); while ((*tmp) != '\0') { tmp++; current++; } + wrefresh(win); while ((c=getch()) != 13) { /* Verifico si se apreto basckspace */ if (c == KEY_BACKSPACE) { @@ -222,6 +235,7 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w) waddch(win, ' '); /* Este va para dejar el cursor bien, ya que addch mueve el cursor*/ wmove(win, y, x+current); + wrefresh(win); continue; } /* Si no entra mas, ignoro toda entrada */ @@ -230,6 +244,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 +276,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 +294,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;