summaryrefslogtreecommitdiff
path: root/tools/plugin_template/pluma-plugin.c
diff options
context:
space:
mode:
authorStefano Karapetsas <[email protected]>2014-01-29 16:07:41 +0100
committerStefano Karapetsas <[email protected]>2014-01-29 16:07:41 +0100
commit5697065e11fd593042ad572ba032b96fddad9cb5 (patch)
treea4a0e57436af53712d1c3f9d7f1d4be2f1c292ee /tools/plugin_template/pluma-plugin.c
parentf9933b9afdf50f311b48749fd4b6f88323f22665 (diff)
downloadpluma-5697065e11fd593042ad572ba032b96fddad9cb5.tar.bz2
pluma-5697065e11fd593042ad572ba032b96fddad9cb5.tar.xz
Add tool to generate plugin templates
Diffstat (limited to 'tools/plugin_template/pluma-plugin.c')
-rw-r--r--tools/plugin_template/pluma-plugin.c184
1 files changed, 184 insertions, 0 deletions
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 <config.h>
+#endif
+
+#include "##(PLUGIN_MODULE)-plugin.h"
+
+#include <glib/gi18n-lib.h>
+#include <pluma/pluma-debug.h>
+
+#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>"
+ " <menubar name='MenuBar'>"
+ " <!-- Put your menu entries here -->"
+ " </menubar>"
+ "</ui>";
+
+/* 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));
+}