aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-19 10:28:35 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-19 10:28:35 +0000
commitb84c058044817307ab28914ba0c1fd7ab3f4aa7a (patch)
treede245aa65de18235ebacb6b1da0cab17539eca8d /src
parentd244531e0fa069d5962b12246c850824b85a8661 (diff)
improved the interface of summary search.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@271 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/summary_search.c250
1 files changed, 161 insertions, 89 deletions
diff --git a/src/summary_search.c b/src/summary_search.c
index ed19ff47..27cf7400 100644
--- a/src/summary_search.c
+++ b/src/summary_search.c
@@ -56,55 +56,93 @@
#include "manage_window.h"
#include "alertpanel.h"
-static GtkWidget *window;
-static GtkWidget *bool_optmenu;
-static GtkWidget *from_entry;
-static GtkWidget *to_entry;
-static GtkWidget *subject_entry;
-static GtkWidget *body_entry;
-static GtkWidget *case_checkbtn;
-static GtkWidget *backward_checkbtn;
-static GtkWidget *all_checkbtn;
-static GtkWidget *search_btn;
-static GtkWidget *clear_btn;
-static GtkWidget *close_btn;
-
-static void summary_search_create(SummaryView *summaryview);
-static void summary_search_execute(GtkButton *button, gpointer data);
-static void summary_search_clear(GtkButton *button, gpointer data);
-static void from_activated(void);
-static void to_activated(void);
-static void subject_activated(void);
-static void body_activated(void);
-static void all_clicked(GtkButton *button);
-static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
- gpointer data);
+static struct SummarySearchWindow {
+ GtkWidget *window;
+
+ GtkWidget *bool_optmenu;
+
+ GtkWidget *from_entry;
+ GtkWidget *to_entry;
+ GtkWidget *subject_entry;
+ GtkWidget *body_entry;
+
+ GtkWidget *case_checkbtn;
+
+ GtkWidget *clear_btn;
+ GtkWidget *all_btn;
+ GtkWidget *prev_btn;
+ GtkWidget *next_btn;
+ GtkWidget *close_btn;
+
+ SummaryView *summaryview;
+} search_window;
+
+static void summary_search_create (void);
+
+static void summary_search_execute (gboolean backward,
+ gboolean search_all);
+
+static void summary_search_clear (GtkButton *button,
+ gpointer data);
+static void summary_search_prev_clicked (GtkButton *button,
+ gpointer data);
+static void summary_search_next_clicked (GtkButton *button,
+ gpointer data);
+static void summary_search_all_clicked (GtkButton *button,
+ gpointer data);
+
+static void from_activated (void);
+static void to_activated (void);
+static void subject_activated (void);
+static void body_activated (void);
+
+static gboolean key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
void summary_search(SummaryView *summaryview)
{
- if (!window)
- summary_search_create(summaryview);
+ if (!search_window.window)
+ summary_search_create();
else
- gtk_widget_hide(window);
+ gtk_widget_hide(search_window.window);
- gtk_widget_grab_focus(search_btn);
- gtk_widget_grab_focus(subject_entry);
- gtk_widget_show(window);
+ search_window.summaryview = summaryview;
+
+ gtk_widget_grab_focus(search_window.next_btn);
+ gtk_widget_grab_focus(search_window.subject_entry);
+ gtk_widget_show(search_window.window);
}
-static void summary_search_create(SummaryView *summaryview)
+static void summary_search_create(void)
{
+ GtkWidget *window;
GtkWidget *vbox1;
GtkWidget *bool_hbox;
+ GtkWidget *bool_optmenu;
GtkWidget *bool_menu;
GtkWidget *menuitem;
+ GtkWidget *clear_btn;
+
GtkWidget *table1;
GtkWidget *from_label;
+ GtkWidget *from_entry;
GtkWidget *to_label;
+ GtkWidget *to_entry;
GtkWidget *subject_label;
+ GtkWidget *subject_entry;
GtkWidget *body_label;
+ GtkWidget *body_entry;
+
GtkWidget *checkbtn_hbox;
+ GtkWidget *case_checkbtn;
+
GtkWidget *confirm_area;
+ GtkWidget *all_btn;
+ GtkWidget *prev_btn;
+ GtkWidget *next_btn;
+ GtkWidget *close_btn;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW (window), _("Search messages"));
@@ -134,6 +172,10 @@ static void summary_search_create(SummaryView *summaryview)
MENUITEM_ADD(bool_menu, menuitem, _("Match all of the following"), 1);
gtk_option_menu_set_menu(GTK_OPTION_MENU(bool_optmenu), bool_menu);
+ clear_btn = gtk_button_new_from_stock(GTK_STOCK_CLEAR);
+ gtk_widget_show(clear_btn);
+ gtk_box_pack_end(GTK_BOX(bool_hbox), clear_btn, FALSE, FALSE, 0);
+
table1 = gtk_table_new (4, 3, FALSE);
gtk_widget_show (table1);
gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);
@@ -146,28 +188,28 @@ static void summary_search_create(SummaryView *summaryview)
gtk_table_attach (GTK_TABLE (table1), from_entry, 1, 3, 0, 1,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(from_entry), "activate",
- G_CALLBACK(from_activated), summaryview);
+ G_CALLBACK(from_activated), NULL);
to_entry = gtk_entry_new ();
gtk_widget_show (to_entry);
gtk_table_attach (GTK_TABLE (table1), to_entry, 1, 3, 1, 2,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(to_entry), "activate",
- G_CALLBACK(to_activated), summaryview);
+ G_CALLBACK(to_activated), NULL);
subject_entry = gtk_entry_new ();
gtk_widget_show (subject_entry);
gtk_table_attach (GTK_TABLE (table1), subject_entry, 1, 3, 2, 3,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(subject_entry), "activate",
- G_CALLBACK(subject_activated), summaryview);
+ G_CALLBACK(subject_activated), NULL);
body_entry = gtk_entry_new ();
gtk_widget_show (body_entry);
gtk_table_attach (GTK_TABLE (table1), body_entry, 1, 3, 3, 4,
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(body_entry), "activate",
- G_CALLBACK(body_activated), summaryview);
+ G_CALLBACK(body_activated), NULL);
from_label = gtk_label_new (_("From:"));
gtk_widget_show (from_label);
@@ -207,49 +249,71 @@ static void summary_search_create(SummaryView *summaryview)
gtk_box_pack_start (GTK_BOX (checkbtn_hbox), case_checkbtn,
FALSE, FALSE, 0);
- backward_checkbtn =
- gtk_check_button_new_with_label (_("Backward search"));
- gtk_widget_show (backward_checkbtn);
- gtk_box_pack_start (GTK_BOX (checkbtn_hbox), backward_checkbtn,
- FALSE, FALSE, 0);
-
- all_checkbtn =
- gtk_check_button_new_with_label (_("Select all matched"));
- gtk_widget_show (all_checkbtn);
- gtk_box_pack_start (GTK_BOX (checkbtn_hbox), all_checkbtn,
- FALSE, FALSE, 0);
- g_signal_connect(G_OBJECT(all_checkbtn), "clicked",
- G_CALLBACK(all_clicked), summaryview);
-
- gtkut_stock_button_set_create(&confirm_area,
- &search_btn, GTK_STOCK_FIND,
- &clear_btn, GTK_STOCK_CLEAR,
- &close_btn, GTK_STOCK_CLOSE);
+ confirm_area = gtk_hbutton_box_new();
gtk_widget_show (confirm_area);
+ gtk_button_box_set_layout(GTK_BUTTON_BOX(confirm_area),
+ GTK_BUTTONBOX_END);
+ gtk_box_set_spacing(GTK_BOX(confirm_area), 5);
+
+ all_btn = gtk_button_new_from_stock(_("Find all"));
+ GTK_WIDGET_SET_FLAGS(all_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(confirm_area), all_btn, TRUE, TRUE, 0);
+ gtk_widget_show(all_btn);
+
+ prev_btn = gtk_button_new_from_stock(GTK_STOCK_GO_BACK);
+ GTK_WIDGET_SET_FLAGS(prev_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(confirm_area), prev_btn, TRUE, TRUE, 0);
+ gtk_widget_show(prev_btn);
+
+ next_btn = gtk_button_new_from_stock(GTK_STOCK_GO_FORWARD);
+ GTK_WIDGET_SET_FLAGS(next_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(confirm_area), next_btn, TRUE, TRUE, 0);
+ gtk_widget_show(next_btn);
+
+ close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+ GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT);
+ gtk_box_pack_start(GTK_BOX(confirm_area), close_btn, TRUE, TRUE, 0);
+ gtk_widget_show(close_btn);
+
gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0);
- gtk_widget_grab_default(search_btn);
+ gtk_widget_grab_default(next_btn);
- g_signal_connect(G_OBJECT(search_btn), "clicked",
- G_CALLBACK(summary_search_execute), summaryview);
g_signal_connect(G_OBJECT(clear_btn), "clicked",
- G_CALLBACK(summary_search_clear), summaryview);
+ G_CALLBACK(summary_search_clear), NULL);
+ g_signal_connect(G_OBJECT(all_btn), "clicked",
+ G_CALLBACK(summary_search_all_clicked), NULL);
+ g_signal_connect(G_OBJECT(prev_btn), "clicked",
+ G_CALLBACK(summary_search_prev_clicked), NULL);
+ g_signal_connect(G_OBJECT(next_btn), "clicked",
+ G_CALLBACK(summary_search_next_clicked), NULL);
g_signal_connect_closure
(G_OBJECT(close_btn), "clicked",
g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide),
window, NULL),
FALSE);
+
+ search_window.window = window;
+ search_window.bool_optmenu = bool_optmenu;
+ search_window.from_entry = from_entry;
+ search_window.to_entry = to_entry;
+ search_window.subject_entry = subject_entry;
+ search_window.body_entry = body_entry;
+ search_window.case_checkbtn = case_checkbtn;
+ search_window.clear_btn = clear_btn;
+ search_window.all_btn = all_btn;
+ search_window.prev_btn = prev_btn;
+ search_window.next_btn = next_btn;
+ search_window.close_btn = close_btn;
}
-static void summary_search_execute(GtkButton *button, gpointer data)
+static void summary_search_execute(gboolean backward, gboolean search_all)
{
- SummaryView *summaryview = data;
+ SummaryView *summaryview = search_window.summaryview;
GtkTreeModel *model;
GtkTreeIter iter;
MsgInfo *msginfo;
gboolean bool_and;
gboolean case_sens;
- gboolean backward;
- gboolean search_all;
gboolean all_searched = FALSE;
gboolean matched;
gboolean body_matched;
@@ -263,23 +327,19 @@ static void summary_search_execute(GtkButton *button, gpointer data)
model = GTK_TREE_MODEL(summaryview->store);
bool_and = menu_get_option_menu_active_index
- (GTK_OPTION_MENU(bool_optmenu));
+ (GTK_OPTION_MENU(search_window.bool_optmenu));
case_sens = gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON(case_checkbtn));
- backward = gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON(backward_checkbtn));
- search_all = gtk_toggle_button_get_active
- (GTK_TOGGLE_BUTTON(all_checkbtn));
+ (GTK_TOGGLE_BUTTON(search_window.case_checkbtn));
if (case_sens)
str_find_func = str_find;
else
str_find_func = str_case_find;
- from_str = gtk_entry_get_text(GTK_ENTRY(from_entry));
- to_str = gtk_entry_get_text(GTK_ENTRY(to_entry));
- subject_str = gtk_entry_get_text(GTK_ENTRY(subject_entry));
- body_str = gtk_entry_get_text(GTK_ENTRY(body_entry));
+ from_str = gtk_entry_get_text(GTK_ENTRY(search_window.from_entry));
+ to_str = gtk_entry_get_text(GTK_ENTRY(search_window.to_entry));
+ subject_str = gtk_entry_get_text(GTK_ENTRY(search_window.subject_entry));
+ body_str = gtk_entry_get_text(GTK_ENTRY(search_window.body_entry));
if (search_all) {
summary_unselect_all(summaryview);
@@ -287,7 +347,7 @@ static void summary_search_execute(GtkButton *button, gpointer data)
backward = FALSE;
} else if (!summaryview->selected) {
if (backward)
- valid = gtkut_tree_model_get_iter_last(model, &iter);
+ valid = gtkut_tree_model_get_iter_last(model, &iter);
else
valid = gtk_tree_model_get_iter_first(model, &iter);
if (!valid) {
@@ -343,7 +403,8 @@ static void summary_search_execute(GtkButton *button, gpointer data)
valid = gtk_tree_model_get_iter_first
(model, &iter);
all_searched = TRUE;
- manage_window_focus_in(window, NULL, NULL);
+ manage_window_focus_in(search_window.window,
+ NULL, NULL);
} else
break;
}
@@ -441,44 +502,55 @@ static void summary_search_execute(GtkButton *button, gpointer data)
static void summary_search_clear(GtkButton *button, gpointer data)
{
- gtk_editable_delete_text(GTK_EDITABLE(from_entry), 0, -1);
- gtk_editable_delete_text(GTK_EDITABLE(to_entry), 0, -1);
- gtk_editable_delete_text(GTK_EDITABLE(subject_entry), 0, -1);
- gtk_editable_delete_text(GTK_EDITABLE(body_entry), 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(search_window.from_entry),
+ 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(search_window.to_entry),
+ 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(search_window.subject_entry),
+ 0, -1);
+ gtk_editable_delete_text(GTK_EDITABLE(search_window.body_entry),
+ 0, -1);
+}
+
+static void summary_search_prev_clicked(GtkButton *button, gpointer data)
+{
+ summary_search_execute(TRUE, FALSE);
+}
+
+static void summary_search_next_clicked(GtkButton *button, gpointer data)
+{
+ summary_search_execute(FALSE, FALSE);
+}
+
+static void summary_search_all_clicked(GtkButton *button, gpointer data)
+{
+ summary_search_execute(FALSE, TRUE);
}
static void from_activated(void)
{
- gtk_widget_grab_focus(to_entry);
+ gtk_widget_grab_focus(search_window.to_entry);
}
static void to_activated(void)
{
- gtk_widget_grab_focus(subject_entry);
+ gtk_widget_grab_focus(search_window.subject_entry);
}
static void subject_activated(void)
{
- gtk_button_clicked(GTK_BUTTON(search_btn));
+ gtk_button_clicked(GTK_BUTTON(search_window.next_btn));
}
static void body_activated(void)
{
- gtk_button_clicked(GTK_BUTTON(search_btn));
-}
-
-static void all_clicked(GtkButton *button)
-{
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
- gtk_widget_set_sensitive(backward_checkbtn, FALSE);
- else
- gtk_widget_set_sensitive(backward_checkbtn, TRUE);
+ gtk_button_clicked(GTK_BUTTON(search_window.next_btn));
}
static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
gpointer data)
{
if (event && event->keyval == GDK_Escape)
- gtk_widget_hide(window);
+ gtk_widget_hide(search_window.window);
return FALSE;
}