Sat, 22 Mar 2014 15:34:20 +0100
added simple container
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2014 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef UI_TOOLKIT_H #define UI_TOOLKIT_H #ifdef UI_COCOA #ifdef __OBJC__ #import <Cocoa/Cocoa.h> #define UIWIDGET NSView* #else typedef void* UIWIDGET; #endif #elif UI_GTK2 || UI_GTK3 #include <gtk/gtk.h> #define UIWIDGET GtkWidget* #elif UI_MOTIF #include <Xm/XmAll.h> #define UIWIDGET Widget #endif #ifdef __cplusplus extern "C" { #endif /* public types */ typedef struct UiObject UiObject; typedef struct UiEvent UiEvent; typedef struct UiInteger UiInteger; typedef struct UiString UiString; /* private types */ typedef struct UiContext UiContext; typedef struct UiContainer UiContainer; #define ui_getval(val) (val).get(&(val)) #define ui_setval(val, v) (val).set(&(val), v) typedef void(*ui_callback)(UiEvent*, void*); // event, user data struct UiObject { /* * native widget */ UIWIDGET widget; /* * user window data */ void *window; /* * current document */ void *document; /* * window context (private) */ UiContext *ctx; /* * container interface (private) */ UiContainer *container; }; struct UiEvent { UiObject *obj; void *document; void *window; int intval; }; struct UiInteger { int (*get)(UiInteger*); void (*set)(UiInteger*, int); int value; void *obj; }; struct UiString { char* (*get)(UiString*); void (*set)(UiString*, char*); char* value; void *obj; }; void ui_init(char *appname, int argc, char **argv); void ui_exitfunc(ui_callback f, void *udata); char* ui_getappdir(); char* ui_configfile(char *name); void ui_main(); void ui_show(UiObject *obj); void ui_set_document(UiObject *obj, void *document); void ui_detach_document(UiObject *obj, void *document); void* ui_document_new(size_t size); void ui_document_destroy(void *doc); void* ui_document_malloc(void *doc, size_t size); void* ui_document_calloc(void *doc, size_t nelem, size_t elsize); void ui_document_free(void *doc, void *ptr); void* ui_document_realloc(void *doc, void *ptr, size_t size); // TODO: remove (or not) void ui_document_addint(void *doc, char *name); void ui_document_regint(void *doc, char *name, UiInteger *i); void ui_document_setint(void *doc, char *name, int val); int ui_document_getint(void *doc, char *name); // new: int ui_getint(UiObject *obj, char *name); #ifdef __cplusplus } #endif #endif /* UI_TOOLKIT_H */