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