Mercurial > projects > dynamin
diff dynamin/c/glib.d @ 18:836a064828e8
Implement FileDialog/DirectoryDialog with GTK
and start a glib/gdk/gtk binding. Add invoke/invokeNow stubs to fix build on X.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Fri, 24 Jul 2009 00:35:42 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dynamin/c/glib.d Fri Jul 24 00:35:42 2009 -0500 @@ -0,0 +1,397 @@ +module dynamin.c.glib; + +/* + * A binding to at least the part of Glib that Dynamin uses. + */ + +import tango.sys.SharedLib; + +extern(C): + +//{{{ gtypes +static if((void*).sizeof == 4) { + alias uint gsize; +} else static if((void*).sizeof == 8) { + alias ulong gsize; +} +alias char gchar; +alias short gshort; +alias int glong; +alias int gint; +alias gint gboolean; + +alias ubyte guchar; +alias ushort gushort; +alias uint gulong; +alias uint guint; + +alias float gfloat; +alias double gdouble; + +alias byte gint8; +alias ubyte guint8; +alias short gint16; +alias ushort guint16; +alias int gint32; +alias uint guint32; +alias long gint64; +alias ulong guint64; + +enum : gint8 { + G_MININT8 = cast(gint8)0x80, + G_MAXINT8 = 0x7f +} +enum : guint8 { + G_MAXUINT8 = 0xff +} +enum : gint16 { + G_MININT16 = cast(gint16)0x8000, + G_MAXINT16 = 0x7fff +} +enum : guint16 { + G_MAXUINT16 = 0xffff +} + +enum : gint32 { + G_MININT32 = 0x80000000, + G_MAXINT32 = 0x7fffffff +} +enum : guint32 { + G_MAXUINT32 = 0xffffffff +} + +enum : gint64 { + G_MININT64 = 0x8000000000000000, + G_MAXINT64 = 0x7fffffffffffffff +} +enum : guint64 { + G_MAXUINT64 = 0xffffffffffffffffU +} + + +alias void* gpointer; +alias /*const*/ void* gconstpointer; + +alias gint function(gconstpointer a, gconstpointer b) GCompareFunc; +alias gint function(gconstpointer a, gconstpointer b, + gpointer user_data) GCompareDataFunc; +alias gboolean function(gconstpointer a, gconstpointer b) GEqualFunc; +alias void function(gpointer data) GDestroyNotify; +alias void function(gpointer data, gpointer user_data) GFunc; +alias guint function(gconstpointer key) GHashFunc; +alias void function(gpointer key, gpointer value, + gpointer user_data) GHFunc; +alias void function(gpointer data) GFreeFunc; +alias /*const*/ gchar* function(/*const*/ gchar* str, + gpointer data) GTranslateFunc; + +const real G_E = 2.7182818284590452353602874713526624977572470937000; +const real G_LN2 = 0.69314718055994530941723212145817656807550013436026; +const real G_LN10 = 2.3025850929940456840179914546843642076011014886288; +const real G_PI = 3.1415926535897932384626433832795028841971693993751; +const real G_PI_2 = 1.5707963267948966192313216916397514420985846996876; +const real G_PI_4 = 0.78539816339744830961566084581987572104929234984378; +const real G_SQRT2 = 1.4142135623730950488016887242096980785696718753769; + +version(LittleEndian) { + enum { + G_BYTE_ORDER = 1234 + } +} else { + enum { + G_BYTE_ORDER = 4321 + } +} +enum { + G_LITTLE_ENDIAN = 1234, + G_BIG_ENDIAN = 4321 +} +//}}} + +//{{{ gtype +const G_TYPE_FUNDAMENTAL_SHIFT = 2; +const G_TYPE_FUNDAMENTAL_MAX = 255 << G_TYPE_FUNDAMENTAL_SHIFT; +GType G_TYPE_MAKE_FUNDAMENTAL(uint x) { + return x << G_TYPE_FUNDAMENTAL_SHIFT; +} +enum { + G_TYPE_INVALID = 0 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_NONE = 1 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_INTERFACE = 2 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_CHAR = 3 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_UCHAR = 4 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_BOOLEAN = 5 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_INT = 6 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_UINT = 7 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_LONG = 8 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_ULONG = 9 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_INT64 = 10 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_UINT64 = 11 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_ENUM = 12 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_FLAGS = 13 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_FLOAT = 14 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_DOUBLE = 15 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_STRING = 16 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_POINTER = 17 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_BOXED = 18 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_PARAM = 19 << G_TYPE_FUNDAMENTAL_SHIFT, + G_TYPE_OBJECT = 20 << G_TYPE_FUNDAMENTAL_SHIFT, +} +const G_TYPE_RESERVED_GLIB_FIRST = 21; +const G_TYPE_RESERVED_GLIB_LAST = 31; +const G_TYPE_RESERVED_BSE_FIRST = 32; +const G_TYPE_RESERVED_BSE_LAST = 48; +const G_TYPE_RESERVED_USER_FIRST = 49; + +bool G_TYPE_IS_FUNDAMENTAL(GType type) { + return type <= G_TYPE_FUNDAMENTAL_MAX; +} +bool G_TYPE_IS_DERIVED(GType type) { + return type > G_TYPE_FUNDAMENTAL_MAX; +} +/*bool G_TYPE_IS_INTERFACE(GType type) { + return G_TYPE_FUNDAMENTAL(type) == G_TYPE_INTERFACE; +} +bool G_TYPE_IS_CLASSED(GType type) { + return g_type_test_flags(type, G_TYPE_FLAG_CLASSED); +} +bool G_TYPE_IS_INSTANTIATABLE(GType type) { + return g_type_test_flags(type, G_TYPE_FLAG_INSTANTIATABLE); +} +bool G_TYPE_IS_DERIVABLE(GType type) { + return g_type_test_flags(type, G_TYPE_FLAG_DERIVABLE); +} +bool G_TYPE_IS_DEEP_DERIVABLE(GType type) { + return g_type_test_flags(type, G_TYPE_FLAG_DEEP_DERIVABLE); +} +bool G_TYPE_IS_ABSTRACT(GType type) { + return g_type_test_flags(type, G_TYPE_FLAG_ABSTRACT); +} +bool G_TYPE_IS_VALUE_ABSTRACT(GType type) { + return g_type_test_flags(type, G_TYPE_FLAG_VALUE_ABSTRACT); +} +bool G_TYPE_IS_VALUE_TYPE(GType type) { + return g_type_check_is_value_type(type); +} +bool G_TYPE_HAS_VALUE_TABLE(GType type) { + return g_type_value_table_peek(type) != NULL; +} +*/ +alias gsize GType; + +struct GTypeClass { + GType g_type; +} +struct GTypeInstance { + GTypeClass* g_class; +} +struct GTypeInterface { + GType g_type; + GType g_instance_type; +} +struct GTypeQuery { + GType type; + /*const*/ gchar* type_name; + guint class_size; + guint instance_size; +} + +// plus a lot more +//GType function(GType type_id) g_type_fundamental; +//alias g_type_fundamental G_TYPE_FUNDAMENTAL; +gboolean function(GType type, guint flags) g_type_test_flags; +//}}} + +//{{{ gquark +typedef guint32 GQuark; + +GQuark function(/*const*/ gchar* string) g_quark_try_string; +GQuark function(/*const*/ gchar* string) g_quark_from_static_string; +GQuark function(/*const*/ gchar* string) g_quark_from_string; +gchar* function(GQuark quark) g_quark_to_string; + +gchar* function(/*const*/ gchar* string) g_intern_string; +gchar* function(/*const*/ gchar* string) g_intern_static_string; +//}}} + +//{{{ gerror +struct GError { + GQuark domain; + gint code; + gchar* message; +} + +GError* function(GQuark domain, + gint code, + /*const*/ gchar* format, + ...) g_error_new; + +GError* function(GQuark domain, + gint code, + /*const*/ gchar* message) g_error_new_literal; + +void function(GError* error) g_error_free; +GError* function(/*const*/ GError* error) g_error_copy; + +gboolean function(/*const*/ GError* error, + GQuark domain, + gint code) g_error_matches; + +void function(GError** err, + GQuark domain, + gint code, + /*const*/ gchar* format, + ...) g_set_error; + +void function(GError** err, + GQuark domain, + gint code, + /*const*/ gchar* message) g_set_error_literal; + +void function(GError** dest, + GError* src) g_propagate_error; + +void function(GError** err) g_clear_error; + +void function(GError** err, + /*const*/ gchar* format, + ...) g_prefix_error; + +void function(GError** dest, + GError* src, + /*const*/ gchar* format, + ...) g_propagate_prefixed_error; +//}}} + +//{{{ gslist +struct GSList { + gpointer data; + GSList* next; +} + +GSList* function() g_slist_alloc; +void function(GSList* list) g_slist_free; +void function(GSList* list) g_slist_free_1; +alias g_slist_free_1 g_slist_free1; +GSList* function(GSList* list, gpointer data) g_slist_append; +GSList* function(GSList* list, gpointer data) g_slist_prepend; +GSList* function(GSList* list, gpointer data, gint position) g_slist_insert; +GSList* function(GSList* list, gpointer data, GCompareFunc func) g_slist_insert_sorted; +GSList* function( + GSList* list, + gpointer data, + GCompareDataFunc func, + gpointer user_data) g_slist_insert_sorted_with_data; +GSList* function(GSList* slist, GSList* sibling, gpointer data) g_slist_insert_before; +GSList* function(GSList* list1, GSList* list2) g_slist_concat; +GSList* function(GSList* list, gconstpointer data) g_slist_remove; +GSList* function(GSList* list, gconstpointer data) g_slist_remove_all; +GSList* function(GSList* list, GSList* link_) g_slist_remove_link; +GSList* function(GSList* list, GSList* link_) g_slist_delete_link; +GSList* function(GSList* list) g_slist_reverse; +GSList* function(GSList* list) g_slist_copy; +GSList* function(GSList* list, guint n) g_slist_nth; +GSList* function(GSList* list, gconstpointer data) g_slist_find; +GSList* function( + GSList* list, + gconstpointer data, + GCompareFunc func) g_slist_find_custom; +gint function(GSList* list, GSList* llink) g_slist_position; +gint function(GSList* list, gconstpointer data) g_slist_index; +GSList* function(GSList* list) g_slist_last; +guint function(GSList* list) g_slist_length; +void function(GSList* list, GFunc func, gpointer user_data) g_slist_foreach; +GSList* function(GSList* list, GCompareFunc compare_func) g_slist_sort; +GSList* function(GSList* list, + GCompareDataFunc compare_func, + gpointer user_data) g_slist_sort_with_data; +gpointer function(GSList* list, guint n) g_slist_nth_data; + +GSList* g_slist_next(GSList* slist) { + return slist ? slist.next : null; +} +//}}} + +//{{{ gmem +gpointer function(gsize n_bytes) g_malloc; +gpointer function(gsize n_bytes) g_malloc0; +gpointer function(gpointer mem, + gsize n_bytes) g_realloc; +void function(gpointer mem) g_free; +gpointer function(gsize n_bytes) g_try_malloc; +gpointer function(gsize n_bytes) g_try_malloc0; +gpointer function(gpointer mem, + gsize n_bytes) g_try_realloc; +//}}} + +static this() { + auto lib = SharedLib.load("libglib-2.0.so.0"); + + //{{{ gtype + //g_type_fundamental = cast(typeof(g_type_fundamental))lib.getSymbol("g_type_fundamental"); + //g_type_test_flags = cast(typeof(g_type_test_flags))lib.getSymbol("g_type_test_flags"); + //}}} + + //{{{ gquark + g_quark_try_string = cast(typeof(g_quark_try_string))lib.getSymbol("g_quark_try_string"); + g_quark_from_static_string = cast(typeof(g_quark_from_static_string))lib.getSymbol("g_quark_from_static_string"); + g_quark_from_string = cast(typeof(g_quark_from_string))lib.getSymbol("g_quark_from_string"); + g_quark_to_string = cast(typeof(g_quark_to_string))lib.getSymbol("g_quark_to_string"); + g_intern_string = cast(typeof(g_intern_string))lib.getSymbol("g_intern_string"); + g_intern_static_string = cast(typeof(g_intern_static_string))lib.getSymbol("g_intern_static_string"); + //}}} + + //{{{ gerror + g_error_new = cast(typeof(g_error_new))lib.getSymbol("g_error_new"); + g_error_new_literal = cast(typeof(g_error_new_literal))lib.getSymbol("g_error_new_literal"); + g_error_free = cast(typeof(g_error_free))lib.getSymbol("g_error_free"); + g_error_copy = cast(typeof(g_error_copy))lib.getSymbol("g_error_copy"); + g_error_matches = cast(typeof(g_error_matches))lib.getSymbol("g_error_matches"); + g_set_error = cast(typeof(g_set_error))lib.getSymbol("g_set_error"); + //g_set_error_literal = cast(typeof(g_set_error_literal))lib.getSymbol("g_set_error_literal"); + g_propagate_error = cast(typeof(g_propagate_error))lib.getSymbol("g_propagate_error"); + g_clear_error = cast(typeof(g_clear_error))lib.getSymbol("g_clear_error"); + //g_prefix_error = cast(typeof(g_prefix_error))lib.getSymbol("g_prefix_error"); + //g_propagate_prefixed_error = cast(typeof(g_propagate_prefixed_error))lib.getSymbol("g_propagate_prefixed_error"); + //}}} + + //{{{ gslist + g_slist_alloc = cast(typeof(g_slist_alloc))lib.getSymbol("g_slist_alloc"); + g_slist_free = cast(typeof(g_slist_free))lib.getSymbol("g_slist_free"); + g_slist_free_1 = cast(typeof(g_slist_free_1))lib.getSymbol("g_slist_free_1"); + g_slist_append = cast(typeof(g_slist_append))lib.getSymbol("g_slist_append"); + g_slist_prepend = cast(typeof(g_slist_prepend))lib.getSymbol("g_slist_prepend"); + g_slist_insert = cast(typeof(g_slist_insert))lib.getSymbol("g_slist_insert"); + g_slist_insert_sorted = cast(typeof(g_slist_insert_sorted))lib.getSymbol("g_slist_insert_sorted"); + g_slist_insert_sorted_with_data = cast(typeof(g_slist_insert_sorted_with_data))lib.getSymbol("g_slist_insert_sorted_with_data"); + g_slist_insert_before = cast(typeof(g_slist_insert_before))lib.getSymbol("g_slist_insert_before"); + g_slist_concat = cast(typeof(g_slist_concat))lib.getSymbol("g_slist_concat"); + g_slist_remove = cast(typeof(g_slist_remove))lib.getSymbol("g_slist_remove"); + g_slist_remove_all = cast(typeof(g_slist_remove_all))lib.getSymbol("g_slist_remove_all"); + g_slist_remove_link = cast(typeof(g_slist_remove_link))lib.getSymbol("g_slist_remove_link"); + g_slist_delete_link = cast(typeof(g_slist_delete_link))lib.getSymbol("g_slist_delete_link"); + g_slist_reverse = cast(typeof(g_slist_reverse))lib.getSymbol("g_slist_reverse"); + g_slist_copy = cast(typeof(g_slist_copy))lib.getSymbol("g_slist_copy"); + g_slist_nth = cast(typeof(g_slist_nth))lib.getSymbol("g_slist_nth"); + g_slist_find = cast(typeof(g_slist_find))lib.getSymbol("g_slist_find"); + g_slist_find_custom = cast(typeof(g_slist_find_custom))lib.getSymbol("g_slist_find_custom"); + g_slist_position = cast(typeof(g_slist_position))lib.getSymbol("g_slist_position"); + g_slist_index = cast(typeof(g_slist_index))lib.getSymbol("g_slist_index"); + g_slist_last = cast(typeof(g_slist_last))lib.getSymbol("g_slist_last"); + g_slist_length = cast(typeof(g_slist_length))lib.getSymbol("g_slist_length"); + g_slist_foreach = cast(typeof(g_slist_foreach))lib.getSymbol("g_slist_foreach"); + g_slist_sort = cast(typeof(g_slist_sort))lib.getSymbol("g_slist_sort"); + g_slist_sort_with_data = cast(typeof(g_slist_sort_with_data))lib.getSymbol("g_slist_sort_with_data"); + g_slist_nth_data = cast(typeof(g_slist_nth_data))lib.getSymbol("g_slist_nth_data"); + //}}} + + //{{{ gmem + g_malloc = cast(typeof(g_malloc))lib.getSymbol("g_malloc"); + g_malloc0 = cast(typeof(g_malloc0))lib.getSymbol("g_malloc0"); + g_realloc = cast(typeof(g_realloc))lib.getSymbol("g_realloc"); + g_free = cast(typeof(g_free))lib.getSymbol("g_free"); + g_try_malloc = cast(typeof(g_try_malloc))lib.getSymbol("g_try_malloc"); + g_try_malloc0 = cast(typeof(g_try_malloc0))lib.getSymbol("g_try_malloc0"); + g_try_realloc = cast(typeof(g_try_realloc))lib.getSymbol("g_try_realloc"); + //}}} +}