aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/plugin-manager/plugin-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/plugin-manager/plugin-manager.c')
-rw-r--r--plugins/plugin-manager/plugin-manager.c450
1 files changed, 0 insertions, 450 deletions
diff --git a/plugins/plugin-manager/plugin-manager.c b/plugins/plugin-manager/plugin-manager.c
deleted file mode 100644
index 0817bdc674..0000000000
--- a/plugins/plugin-manager/plugin-manager.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * This program 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 2 of the License, or (at your option) version 3.
- *
- * 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- * Michael Zucchi <notzed@ximian.com>
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-/* A plugin manager ui */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gtk/gtk.h>
-#include <glib/gi18n-lib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include "e-util/e-plugin.h"
-#include "shell/e-shell-window.h"
-#include "shell/e-shell-window-actions.h"
-
-#define d(S) (S)
-
-enum {
- LABEL_NAME,
- LABEL_AUTHOR,
- LABEL_DESCRIPTION,
- LABEL_LAST
-};
-
-enum
-{
- COL_PLUGIN_ENABLED = 0,
- COL_PLUGIN_NAME,
- COL_PLUGIN_DATA,
- COL_PLUGIN_CFG_WIDGET
-};
-
-static struct {
- const gchar *label;
-} label_info[LABEL_LAST] = {
- { N_("Name"), },
- { N_("Author(s)"), },
- { N_("Description"), },
-};
-
-typedef struct _Manager Manager;
-struct _Manager {
- GtkTreeView *treeview;
- GtkTreeModel *model;
-
- GtkLabel *labels[LABEL_LAST];
- GtkLabel *items[LABEL_LAST];
-
- GtkWidget *config_plugin_label;
- GtkWidget *active_cfg_widget;
-
- GSList *plugins;
-};
-
-/* for tracking if we're shown */
-static GtkWidget *notebook;
-static GtkWidget *configure_page;
-static gint last_selected_page;
-static gulong switch_page_handler_id;
-
-gboolean e_plugin_ui_init (GtkUIManager *ui_manager,
- EShellWindow *shell_window);
-
-static void
-eppm_set_label (GtkLabel *l, const gchar *v)
-{
- gtk_label_set_label(l, v?v:_("Unknown"));
-}
-
-static void
-eppm_switch_page_cb (GtkNotebook *notebook,
- GtkWidget *page,
- guint page_num)
-{
- last_selected_page = page_num;
-}
-
-static void
-eppm_show_plugin (Manager *m, EPlugin *ep, GtkWidget *cfg_widget)
-{
- if (ep) {
- gchar *string;
-
- string = g_strdup_printf ("<span><b>%s</b></span>", ep->name);
- gtk_label_set_markup (GTK_LABEL (m->items[LABEL_NAME]), string);
- gtk_label_set_markup (GTK_LABEL (m->config_plugin_label), string);
- g_free (string);
-
- if (ep->authors) {
- GSList *l = ep->authors;
- GString *out = g_string_new ("");
-
- for (; l; l = g_slist_next (l)) {
- EPluginAuthor *epa = l->data;
-
- if (l != ep->authors)
- g_string_append (out, ",\n");
- if (epa->name)
- g_string_append (out, epa->name);
- if (epa->email) {
- g_string_append (out, " <");
- g_string_append (out, epa->email);
- g_string_append (out, ">");
- }
- }
- gtk_label_set_label (m->items[LABEL_AUTHOR], out->str);
- g_string_free (out, TRUE);
- } else {
- eppm_set_label (m->items[LABEL_AUTHOR], NULL);
- }
-
- eppm_set_label (m->items[LABEL_DESCRIPTION], ep->description);
- } else {
- gint i;
-
- gtk_label_set_markup (GTK_LABEL (m->config_plugin_label), "");
- for (i = 0; i < LABEL_LAST; i++)
- gtk_label_set_label (m->items[i], "");
- }
-
- if (cfg_widget != NULL)
- gtk_notebook_append_page_menu (
- GTK_NOTEBOOK (notebook), configure_page,
- gtk_label_new (_("Configuration")), NULL);
-
- if (m->active_cfg_widget != cfg_widget) {
- if (m->active_cfg_widget)
- gtk_widget_hide (m->active_cfg_widget);
-
- if (cfg_widget)
- gtk_widget_show (cfg_widget);
-
- m->active_cfg_widget = cfg_widget;
- }
-}
-
-static void
-eppm_selection_changed (GtkTreeSelection *selection, Manager *m)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- g_signal_handler_block (notebook, switch_page_handler_id);
- gtk_notebook_remove_page (GTK_NOTEBOOK (notebook), 1);
- g_signal_handler_unblock (notebook, switch_page_handler_id);
-
- if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
- EPlugin *ep;
- GtkWidget *cfg_widget = NULL;
-
- gtk_tree_model_get (model, &iter, COL_PLUGIN_DATA, &ep, COL_PLUGIN_CFG_WIDGET, &cfg_widget, -1);
- eppm_show_plugin (m, ep, cfg_widget);
-
- } else {
- eppm_show_plugin (m, NULL, NULL);
- }
-
- g_signal_handler_block (notebook, switch_page_handler_id);
- gtk_notebook_set_current_page (
- GTK_NOTEBOOK (notebook), last_selected_page);
- g_signal_handler_unblock (notebook, switch_page_handler_id);
-}
-
-static void
-eppm_enable_toggled (GtkCellRendererToggle *renderer, const gchar *path_string, Manager *m)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- EPlugin *plugin;
-
- path = gtk_tree_path_new_from_string (path_string);
-
- if (gtk_tree_model_get_iter (m->model, &iter, path)) {
- gtk_tree_model_get (m->model, &iter, COL_PLUGIN_DATA, &plugin, -1);
- e_plugin_enable (plugin, !plugin->enabled);
-
- g_warning ("%s", plugin->name);
-
- gtk_list_store_set (GTK_LIST_STORE (m->model), &iter,
- COL_PLUGIN_ENABLED, plugin->enabled,
- -1);
- }
-
- gtk_tree_path_free (path);
-}
-
-static void
-eppm_free (gpointer data)
-{
- Manager *m = data;
- GSList *l;
-
- for (l = m->plugins; l; l = g_slist_next (l))
- g_object_unref (l->data);
-
- g_slist_free (m->plugins);
- g_object_unref (m->model);
- g_free (m);
-}
-
-static void
-action_plugin_manager_cb (GtkAction *action,
- EShellWindow *shell_window)
-{
- Manager *m;
- gint i;
- GtkWidget *dialog;
- GtkWidget *hbox, *w;
- GtkWidget *overview_page;
- GtkWidget *content_area;
- GtkListStore *store;
- GtkTreeSelection *selection;
- GtkCellRenderer *renderer;
- GSList *l;
- gchar *string;
- GtkWidget *subvbox;
-
- m = g_malloc0 (sizeof (*m));
-
- /* Setup the ui */
- dialog = gtk_dialog_new_with_buttons (
- _("Plugin Manager"),
- GTK_WINDOW (shell_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
-
- content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
-
- gtk_window_set_default_size (GTK_WINDOW (dialog), 640, 400);
- g_object_set (dialog, "has_separator", FALSE, NULL);
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
-
- hbox = gtk_hbox_new (FALSE, 12);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
- gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
-
- string = g_strdup_printf ("<i>%s</i>", _("Note: Some changes will not take effect until restart"));
-
- w = g_object_new (gtk_label_get_type (),
- "label", string,
- "wrap", FALSE,
- "use_markup", TRUE,
- NULL);
- gtk_widget_show (w);
- g_free (string);
-
- gtk_box_pack_start (GTK_BOX (content_area), w, FALSE, TRUE, 12);
-
- notebook = gtk_notebook_new ();
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), TRUE);
- gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE);
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
-
- switch_page_handler_id = g_signal_connect (
- notebook, "switch-page",
- G_CALLBACK (eppm_switch_page_cb), NULL);
-
- overview_page = gtk_vbox_new (FALSE, 0);
- configure_page = gtk_vbox_new (FALSE, 0);
- g_object_ref_sink (configure_page);
- gtk_container_set_border_width (GTK_CONTAINER (overview_page), 12);
- gtk_container_set_border_width (GTK_CONTAINER (configure_page), 12);
- gtk_notebook_append_page_menu (GTK_NOTEBOOK (notebook), overview_page, gtk_label_new (_("Overview")), NULL);
-
- gtk_widget_show (notebook);
- gtk_widget_show (overview_page);
- gtk_widget_show (configure_page);
-
- /* name of plugin on "Configuration" tab */
- m->config_plugin_label = g_object_new (
- gtk_label_get_type (),
- "wrap", TRUE,
- "selectable", FALSE,
- "xalign", 0.0,
- "yalign", 0.0, NULL);
- gtk_widget_show (m->config_plugin_label);
- gtk_box_pack_start (GTK_BOX (configure_page), m->config_plugin_label, FALSE, FALSE, 0);
-
- store = gtk_list_store_new (4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER);
-
- /* fill store */
- m->plugins = e_plugin_list_plugins ();
-
- for (l = m->plugins; l; l = g_slist_next (l)) {
- EPlugin *ep = l->data;
- GtkTreeIter iter;
- GtkWidget *cfg_widget;
-
- if (!g_getenv ("EVO_SHOW_ALL_PLUGINS")) {
- /* hide ourselves always */
- if (ep->flags & E_PLUGIN_FLAGS_SYSTEM_PLUGIN)
- continue;
-
- } else {
- /* Never ever show plugin-manager. User may disable it */
- if (!strcmp (ep->id, "org.gnome.evolution.plugin.manager"))
- continue;
- }
-
- cfg_widget = e_plugin_get_configure_widget (ep);
- if (cfg_widget) {
- gtk_widget_hide (cfg_widget);
- gtk_box_pack_start (GTK_BOX (configure_page), cfg_widget, TRUE, TRUE, 12);
- }
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_PLUGIN_ENABLED, ep->enabled,
- COL_PLUGIN_NAME, ep->name ? ep->name : ep->id,
- COL_PLUGIN_DATA, ep,
- COL_PLUGIN_CFG_WIDGET, cfg_widget,
- -1);
-
- }
-
- /* setup the treeview */
- m->treeview = GTK_TREE_VIEW (gtk_tree_view_new ());
- gtk_tree_view_set_reorderable (m->treeview, FALSE);
- gtk_tree_view_set_model (m->treeview, GTK_TREE_MODEL (store));
- gtk_tree_view_set_search_column (m->treeview, COL_PLUGIN_NAME);
- gtk_tree_view_set_headers_visible (m->treeview, TRUE);
-
- m->model = GTK_TREE_MODEL (store);
-
- renderer = gtk_cell_renderer_toggle_new ();
- gtk_tree_view_insert_column_with_attributes (m->treeview,
- COL_PLUGIN_ENABLED, _("Enabled"),
- renderer, "active", COL_PLUGIN_ENABLED,
- NULL);
- g_signal_connect (renderer, "toggled", G_CALLBACK (eppm_enable_toggled), m);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_attributes (m->treeview,
- COL_PLUGIN_NAME, _("Plugin"),
- renderer, "text", COL_PLUGIN_NAME,
- NULL);
-
- /* set sort column */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (m->model), COL_PLUGIN_NAME, GTK_SORT_ASCENDING);
-
- w = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (w), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (w), GTK_SHADOW_IN);
- gtk_container_add (GTK_CONTAINER (w), GTK_WIDGET (m->treeview));
-
- gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (w), FALSE, TRUE, 0);
-
- /* Show all widgets in hbox before we pack there notebook, because not all widgets in notebook
- are going to be visible at one moment. */
- gtk_widget_show_all (hbox);
-
- gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
-
- /* this is plugin's name label */
- subvbox = gtk_vbox_new (FALSE, 6);
- m->items[0] = g_object_new (gtk_label_get_type (),
- "wrap", TRUE,
- "selectable", FALSE,
- "xalign", 0.0,
- "yalign", 0.0, NULL);
- gtk_box_pack_start (GTK_BOX (subvbox), GTK_WIDGET (m->items[0]), TRUE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (overview_page), subvbox, FALSE, TRUE, 0);
-
- /* this is every other data */
- for (i = 1; i < LABEL_LAST; i++) {
- gchar *markup;
-
- subvbox = gtk_vbox_new (FALSE, 6);
-
- markup = g_strdup_printf ("<span weight=\"bold\">%s:</span>", _(label_info[i].label));
- m->labels[i] = g_object_new (gtk_label_get_type (),
- "label", markup,
- "use_markup", TRUE,
- "xalign", 0.0,
- "yalign", 0.0, NULL);
- gtk_box_pack_start (GTK_BOX (subvbox), GTK_WIDGET (m->labels[i]), FALSE, TRUE, 0);
- g_free (markup);
-
- m->items[i] = g_object_new (gtk_label_get_type (),
- "wrap", TRUE,
- "selectable", TRUE,
- "can-focus", FALSE,
- "xalign", 0.0,
- "yalign", 0.0, NULL);
- gtk_box_pack_start (GTK_BOX (subvbox), GTK_WIDGET (m->items[i]), TRUE, TRUE, 0);
-
- gtk_box_pack_start (GTK_BOX (overview_page), subvbox, FALSE, TRUE, 12);
- }
-
- gtk_widget_show_all (overview_page);
-
- selection = gtk_tree_view_get_selection (m->treeview);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
- g_signal_connect (selection, "changed", G_CALLBACK (eppm_selection_changed), m);
-
- atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (m->treeview)), _("Plugin"));
-
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_widget_destroy (dialog);
- eppm_free (m);
-}
-
-static GtkActionEntry entries[] = {
-
- { "plugin-manager",
- NULL,
- N_("_Plugins"),
- NULL,
- N_("Enable and disable plugins"),
- G_CALLBACK (action_plugin_manager_cb) }
-};
-
-gboolean
-e_plugin_ui_init (GtkUIManager *ui_manager,
- EShellWindow *shell_window)
-{
- GtkActionGroup *action_group;
-
- action_group = E_SHELL_WINDOW_ACTION_GROUP_SHELL (shell_window);
-
- /* Add actions to the "shell" action group. */
- gtk_action_group_add_actions (
- action_group, entries,
- G_N_ELEMENTS (entries), shell_window);
-
- return TRUE;
-}