#ifndef UIC_CONTEXT_H
#define UIC_CONTEXT_H
#include "../ui/toolkit.h"
#include <cx/map.h>
#include <cx/hash_map.h>
#include <cx/mempool.h>
#include <cx/list.h>
#include <cx/linked_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,
UI_VAR_GENERIC
};
struct UiContext {
UiContext *parent;
UiObject *obj;
CxMempool *mp;
const CxAllocator *allocator;
void *document;
CxList *documents;
CxMap *vars;
CxMap *vars_unbound;
CxList *groups;
CxList *group_widgets;
void (*attach_document)(UiContext *ctx,
void *document);
void (*detach_document2)(UiContext *ctx,
void *document);
char *title;
#ifdef UI_GTK
#if GTK_CHECK_VERSION(
4,
0,
0)
GActionMap *action_map;
#elif UI_GTK2 ||
UI_GTK3
GtkAccelGroup *accel_group;
#endif
#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, CxMempool *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_prepare_close(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);
UiVar* uic_create_value_var(UiContext *ctx,
void *value);
void* uic_create_value(UiContext *ctx, UiVarType type);
UiVar* uic_widget_var(UiContext* toplevel, UiContext* current,
void* value,
const char* varname, 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);
size_t uic_group_array_size(
const int *groups);
void uic_check_group_widgets(UiContext *ctx);
void uic_add_group_widget(UiContext *ctx,
void *widget, ui_enablefunc enable, CxList *groups);
void uic_add_group_widget_i(UiContext *ctx,
void *widget, ui_enablefunc enable,
const int *groups,
size_t numgroups);
void uic_remove_group_widget(UiContext *ctx,
void *widget);
#ifdef __cplusplus
}
#endif
#endif