From 5697065e11fd593042ad572ba032b96fddad9cb5 Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Wed, 29 Jan 2014 16:07:41 +0100 Subject: Add tool to generate plugin templates --- tools/plugin_template/Makefile.am | 37 ++++++ tools/plugin_template/pluma-plugin.c | 184 ++++++++++++++++++++++++++ tools/plugin_template/pluma-plugin.desktop.in | 12 ++ tools/plugin_template/pluma-plugin.h | 76 +++++++++++ 4 files changed, 309 insertions(+) create mode 100644 tools/plugin_template/Makefile.am create mode 100644 tools/plugin_template/pluma-plugin.c create mode 100644 tools/plugin_template/pluma-plugin.desktop.in create mode 100644 tools/plugin_template/pluma-plugin.h (limited to 'tools/plugin_template') diff --git a/tools/plugin_template/Makefile.am b/tools/plugin_template/Makefile.am new file mode 100644 index 00000000..93c79ae7 --- /dev/null +++ b/tools/plugin_template/Makefile.am @@ -0,0 +1,37 @@ +# ##(PLUGIN_NAME) + +plugindir = $(PLUMA_PLUGINS_LIBS_DIR) + +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + $(PLUMA_CFLAGS) \ + $(WARN_CFLAGS) \ + $(DISABLE_DEPRECATED_CFLAGS) \ + -DPLUMA_LOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" + +plugin_LTLIBRARIES = lib##(PLUGIN_MODULE).la + +lib##(PLUGIN_MODULE)_la_SOURCES = \ + ##(PLUGIN_MODULE)-plugin.h \ + ##(PLUGIN_MODULE)-plugin.c + +lib##(PLUGIN_MODULE)_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS) +lib##(PLUGIN_MODULE)_la_LIBADD = $(PLUMA_LIBS) + +# UI files (if you use gtkbuilder for your plugin, list those files here) +uidir = $(PLUMA_PLUGINS_DATA_DIR)/##(PLUGIN_MODULE) +ui_DATA = + +plugin_in_files = ##(PLUGIN_MODULE).pluma-plugin.desktop.in + +%.pluma-plugin: %.pluma-plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache + +plugin_DATA = $(plugin_in_files:.pluma-plugin.desktop.in=.pluma-plugin) + +EXTRA_DIST = $(plugin_in_files) + +CLEANFILES = $(plugin_DATA) $(ui_DATA) + +DISTCLEANFILES = $(plugin_DATA) $(ui_DATA) + +-include $(top_srcdir)/git.mk diff --git a/tools/plugin_template/pluma-plugin.c b/tools/plugin_template/pluma-plugin.c new file mode 100644 index 00000000..4974f121 --- /dev/null +++ b/tools/plugin_template/pluma-plugin.c @@ -0,0 +1,184 @@ +/* + * ##(FILENAME) - ##(DESCRIPTION) + * + * Copyright (C) ##(DATE_YEAR) - ##(AUTHOR_FULLNAME) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "##(PLUGIN_MODULE)-plugin.h" + +#include +#include + +#define WINDOW_DATA_KEY "##(PLUGIN_ID.camel)PluginWindowData" + +#define ##(PLUGIN_ID.upper)_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)PluginPrivate)) + +struct _##(PLUGIN_ID.camel)PluginPrivate +{ + gpointer dummy; +}; + +PLUMA_PLUGIN_REGISTER_TYPE (##(PLUGIN_ID.camel)Plugin, ##(PLUGIN_ID.lower)_plugin) + +##ifdef WITH_MENU +/* UI string. See pluma-ui.xml for reference */ +static const gchar ui_str = + "" + " " + " " + " " + ""; + +/* UI actions */ +static const GtkActionEntry action_entries[] = + { + /* Put your actions here */ + }; + +typedef struct +{ + GtkActionGroup *action_group; + guint ui_id; +} WindowData; +##endif + +static void +##(PLUGIN_ID.lower)_plugin_init (##(PLUGIN_ID.camel)Plugin *plugin) +{ + plugin->priv = ##(PLUGIN_ID.upper)_PLUGIN_GET_PRIVATE (plugin); + + pluma_debug_message (DEBUG_PLUGINS, + "##(PLUGIN_ID.camel)Plugin initializing"); +} + +static void +##(PLUGIN_ID.lower)_plugin_finalize (GObject *object) +{ + pluma_debug_message (DEBUG_PLUGINS, + "##(PLUGIN_ID.camel)Plugin finalizing"); + + G_OBJECT_CLASS (##(PLUGIN_ID.lower)_plugin_parent_class)->finalize (object); +} + +##ifdef WITH_MENU +static void +free_window_data (WindowData *data) +{ + g_return_if_fail (data != NULL); + + g_object_unref (data->action_group); + g_free (data); +} +##endif + +static void +impl_activate (PlumaPlugin *plugin, + PlumaWindow *window) +{ +##ifdef WITH_MENU + GtkUIManager *manager; + WindowData *data; +##endif + + pluma_debug (DEBUG_PLUGINS); + +##ifdef WITH_MENU + data = g_new (WindowData, 1); + manager = pluma_window_get_ui_manager (window); + + data->action_group = gtk_action_group_new ("##(PLUGIN_ID.camel)PluginActions"); + gtk_action_group_set_translation_domain (data->action_group, + GETTEXT_PACKAGE); + gtk_action_group_add_actions (data->action_group, + action_entries, + G_N_ELEMENTS (action_entries), + window); + + gtk_ui_manager_insert_action_group (manager, data->action_group, -1); + + data->ui_id = gtk_ui_manager_add_ui_from_string (manager, ui_str, + -1, NULL); + + g_object_set_data_full (G_OBJECT (window), + WINDOW_DATA_KEY, + data, + (GDestroyNotify) free_window_data); +##endif +} + +static void +impl_deactivate (PlumaPlugin *plugin, + PlumaWindow *window) +{ +##ifdef WITH_MENU + GtkUIManager *manager; + WindowData *data; +##endif + + pluma_debug (DEBUG_PLUGINS); + +##ifdef WITH_MENU + manager = pluma_window_get_ui_manager (window); + + data = (WindowData *) g_object_get_data (G_OBJECT (window), + WINDOW_DATA_KEY); + g_return_if_fail (data != NULL); + + gtk_ui_manager_remove_ui (manager, data->ui_id); + gtk_ui_manager_remove_action_group (manager, data->action_group); + + g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL); +##endif +} + +static void +impl_update_ui (PlumaPlugin *plugin, + PlumaWindow *window) +{ + pluma_debug (DEBUG_PLUGINS); +} + +##ifdef WITH_CONFIGURE_DIALOG +static GtkWidget * +impl_create_configure_dialog (PlumaPlugin *plugin) +{ + pluma_debug (DEBUG_PLUGINS); +} +##endif + +static void +##(PLUGIN_ID.lower)_plugin_class_init (##(PLUGIN_ID.camel)PluginClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + PlumaPluginClass *plugin_class = PLUMA_PLUGIN_CLASS (klass); + + object_class->finalize = ##(PLUGIN_ID.lower)_plugin_finalize; + + plugin_class->activate = impl_activate; + plugin_class->deactivate = impl_deactivate; + plugin_class->update_ui = impl_update_ui; +##ifdef WITH_CONFIGURE_DIALOG + plugin_class->create_configure_dialog = impl_create_configure_dialog; +##endif + + g_type_class_add_private (object_class, + sizeof (##(PLUGIN_ID.camel)PluginPrivate)); +} diff --git a/tools/plugin_template/pluma-plugin.desktop.in b/tools/plugin_template/pluma-plugin.desktop.in new file mode 100644 index 00000000..c12b91b9 --- /dev/null +++ b/tools/plugin_template/pluma-plugin.desktop.in @@ -0,0 +1,12 @@ +[Pluma Plugin] +##ifdef WITH_PYTHON +Loader=python +##endif +Module=##(PLUGIN_MODULE) +IAge=2 +_Name=##(PLUGIN_NAME) +_Description=##(DESCRIPTION) +Icon=pluma-plugin +Authors=##(AUTHOR_FULLNAME) <##(AUTHOR_EMAIL.lower)> +Copyright=Copyright © ##(DATE_YEAR) ##(AUTHOR_FULLNAME) +Website=http://www.mate-desktop.org diff --git a/tools/plugin_template/pluma-plugin.h b/tools/plugin_template/pluma-plugin.h new file mode 100644 index 00000000..5a8305bc --- /dev/null +++ b/tools/plugin_template/pluma-plugin.h @@ -0,0 +1,76 @@ +/* + * ##(FILENAME) - ##(DESCRIPTION) + * + * Copyright (C) ##(DATE_YEAR) - ##(AUTHOR_FULLNAME) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __##(PLUGIN_ID.upper)_PLUGIN_H__ +#define __##(PLUGIN_ID.upper)_PLUGIN_H__ + +#include +#include +#include + +G_BEGIN_DECLS + +/* + * Type checking and casting macros + */ +#define TYPE_##(PLUGIN_ID.upper)_PLUGIN (##(PLUGIN_ID.lower)_plugin_get_type ()) +#define ##(PLUGIN_ID.upper)_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)Plugin)) +#define ##(PLUGIN_ID.upper)_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)PluginClass)) +#define IS_##(PLUGIN_ID.upper)_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_##(PLUGIN_ID.upper)_PLUGIN)) +#define IS_##(PLUGIN_ID.upper)_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_##(PLUGIN_ID.upper)_PLUGIN)) +#define ##(PLUGIN_ID.upper)_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_##(PLUGIN_ID.upper)_PLUGIN, ##(PLUGIN_ID.camel)PluginClass)) + +/* Private structure type */ +typedef struct _##(PLUGIN_ID.camel)PluginPrivate ##(PLUGIN_ID.camel)PluginPrivate; + +/* + * Main object structure + */ +typedef struct _##(PLUGIN_ID.camel)Plugin ##(PLUGIN_ID.camel)Plugin; + +struct _##(PLUGIN_ID.camel)Plugin +{ + PlumaPlugin parent_instance; + + /*< private >*/ + ##(PLUGIN_ID.camel)PluginPrivate *priv; +}; + +/* + * Class definition + */ +typedef struct _##(PLUGIN_ID.camel)PluginClass ##(PLUGIN_ID.camel)PluginClass; + +struct _##(PLUGIN_ID.camel)PluginClass +{ + PlumaPluginClass parent_class; +}; + +/* + * Public methods + */ +GType ##(PLUGIN_ID.lower)_plugin_get_type (void) G_GNUC_CONST; + +/* All the plugins must implement this function */ +G_MODULE_EXPORT GType register_pluma_plugin (GTypeModule *module); + +G_END_DECLS + +#endif /* __##(PLUGIN_ID.upper)_PLUGIN_H__ */ -- cgit v1.2.1