Added replace, added highlighting

This commit is contained in:
Jesse van den Kieboom 2006-01-02 17:44:18 +00:00
parent 8939311dea
commit e2d9ce8046
1 changed files with 102 additions and 0 deletions

View File

@ -44,6 +44,8 @@ void on_gm_world_view_world_state_changing(GmWorld *world, guint state,
GmWorldView *view);
void on_gm_world_view_world_active_changed(GmWorld *world, gboolean active,
GmWorldView *view);
void on_gm_world_view_world_highlight(GmWorld *world, gint start, gint end,
gchar *color, GmWorldView *view);
void on_gm_world_view_world_editor_added(GmWorld *world, GmEditor *editor,
GmWorldView *view);
@ -119,6 +121,8 @@ gm_world_view_finalize(GObject *object) {
G_CALLBACK(on_gm_world_view_world_state_changing), view);
g_signal_handlers_disconnect_by_func(view->priv->world,
G_CALLBACK(on_gm_world_view_world_active_changed), view);
g_signal_handlers_disconnect_by_func(view->priv->world,
G_CALLBACK(on_gm_world_view_world_highlight), view);
g_signal_handlers_disconnect_by_func(view->priv->world,
G_CALLBACK(on_gm_world_view_world_editor_added), view);
g_signal_handlers_disconnect_by_func(view->priv->world,
@ -379,6 +383,9 @@ gm_world_view_new(GmWorld *world) {
G_CALLBACK(on_gm_world_view_world_state_changing), view);
g_signal_connect(world, "active_changed",
G_CALLBACK(on_gm_world_view_world_active_changed), view);
g_signal_connect(world, "highlight",
G_CALLBACK(on_gm_world_view_world_highlight), view);
g_signal_connect(world, "editor_added",
G_CALLBACK(on_gm_world_view_world_editor_added), view);
g_signal_connect(world, "editor_removed",
@ -488,6 +495,80 @@ gm_world_view_find_next(GmWorldView *view, const gchar *str,
return FALSE;
}
gboolean
gm_world_view_replace(GmWorldView *view, gchar const *replace) {
gint np = gtk_notebook_get_current_page(GTK_NOTEBOOK(view));
GtkWidget *page;
GmSearchable *sea;
if (np == 0) {
return FALSE;
} else {
page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(view), np);
if (GM_IS_SEARCHABLE(page)) {
sea = GM_SEARCHABLE(page);
if (gm_searchable_can_replace(sea)) {
return gm_searchable_replace(sea, replace);
}
}
}
return FALSE;
}
gboolean
gm_world_view_replace_all(GmWorldView *view, gchar const *str,
gchar const *replace, GmSearchableSearchFlags flags) {
gint np = gtk_notebook_get_current_page(GTK_NOTEBOOK(view));
GtkWidget *page;
GmSearchable *sea;
if (np == 0) {
return FALSE;
} else {
page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(view), np);
if (GM_IS_SEARCHABLE(page)) {
sea = GM_SEARCHABLE(page);
if (gm_searchable_can_replace(sea)) {
return gm_searchable_replace_all(sea, str, replace, flags);
}
}
}
return FALSE;
}
gboolean
gm_world_view_can_replace(GmWorldView *view) {
gint np = gtk_notebook_get_current_page(GTK_NOTEBOOK(view));
return gm_world_view_page_can_replace(view, np);
}
gboolean
gm_world_view_page_can_replace(GmWorldView *view, gint page_num) {
GtkWidget *page;
GmSearchable *sea;
if (page_num == -1) {
return FALSE;
} else if (page_num == 0) {
return gm_searchable_can_replace(GM_SEARCHABLE(view));
} else {
page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(view), page_num);
if (GM_IS_SEARCHABLE(page)) {
sea = GM_SEARCHABLE(page);
return gm_searchable_can_replace(sea);
}
}
return FALSE;
}
GmWorld *
gm_world_view_world(GmWorldView *view) {
return view->priv->world;
@ -738,6 +819,27 @@ on_gm_world_view_world_active_changed(GmWorld *world, gboolean active,
}
}
void
on_gm_world_view_world_highlight(GmWorld *world, gint start, gint end,
gchar *color, GmWorldView *view) {
GtkTextIter istart, iend;
GtkTextBuffer *buffer = gtk_text_view_get_buffer(
GTK_TEXT_VIEW(view->priv->text_view_world));
gtk_text_buffer_get_end_iter(buffer, &iend);
istart = iend;
gtk_text_iter_backward_line(&istart);
if (start != -1) {
gtk_text_iter_forward_chars(&istart, start);
iend = istart;
gtk_text_iter_forward_chars(&iend, end);
}
gtk_text_buffer_apply_tag_by_name(buffer, color, &istart, &iend);
}
gboolean on_gm_world_view_world_text_view_scroll_event(GmWorldView *view,
GdkEventScroll *event, GmWorldTextView *text) {
if (event->state & GDK_CONTROL_MASK) {