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 #ifndef UIC_CONTEXT_H
30 #define UIC_CONTEXT_H
31
32 #include "../ui/toolkit.h"
33 #include <cx/map.h>
34 #include <cx/hash_map.h>
35 #include <cx/mempool.h>
36 #include <cx/list.h>
37 #include <cx/linked_list.h>
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42
43 typedef struct UiVar UiVar;
44 typedef struct UiListPtr UiListPtr;
45 typedef struct UiListVar UiListVar;
46 typedef struct UiGroupWidget UiGroupWidget;
47
48 typedef enum UiVarType UiVarType;
49
50 enum UiVarType {
51 UI_VAR_SPECIAL =
0,
52 UI_VAR_INTEGER,
53 UI_VAR_DOUBLE,
54 UI_VAR_STRING,
55 UI_VAR_TEXT,
56 UI_VAR_LIST,
57 UI_VAR_RANGE,
58 UI_VAR_GENERIC
59 };
60
61 struct UiContext {
62 UiContext *parent;
63 UiObject *obj;
64 CxMempool *mp;
65 const CxAllocator *allocator;
66
67 void *document;
68 CxList *documents;
69
70 CxMap *vars;
71 CxMap *vars_unbound;
72
73 CxList *groups;
74 CxList *group_widgets;
75
76 void (*attach_document)(UiContext *ctx,
void *document);
77 void (*detach_document2)(UiContext *ctx,
void *document);
78
79 char *title;
80
81 #ifdef UI_GTK
82 #if GTK_CHECK_VERSION(
4,
0,
0)
83 GActionMap *action_map;
84 #elif UI_GTK2 ||
UI_GTK3
85 GtkAccelGroup *accel_group;
86 #endif
87 #endif
88
89
90
91 ui_callback close_callback;
92 void *close_data;
93 };
94
95
96 struct UiVar {
97 void *value;
98 UiVarType type;
99 UiVar *from;
100 UiContext *from_ctx;
101 };
102
103 struct UiGroupWidget {
104 void *widget;
105 ui_enablefunc enable;
106 int *groups;
107 int numgroups;
108 };
109
110
111 void uic_init_global_context(
void);
112
113 UiContext* uic_context(UiObject *toplevel, CxMempool *mp);
114 UiContext* uic_root_context(UiContext *ctx);
115 void uic_context_set_document(UiContext *ctx,
void *document);
116 void uic_context_detach_document(UiContext *ctx);
117
118 void uic_context_prepare_close(UiContext *ctx);
119
120 void uic_context_attach_document(UiContext *ctx,
void *document);
121 void uic_context_detach_document2(UiContext *ctx,
void *document);
122 void uic_context_detach_all(UiContext *ctx);
123
124 UiVar* uic_get_var(UiContext *ctx,
const char *name);
125 UiVar* uic_create_var(UiContext *ctx,
const char *name, UiVarType type);
126 UiVar* uic_create_value_var(UiContext *ctx,
void *value);
127 void* uic_create_value(UiContext *ctx, UiVarType type);
128
129 UiVar* uic_widget_var(UiContext* toplevel, UiContext* current,
void* value,
const char* varname, UiVarType type);
130
131 void uic_copy_binding(UiVar *from, UiVar *to, UiBool copytodoc);
132 void uic_save_var2(UiVar *var);
133 void uic_unbind_var(UiVar *var);
134
135 void uic_reg_var(UiContext *ctx,
char *name, UiVarType type,
void *value);
136
137 void uic_remove_bound_var(UiContext *ctx, UiVar *var);
138
139 size_t uic_group_array_size(
const int *groups);
140 void uic_check_group_widgets(UiContext *ctx);
141 void uic_add_group_widget(UiContext *ctx,
void *widget, ui_enablefunc enable, CxList *groups);
142 void uic_add_group_widget_i(UiContext *ctx,
void *widget, ui_enablefunc enable,
const int *groups,
size_t numgroups);
143 void uic_remove_group_widget(UiContext *ctx,
void *widget);
144
145 #ifdef __cplusplus
146 }
147 #endif
148
149 #endif
150
151