diff -r dbde25a5bc53 -r c03c338a7dcf ui/ui/toolkit.h --- a/ui/ui/toolkit.h Tue Jan 24 18:46:47 2017 +0100 +++ b/ui/ui/toolkit.h Fri Nov 10 17:17:14 2017 +0100 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2014 Olaf Wintermann. All rights reserved. + * Copyright 2017 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -97,23 +97,16 @@ typedef struct UiList UiList; typedef struct UiRange UiRange; -/* private types */ +/* begin opaque types */ typedef struct UiContext UiContext; typedef struct UiContainer UiContainer; +/* end opaque types */ typedef struct UiTabbedPane UiTabbedPane; enum UiMouseEventType { UI_PRESS = 0, UI_PRESS2 }; -#define ui_getval(val) (val).get(&(val)) -#define ui_setval(val, v) (val).set(&(val), v) -#define ui_getsubstr(text, begin, end) (text).getsubstr(&(text), begin, end) -#define ui_insert(text, begin, str) (text).insert(&(text), begin, str) -#define ui_length(text) (text).length(&(text)) -#define ui_selection(text, begin, end) (text).selection(&(text), begin, end) -#define ui_position(text) (text).position(&(text)) -#define ui_remove(text, begin, end) (text).remove(&(text), begin, end) typedef void(*ui_callback)(UiEvent*, void*); /* event, user data */ @@ -133,12 +126,12 @@ void *window; /* - * window context (private) + * window context */ UiContext *ctx; /* - * container interface (private) + * container interface */ UiContainer *container; @@ -189,32 +182,37 @@ struct UiInteger { int (*get)(UiInteger*); void (*set)(UiInteger*, int); + void *obj; + int value; - void *obj; + UiObserver *observers; }; struct UiString { char* (*get)(UiString*); void (*set)(UiString*, char*); + void *obj; + char* value; - void *obj; + UiObserver *observers; }; struct UiText { void (*set)(UiText*, char*); char* (*get)(UiText*); - char* (*getsubstr)(UiText*, int, int); // text, begin, end + char* (*getsubstr)(UiText*, int, int); /* text, begin, end */ void (*insert)(UiText*, int, char*); void (*setposition)(UiText*,int); int (*position)(UiText*); - void (*selection)(UiText*, int*, int*); // text, begin, end + void (*selection)(UiText*, int*, int*); /* text, begin, end */ int (*length)(UiText*); - void (*remove)(UiText*, int, int); // text, begin, end + void (*remove)(UiText*, int, int); /* text, begin, end */ char *value; int pos; void *obj; void *undomgr; - // TODO: replace, ... + // TODO: replacefunc, ... + UiObserver *observers; }; /* @@ -229,13 +227,18 @@ void*(*get)(UiList *list, int i); /* get the number of elements */ int(*count)(UiList *list); - /* list of observers */ - UiObserver *observers; /* iterator changes after first() next() and get() */ void *iter; /* private - implementation dependent */ void *data; + /* binding function */ + void (*update)(UiList *list, int i); + /* binding object */ + void *obj; + + /* list of observers */ + UiObserver *observers; }; struct UiRange { @@ -248,15 +251,14 @@ double max; double extent; void *obj; + /* list of observers */ + UiObserver *observers; }; void ui_init(char *appname, int argc, char **argv); char* ui_appname(); -void ui_exitfunc(ui_callback f, void *userdata); // deprecated -void ui_openfilefunc(ui_callback f, void *userdata); // deprecated - void ui_context_closefunc(UiContext *ctx, ui_callback fnc, void *udata); void ui_onstartup(ui_callback f, void *userdata); @@ -269,74 +271,18 @@ void ui_job(UiObject *obj, ui_threadfunc tf, void *td, ui_callback f, void *fd); -void ui_set_enabled(UIWIDGET widget, int enabled); -void ui_set_show_all(UIWIDGET widget, int value); -void ui_set_visible(UIWIDGET widget, int visible); - -UIWIDGET ui_vbox(UiObject *obj); -UIWIDGET ui_hbox(UiObject *obj); -UIWIDGET ui_vbox_sp(UiObject *obj, int margin, int spacing); -UIWIDGET ui_hbox_sp(UiObject *obj, int margin, int spacing); - -UIWIDGET ui_grid(UiObject *obj); -UIWIDGET ui_grid_sp(UiObject *obj, int margin, int columnspacing, int rowspacing); - -UIWIDGET ui_scrolledwindow(UiObject *obj); - -UIWIDGET ui_sidebar(UiObject *obj); -void ui_end(UiObject *obj); - -UIWIDGET ui_tabview(UiObject *obj); -void ui_tab(UiObject *obj, char *title); -void ui_select_tab(UIWIDGET tabview, int tab); - -// box container layout functions -void ui_layout_fill(UiObject *obj, UiBool fill); -// grid container layout functions -void ui_layout_hexpand(UiObject *obj, UiBool expand); -void ui_layout_vexpand(UiObject *obj, UiBool expand); -void ui_layout_gridwidth(UiObject *obj, int width); -void ui_newline(UiObject *obj); - - -UiTabbedPane* ui_tabbed_document_view(UiObject *obj); - -UiObject* ui_document_tab(UiTabbedPane *view); - - - +void* ui_document_new(size_t size); +void ui_document_destroy(void *doc); void ui_set_document(UiObject *obj, void *document); -void ui_detach_document(UiObject *obj, void *document); +void ui_detach_document(UiObject *obj); void* ui_get_document(UiObject *obj); void ui_set_subdocument(void *document, void *sub); void ui_detach_subdocument(void *document, void *sub); void* ui_get_subdocument(void *document); -void* ui_document_new(size_t size); -void ui_document_destroy(void *doc); - UiContext* ui_document_context(void *doc); -// TODO: remove -void* ui_document_malloc(void *doc, size_t size); -void* ui_document_calloc(void *doc, size_t nelem, size_t elsize); -void ui_document_free(void *doc, void *ptr); -void* ui_document_realloc(void *doc, void *ptr, size_t size); - -// TODO: remove (or not) -void ui_document_addint(void *doc, char *name); -void ui_document_regint(void *doc, char *name, UiInteger *i); -void ui_document_setint(void *doc, char *name, int val); -int ui_document_getint(void *doc, char *name); - -void ui_document_regtext(void *doc, char *name, UiText *text); -void ui_document_reglist(void *doc, char *name, UiList *list); - -// new: -int ui_getint(UiObject *obj, char *name); -char *ui_getstr(UiObject *obj, char *name); -char* ui_gettext(UiObject *obj, char *name); void ui_set_group(UiContext *ctx, int group); @@ -349,6 +295,11 @@ void* ui_realloc(UiContext *ctx, void *ptr, size_t size); // types + +UiInteger* ui_int_new(UiContext *ctx, char *name); +UiString* ui_string_new(UiContext *ctx, char *name); +UiText* ui_text_new(UiContext *ctx, char *name); + UiObserver* ui_observer_new(ui_callback f, void *data); UiObserver* ui_obsvlist_add(UiObserver *list, UiObserver *observer); UiObserver* ui_add_observer(UiObserver *list, ui_callback f, void *data); @@ -371,6 +322,12 @@ void ui_add_image(char *imgname, char *filename); +// general widget functions +void ui_set_enabled(UIWIDGET widget, int enabled); +void ui_set_show_all(UIWIDGET widget, int value); +void ui_set_visible(UIWIDGET widget, int visible); + + // label widgets UIWIDGET ui_label(UiObject *obj, char *label); UIWIDGET ui_llabel(UiObject *obj, char *label);