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 }