ui/ui/toolkit.h

changeset 140
c03c338a7dcf
parent 133
6dd780cbc8c6
child 141
cc2170ea05ad
--- 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);

mercurial