diff options
author | Sankar P <psankar@novell.com> | 2007-05-11 15:04:04 +0800 |
---|---|---|
committer | Sankarasivasubramanian Pasupathilingam <psankar@src.gnome.org> | 2007-05-11 15:04:04 +0800 |
commit | 679e7a635332391285f8c8c6c89a4d3372c66c2d (patch) | |
tree | f98a24895e7aef07044b05138100f7cf69147a6a | |
parent | e18f01469d382189d9d9365a8c79828081e09d1d (diff) | |
download | gsoc2013-evolution-679e7a635332391285f8c8c6c89a4d3372c66c2d.tar.gz gsoc2013-evolution-679e7a635332391285f8c8c6c89a4d3372c66c2d.tar.zst gsoc2013-evolution-679e7a635332391285f8c8c6c89a4d3372c66c2d.zip |
Committed on behalf of Gilles Dartiguelongue <dartigug@esiee.fr>
2007-05-11 Sankar P <psankar@novell.com>
* Committed on behalf of Gilles Dartiguelongue <dartigug@esiee.fr>
* plugin-manager.c: (eppm_show_plugin), (eppm_selection_changed),
(eppm_enable_toggled), (eppm_free),
(org_gnome_plugin_manager_manage):
Sort the list of plugins based on name so that it is easy to use
svn path=/trunk/; revision=33505
-rw-r--r-- | plugins/plugin-manager/ChangeLog | 9 | ||||
-rw-r--r-- | plugins/plugin-manager/plugin-manager.c | 171 |
2 files changed, 127 insertions, 53 deletions
diff --git a/plugins/plugin-manager/ChangeLog b/plugins/plugin-manager/ChangeLog index 390ec09b2f..b4484ac22a 100644 --- a/plugins/plugin-manager/ChangeLog +++ b/plugins/plugin-manager/ChangeLog @@ -1,3 +1,12 @@ +2007-05-11 Sankar P <psankar@novell.com> + + * Committed on behalf of Gilles Dartiguelongue <dartigug@esiee.fr> + + * plugin-manager.c: (eppm_show_plugin), (eppm_selection_changed), + (eppm_enable_toggled), (eppm_free), + (org_gnome_plugin_manager_manage): + Sort the list of plugins based on name so that it is easy to use + 2006-01-25 Rajeev ramanathan <rajeevramanathan_2004@yahoo.co.in> ** Fixes Bug #314913 diff --git a/plugins/plugin-manager/plugin-manager.c b/plugins/plugin-manager/plugin-manager.c index d4f59057e8..9e41716b52 100644 --- a/plugins/plugin-manager/plugin-manager.c +++ b/plugins/plugin-manager/plugin-manager.c @@ -16,14 +16,17 @@ #include <gtk/gtklabel.h> #include <gtk/gtktreeview.h> +#include <gtk/gtktreemodel.h> +#include <gtk/gtktreesortable.h> +#include <gtk/gtktreemodelsort.h> #include <gtk/gtktreeselection.h> #include <gtk/gtkliststore.h> #include <gtk/gtkdialog.h> #include <gtk/gtkscrolledwindow.h> -#include <gtk/gtktable.h> #include <gtk/gtkcellrenderertoggle.h> #include <gtk/gtkcellrenderertext.h> #include <gtk/gtkstock.h> +#include <gtk/gtkvbox.h> #include <gtk/gtkhbox.h> #include "e-util/e-plugin.h" @@ -36,6 +39,13 @@ enum { LABEL_LAST }; +enum +{ + COL_PLUGIN_ENABLED = 0, + COL_PLUGIN_NAME, + COL_PLUGIN_DATA +}; + static struct { const char *label; } label_info[LABEL_LAST] = { @@ -47,10 +57,9 @@ static struct { typedef struct _Manager Manager; struct _Manager { GtkDialog *dialog; - GtkTreeView *tree; - GtkListStore *model; + GtkTreeView *treeview; + GtkTreeModel *model; - GtkTable *table; GtkLabel *labels[LABEL_LAST]; GtkLabel *items[LABEL_LAST]; @@ -71,8 +80,13 @@ eppm_set_label(GtkLabel *l, const char *v) static void eppm_show_plugin(Manager *m, EPlugin *ep) { + char *string = NULL; + if (ep) { - eppm_set_label(m->items[LABEL_NAME], ep->name); + string = g_strdup_printf("<span size=\"x-large\">%s</span>", ep->name); + gtk_label_set_markup(GTK_LABEL(m->items[LABEL_NAME]), string); + g_free(string); + if (ep->authors) { GSList *l = ep->authors; GString *out = g_string_new(""); @@ -97,13 +111,11 @@ eppm_show_plugin(Manager *m, EPlugin *ep) } eppm_set_label(m->items[LABEL_DESCRIPTION], ep->description); - gtk_widget_set_sensitive((GtkWidget *)m->table, TRUE); } else { int i; for (i=0;i<LABEL_LAST;i++) gtk_label_set_label(m->items[i], ""); - gtk_widget_set_sensitive((GtkWidget *)m->table, FALSE); } } @@ -116,7 +128,7 @@ eppm_selection_changed(GtkTreeSelection *selection, Manager *m) if (gtk_tree_selection_get_selected(selection, &model, &iter)) { EPlugin *ep; - gtk_tree_model_get(model, &iter, 2, &ep, -1); + gtk_tree_model_get(model, &iter, COL_PLUGIN_DATA, &ep, -1); eppm_show_plugin(m, ep); } else { eppm_show_plugin(m, NULL); @@ -124,18 +136,25 @@ eppm_selection_changed(GtkTreeSelection *selection, Manager *m) } static void -eppm_enable_toggled(GtkCellRendererToggle *renderer, char *arg1, Manager *m) +eppm_enable_toggled(GtkCellRendererToggle *renderer, const char *path_string, Manager *m) { GtkTreePath *path; GtkTreeIter iter; EPlugin *plugin; - path = gtk_tree_path_new_from_string(arg1); - if (gtk_tree_model_get_iter((GtkTreeModel *)m->model, &iter, path)) { - gtk_tree_model_get((GtkTreeModel *)m->model, &iter, 2, &plugin, -1); + 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); - gtk_list_store_set(m->model, &iter, 1, plugin->enabled, -1); + + g_warning( plugin->name ); + + gtk_list_store_set(GTK_LIST_STORE(m->model), &iter, + COL_PLUGIN_ENABLED, plugin->enabled, + -1); } + gtk_tree_path_free(path); } @@ -149,6 +168,8 @@ eppm_free(void *data) g_object_unref(l->data); g_slist_free(m->plugins); + g_object_unref(m->model); + g_free(m); } @@ -165,6 +186,7 @@ org_gnome_plugin_manager_manage(void *ep, ESMenuTargetShell *t) Manager *m; int i; GtkWidget *hbox, *w; + GtkListStore *store; GtkTreeSelection *selection; GtkCellRenderer *renderer; GSList *l; @@ -180,8 +202,8 @@ org_gnome_plugin_manager_manage(void *ep, ESMenuTargetShell *t) m->dialog = (GtkDialog *)gtk_dialog_new_with_buttons(_("Plugin Manager"), (GtkWindow *)gtk_widget_get_toplevel(t->target.widget), GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - /* this isn't actually big enough, but oh well, i'll work out resizing later */ + GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); + gtk_window_set_default_size((GtkWindow *)m->dialog, 640, 400); g_object_set((GObject *)m->dialog, "has_separator", FALSE, NULL); @@ -189,77 +211,120 @@ org_gnome_plugin_manager_manage(void *ep, ESMenuTargetShell *t) gtk_container_set_border_width((GtkContainer *)hbox, 12); gtk_box_pack_start((GtkBox *)m->dialog->vbox, hbox, TRUE, TRUE, 0); + char *string; + 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", _("Note: Some changes will not take effect until restart"), - "wrap", TRUE, + "label", string, + "wrap", FALSE, + "use_markup", TRUE, NULL); gtk_widget_show(w); + gtk_box_pack_start((GtkBox *)m->dialog->vbox, w, FALSE, TRUE, 6); - m->tree = (GtkTreeView *)gtk_tree_view_new(); + store = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, 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; + + /* hide ourselves always */ + if (!strcmp(ep->id, "org.gnome.evolution.plugin.manager")) + continue; + + 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, + -1); + } + + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (store), + COL_PLUGIN_NAME, GTK_SORT_ASCENDING); + + /* setup the treeview */ + m->treeview = (GtkTreeView *)gtk_tree_view_new(); + gtk_tree_view_set_reorderable(GTK_TREE_VIEW(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_text_new (); - gtk_tree_view_insert_column_with_attributes(m->tree, -1, _("Plugin"), renderer, "text", 0, NULL); renderer = gtk_cell_renderer_toggle_new(); - /*g_object_set((GObject *)renderer, "activatable", TRUE, NULL);*/ - gtk_tree_view_insert_column_with_attributes(m->tree, -1, _("Enabled"), renderer, "active", 1, NULL); + 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((GtkScrolledWindow *)w, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type((GtkScrolledWindow *)w, GTK_SHADOW_IN); - gtk_container_add((GtkContainer *)w, (GtkWidget *)m->tree); + gtk_container_add((GtkContainer *)w, (GtkWidget *)m->treeview); gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)w, FALSE, TRUE, 6); - m->table = (GtkTable *)gtk_table_new(LABEL_LAST, 2, FALSE); - gtk_table_set_col_spacings(m->table, 6); - gtk_table_set_row_spacings(m->table, 6); - for (i=0;i<LABEL_LAST;i++) { + GtkWidget *vbox; + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start((GtkBox *)hbox, vbox, TRUE, TRUE, 6); + + /* this is plugin's name label */ + GtkWidget *subvbox; + subvbox = gtk_vbox_new(FALSE, 0); + 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((GtkBox *)subvbox, (GtkWidget *)m->items[0], TRUE, TRUE, 0); + gtk_box_pack_start((GtkBox *)vbox, subvbox, FALSE, TRUE, 6); + + /* this is every other data */ + for (i=1;i<LABEL_LAST;i++) { + subvbox = gtk_vbox_new(FALSE, 0); + char *markup; - markup = g_strdup_printf("<span weight=\"bold\">%s</span>", _(label_info[i].label)); + 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", 1.0, + "xalign", 0.0, "yalign", 0.0, NULL); + gtk_box_pack_start((GtkBox *)subvbox, (GtkWidget *)m->labels[i], FALSE, TRUE, 0); g_free(markup); - gtk_table_attach(m->table, (GtkWidget *)m->labels[i], 0, 1, i, i+1, GTK_FILL, GTK_FILL, 0, 0); + m->items[i] = g_object_new(gtk_label_get_type(), "wrap", TRUE, "selectable", TRUE, "xalign", 0.0, "yalign", 0.0, NULL); - gtk_table_attach(m->table, (GtkWidget *)m->items[i], 1, 2, i, i+1, GTK_EXPAND|GTK_FILL, GTK_FILL, 0, 0); + gtk_box_pack_start((GtkBox *)subvbox, (GtkWidget *)m->items[i], TRUE, TRUE, 0); + + gtk_box_pack_start((GtkBox *)vbox, subvbox, FALSE, TRUE, 6); } - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)m->table, TRUE, TRUE, 6); gtk_widget_show_all(hbox); - selection = gtk_tree_view_get_selection(m->tree); + 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); - m->plugins = e_plugin_list_plugins(); - m->model = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_POINTER); - - for (l=m->plugins;l;l=g_slist_next(l)) { - EPlugin *ep = l->data; - GtkTreeIter iter; - - /* hide ourselves always */ - if (!strcmp(ep->id, "org.gnome.evolution.plugin.manager")) - continue; - - gtk_list_store_append(m->model, &iter); - gtk_list_store_set(m->model, &iter, - 0, ep->name?ep->name:ep->id, - 1, ep->enabled, - 2, ep, - -1); - } - gtk_tree_view_set_model(m->tree, (GtkTreeModel *)m->model); - atk_object_set_name (gtk_widget_get_accessible ((GtkWidget *)m->tree), _("Plugin")); + atk_object_set_name (gtk_widget_get_accessible ((GtkWidget *)m->treeview), _("Plugin")); g_object_set_data_full((GObject *)m->dialog, "plugin-manager", m, eppm_free); g_signal_connect(m->dialog, "response", G_CALLBACK(eppm_response), m); |