]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/form.h
Algunos detalles de coding style y pruebas de stats.
[z.facultad/75.06/emufs.git] / emufs_gui / form.h
1 /* Manejo de Formularios con CURSES */
2
3 #ifndef _FORM_H_
4 #define _FORM_H_
5
6 #include <string.h>
7 #include <stdlib.h>
8 #include <curses.h>
9
10 /** Tipos de Widgets válidos */
11 typedef enum {INPUT, RADIO} t_Campo;
12
13 /** Tipo de dato Widget */
14 typedef struct _elem_ {
15         /** Nombre */
16         char *nombre;
17         /** Tipo */
18         t_Campo tipo;
19         /** Dato a manejar
20          *
21          *  El dato puede ser simple o múltiple, dependiendo
22          *  si se opta por referencias valor u opciones.
23          *
24          *  Consulte la documentación de union de ANSI-C para
25          *  mas datos
26          */
27         union {
28                 char *valor;
29                 char **opciones;
30         };
31         /** Elemento actual (si se utiliza valores múltiples */
32         unsigned int actual;
33         /** Máximo de elementos
34          *
35          *  El uso varía según el Widget :
36          *   INPUT : Cantidad máxima de caracteres.
37          *   RADIO : Cantidad de Opciones
38          */
39         unsigned int max;
40         /** Formato del campo de entrada */
41         char *format;
42         /** Siguiente elemento */
43         struct _elem_ *sig;
44
45         int modificable;
46
47         /* Métodos */
48         int (*ejecutar)(WINDOW *win, int x, int y, struct _elem_ *w);
49         void (*destruir)(struct _elem_ *);
50 } t_Widget;
51
52 typedef struct _form_ {
53         t_Widget *primero, *ultimo; /* puntero a widgets */
54         WINDOW *win;
55 } t_Form;
56
57 /** Inicializa un formulario
58  *
59  *  \param win Ventana a la que pertenece
60  * */
61 t_Form *form_crear(WINDOW *win);
62
63 /** Libera un formulario */
64 int form_destruir(t_Form *);
65
66 /** Agrega un nuevo campo
67  *
68  *  Significado de <em>max</em> según tipo:
69  *    INPUT : Cantidad máxima de caracteres de la entrada.
70  *    RADIO : Cantidad de opciones
71  *
72  *  Significado de <em>defecto</em> según tipo
73  *    INPUT : Nada.
74  *    RADIO : Texto separado por comas (',') de las opciones disponibles.
75  *
76  *  \param f Formulario
77  *  \param tipo Tipo de campo a agregar [INPUT|RADIO].
78  *  \param nombre Nombre del campo. Es también utilizado como etiqueta.
79  *  \param max Su uso depende del campo tipo.
80  *  \param defecto Su uso depende del campo tipo.
81  */
82 void form_agregar_widget(t_Form *f, t_Campo tipo, const char *nombre, unsigned int max, const char *defecto);
83
84 /** Ejecuta una entrada del formulario
85  *
86  *  Esta función va recorriendo uno por uno los campos del formulario
87  *  y dependiendo del tipo ejecutando su acción asociada.
88  *
89  *  Cuando se ha pasado por todos los campos el formulario retorna el control.
90  *
91  *  \param f Formulario.
92  *  \param x Coordenada X de inicio del formulario.
93  *  \param y Coordenada Y de inicio del formulario.
94  */
95 void form_ejecutar(t_Form *f, int x, int y);
96
97 /** Establece si un Widget puede ser modificado
98  *
99  *  \param f Formulario.
100  *  \param widget Nombre del Widget.
101  *  \param b Valor booleano
102  */
103 void form_es_modificable(t_Form *f, const char *widget, int b);
104
105 /** Setea el valor de un widget
106  *
107  *  Para campos de texto solamente!.
108  *
109  *  Pone en el campo valor el texto pasado por parametro.
110  *
111  *  \param f Formulario.
112  *  \param widget Nombre del widget.
113  *  \param s Texto a poner.
114  */
115 void form_set_valor(t_Form *f, const char *widget, const char *s);
116
117 /** Obtiene el valor asociado a un campo como char *
118  *
119  *  \param f Formulario.
120  *  \param widget Nombre del campo.
121  *  \return "" Si no se encontro nada.
122  */
123 char *form_obtener_valor_char(t_Form *f, const char *widget);
124
125 /** Obtiene el valor asociado a un campo como int
126  */
127 int form_obtener_valor_int(t_Form *f, const char *widget);
128
129 /** Obtiene el valor asociado a un campo como float 
130  */
131 float form_obtener_valor_float(t_Form *f, const char *widget);
132
133 #endif
134