aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2012-07-09 20:32:25 +0800
committerMilan Crha <mcrha@redhat.com>2012-07-09 20:33:54 +0800
commitec1e0144581bd14d1993b7bf0a1e423d2092f463 (patch)
tree520057b6d608fc047d72916b654f2a7a617debdc
parent9b3789fa9a0135018cb1bd7024f08116e4ff2ef4 (diff)
downloadgsoc2013-evolution-ec1e0144581bd14d1993b7bf0a1e423d2092f463.tar.gz
gsoc2013-evolution-ec1e0144581bd14d1993b7bf0a1e423d2092f463.tar.zst
gsoc2013-evolution-ec1e0144581bd14d1993b7bf0a1e423d2092f463.zip
Bug #524737 - Replace radio buttons in Search folder editor
-rw-r--r--mail/em-vfolder-editor-rule.c185
-rw-r--r--mail/mail-dialogs.ui211
2 files changed, 108 insertions, 288 deletions
diff --git a/mail/em-vfolder-editor-rule.c b/mail/em-vfolder-editor-rule.c
index 32e6310bab..c5473a5a94 100644
--- a/mail/em-vfolder-editor-rule.c
+++ b/mail/em-vfolder-editor-rule.c
@@ -213,18 +213,7 @@ struct _source_data {
GtkListStore *model;
GtkTreeView *list;
GtkWidget *source_selector;
- GtkButton *buttons[BUTTON_LAST];
-};
-
-static void source_add (GtkWidget *widget, struct _source_data *data);
-static void source_remove (GtkWidget *widget, struct _source_data *data);
-
-static struct {
- const gchar *name;
- GCallback func;
-} edit_buttons[] = {
- { "source_add", G_CALLBACK(source_add) },
- { "source_remove", G_CALLBACK(source_remove)},
+ GtkWidget *buttons[BUTTON_LAST];
};
static void
@@ -252,24 +241,15 @@ static void
select_source_with_changed (GtkWidget *widget,
struct _source_data *data)
{
- em_vfolder_rule_with_t with = 0;
- GSList *group = NULL;
- gint i = 0;
-
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
- return;
-
- group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
-
- for (i = 0; i< g_slist_length (group); i++) {
- if (g_slist_nth_data (group, with = i) == widget)
- break;
- }
+ em_vfolder_rule_with_t with;
- if (with > EM_VFOLDER_RULE_WITH_LOCAL )
+ with = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
+ if (with > EM_VFOLDER_RULE_WITH_LOCAL)
with = 0;
- gtk_widget_set_sensitive (data->source_selector, !with );
+ with = 3 - with;
+
+ gtk_widget_set_sensitive (data->source_selector, !with);
data->vr->with = with;
}
@@ -461,17 +441,16 @@ static GtkWidget *
get_widget (EFilterRule *fr,
ERuleContext *rc)
{
- EMVFolderRule *vr =(EMVFolderRule *) fr;
+ EMVFolderRule *vr = (EMVFolderRule *) fr;
EMailSession *session;
- GtkWidget *widget, *frame;
+ GtkWidget *widget, *frame, *label, *combobox, *hgrid, *vgrid, *tree_view, *scrolled_window;
+ GtkListStore *model;
+ GtkCellRenderer *renderer;
struct _source_data *data;
- GtkRadioButton *rb;
const gchar *source;
+ gchar *tmp;
GtkTreeIter iter;
GtkTreeSelection *selection;
- GtkBuilder *builder;
- GObject *object;
- gint i;
widget = E_FILTER_RULE_CLASS (em_vfolder_editor_rule_parent_class)->
get_widget (fr, rc);
@@ -480,25 +459,96 @@ get_widget (EFilterRule *fr,
data->rc = rc;
data->vr = vr;
- builder = gtk_builder_new ();
- e_load_ui_builder_definition (builder, "mail-dialogs.ui");
-
- frame = e_builder_get_widget(builder, "vfolder_source_frame");
-
- g_object_set_data_full((GObject *)frame, "data", data, g_free);
-
- for (i = 0; i < BUTTON_LAST; i++) {
- data->buttons[i] =(GtkButton *)
- e_builder_get_widget (builder, edit_buttons[i].name);
- g_signal_connect (
- data->buttons[i], "clicked",
- edit_buttons[i].func, data);
- }
-
- object = gtk_builder_get_object (builder, "source_list");
- data->list = GTK_TREE_VIEW (object);
- object = gtk_builder_get_object (builder, "source_model");
- data->model = GTK_LIST_STORE (object);
+ frame = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (frame), GTK_ORIENTATION_VERTICAL);
+ gtk_grid_set_row_spacing (GTK_GRID (frame), 6);
+
+ g_object_set_data_full (G_OBJECT (frame), "data", data, g_free);
+
+ tmp = g_strdup_printf ("<b>%s</b>", _("Search Folder Sources"));
+ label = gtk_label_new (tmp);
+ g_free (tmp);
+ g_object_set (G_OBJECT (label),
+ "use-markup", TRUE,
+ "xalign", 0.0,
+ NULL);
+
+ gtk_container_add (GTK_CONTAINER (frame), label);
+
+ hgrid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (hgrid), GTK_ORIENTATION_HORIZONTAL);
+ gtk_container_add (GTK_CONTAINER (frame), hgrid);
+
+ label = gtk_label_new (" ");
+ gtk_container_add (GTK_CONTAINER (hgrid), label);
+
+ vgrid = gtk_grid_new ();
+ g_object_set (G_OBJECT (vgrid),
+ "orientation", GTK_ORIENTATION_VERTICAL,
+ "border-width", 6,
+ "row-spacing", 6,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (hgrid), vgrid);
+
+ hgrid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (hgrid), GTK_ORIENTATION_HORIZONTAL);
+ gtk_grid_set_column_spacing (GTK_GRID (hgrid), 6);
+ gtk_container_add (GTK_CONTAINER (vgrid), hgrid);
+
+ combobox = gtk_combo_box_text_new ();
+ gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combobox), NULL, _("All local folders"));
+ gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combobox), NULL, _("All active remote folders"));
+ gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combobox), NULL, _("All local and active remote folders"));
+ gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combobox), NULL, _("Specific folders"));
+ gtk_container_add (GTK_CONTAINER (hgrid), combobox);
+
+ hgrid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (hgrid), GTK_ORIENTATION_HORIZONTAL);
+ gtk_grid_set_column_spacing (GTK_GRID (hgrid), 6);
+ gtk_container_add (GTK_CONTAINER (vgrid), hgrid);
+
+ scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ g_object_set (G_OBJECT (scrolled_window),
+ "hscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ "shadow-type", GTK_SHADOW_IN,
+ "halign", GTK_ALIGN_FILL,
+ "hexpand", TRUE,
+ "valign", GTK_ALIGN_FILL,
+ "vexpand", TRUE,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (hgrid), scrolled_window);
+
+ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ renderer = gtk_cell_renderer_text_new ();
+ tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ -1, "column", renderer, "markup", 0, NULL);
+
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), tree_view);
+
+ vgrid = gtk_grid_new ();
+ g_object_set (G_OBJECT (vgrid),
+ "orientation", GTK_ORIENTATION_VERTICAL,
+ "border-width", 6,
+ "row-spacing", 6,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (hgrid), vgrid);
+
+ data->buttons[BUTTON_ADD] = gtk_button_new_from_stock (GTK_STOCK_ADD);
+ g_signal_connect (data->buttons[BUTTON_ADD], "clicked",
+ G_CALLBACK (source_add), data);
+
+ data->buttons[BUTTON_REMOVE] = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+ g_signal_connect (data->buttons[BUTTON_REMOVE], "clicked",
+ G_CALLBACK (source_remove), data);
+
+ gtk_container_add (GTK_CONTAINER (vgrid), data->buttons[BUTTON_ADD]);
+ gtk_container_add (GTK_CONTAINER (vgrid), data->buttons[BUTTON_REMOVE]);
+
+ data->list = GTK_TREE_VIEW (tree_view);
+ data->model = model;
session = em_vfolder_editor_context_get_session (EM_VFOLDER_EDITOR_CONTEXT (rc));
@@ -521,40 +571,21 @@ get_widget (EFilterRule *fr,
selection, "changed",
G_CALLBACK (selection_changed_cb), data);
- rb = (GtkRadioButton *)e_builder_get_widget (builder, "local_rb");
- g_signal_connect (
- rb, "toggled",
- G_CALLBACK (select_source_with_changed), data);
+ data->source_selector = hgrid;
- rb = (GtkRadioButton *)e_builder_get_widget (builder, "remote_rb");
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 3 - vr->with);
g_signal_connect (
- rb, "toggled",
+ combobox, "changed",
G_CALLBACK (select_source_with_changed), data);
-
- rb = (GtkRadioButton *)e_builder_get_widget (builder, "local_and_remote_rb");
- g_signal_connect (
- rb, "toggled",
- G_CALLBACK (select_source_with_changed), data);
-
- rb = (GtkRadioButton *) e_builder_get_widget (builder, "specific_rb");
- g_signal_connect (
- rb, "toggled",
- G_CALLBACK (select_source_with_changed), data);
-
- data->source_selector = (GtkWidget *)
- e_builder_get_widget (builder, "source_selector");
-
- rb = g_slist_nth_data (gtk_radio_button_get_group (rb), vr->with);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb), TRUE);
- g_signal_emit_by_name (rb, "toggled");
+ select_source_with_changed (combobox, data);
set_sensitive (data);
gtk_widget_set_valign (frame, GTK_ALIGN_FILL);
gtk_widget_set_vexpand (frame, TRUE);
- gtk_container_add (GTK_CONTAINER (widget), frame);
+ gtk_widget_show_all (frame);
- g_object_unref (builder);
+ gtk_container_add (GTK_CONTAINER (widget), frame);
return widget;
}
diff --git a/mail/mail-dialogs.ui b/mail/mail-dialogs.ui
index 147490690b..64f5cfa93f 100644
--- a/mail/mail-dialogs.ui
+++ b/mail/mail-dialogs.ui
@@ -2,209 +2,6 @@
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkVBox" id="vfolder_source_frame">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Search Folder Sources</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox9">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label14">
- <property name="visible">True</property>
- <property name="label"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox5">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkRadioButton" id="local_rb">
- <property name="label" translatable="yes">All local folders</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="remote_rb">
- <property name="label" translatable="yes">All active remote folders</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">local_rb</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="local_and_remote_rb">
- <property name="label" translatable="yes">All local and active remote folders</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">local_rb</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="specific_rb">
- <property name="label" translatable="yes">Specific folders</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">local_rb</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="source_selector">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkScrolledWindow" id="source_scrolled_window">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="source_list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="model">source_model</property>
- <property name="headers_visible">False</property>
- <child>
- <object class="GtkTreeViewColumn" id="source_column">
- <property name="title">column</property>
- <child>
- <object class="GtkCellRendererText" id="source_renderer"/>
- <attributes>
- <attribute name="markup">0</attribute>
- </attributes>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="spacing">1</property>
- <child>
- <object class="GtkVButtonBox" id="vbuttonbox3">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkButton" id="source_add">
- <property name="label">gtk-add</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="source_remove">
- <property name="label">gtk-remove</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">4</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
<object class="GtkVBox" id="toplevel">
<property name="visible">True</property>
<property name="border_width">6</property>
@@ -412,14 +209,6 @@ Please select a follow up action from the "Flag" menu.</property>
</row>
</data>
</object>
- <object class="GtkListStore" id="source_model">
- <columns>
- <!-- column-name Translated -->
- <column type="gchararray"/>
- <!-- column-name Raw -->
- <column type="gchararray"/>
- </columns>
- </object>
<object class="GtkDialog" id="license_dialog">
<property name="title" translatable="yes">License Agreement</property>
<property name="type_hint">dialog</property>