ui/ui/toolkit.h

changeset 140
c03c338a7dcf
parent 133
6dd780cbc8c6
child 141
cc2170ea05ad
equal deleted inserted replaced
139:dbde25a5bc53 140:c03c338a7dcf
1 /* 1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 * 3 *
4 * Copyright 2014 Olaf Wintermann. All rights reserved. 4 * Copyright 2017 Olaf Wintermann. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
95 typedef struct UiString UiString; 95 typedef struct UiString UiString;
96 typedef struct UiText UiText; 96 typedef struct UiText UiText;
97 typedef struct UiList UiList; 97 typedef struct UiList UiList;
98 typedef struct UiRange UiRange; 98 typedef struct UiRange UiRange;
99 99
100 /* private types */ 100 /* begin opaque types */
101 typedef struct UiContext UiContext; 101 typedef struct UiContext UiContext;
102 typedef struct UiContainer UiContainer; 102 typedef struct UiContainer UiContainer;
103 /* end opaque types */
103 104
104 typedef struct UiTabbedPane UiTabbedPane; 105 typedef struct UiTabbedPane UiTabbedPane;
105 106
106 enum UiMouseEventType { UI_PRESS = 0, UI_PRESS2 }; 107 enum UiMouseEventType { UI_PRESS = 0, UI_PRESS2 };
107 108
108 #define ui_getval(val) (val).get(&(val)) 109
109 #define ui_setval(val, v) (val).set(&(val), v)
110
111 #define ui_getsubstr(text, begin, end) (text).getsubstr(&(text), begin, end)
112 #define ui_insert(text, begin, str) (text).insert(&(text), begin, str)
113 #define ui_length(text) (text).length(&(text))
114 #define ui_selection(text, begin, end) (text).selection(&(text), begin, end)
115 #define ui_position(text) (text).position(&(text))
116 #define ui_remove(text, begin, end) (text).remove(&(text), begin, end)
117 110
118 typedef void(*ui_callback)(UiEvent*, void*); /* event, user data */ 111 typedef void(*ui_callback)(UiEvent*, void*); /* event, user data */
119 112
120 typedef void*(*ui_model_getvalue_f)(void*, int); 113 typedef void*(*ui_model_getvalue_f)(void*, int);
121 114
131 * user window data 124 * user window data
132 */ 125 */
133 void *window; 126 void *window;
134 127
135 /* 128 /*
136 * window context (private) 129 * window context
137 */ 130 */
138 UiContext *ctx; 131 UiContext *ctx;
139 132
140 /* 133 /*
141 * container interface (private) 134 * container interface
142 */ 135 */
143 UiContainer *container; 136 UiContainer *container;
144 137
145 /* 138 /*
146 * next container object 139 * next container object
187 }; 180 };
188 181
189 struct UiInteger { 182 struct UiInteger {
190 int (*get)(UiInteger*); 183 int (*get)(UiInteger*);
191 void (*set)(UiInteger*, int); 184 void (*set)(UiInteger*, int);
185 void *obj;
186
192 int value; 187 int value;
193 void *obj; 188 UiObserver *observers;
194 }; 189 };
195 190
196 struct UiString { 191 struct UiString {
197 char* (*get)(UiString*); 192 char* (*get)(UiString*);
198 void (*set)(UiString*, char*); 193 void (*set)(UiString*, char*);
194 void *obj;
195
199 char* value; 196 char* value;
200 void *obj; 197 UiObserver *observers;
201 }; 198 };
202 199
203 struct UiText { 200 struct UiText {
204 void (*set)(UiText*, char*); 201 void (*set)(UiText*, char*);
205 char* (*get)(UiText*); 202 char* (*get)(UiText*);
206 char* (*getsubstr)(UiText*, int, int); // text, begin, end 203 char* (*getsubstr)(UiText*, int, int); /* text, begin, end */
207 void (*insert)(UiText*, int, char*); 204 void (*insert)(UiText*, int, char*);
208 void (*setposition)(UiText*,int); 205 void (*setposition)(UiText*,int);
209 int (*position)(UiText*); 206 int (*position)(UiText*);
210 void (*selection)(UiText*, int*, int*); // text, begin, end 207 void (*selection)(UiText*, int*, int*); /* text, begin, end */
211 int (*length)(UiText*); 208 int (*length)(UiText*);
212 void (*remove)(UiText*, int, int); // text, begin, end 209 void (*remove)(UiText*, int, int); /* text, begin, end */
213 char *value; 210 char *value;
214 int pos; 211 int pos;
215 void *obj; 212 void *obj;
216 void *undomgr; 213 void *undomgr;
217 // TODO: replace, ... 214 // TODO: replacefunc, ...
215 UiObserver *observers;
218 }; 216 };
219 217
220 /* 218 /*
221 * abstract list 219 * abstract list
222 */ 220 */
227 void*(*next)(UiList *list); 225 void*(*next)(UiList *list);
228 /* get the nth element */ 226 /* get the nth element */
229 void*(*get)(UiList *list, int i); 227 void*(*get)(UiList *list, int i);
230 /* get the number of elements */ 228 /* get the number of elements */
231 int(*count)(UiList *list); 229 int(*count)(UiList *list);
232 /* list of observers */
233 UiObserver *observers;
234 /* iterator changes after first() next() and get() */ 230 /* iterator changes after first() next() and get() */
235 void *iter; 231 void *iter;
236 /* private - implementation dependent */ 232 /* private - implementation dependent */
237 void *data; 233 void *data;
238 234
235 /* binding function */
236 void (*update)(UiList *list, int i);
237 /* binding object */
238 void *obj;
239
240 /* list of observers */
241 UiObserver *observers;
239 }; 242 };
240 243
241 struct UiRange { 244 struct UiRange {
242 double (*get)(UiRange *range); 245 double (*get)(UiRange *range);
243 void (*set)(UiRange *range, double value); 246 void (*set)(UiRange *range, double value);
246 double value; 249 double value;
247 double min; 250 double min;
248 double max; 251 double max;
249 double extent; 252 double extent;
250 void *obj; 253 void *obj;
254 /* list of observers */
255 UiObserver *observers;
251 }; 256 };
252 257
253 258
254 void ui_init(char *appname, int argc, char **argv); 259 void ui_init(char *appname, int argc, char **argv);
255 char* ui_appname(); 260 char* ui_appname();
256
257 void ui_exitfunc(ui_callback f, void *userdata); // deprecated
258 void ui_openfilefunc(ui_callback f, void *userdata); // deprecated
259 261
260 void ui_context_closefunc(UiContext *ctx, ui_callback fnc, void *udata); 262 void ui_context_closefunc(UiContext *ctx, ui_callback fnc, void *udata);
261 263
262 void ui_onstartup(ui_callback f, void *userdata); 264 void ui_onstartup(ui_callback f, void *userdata);
263 void ui_onopen(ui_callback f, void *userdata); 265 void ui_onopen(ui_callback f, void *userdata);
267 void ui_show(UiObject *obj); 269 void ui_show(UiObject *obj);
268 void ui_close(UiObject *obj); 270 void ui_close(UiObject *obj);
269 271
270 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd); 272 void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd);
271 273
272 void ui_set_enabled(UIWIDGET widget, int enabled); 274 void* ui_document_new(size_t size);
273 void ui_set_show_all(UIWIDGET widget, int value); 275 void ui_document_destroy(void *doc);
274 void ui_set_visible(UIWIDGET widget, int visible);
275
276 UIWIDGET ui_vbox(UiObject *obj);
277 UIWIDGET ui_hbox(UiObject *obj);
278 UIWIDGET ui_vbox_sp(UiObject *obj, int margin, int spacing);
279 UIWIDGET ui_hbox_sp(UiObject *obj, int margin, int spacing);
280
281 UIWIDGET ui_grid(UiObject *obj);
282 UIWIDGET ui_grid_sp(UiObject *obj, int margin, int columnspacing, int rowspacing);
283
284 UIWIDGET ui_scrolledwindow(UiObject *obj);
285
286 UIWIDGET ui_sidebar(UiObject *obj);
287 void ui_end(UiObject *obj);
288
289 UIWIDGET ui_tabview(UiObject *obj);
290 void ui_tab(UiObject *obj, char *title);
291 void ui_select_tab(UIWIDGET tabview, int tab);
292
293 // box container layout functions
294 void ui_layout_fill(UiObject *obj, UiBool fill);
295 // grid container layout functions
296 void ui_layout_hexpand(UiObject *obj, UiBool expand);
297 void ui_layout_vexpand(UiObject *obj, UiBool expand);
298 void ui_layout_gridwidth(UiObject *obj, int width);
299 void ui_newline(UiObject *obj);
300
301
302 UiTabbedPane* ui_tabbed_document_view(UiObject *obj);
303
304 UiObject* ui_document_tab(UiTabbedPane *view);
305
306
307
308 276
309 void ui_set_document(UiObject *obj, void *document); 277 void ui_set_document(UiObject *obj, void *document);
310 void ui_detach_document(UiObject *obj, void *document); 278 void ui_detach_document(UiObject *obj);
311 void* ui_get_document(UiObject *obj); 279 void* ui_get_document(UiObject *obj);
312 void ui_set_subdocument(void *document, void *sub); 280 void ui_set_subdocument(void *document, void *sub);
313 void ui_detach_subdocument(void *document, void *sub); 281 void ui_detach_subdocument(void *document, void *sub);
314 void* ui_get_subdocument(void *document); 282 void* ui_get_subdocument(void *document);
315 283
316 void* ui_document_new(size_t size);
317 void ui_document_destroy(void *doc);
318
319 UiContext* ui_document_context(void *doc); 284 UiContext* ui_document_context(void *doc);
320 285
321 // TODO: remove
322 void* ui_document_malloc(void *doc, size_t size);
323 void* ui_document_calloc(void *doc, size_t nelem, size_t elsize);
324 void ui_document_free(void *doc, void *ptr);
325 void* ui_document_realloc(void *doc, void *ptr, size_t size);
326
327 // TODO: remove (or not)
328 void ui_document_addint(void *doc, char *name);
329 void ui_document_regint(void *doc, char *name, UiInteger *i);
330 void ui_document_setint(void *doc, char *name, int val);
331 int ui_document_getint(void *doc, char *name);
332
333 void ui_document_regtext(void *doc, char *name, UiText *text);
334 void ui_document_reglist(void *doc, char *name, UiList *list);
335
336 // new:
337 int ui_getint(UiObject *obj, char *name);
338 char *ui_getstr(UiObject *obj, char *name);
339 char* ui_gettext(UiObject *obj, char *name);
340 286
341 287
342 void ui_set_group(UiContext *ctx, int group); 288 void ui_set_group(UiContext *ctx, int group);
343 void ui_unset_group(UiContext *ctx, int group); 289 void ui_unset_group(UiContext *ctx, int group);
344 int* ui_active_groups(UiContext *ctx, int *ngroups); 290 int* ui_active_groups(UiContext *ctx, int *ngroups);
347 void* ui_calloc(UiContext *ctx, size_t nelem, size_t elsize); 293 void* ui_calloc(UiContext *ctx, size_t nelem, size_t elsize);
348 void ui_free(UiContext *ctx, void *ptr); 294 void ui_free(UiContext *ctx, void *ptr);
349 void* ui_realloc(UiContext *ctx, void *ptr, size_t size); 295 void* ui_realloc(UiContext *ctx, void *ptr, size_t size);
350 296
351 // types 297 // types
298
299 UiInteger* ui_int_new(UiContext *ctx, char *name);
300 UiString* ui_string_new(UiContext *ctx, char *name);
301 UiText* ui_text_new(UiContext *ctx, char *name);
302
352 UiObserver* ui_observer_new(ui_callback f, void *data); 303 UiObserver* ui_observer_new(ui_callback f, void *data);
353 UiObserver* ui_obsvlist_add(UiObserver *list, UiObserver *observer); 304 UiObserver* ui_obsvlist_add(UiObserver *list, UiObserver *observer);
354 UiObserver* ui_add_observer(UiObserver *list, ui_callback f, void *data); 305 UiObserver* ui_add_observer(UiObserver *list, ui_callback f, void *data);
355 void ui_notify(UiObserver *observer, void *data); 306 void ui_notify(UiObserver *observer, void *data);
356 void ui_notify_except(UiObserver *observer, UiObserver *exc, void *data); 307 void ui_notify_except(UiObserver *observer, UiObserver *exc, void *data);
369 void ui_clipboard_set(char *str); 320 void ui_clipboard_set(char *str);
370 char* ui_clipboard_get(); 321 char* ui_clipboard_get();
371 322
372 void ui_add_image(char *imgname, char *filename); 323 void ui_add_image(char *imgname, char *filename);
373 324
325 // general widget functions
326 void ui_set_enabled(UIWIDGET widget, int enabled);
327 void ui_set_show_all(UIWIDGET widget, int value);
328 void ui_set_visible(UIWIDGET widget, int visible);
329
330
374 // label widgets 331 // label widgets
375 UIWIDGET ui_label(UiObject *obj, char *label); 332 UIWIDGET ui_label(UiObject *obj, char *label);
376 UIWIDGET ui_llabel(UiObject *obj, char *label); 333 UIWIDGET ui_llabel(UiObject *obj, char *label);
377 UIWIDGET ui_rlabel(UiObject *obj, char *label); 334 UIWIDGET ui_rlabel(UiObject *obj, char *label);
378 UIWIDGET ui_space(UiObject *obj); 335 UIWIDGET ui_space(UiObject *obj);

mercurial