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);
|
||||
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) {
|
||||
|
|
Reference in New Issue