Added replace, added highlighting
This commit is contained in:
parent
8939311dea
commit
e2d9ce8046
|
@ -44,6 +44,8 @@ void on_gm_world_view_world_state_changing(GmWorld *world, guint state,
|
||||||
GmWorldView *view);
|
GmWorldView *view);
|
||||||
void on_gm_world_view_world_active_changed(GmWorld *world, gboolean active,
|
void on_gm_world_view_world_active_changed(GmWorld *world, gboolean active,
|
||||||
GmWorldView *view);
|
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,
|
void on_gm_world_view_world_editor_added(GmWorld *world, GmEditor *editor,
|
||||||
GmWorldView *view);
|
GmWorldView *view);
|
||||||
|
@ -119,6 +121,8 @@ gm_world_view_finalize(GObject *object) {
|
||||||
G_CALLBACK(on_gm_world_view_world_state_changing), view);
|
G_CALLBACK(on_gm_world_view_world_state_changing), view);
|
||||||
g_signal_handlers_disconnect_by_func(view->priv->world,
|
g_signal_handlers_disconnect_by_func(view->priv->world,
|
||||||
G_CALLBACK(on_gm_world_view_world_active_changed), view);
|
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_signal_handlers_disconnect_by_func(view->priv->world,
|
||||||
G_CALLBACK(on_gm_world_view_world_editor_added), view);
|
G_CALLBACK(on_gm_world_view_world_editor_added), view);
|
||||||
g_signal_handlers_disconnect_by_func(view->priv->world,
|
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_CALLBACK(on_gm_world_view_world_state_changing), view);
|
||||||
g_signal_connect(world, "active_changed",
|
g_signal_connect(world, "active_changed",
|
||||||
G_CALLBACK(on_gm_world_view_world_active_changed), view);
|
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_signal_connect(world, "editor_added",
|
||||||
G_CALLBACK(on_gm_world_view_world_editor_added), view);
|
G_CALLBACK(on_gm_world_view_world_editor_added), view);
|
||||||
g_signal_connect(world, "editor_removed",
|
g_signal_connect(world, "editor_removed",
|
||||||
|
@ -488,6 +495,80 @@ gm_world_view_find_next(GmWorldView *view, const gchar *str,
|
||||||
return FALSE;
|
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 *
|
GmWorld *
|
||||||
gm_world_view_world(GmWorldView *view) {
|
gm_world_view_world(GmWorldView *view) {
|
||||||
return view->priv->world;
|
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,
|
gboolean on_gm_world_view_world_text_view_scroll_event(GmWorldView *view,
|
||||||
GdkEventScroll *event, GmWorldTextView *text) {
|
GdkEventScroll *event, GmWorldTextView *text) {
|
||||||
if (event->state & GDK_CONTROL_MASK) {
|
if (event->state & GDK_CONTROL_MASK) {
|
||||||
|
|
Reference in New Issue