X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/6e3d570b2e409f486e718aa98f2ffc3741362c8e..df728d9b3de494f9f9b3e7a3e6fc684ed506d31a:/emufs_gui/form.c diff --git a/emufs_gui/form.c b/emufs_gui/form.c index 5a76a4d..b8907a0 100644 --- a/emufs_gui/form.c +++ b/emufs_gui/form.c @@ -80,6 +80,7 @@ void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned i /* Si se creo wl widget, lo agrego al formulario al final */ if (tmp) { + tmp->modificable = 1; if (f->primero == NULL) { f->primero = f->ultimo = tmp; } else { @@ -91,7 +92,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) { - int offset = 0, my_y, salida; + int offset = 0, my_y, salida, i; t_Widget *tmp = f->primero; my_y = y-1; @@ -114,8 +115,20 @@ void form_ejecutar(t_Form *f, int x, int 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); + if (tmp->tipo == INPUT){ + for(i=0; imax; i++) + mvwaddch(f->win, my_y, x+offset+i, ' '); + mvwaddstr(f->win, my_y, x+offset, tmp->valor); + } else { + wmove(f->win, my_y, x+offset); + for(i=0; imax; i++) { + waddch(f->win, '('); + waddch(f->win, ' '); + waddch(f->win, ')'); + waddstr(f->win, tmp->opciones[i]); + waddch(f->win, ' '); + } + } tmp = tmp->sig; } wrefresh(f->win); @@ -126,7 +139,8 @@ void form_ejecutar(t_Form *f, int x, int y) while (tmp) { ++my_y; wmove(f->win, my_y, x+offset); - salida = tmp->ejecutar(f->win, x+offset, my_y, tmp); + if (tmp->modificable) + salida = tmp->ejecutar(f->win, x+offset, my_y, tmp); wrefresh(f->win); tmp = tmp->sig; } @@ -185,7 +199,7 @@ t_Widget *widget_input_create(t_Campo tipo, const char *nombre, unsigned int max return NULL; } tmp->valor[0] = '\0'; - strncpy(tmp->valor, defecto, max); + strcpy(tmp->valor, defecto); tmp->sig = NULL; @@ -302,8 +316,7 @@ int form_input(WINDOW *win, int x, int y, t_Widget *w) c = getch(); } /* Cierro el string con el \0 */ - w->valor[current+1] = '\0'; - + w->valor[current] = '\0'; /* Retorno la tecla con la que se salio. */ /* De esa forma, ESC pasa al campo anterios. ENTER al siguiente */ return c; @@ -357,3 +370,29 @@ int form_radio(WINDOW *win, int x, int y, t_Widget *w) return 0; } +void form_es_modificable(t_Form *f, const char *widget, int b) +{ + /* Busco el widget */ + t_Widget *tmp = f->primero; + while (tmp) { + if (strcmp(widget, tmp->nombre) == 0) { + tmp->modificable = b; + break; + } + tmp = tmp->sig; + } +} + +void form_set_valor(t_Form *f, const char *widget, const char *s) +{ + /* Busco el widget */ + t_Widget *tmp = f->primero; + while (tmp) { + if (strcmp(widget, tmp->nombre) == 0) { + strcpy(tmp->valor, s); + break; + } + tmp = tmp->sig; + } +} +