ui/ui/toolkit.h

changeset 14
e2fd132ab781
parent 12
fe94e0fb9ef3
child 16
a499c8a72c15
--- a/ui/ui/toolkit.h	Sat Mar 29 19:12:07 2014 +0100
+++ b/ui/ui/toolkit.h	Mon Mar 31 20:22:16 2014 +0200
@@ -55,12 +55,14 @@
 #endif
 
 /* public types */
-typedef struct UiObject UiObject;
-typedef struct UiEvent UiEvent;
+typedef struct UiObject   UiObject;
+typedef struct UiEvent    UiEvent;
+typedef struct UiObserver UiObserver;
 
 typedef struct UiInteger UiInteger;
 typedef struct UiString  UiString;
 typedef struct UiText    UiText;
+typedef struct UiList    UiList;
 
 /* private types */
 typedef struct UiContext   UiContext;
@@ -73,7 +75,7 @@
 #define ui_insert(text, begin, str) (text).insert(&(text), begin, str)
 
     
-typedef void(*ui_callback)(UiEvent*, void*); // event, user data
+typedef void(*ui_callback)(UiEvent*, void*); /* event, user data */
 
 struct UiObject {
     /*
@@ -109,6 +111,12 @@
     int      intval;
 };
 
+struct UiObserver {
+    ui_callback callback;
+    void *data;
+    UiObserver *next;
+};
+
 struct UiInteger {
     int  (*get)(UiInteger*);
     void (*set)(UiInteger*, int);
@@ -128,11 +136,32 @@
     char* (*get)(UiText*);
     char* (*getsubstr)(UiText*, int, int); // text, begin, end
     void  (*insert)(UiText*, int, char*);
-    char* value;
+    char  *value;
     void  *obj;
     void  *undomgr;
     // TODO: selection, undo, replace, ...
 };
+    
+/*
+ * abstract list
+ */
+struct UiList {
+    /* get the first element */
+    void*(*first)(UiList *list);
+    /* get the next element */
+    void*(*next)(UiList *list);
+    /* get the nth element */
+    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;
+    
+};
 
 void ui_init(char *appname, int argc, char **argv);
 void ui_exitfunc(ui_callback f, void *udata);
@@ -163,6 +192,27 @@
 // new:
 int ui_getint(UiObject *obj, char *name);
 
+    
+    
+    
+    
+// types
+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);
+void ui_notify(UiObserver *observer, void *data);
+void ui_notify_except(UiObserver *observer, UiObserver *exc, void *data);
+
+
+UiList* ui_list_new();
+void* ui_list_first(UiList *list);
+void* ui_list_next(UiList *list);
+void* ui_list_get(UiList *list, int i);
+int   ui_list_count(UiList *list);
+void  ui_list_append(UiList *list, void *data);
+void  ui_list_prepend(UiList *list, void *data);
+void  ui_list_addobsv(UiList *list, ui_callback f, void *data);
+void  ui_list_notify(UiList *list);
 
 
 #ifdef	__cplusplus

mercurial