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 #include "plugin.h"
30
31 #include <cx/hash_map.h>
32 #include <stdlib.h>
33
34 static CxMap *plugin_widgets;
35
36
37 void ui_plugin_register_widget(
const char *widget_class, ui_createwidget_func func) {
38 if(!plugin_widgets) {
39 plugin_widgets = cxHashMapCreate(
NULL,
CX_STORE_POINTERS,
8);
40 }
41 cxMapPut(plugin_widgets, widget_class, func);
42 }
43
44 UIWIDGET ui_widget_create(UiObject *obj,
const char *widget_class, UiWidgetArgs *args, UiWidgetExtArgs ext) {
45 ui_createwidget_func widget_create =
NULL;
46 if(plugin_widgets) {
47 widget_create = (ui_createwidget_func)cxMapGet(plugin_widgets, widget_class);
48 }
49 if(!widget_create) {
50 fprintf(stderr,
"Error: no widget class %s registered\n", widget_class);
51 return NULL;
52 }
53
54 return widget_create(obj, args, ext);
55 }
56
57
58 UiWidgetExtArgs ui_widget_ext_args_new(
void) {
59 CxMap *map = cxHashMapCreate(
NULL,
CX_STORE_POINTERS,
16);
60 cxSetDestructor(map, free);
61 return map;
62 }
63
64 void ui_widget_ext_args_put(UiWidgetExtArgs args,
const char *key,
const char *value) {
65 cxMapPut(args, key, strdup(value));
66 }
67
68 char* ui_widget_ext_args_get(UiWidgetExtArgs args,
const char *key) {
69 if(args) {
70 return cxMapGet(args, key);
71 }
else {
72 return NULL;
73 }
74 }
75
76 void ui_widget_ext_args_free(UiWidgetExtArgs args) {
77 cxMapFree(args);
78 }
79