#include "plugin.h"
#include <cx/hash_map.h>
#include <stdlib.h>
static CxMap *plugin_widgets;
void ui_plugin_register_widget(
const char *widget_class, ui_createwidget_func func) {
if(!plugin_widgets) {
plugin_widgets = cxHashMapCreate(
NULL,
CX_STORE_POINTERS,
8);
}
cxMapPut(plugin_widgets, widget_class, func);
}
UIWIDGET ui_widget_create(UiObject *obj,
const char *widget_class, UiWidgetArgs *args, UiWidgetExtArgs ext) {
ui_createwidget_func widget_create =
NULL;
if(plugin_widgets) {
widget_create = (ui_createwidget_func)cxMapGet(plugin_widgets, widget_class);
}
if(!widget_create) {
fprintf(stderr,
"Error: no widget class %s registered\n", widget_class);
return NULL;
}
return widget_create(obj, args, ext);
}
UiWidgetExtArgs ui_widget_ext_args_new(
void) {
CxMap *map = cxHashMapCreate(
NULL,
CX_STORE_POINTERS,
16);
cxSetDestructor(map, free);
return map;
}
void ui_widget_ext_args_put(UiWidgetExtArgs args,
const char *key,
const char *value) {
cxMapPut(args, key, strdup(value));
}
char* ui_widget_ext_args_get(UiWidgetExtArgs args,
const char *key) {
if(args) {
return cxMapGet(args, key);
}
else {
return NULL;
}
}
void ui_widget_ext_args_free(UiWidgetExtArgs args) {
cxMapFree(args);
}