]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - gui/form.h
d02da16ee70ab32626373b3b57667fa015eb963a
[z.facultad/75.06/emufs.git] / 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 #include "malloc_debug.h"
11
12 /** Tipos de Widgets válidos */
13 typedef enum {INPUT, RADIO} t_Campo;
14
15 /** Tipo de dato Widget */
16 typedef struct _elem_ {
17         /** Nombre */
18         char *nombre;
19         /** Tipo */
20         t_Campo tipo;
21         /** Dato a manejar
22          *
23          *  El dato puede ser simple o múltiple, dependiendo
24          *  si se opta por referencias valor u opciones.
25          *
26          *  Consulte la documentación de union de ANSI-C para
27          *  mas datos
28          */
29         union {
30                 char *valor;
31                 char **opciones;
32         };
33         /** Elemento actual (si se utiliza valores múltiples */
34         unsigned int actual;
35         /** Máximo de elementos
36          *
37          *  El uso varía según el Widget :
38          *   INPUT : Cantidad máxima de caracteres.
39          *   RADIO : Cantidad de Opciones
40          */
41         unsigned int max;
42         /** Siguiente elemento */
43         struct _elem_ *sig;
44
45         /* Métodos */
46         int (*ejecutar)(WINDOW *win, int x, int y, struct _elem_ *w);
47         void (*destruir)(struct _elem_ *);
48 } t_Widget;
49
50 typedef struct _form_ {
51         t_Widget *primero, *ultimo; /* puntero a widgets */
52         WINDOW *win;
53 } t_Form;
54
55 /* Inicializa un formulario */
56 t_Form *form_crear(WINDOW *win);
57 /* Libera un formulario */
58 int form_destruir(t_Form *);
59 /* Agrega un nuevo campo */
60 void form_agregar_widget(t_Form *, t_Campo tipo, const char *nombre, unsigned int max, const char *defecto);
61 /* Ejecuta una entrada del formulario */
62 void form_ejecutar(t_Form *, int x, int y);
63 char *form_obtener_valor(t_Form *, const char *widget);
64
65 #endif
66