/* * mooplugin-macro.h * * Copyright (C) 2004-2007 by Yevgen Muntyan * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1 as published by the Free Software Foundation. * * See COPYING file that comes with this distribution. */ #ifndef MOO_PLUGIN_MACRO_H #define MOO_PLUGIN_MACRO_H #include #define MOO_PLUGIN_INIT_FUNC_DECL \ G_MODULE_EXPORT gboolean \ MOO_PLUGIN_INIT_FUNC (GType *type) #define MOO_MODULE_INIT_FUNC_DECL \ G_MODULE_EXPORT gboolean \ MOO_MODULE_INIT_FUNC (void) #define MOO_PLUGIN_DEFINE_INFO(plugin_name__,name__, \ description__,author__,version__, \ langs__) \ \ static const MooPluginInfo plugin_name__##_plugin_info = \ {(char*) name__, (char*) description__, \ (char*) author__, (char*) version__, (char*) langs__}; #define MOO_PLUGIN_DEFINE_FULL(Name__,name__, \ attach_win__,detach_win__, \ attach_doc__,detach_doc__, \ prefs_page_func__, \ WIN_PLUGIN_TYPE__,DOC_PLUGIN_TYPE__) \ \ static gpointer name__##_plugin_parent_class; \ static gboolean name__##_plugin_init (Name__##Plugin *plugin); \ static void name__##_plugin_deinit (Name__##Plugin *plugin); \ \ typedef struct { \ MooPluginClass parent_class; \ } Name__##PluginClass; \ \ static void \ name__##_plugin_class_init (MooPluginClass *klass) \ { \ name__##_plugin_parent_class = g_type_class_peek_parent (klass); \ \ klass->init = (MooPluginInitFunc) name__##_plugin_init; \ klass->deinit = (MooPluginDeinitFunc) name__##_plugin_deinit; \ klass->attach_win = attach_win__; \ klass->detach_win = detach_win__; \ klass->attach_doc = attach_doc__; \ klass->detach_doc = detach_doc__; \ klass->create_prefs_page = prefs_page_func__; \ } \ \ static void \ name__##_plugin_instance_init (MooPlugin *plugin) \ { \ plugin->win_plugin_type = WIN_PLUGIN_TYPE__; \ plugin->doc_plugin_type = DOC_PLUGIN_TYPE__; \ } \ \ static GType name__##_plugin_get_type (void) G_GNUC_CONST; \ \ static GType \ name__##_plugin_get_type (void) \ { \ static GType type__ = 0; \ \ if (G_UNLIKELY (type__ == 0)) \ { \ static const GTypeInfo info__ = { \ sizeof (Name__##PluginClass), \ (GBaseInitFunc) NULL, \ (GBaseFinalizeFunc) NULL, \ (GClassInitFunc) name__##_plugin_class_init, \ (GClassFinalizeFunc) NULL, \ NULL, /* class_data */ \ sizeof (Name__##Plugin), \ 0, /* n_preallocs */ \ (GInstanceInitFunc) name__##_plugin_instance_init, \ NULL /* value_table */ \ }; \ \ type__ = g_type_register_static (MOO_TYPE_PLUGIN, \ #Name__ "Plugin", &info__, 0); \ } \ \ return type__; \ } #define MOO_WIN_PLUGIN_DEFINE(Name__,name__) \ \ typedef struct { \ MooWinPluginClass parent_class; \ } Name__##WindowPluginClass; \ \ static GType name__##_window_plugin_get_type (void) G_GNUC_CONST; \ static gboolean name__##_window_plugin_create (Name__##WindowPlugin *plugin); \ static void name__##_window_plugin_destroy (Name__##WindowPlugin *plugin); \ \ static gpointer name__##_window_plugin_parent_class = NULL; \ \ static void \ name__##_window_plugin_class_init (MooWinPluginClass *klass) \ { \ name__##_window_plugin_parent_class = g_type_class_peek_parent (klass); \ klass->create = (MooWinPluginCreateFunc) name__##_window_plugin_create; \ klass->destroy = (MooWinPluginDestroyFunc) name__##_window_plugin_destroy; \ } \ \ static GType \ name__##_window_plugin_get_type (void) \ { \ static GType type__ = 0; \ \ if (G_UNLIKELY (type__ == 0)) \ { \ static const GTypeInfo info__ = { \ sizeof (Name__##WindowPluginClass), \ (GBaseInitFunc) NULL, \ (GBaseFinalizeFunc) NULL, \ (GClassInitFunc) name__##_window_plugin_class_init, \ (GClassFinalizeFunc) NULL, \ NULL, /* class_data */ \ sizeof (Name__##WindowPlugin), \ 0, /* n_preallocs */ \ NULL, \ NULL /* value_table */ \ }; \ \ type__ = g_type_register_static (MOO_TYPE_WIN_PLUGIN, \ #Name__ "WindowPlugin",&info__, 0); \ } \ \ return type__; \ } #define MOO_DOC_PLUGIN_DEFINE(Name__,name__) \ \ typedef struct { \ MooDocPluginClass parent_class; \ } Name__##DocPluginClass; \ \ static GType name__##_doc_plugin_get_type (void) G_GNUC_CONST; \ static gboolean name__##_doc_plugin_create (Name__##DocPlugin *plugin); \ static void name__##_doc_plugin_destroy (Name__##DocPlugin *plugin); \ \ static gpointer name__##_doc_plugin_parent_class = NULL; \ \ static void \ name__##_doc_plugin_class_init (MooDocPluginClass *klass) \ { \ name__##_doc_plugin_parent_class = g_type_class_peek_parent (klass); \ klass->create = (MooDocPluginCreateFunc) name__##_doc_plugin_create; \ klass->destroy = (MooDocPluginDestroyFunc) name__##_doc_plugin_destroy; \ } \ \ static GType \ name__##_doc_plugin_get_type (void) \ { \ static GType type__ = 0; \ \ if (G_UNLIKELY (type__ == 0)) \ { \ static const GTypeInfo info__ = { \ sizeof (Name__##DocPluginClass), \ (GBaseInitFunc) NULL, \ (GBaseFinalizeFunc) NULL, \ (GClassInitFunc) name__##_doc_plugin_class_init, \ (GClassFinalizeFunc) NULL, \ NULL, /* class_data */ \ sizeof (Name__##DocPlugin), \ 0, /* n_preallocs */ \ NULL, \ NULL /* value_table */ \ }; \ \ type__ = g_type_register_static (MOO_TYPE_DOC_PLUGIN, \ #Name__ "DocPlugin", &info__, 0); \ } \ \ return type__; \ } #endif /* MOO_PLUGIN_MACRO_H */