X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/3e797d5e792af787f3a0d6c2568ca7d728e43860..44e29ffea53b9da70e6b5e16f96aa0231540dd87:/gui/form.h?ds=inline diff --git a/gui/form.h b/gui/form.h index 2d2bf71..8227150 100644 --- a/gui/form.h +++ b/gui/form.h @@ -7,14 +7,44 @@ #include #include -typedef enum {INPUT} t_Campo; +#include "malloc_debug.h" +/** Tipos de Widgets válidos */ +typedef enum {INPUT, RADIO} t_Campo; + +/** Tipo de dato Widget */ typedef struct _elem_ { - char *nombre; /* nombre del widget */ - t_Campo tipo; /* tipo */ - char *valor; /* valor actual */ - unsigned int max; /*tamaño maximo */ - struct _elem_ *sig; /* siguiente en la lista de foco */ + /** Nombre */ + char *nombre; + /** Tipo */ + t_Campo tipo; + /** Dato a manejar + * + * El dato puede ser simple o múltiple, dependiendo + * si se opta por referencias valor u opciones. + * + * Consulte la documentación de union de ANSI-C para + * mas datos + */ + union { + char *valor; + char **opciones; + }; + /** Elemento actual (si se utiliza valores múltiples */ + unsigned int actual; + /** Máximo de elementos + * + * El uso varía según el Widget : + * INPUT : Cantidad máxima de caracteres. + * RADIO : Cantidad de Opciones + */ + unsigned int max; + /** Siguiente elemento */ + struct _elem_ *sig; + + /* Métodos */ + int (*ejecutar)(WINDOW *win, int x, int y, struct _elem_ *w); + void (*destruir)(struct _elem_ *); } t_Widget; typedef struct _form_ { @@ -22,15 +52,52 @@ typedef struct _form_ { WINDOW *win; } t_Form; -/* Inicializa un formulario */ +/** Inicializa un formulario + * + * \param win Ventana a la que pertenece + * */ t_Form *form_crear(WINDOW *win); -/* Libera un formulario */ + +/** 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); -/* Ejecuta una entrada del formulario */ -void form_ejecutar(t_Form *, int x, int y); -char *form_obtener_valor(t_Form *, const char *widget); +/** Agrega un nuevo campo + * + * Significado de max según tipo: + * INPUT : Cantidad máxima de caracteres de la entrada. + * RADIO : Cantidad de opciones + * + * Significado de defecto según tipo + * INPUT : Nada. + * RADIO : Texto separado por comas (',') de las opciones disponibles. + * + * \param f Formulario + * \param tipo Tipo de campo a agregar [INPUT|RADIO]. + * \param nombre Nombre del campo. Es también utilizado como etiqueta. + * \param max Su uso depende del campo tipo. + * \param defecto Su uso depende del campo tipo. + */ +void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned int max, const char *defecto); + +/** Ejecuta una entrada del formulario + * + * Esta función va recorriendo uno por uno los campos del formulario + * y dependiendo del tipo ejecutando su acción asociada. + * + * Cuando se ha pasado por todos los campos el formulario retorna el control. + * + * \param f Formulario. + * \param x Coordenada X de inicio del formulario. + * \param y Coordenada Y de inicio del formulario. + */ +void form_ejecutar(t_Form *f, int x, int y); + +/** Obtiene el valor asociado a un campo + * + * \param f Formulario. + * \param widget Nombre del campo. + * \return "" Si no se encontro nada. + */ +char *form_obtener_valor(t_Form *f, const char *widget); #endif