#ifndef UIC_CONTEXT_H
#define UIC_CONTEXT_H
#include "../ui/toolkit.h"
#include <ucx/map.h>
#include <ucx/mempool.h>
#include <ucx/list.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct UiVar UiVar;
typedef struct UiListPtr UiListPtr;
typedef struct UiListVar UiListVar;
typedef struct UiGroupWidget UiGroupWidget;
typedef enum UiVarType UiVarType;
enum UiVarType {
UI_VAR_SPECIAL =
0,
UI_VAR_INTEGER,
UI_VAR_DOUBLE,
UI_VAR_STRING,
UI_VAR_TEXT,
UI_VAR_LIST,
UI_VAR_RANGE
};
struct UiContext {
UiContext *parent;
UiObject *obj;
UcxMempool *mempool;
void *document;
UcxList *documents;
UcxMap *vars;
UcxMap *vars_unbound;
UcxList *groups;
UcxList *group_widgets;
void (*attach_document)(UiContext *ctx,
void *document);
void (*detach_document2)(UiContext *ctx,
void *document);
char *title;
#ifdef UI_GTK
GtkAccelGroup *accel_group;
#endif
ui_callback close_callback;
void *close_data;
};
struct UiVar {
void *value;
UiVarType type;
UiVar *from;
UiContext *from_ctx;
};
struct UiGroupWidget {
void *widget;
ui_enablefunc enable;
int *groups;
int numgroups;
};
void uic_init_global_context(
void);
UiContext* uic_context(UiObject *toplevel, UcxMempool *mp);
UiContext* uic_root_context(UiContext *ctx);
void uic_context_set_document(UiContext *ctx,
void *document);
void uic_context_detach_document(UiContext *ctx);
void uic_context_attach_document(UiContext *ctx,
void *document);
void uic_context_detach_document2(UiContext *ctx,
void *document);
void uic_context_detach_all(UiContext *ctx);
UiVar* uic_get_var(UiContext *ctx,
const char *name);
UiVar* uic_create_var(UiContext *ctx,
const char *name, UiVarType type);
void* uic_create_value(UiContext *ctx, UiVarType type);
void uic_copy_binding(UiVar *from, UiVar *to, UiBool copytodoc);
void uic_save_var2(UiVar *var);
void uic_unbind_var(UiVar *var);
void uic_reg_var(UiContext *ctx,
char *name, UiVarType type,
void *value);
void uic_remove_bound_var(UiContext *ctx, UiVar *var);
void uic_check_group_widgets(UiContext *ctx);
void uic_add_group_widget(UiContext *ctx,
void *widget, ui_enablefunc enable, UcxList *groups);
#ifdef __cplusplus
}
#endif
#endif