ui/ui/toolkit.h

Fri, 21 Mar 2014 13:20:53 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 21 Mar 2014 13:20:53 +0100
changeset 2
eeb50c534497
parent 1
eb5269000bc8
child 4
39b9b86ec452
permissions
-rw-r--r--

added support for replaceable documents

/*
 * 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;

#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;
    
    /*
     * window context
     */
    UiContext *ctx;
    
    /*
     * user window data
     */
    void      *window;
    
    /*
     * current document
     */
    void      *document;
};

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 */

mercurial