00001 #include <gtk/gtk.h>
00002
00003 extern GtkWidget *view;
00004 GtkWidget *text_view;
00006 GtkWidget *search_entry;
00010 void find (GtkTextView *text_view, const gchar *text, GtkTextIter *iter)
00011 {
00012 GtkTextIter mstart, mend;
00013 GtkTextBuffer *buffer;
00014 gboolean found;
00015
00016 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text_view));
00017 found = gtk_text_iter_forward_search (iter, text, 0, &mstart, &mend, NULL);
00018
00019 if (found)
00020 {
00021 gtk_text_buffer_select_range (buffer, &mstart, &mend);
00022 gtk_text_buffer_create_mark (buffer, "last_pos", &mend, FALSE);
00023 }
00024 }
00028 void win_destroy (void)
00029 {
00030 gtk_main_quit();
00031 }
00032
00036 void next_button_clicked (GtkWidget *next_button)
00037 {
00038 const gchar *text;
00039 GtkTextBuffer *buffer;
00040 GtkTextMark *last_pos;
00041 GtkTextIter iter;
00042
00043 text = gtk_entry_get_text (GTK_ENTRY (search_entry));
00044 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text_view));
00045 last_pos = gtk_text_buffer_get_mark (buffer, "last_pos");
00046
00047 if (last_pos == NULL)
00048 {
00049 GtkWidget *window1;
00050 GtkWidget *label;
00051
00052 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
00053 gtk_window_set_title (GTK_WINDOW (window1), "Search");
00054 gtk_window_set_default_size(GTK_WINDOW(window1), 50, 300);
00055
00056
00057 label = gtk_label_new ("End of Search!!!! \n\n");
00058
00059 gtk_container_add (GTK_CONTAINER (window1), label);
00060
00061 gtk_widget_show_all (window1);
00062
00063 return;
00064
00065 }
00066
00067 gtk_text_buffer_get_iter_at_mark (buffer, &iter, last_pos);
00068 find (GTK_TEXT_VIEW (text_view),(gchar *)gtk_entry_get_text((GtkEntry *)search_entry), &iter);
00069 }
00070
00074 void search_button_clicked (GtkWidget *search_button)
00075 {
00076
00077 GtkTextBuffer *buffer;
00078 GtkTextIter iter;
00079
00080 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text_view));;
00081 gtk_text_buffer_get_start_iter(buffer, &iter);
00082
00083 find (GTK_TEXT_VIEW(text_view),(gchar *)gtk_entry_get_text((GtkEntry *)search_entry),&iter);
00084 }
00085
00089 void textfind(void)
00090 {
00091 GtkWidget *win;
00092 GtkWidget *vbox;
00093 GtkWidget *hbox;
00094 GtkWidget *search_button;
00095 GtkWidget *next_button;
00096
00097
00098 win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
00099
00100 vbox = gtk_vbox_new (FALSE, 2);
00101 gtk_container_add (GTK_CONTAINER (win), vbox);
00102
00103 hbox = gtk_hbox_new (FALSE, 2);
00104
00105 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
00106
00107 text_view = view;
00108 search_entry = gtk_entry_new();
00109
00110 gtk_box_pack_start (GTK_BOX (hbox),search_entry, TRUE, TRUE, 0);
00111
00112 search_button = gtk_button_new_with_label ("Search");
00113 gtk_box_pack_start (GTK_BOX (hbox), search_button, FALSE, FALSE, 0);
00114 g_signal_connect(G_OBJECT (search_button), "clicked",G_CALLBACK (search_button_clicked), NULL);
00115
00116 next_button = gtk_button_new_with_label ("Next");
00117 gtk_box_pack_start (GTK_BOX (hbox), next_button, FALSE, FALSE, 0);
00118 g_signal_connect (G_OBJECT (next_button), "clicked",G_CALLBACK (next_button_clicked), NULL);
00119
00120
00121
00122 gtk_widget_show_all(win);
00123 }