00001 #include <gtk/gtk.h> 00002 #include<string.h> 00003 00004 extern GtkWidget *view; 00005 GtkWidget *text_view; 00007 GtkWidget *search_entry,*replace_entry; 00008 00012 void replace (GtkTextView *text_view, const gchar *text,const gchar *text1, GtkTextIter *iter) 00013 { 00014 GtkTextIter mstart, mend; 00015 GtkTextBuffer *buffer; 00016 gboolean found; 00017 00018 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text_view)); 00019 found = gtk_text_iter_forward_search (iter, text, 0, &mstart, &mend, NULL); 00020 if (found) 00021 { 00022 gtk_text_buffer_select_range (buffer, &mstart, &mend); 00023 gtk_text_buffer_create_mark (buffer, "last_pos", &mend, FALSE); 00024 00025 int len=strlen(text1); 00026 gtk_text_buffer_delete(buffer,&mstart,&mend); 00027 gtk_text_buffer_insert(buffer,&mstart,text1,len); 00028 } 00029 } 00033 void replace_button_clicked(GtkWidget *replace_button) 00034 { 00035 GtkTextBuffer *buffer; 00036 GtkTextIter iter; 00037 00038 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); 00039 gtk_text_buffer_get_start_iter(buffer, &iter); 00040 00041 replace (GTK_TEXT_VIEW(text_view),(gchar *)gtk_entry_get_text((GtkEntry *)search_entry),(gchar *)gtk_entry_get_text((GtkEntry *)replace_entry),&iter); 00042 } 00043 00047 void text_find_replace(void) 00048 { 00049 GtkWidget *win; 00050 GtkWidget *vbox; 00051 GtkWidget *hbox; 00052 GtkWidget *search_button; 00053 GtkWidget *replace_button; 00054 00055 win = gtk_window_new (GTK_WINDOW_TOPLEVEL); 00056 00057 vbox = gtk_vbox_new (FALSE, 2); 00058 gtk_container_add (GTK_CONTAINER (win), vbox); 00059 00060 hbox = gtk_hbox_new (FALSE, 2); 00061 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); 00062 00063 text_view = view; 00064 00065 search_entry = gtk_entry_new(); 00066 replace_entry = gtk_entry_new(); 00067 00068 gtk_box_pack_start (GTK_BOX (hbox),search_entry, TRUE, TRUE, 0); 00069 gtk_box_pack_start (GTK_BOX (hbox),replace_entry, TRUE, TRUE, 0); 00070 00071 search_button = gtk_button_new_with_label ("Search"); 00072 gtk_box_pack_start (GTK_BOX (hbox), search_button, FALSE, FALSE, 0); 00073 g_signal_connect(G_OBJECT (search_button), "clicked",G_CALLBACK (search_button_clicked), NULL); 00074 00075 replace_button = gtk_button_new_with_label ("Replace"); 00076 gtk_box_pack_start (GTK_BOX (hbox), replace_button, FALSE, FALSE, 0); 00077 g_signal_connect (G_OBJECT (replace_button),"clicked",G_CALLBACK (replace_button_clicked), NULL); 00078 00079 gtk_widget_show_all(win); 00080 } 00081