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");
+	//}}}
+}