summaryrefslogtreecommitdiff
path: root/src/fe-text/cuix-api.h
blob: 9dbb7bcf54614f40d631289a036efbcc95c9074f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef __CUIX_API_H
#define __CUIX_API_H

#include "term-curses.h"

#define MAX_FIELD_SIZE 64

WINDOW *cuix_win;
PANEL *p_main;
PANEL *p_cuix;

enum objtype {
    /* For objects */
    CUIX_MENU,
    CUIX_FORM,
    CUIX_LIST,
    /* For entries */
    /* NB: LABEL must stay the first entry, as it is used to test if we have
     * an object or an entry */
    CUIX_LABEL,
    CUIX_FIELD,
    CUIX_MENUENTRY
};



/* This is the type of the action to be executed when the entry has been
 * successfully selected (in case of a menuentry) or filled (in case of a
 * field). */
typedef int(*action_fn_type)(char *);


typedef struct entry {
    int type;
    char *data; /* contains label or submenu title */
    action_fn_type action;
} entry;


typedef struct object {
    int type;
    char *title;
    void **entries;
    int alloced; /* defines the current size of entries */ 
    int last; /* index of the first non-alloced entry */
} object;


/* Object definitions */

object *create_menu (char *title);
object *create_form (char *title);
/* entries must be NULL terminated */
object *create_list (char *title, entry **entries);


entry *create_menuentry (char *label, action_fn_type action);
entry *create_label (char *label);
entry *create_field (char *label, action_fn_type action);

void attach_submenu (object *father, object *child);
void attach_entry (object *father, void *child);

void display_object (object *obj);

void my_menu(void);

#endif /* __CUIX_API_H */