summaryrefslogtreecommitdiffstats
path: root/libgimpmodule/gimpmodule.h
diff options
context:
space:
mode:
Diffstat (limited to 'libgimpmodule/gimpmodule.h')
-rw-r--r--libgimpmodule/gimpmodule.h250
1 files changed, 250 insertions, 0 deletions
diff --git a/libgimpmodule/gimpmodule.h b/libgimpmodule/gimpmodule.h
new file mode 100644
index 0000000..d19ba1f
--- /dev/null
+++ b/libgimpmodule/gimpmodule.h
@@ -0,0 +1,250 @@
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * gimpmodule.h
+ * (C) 1999 Austin Donnelly <austin@gimp.org>
+ *
+ * This library is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIMP_MODULE_H__
+#define __GIMP_MODULE_H__
+
+#include <gmodule.h>
+
+#define __GIMP_MODULE_H_INSIDE__
+
+#include <libgimpmodule/gimpmoduletypes.h>
+
+#include <libgimpmodule/gimpmoduledb.h>
+
+#undef __GIMP_MODULE_H_INSIDE__
+
+G_BEGIN_DECLS
+
+
+/**
+ * GIMP_MODULE_ABI_VERSION:
+ *
+ * The version of the module system's ABI. Modules put this value into
+ * #GimpModuleInfo's @abi_version field so the code loading the modules
+ * can check if it was compiled against the same module ABI the modules
+ * are compiled against.
+ *
+ * GIMP_MODULE_ABI_VERSION is incremented each time one of the
+ * following changes:
+ *
+ * - the libgimpmodule implementation (if the change affects modules).
+ *
+ * - one of the classes implemented by modules (currently #GimpColorDisplay,
+ * #GimpColorSelector and #GimpController).
+ **/
+#define GIMP_MODULE_ABI_VERSION 0x0004
+
+
+/**
+ * GimpModuleState:
+ * @GIMP_MODULE_STATE_ERROR: Missing gimp_module_register() function
+ * or other error.
+ * @GIMP_MODULE_STATE_LOADED: An instance of a type implemented by
+ * this module is allocated.
+ * @GIMP_MODULE_STATE_LOAD_FAILED: gimp_module_register() returned %FALSE.
+ * @GIMP_MODULE_STATE_NOT_LOADED: There are no instances allocated of
+ * types implemented by this module.
+ *
+ * The possible states a #GimpModule can be in.
+ **/
+typedef enum
+{
+ GIMP_MODULE_STATE_ERROR,
+ GIMP_MODULE_STATE_LOADED,
+ GIMP_MODULE_STATE_LOAD_FAILED,
+ GIMP_MODULE_STATE_NOT_LOADED
+} GimpModuleState;
+
+
+#define GIMP_MODULE_ERROR (gimp_module_error_quark ())
+
+GQuark gimp_module_error_quark (void) G_GNUC_CONST;
+
+/**
+ * GimpModuleError:
+ * @GIMP_MODULE_FAILED: Generic error condition
+ *
+ * Types of errors returned by modules
+ **/
+typedef enum
+{
+ GIMP_MODULE_FAILED
+} GimpModuleError;
+
+
+/**
+ * GimpModuleInfo:
+ * @abi_version: The #GIMP_MODULE_ABI_VERSION the module was compiled against.
+ * @purpose: The module's general purpose.
+ * @author: The module's author.
+ * @version: The module's version.
+ * @copyright: The module's copyright.
+ * @date: The module's release date.
+ *
+ * This structure contains information about a loadable module.
+ **/
+struct _GimpModuleInfo
+{
+ guint32 abi_version;
+ gchar *purpose;
+ gchar *author;
+ gchar *version;
+ gchar *copyright;
+ gchar *date;
+};
+
+
+/**
+ * GimpModuleQueryFunc:
+ * @module: The #GimpModule responsible for this loadable module.
+ * @Returns: The #GimpModuleInfo struct describing the module.
+ *
+ * The signature of the query function a loadable GIMP module must
+ * implement. In the module, the function must be called
+ * gimp_module_query().
+ *
+ * #GimpModule will copy the returned #GimpModuleInfo struct, so the
+ * module doesn't need to keep these values around (however in most
+ * cases the module will just return a pointer to a constant
+ * structure).
+ **/
+typedef const GimpModuleInfo * (* GimpModuleQueryFunc) (GTypeModule *module);
+
+/**
+ * GimpModuleRegisterFunc:
+ * @module: The #GimpModule responsible for this loadable module.
+ * @Returns: %TRUE on success, %FALSE otherwise.
+ *
+ * The signature of the register function a loadable GIMP module must
+ * implement. In the module, the function must be called
+ * gimp_module_register().
+ *
+ * When this function is called, the module should register all the types
+ * it implements with the passed @module.
+ **/
+typedef gboolean (* GimpModuleRegisterFunc) (GTypeModule *module);
+
+
+/* GimpModules have to implement these */
+G_MODULE_EXPORT const GimpModuleInfo * gimp_module_query (GTypeModule *module);
+G_MODULE_EXPORT gboolean gimp_module_register (GTypeModule *module);
+
+
+#define GIMP_TYPE_MODULE (gimp_module_get_type ())
+#define GIMP_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_MODULE, GimpModule))
+#define GIMP_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_MODULE, GimpModuleClass))
+#define GIMP_IS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_MODULE))
+#define GIMP_IS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_MODULE))
+#define GIMP_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_MODULE, GimpModuleClass))
+
+
+typedef struct _GimpModuleClass GimpModuleClass;
+
+/**
+ * GimpModule:
+ * @filename:
+ * @verbose:
+ * @state:
+ * @on_disk:
+ * @load_inhibit:
+ * @info:
+ * @last_module_error:
+ *
+ * #GimpModule is a generic mechanism to dynamically load modules into
+ * GIMP. It is a #GTypeModule subclass, implementing module loading
+ * using #GModule. #GimpModule does not know which functionality is
+ * implemented by the modules, it just provides a framework to get
+ * arbitrary #GType implementations loaded from disk.
+ **/
+struct _GimpModule
+{
+ GTypeModule parent_instance;
+
+ /*< public >*/
+ gchar *filename; /* path to the module */
+ gboolean verbose; /* verbose error reporting */
+ GimpModuleState state; /* what's happened to the module */
+ gboolean on_disk; /* TRUE if file still exists */
+ gboolean load_inhibit; /* user requests not to load at boot time */
+
+ /* stuff from now on may be NULL depending on the state the module is in */
+ /*< private >*/
+ GModule *module; /* handle on the module */
+
+ /*< public >*/
+ GimpModuleInfo *info; /* returned values from module_query */
+ gchar *last_module_error;
+
+ /*< private >*/
+ GimpModuleQueryFunc query_module;
+ GimpModuleRegisterFunc register_module;
+};
+
+struct _GimpModuleClass
+{
+ GTypeModuleClass parent_class;
+
+ void (* modified) (GimpModule *module);
+
+ /* Padding for future expansion */
+ void (* _gimp_reserved1) (void);
+ void (* _gimp_reserved2) (void);
+ void (* _gimp_reserved3) (void);
+ void (* _gimp_reserved4) (void);
+};
+
+
+GType gimp_module_get_type (void) G_GNUC_CONST;
+
+GimpModule * gimp_module_new (const gchar *filename,
+ gboolean load_inhibit,
+ gboolean verbose);
+
+gboolean gimp_module_query_module (GimpModule *module);
+
+void gimp_module_modified (GimpModule *module);
+void gimp_module_set_load_inhibit (GimpModule *module,
+ gboolean load_inhibit);
+
+const gchar * gimp_module_state_name (GimpModuleState state);
+
+GIMP_DEPRECATED_FOR(g_type_module_register_enum)
+GType gimp_module_register_enum (GTypeModule *module,
+ const gchar *name,
+ const GEnumValue *const_static_values);
+
+
+/* GimpModuleInfo functions */
+
+GimpModuleInfo * gimp_module_info_new (guint32 abi_version,
+ const gchar *purpose,
+ const gchar *author,
+ const gchar *version,
+ const gchar *copyright,
+ const gchar *date);
+GimpModuleInfo * gimp_module_info_copy (const GimpModuleInfo *info);
+void gimp_module_info_free (GimpModuleInfo *info);
+
+
+G_END_DECLS
+
+#endif /* __GIMP_MODULE_H__ */