2 * Copyright (C) 1998 Peter Zelezny.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
25 #include <gtk/gtkentry.h>
26 #include <gtk/gtkhbox.h>
27 #include <gtk/gtkvbox.h>
28 #include <gtk/gtklabel.h>
29 #include <gtk/gtkstock.h>
30 #include <gtk/gtkhbbox.h>
31 #include <gtk/gtkhseparator.h>
32 #include <gtk/gtkvseparator.h>
33 #include <gtk/gtkradiobutton.h>
34 #include <gtk/gtktogglebutton.h>
35 #include <gdk/gdkkeysyms.h>
37 #include "../common/xchat.h"
38 #include "../common/fe.h"
39 #include "../common/util.h"
40 #include "../common/xchatc.h"
46 static textentry
*last
; /* our last search pos */
47 static int case_match
= 0;
48 static int search_backward
= 0;
52 search_search (session
* sess
, const gchar
*text
)
54 if (!is_session (sess
))
56 fe_message (_("The window you opened this Search "
57 "for doesn't exist anymore."), FE_MSG_ERROR
);
61 last
= gtk_xtext_search (GTK_XTEXT (sess
->gui
->xtext
), text
,
62 last
, case_match
, search_backward
);
64 fe_message (_("Search hit end, not found."), FE_MSG_ERROR
);
68 search_find_cb (GtkWidget
* button
, session
* sess
)
73 entry
= g_object_get_data (G_OBJECT (button
), "e");
74 text
= gtk_entry_get_text (entry
);
75 search_search (sess
, text
);
79 search_close_cb (GtkWidget
* button
, GtkWidget
* win
)
81 gtk_widget_destroy (win
);
85 search_entry_cb (GtkWidget
* entry
, session
* sess
)
87 search_search (sess
, gtk_entry_get_text (GTK_ENTRY (entry
)));
91 search_key_cb (GtkWidget
* window
, GdkEventKey
* key
, gpointer userdata
)
93 if (key
->keyval
== GDK_Escape
)
94 gtk_widget_destroy (window
);
99 search_caseign_cb (GtkToggleButton
* but
, session
* sess
)
101 case_match
= (but
->active
)? 1: 0;
105 search_dirbwd_cb (GtkToggleButton
* but
, session
* sess
)
107 search_backward
= (but
->active
)? 1: 0;
111 search_open (session
* sess
)
113 GtkWidget
*win
, *hbox
, *vbox
, *entry
, *wid
;
116 win
= mg_create_generic_tab ("search", _("XChat: Search"), TRUE
, FALSE
,
117 NULL
, NULL
, 0, 0, &vbox
, 0);
118 gtk_container_set_border_width (GTK_CONTAINER (win
), 12);
119 gtk_box_set_spacing (GTK_BOX (vbox
), 4);
121 hbox
= gtk_hbox_new (0, 10);
122 gtk_container_add (GTK_CONTAINER (vbox
), hbox
);
123 gtk_widget_show (hbox
);
125 gtkutil_label_new (_("Find:"), hbox
);
127 entry
= gtk_entry_new ();
128 g_signal_connect (G_OBJECT (entry
), "activate",
129 G_CALLBACK (search_entry_cb
), sess
);
130 gtk_container_add (GTK_CONTAINER (hbox
), entry
);
131 gtk_widget_show (entry
);
132 gtk_widget_grab_focus (entry
);
134 wid
= gtk_check_button_new_with_mnemonic (_("_Match case"));
135 GTK_TOGGLE_BUTTON (wid
)->active
= case_match
;
136 g_signal_connect (G_OBJECT (wid
), "toggled", G_CALLBACK (search_caseign_cb
), sess
);
137 gtk_container_add (GTK_CONTAINER (vbox
), wid
);
138 gtk_widget_show (wid
);
140 wid
= gtk_check_button_new_with_mnemonic (_("Search _backwards"));
141 GTK_TOGGLE_BUTTON (wid
)->active
= search_backward
;
142 g_signal_connect (G_OBJECT (wid
), "toggled", G_CALLBACK (search_dirbwd_cb
), sess
);
143 gtk_container_add (GTK_CONTAINER (vbox
), wid
);
144 gtk_widget_show (wid
);
146 hbox
= gtk_hbutton_box_new ();
147 gtk_box_pack_start (GTK_BOX (vbox
), hbox
, 0, 0, 4);
148 gtk_widget_show (hbox
);
150 gtkutil_button (hbox
, GTK_STOCK_CLOSE
, 0, search_close_cb
, win
,
152 wid
= gtkutil_button (hbox
, GTK_STOCK_FIND
, 0, search_find_cb
, sess
,
154 g_object_set_data (G_OBJECT (wid
), "e", entry
);
156 g_signal_connect (G_OBJECT (win
), "key-press-event", G_CALLBACK (search_key_cb
), win
);
158 gtk_widget_show (win
);