]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/form.c
* Agrego enunciado 2da entrega
[z.facultad/75.06/emufs.git] / emufs_gui / form.c
index 5a76a4d8ebabb31bacbd705d66f8c5bc8bdc5e0b..b8907a0b3e813bed937ae5d36fc6373b2088d3ce 100644 (file)
@@ -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) {
 
        /* 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 {
                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)
 {
 
 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;
        
        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, ' ');
                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; i<tmp->max; 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; i<tmp->max; 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);
                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);
        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;
        }
                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';
                return NULL;
        }
        tmp->valor[0] = '\0';
-       strncpy(tmp->valor, defecto, max);
+       strcpy(tmp->valor, defecto);
 
        tmp->sig = NULL;
 
 
        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 */
                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;
        /* 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;
 }
 
        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;
+       }
+}
+