[anjal] Do most search using Evo.



commit 8b5d62509cf053294c2846a24fab290ba27d0284
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Fri May 15 23:27:22 2009 +0530

    Do most search using Evo.
---
 src/mail-search.c |  109 +++++++++++++++++++++++++++++++++++------------------
 src/mail-search.h |    4 +-
 2 files changed, 75 insertions(+), 38 deletions(-)

diff --git a/src/mail-search.c b/src/mail-search.c
index 1cbfbbc..7cd0795 100644
--- a/src/mail-search.c
+++ b/src/mail-search.c
@@ -29,9 +29,9 @@
 #include "mail-view.h"
 #include "mail-component.h"
 #include <gdk/gdkkeysyms.h>
-#include "misc/e-icon-entry.h"
-
+#include "misc/e-filter-bar.h"
 #include "mail-search.h"
+#include <camel/camel-search-private.h>
 
 enum {
 	SEARCH_ACTIVATE,
@@ -42,12 +42,7 @@ enum {
 static guint mail_search_signals[LAST_SIGNAL];
 
 struct  _MailSearchPrivate {
-	GtkWidget *entry;
-	GtkWidget *entry_box;
-	GtkWidget *icon_entry;
-
-	GtkWidget *clear_button;
-	GtkWidget *option_button;
+	EFilterBar *bar;
 };
 
 G_DEFINE_TYPE (MailSearch, mail_search, GTK_TYPE_HBOX)
@@ -94,46 +89,86 @@ mail_search_class_init (MailSearchClass *klass)
 	
 };
 
+static void
+mail_search_config_search(EFilterBar *efb, FilterRule *rule, int id, const char *query, void *data)
+{
+	GList *partl;
+	struct _camel_search_words *words;
+	int i;
+	GSList *strings = NULL;
+
+	/* we scan the parts of a rule, and set all the types we know about to the query string */
+	partl = rule->parts;
+	while (partl) {
+		FilterPart *part = partl->data;
+
+		if (!strcmp(part->name, "subject")) {
+			FilterInput *input = (FilterInput *)filter_part_find_element(part, "subject");
+			if (input)
+				filter_input_set_value(input, query);
+		} else if (!strcmp(part->name, "body")) {
+			FilterInput *input = (FilterInput *)filter_part_find_element(part, "word");
+			if (input)
+				filter_input_set_value(input, query);
+
+			words = camel_search_words_split((unsigned char *)query);
+			for (i=0;i<words->len;i++)
+				strings = g_slist_prepend(strings, g_strdup(words->words[i]->word));
+			camel_search_words_free (words);
+		} else if(!strcmp(part->name, "sender")) {
+			FilterInput *input = (FilterInput *)filter_part_find_element(part, "sender");
+			if (input)
+				filter_input_set_value(input, query);
+		} else if(!strcmp(part->name, "to")) {
+			FilterInput *input = (FilterInput *)filter_part_find_element(part, "recipient");
+			if (input)
+				filter_input_set_value(input, query);
+		}
+
+		partl = partl->next;
+	}
+
+	/*em_format_html_display_set_search(emfb->view.preview,
+					  EM_FORMAT_HTML_DISPLAY_SEARCH_SECONDARY|EM_FORMAT_HTML_DISPLAY_SEARCH_ICASE,
+					  strings);*/
+	while (strings) {
+		GSList *n = strings->next;
+		g_free(strings->data);
+		g_slist_free_1(strings);
+		strings = n;
+	}
+}
+
+static void
+mail_search_activate (EFilterBar *bar, MailSearch *search)
+{
+	char *word;
+	ESearchBar *esb = (ESearchBar *)bar;
+
+	g_object_get (esb, "query", &word, NULL);
+	
+	mail_view_set_search (search->view, word);
+}
+
 
 void
 mail_search_construct (MailSearch *search_bar)
 {
 	MailSearchPrivate *priv = search_bar->priv;
 	GtkWidget *tmp, *img, *box, *ar1, *ar2;
+	RuleContext *search_context = mail_component_peek_search_context (mail_component_peek ());
+	const char *systemrules = g_object_get_data (G_OBJECT (search_context), "system");
+	const char *userrules = g_object_get_data (G_OBJECT (search_context), "user");
+
+	priv->bar = e_filter_bar_lite_new (search_context, systemrules, userrules, mail_search_config_search, NULL);
 
 	gtk_box_set_spacing (GTK_BOX (search_bar), 3);
 	gtk_box_set_homogeneous (GTK_BOX (search_bar), FALSE);
 
-	priv->entry_box = gtk_hbox_new (0, FALSE);
-	priv->icon_entry = e_icon_entry_new ();
-	priv->entry = e_icon_entry_get_entry (E_ICON_ENTRY (priv->icon_entry));
-
-/*	g_signal_connect (priv->entry, "changed",
-			  G_CALLBACK (entry_changed_cb), search_bar);
-	g_signal_connect (priv->entry, "activate",
-			  G_CALLBACK (entry_activated_cb), search_bar);
-	g_signal_connect (priv->entry, "focus-in-event",
-			  G_CALLBACK (entry_focus_in_cb), search_bar);
-	g_signal_connect (priv->entry, "focus-out-event",
-			  G_CALLBACK (entry_focus_out_cb), search_bar);
-	g_signal_connect (priv->entry, "key-press-event",
-			  G_CALLBACK (entry_key_press_cb), search_bar);	
-*/
-	priv->clear_button = e_icon_entry_create_button ("gtk-clear");
-//	g_signal_connect (G_OBJECT (search_bar->clear_button), "button-press-event", G_CALLBACK(clear_button_clicked_cb), search_bar);
-	e_icon_entry_pack_widget (E_ICON_ENTRY (priv->icon_entry), priv->clear_button, FALSE);
-
-	priv->option_button = e_icon_entry_create_button ("gtk-find");
-//	g_signal_connect (G_OBJECT (search_bar->option_button), "button-press-event", G_CALLBACK(option_button_clicked_cb), search_bar);
-	e_icon_entry_pack_widget (E_ICON_ENTRY (priv->icon_entry), priv->option_button, TRUE);
-
-	gtk_box_pack_start (GTK_BOX(priv->entry_box), priv->icon_entry, TRUE, TRUE, 0);
-
-	gtk_widget_show_all (priv->entry_box);
-	gtk_widget_set_sensitive (priv->clear_button, FALSE);
-	gtk_box_pack_start(search_bar, priv->entry_box, TRUE, TRUE, 0);
-
+	gtk_box_pack_start (search_bar, priv->bar, TRUE, TRUE, 0);
+	gtk_widget_show(priv->bar);
 	gtk_widget_show (search_bar);
+	g_signal_connect (priv->bar, "search_activated", G_CALLBACK(mail_search_activate), search_bar);
 }
 
 MailSearch *
diff --git a/src/mail-search.h b/src/mail-search.h
index f715631..6ad9d74 100644
--- a/src/mail-search.h
+++ b/src/mail-search.h
@@ -26,6 +26,7 @@
 #include <gtk/gtk.h>
 #include "mail-component.h"
 #include "mail-view.h"
+#include "mail-shell.h"
 
 #define MAIL_SEARCH_TYPE        (mail_search_get_type ())
 #define MAIL_SEARCH(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), MAIL_SEARCH_TYPE, MailSearch))
@@ -38,7 +39,8 @@ typedef struct _MailSearchPrivate MailSearchPrivate;
 
 typedef struct _MailSearch {
 	GtkHBox parent;
-	
+	MailShell *shell;
+	MailView  *view;
 	MailSearchPrivate *priv;
 } MailSearch;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]