[gnome-builder/wip/chergert/grep: 7/15] grep: wire up hooks to create edit points
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/grep: 7/15] grep: wire up hooks to create edit points
- Date: Tue, 30 Oct 2018 20:40:51 +0000 (UTC)
commit 4ca88456236f89bcc22b39e9e00a1785c1d6ad70
Author: Christian Hergert <chergert redhat com>
Date: Fri Oct 26 19:57:02 2018 -0700
grep: wire up hooks to create edit points
src/plugins/grep/gbp-grep-model.c | 67 +++++++++++++++++++++++++++++++++++++++
src/plugins/grep/gbp-grep-model.h | 1 +
src/plugins/grep/gbp-grep-panel.c | 18 +++++++++++
3 files changed, 86 insertions(+)
---
diff --git a/src/plugins/grep/gbp-grep-model.c b/src/plugins/grep/gbp-grep-model.c
index 5bc14ef72..4f2ae2c27 100644
--- a/src/plugins/grep/gbp-grep-model.c
+++ b/src/plugins/grep/gbp-grep-model.c
@@ -882,3 +882,70 @@ tree_model_iface_init (GtkTreeModelIface *iface)
iface->iter_nth_child = gbp_grep_model_iter_nth_child;
iface->iter_parent = gbp_grep_model_iter_parent;
}
+
+static void
+gbp_grep_model_foreach_selected (GbpGrepModel *self,
+ void (*callback) (GbpGrepModel *self, guint index_, gpointer
user_data),
+ gpointer user_data)
+{
+ g_assert (GBP_IS_GREP_MODEL (self));
+ g_assert (callback != NULL);
+
+ if (self->index == NULL)
+ return;
+
+ if (self->mode == MODE_NONE)
+ {
+ GHashTableIter iter;
+ gpointer key;
+
+ g_hash_table_iter_init (&iter, self->toggled);
+ while (g_hash_table_iter_next (&iter, &key, NULL))
+ callback (self, GPOINTER_TO_UINT (key), user_data);
+ }
+ else if (self->mode == MODE_ALL)
+ {
+ for (guint i = 0; i < self->index->rows->len; i++)
+ {
+ if (!g_hash_table_contains (self->toggled, GINT_TO_POINTER (i)))
+ callback (self, i, user_data);
+ }
+ }
+ else
+ g_assert_not_reached ();
+}
+
+static void
+create_edits_cb (GbpGrepModel *self,
+ guint index_,
+ gpointer user_data)
+{
+ GPtrArray *edits = user_data;
+ const gchar *row;
+
+ g_assert (GBP_IS_GREP_MODEL (self));
+ g_assert (edits != NULL);
+
+ row = g_ptr_array_index (self->index->rows, index_);
+
+ //g_print ("ROW: %s\n", row);
+}
+
+/**
+ * gbp_grep_model_create_edits:
+ * @self: a #GbpGrepModel
+ *
+ * Returns: (transfer container): a #GPtrArray of IdeProjectEdit
+ */
+GPtrArray *
+gbp_grep_model_create_edits (GbpGrepModel *self)
+{
+ g_autoptr(GPtrArray) edits = NULL;
+
+ g_return_val_if_fail (GBP_IS_GREP_MODEL (self), NULL);
+
+ edits = g_ptr_array_new_with_free_func (g_object_unref);
+ gbp_grep_model_foreach_selected (self, create_edits_cb, edits);
+
+ return g_steal_pointer (&edits);
+}
diff --git a/src/plugins/grep/gbp-grep-model.h b/src/plugins/grep/gbp-grep-model.h
index f992b5adc..8b20d7390 100644
--- a/src/plugins/grep/gbp-grep-model.h
+++ b/src/plugins/grep/gbp-grep-model.h
@@ -47,6 +47,7 @@ void gbp_grep_model_set_at_word_boundaries (GbpGrepModel *self,
const gchar *gbp_grep_model_get_query (GbpGrepModel *self);
void gbp_grep_model_set_query (GbpGrepModel *self,
const gchar *query);
+GPtrArray *gbp_grep_model_create_edits (GbpGrepModel *self);
void gbp_grep_model_select_all (GbpGrepModel *self);
void gbp_grep_model_select_none (GbpGrepModel *self);
void gbp_grep_model_toggle_mode (GbpGrepModel *self);
diff --git a/src/plugins/grep/gbp-grep-panel.c b/src/plugins/grep/gbp-grep-panel.c
index 6e171f73e..14b136dc4 100644
--- a/src/plugins/grep/gbp-grep-panel.c
+++ b/src/plugins/grep/gbp-grep-panel.c
@@ -35,6 +35,7 @@ struct _GbpGrepPanel
GtkTreeViewColumn *toggle_column;
GtkCheckButton *check;
GtkButton *close_button;
+ GtkButton *replace_button;
};
enum {
@@ -293,6 +294,16 @@ gbp_grep_panel_toggle_all_cb (GbpGrepPanel *self,
gtk_widget_queue_resize (GTK_WIDGET (self->tree_view));
}
+static void
+gbp_grep_panel_replace_cb (GbpGrepPanel *self,
+ GtkButton *button)
+{
+ g_assert (GBP_IS_GREP_PANEL (self));
+ g_assert (GTK_IS_BUTTON (button));
+
+ gbp_grep_model_create_edits (GBP_GREP_MODEL (gtk_tree_view_get_model (self->tree_view)));
+}
+
static void
gbp_grep_panel_get_property (GObject *object,
guint prop_id,
@@ -350,6 +361,7 @@ gbp_grep_panel_class_init (GbpGrepPanelClass *klass)
gtk_widget_class_set_css_name (widget_class, "gbpgreppanel");
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/builder/plugins/grep/gbp-grep-panel.ui");
gtk_widget_class_bind_template_child (widget_class, GbpGrepPanel, close_button);
+ gtk_widget_class_bind_template_child (widget_class, GbpGrepPanel, replace_button);
gtk_widget_class_bind_template_child (widget_class, GbpGrepPanel, tree_view);
}
@@ -367,6 +379,12 @@ gbp_grep_panel_init (GbpGrepPanel *self)
self,
G_CONNECT_SWAPPED);
+ g_signal_connect_object (self->replace_button,
+ "clicked",
+ G_CALLBACK (gbp_grep_panel_replace_cb),
+ self,
+ G_CONNECT_SWAPPED);
+
g_signal_connect_object (self->tree_view,
"row-activated",
G_CALLBACK (gbp_grep_panel_row_activated_cb),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]