[recipes] Add Initial Editing for GrIngredientsViewerRow
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes] Add Initial Editing for GrIngredientsViewerRow
- Date: Fri, 28 Apr 2017 01:48:09 +0000 (UTC)
commit 72cd7dafe942a1769ee63f9faa5c341f5e76573e
Author: Ekta Nandwani <mailnandwaniekta gmail com>
Date: Tue Apr 25 11:52:00 2017 +0530
Add Initial Editing for GrIngredientsViewerRow
Show GtkEntry to edit ingredient and pressing enter shows the GtkLabel with changed text
src/gr-ingredients-viewer-row.c | 65 ++++++++++++++++++++++++++---
src/gr-ingredients-viewer-row.ui | 84 ++++++++++++++++++++++++++++++++++----
src/gr-ingredients-viewer.c | 8 ++++
3 files changed, 143 insertions(+), 14 deletions(-)
---
diff --git a/src/gr-ingredients-viewer-row.c b/src/gr-ingredients-viewer-row.c
index a8b0cea..9cbcf00 100644
--- a/src/gr-ingredients-viewer-row.c
+++ b/src/gr-ingredients-viewer-row.c
@@ -32,9 +32,13 @@ struct _GrIngredientsViewerRow
{
GtkListBoxRow parent_instance;
+ GtkWidget *buttons_stack;
+ GtkWidget *unit_stack;
GtkWidget *unit_label;
+ GtkWidget *unit_entry;
+ GtkWidget *ingredient_stack;
GtkWidget *ingredient_label;
- GtkWidget *buttons_stack;
+ GtkWidget *ingredient_entry;
GtkWidget *ebox;
char *amount;
@@ -62,6 +66,7 @@ enum {
enum {
DELETE,
MOVE,
+ EDIT,
N_SIGNALS
};
@@ -162,10 +167,10 @@ gr_ingredients_viewer_row_set_size_group (GrIngredientsViewerRow *row,
GtkSizeGroup *group)
{
if (row->group)
- gtk_size_group_remove_widget (row->group, row->unit_label);
+ gtk_size_group_remove_widget (row->group, row->unit_stack);
g_set_object (&row->group, group);
if (row->group)
- gtk_size_group_add_widget (row->group, row->unit_label);
+ gtk_size_group_add_widget (row->group, row->unit_stack);
}
static void
@@ -176,19 +181,24 @@ gr_ingredients_viewer_row_set_editable (GrIngredientsViewerRow *row,
gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), editable);
}
+static void save_row (GrIngredientsViewerRow *row);
+
static void
gr_ingredients_viewer_row_set_active (GrIngredientsViewerRow *row,
gboolean active)
{
+ if (row->active && !active)
+ save_row (row);
+
row->active = active;
gtk_stack_set_visible_child_name (GTK_STACK (row->buttons_stack), active ? "buttons" : "empty");
}
static void
gr_ingredients_viewer_row_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
GrIngredientsViewerRow *self = GR_INGREDIENTS_VIEWER_ROW (object);
@@ -235,6 +245,36 @@ drag_handle_clicked (GrIngredientsViewerRow *row)
}
static void
+edit_ingredient (GrIngredientsViewerRow *row)
+{
+ g_autofree char *tmp = NULL;
+
+ tmp = g_strconcat (row->amount ? row->amount : "", " ", row->unit, NULL);
+ gtk_entry_set_text (GTK_ENTRY (row->unit_entry), tmp);
+ gtk_entry_set_text (GTK_ENTRY (row->ingredient_entry), row->ingredient);
+
+ gtk_stack_set_visible_child_name (GTK_STACK (row->unit_stack), "unit_entry");
+ gtk_stack_set_visible_child_name (GTK_STACK (row->ingredient_stack), "ingredient_entry");
+ g_signal_emit (row, signals[EDIT], 0);
+
+}
+
+static void
+save_row (GrIngredientsViewerRow *row)
+{
+ char** strv = g_strsplit (gtk_entry_get_text (GTK_ENTRY (row->unit_entry)), " ", -1);
+
+ row->amount = strv[0];
+ row->unit = strv[1];
+ row->ingredient = g_strdup (gtk_entry_get_text (GTK_ENTRY (row->ingredient_entry)));
+ update_unit (row);
+ gtk_label_set_label (GTK_LABEL (row->ingredient_label), row->ingredient);
+
+ gtk_stack_set_visible_child_name (GTK_STACK (row->unit_stack), "unit_label");
+ gtk_stack_set_visible_child_name (GTK_STACK (row->ingredient_stack), "ingredient_label");
+}
+
+static void
gr_ingredients_viewer_row_class_init (GrIngredientsViewerRowClass *klass)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
@@ -290,16 +330,29 @@ gr_ingredients_viewer_row_class_init (GrIngredientsViewerRowClass *klass)
NULL, NULL,
NULL,
G_TYPE_NONE, 1, GR_TYPE_INGREDIENTS_VIEWER_ROW);
+ signals[EDIT] = g_signal_new ("edit",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_FIRST,
+ 0,
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 0);
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/Recipes/gr-ingredients-viewer-row.ui");
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, unit_stack);
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, unit_label);
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, unit_entry);
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, ingredient_stack);
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, ingredient_label);
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, ingredient_entry);
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, buttons_stack);
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, ebox);
gtk_widget_class_bind_template_callback (widget_class, emit_delete);
gtk_widget_class_bind_template_callback (widget_class, drag_handle_clicked);
+ gtk_widget_class_bind_template_callback (widget_class, edit_ingredient);
+ gtk_widget_class_bind_template_callback (widget_class, save_row);
}
static GtkTargetEntry entries[] = {
diff --git a/src/gr-ingredients-viewer-row.ui b/src/gr-ingredients-viewer-row.ui
index ae66467..d9f6cd7 100644
--- a/src/gr-ingredients-viewer-row.ui
+++ b/src/gr-ingredients-viewer-row.ui
@@ -5,22 +5,72 @@
<child>
<object class="GtkBox" id="box">
<property name="visible">1</property>
- <property name="spacing">12</property>
+ <property name="spacing">10</property>
<property name="margin-start">6</property>
<property name="margin-end">6</property>
<child>
- <object class="GtkLabel" id="unit_label">
+ <object class="GtkStack" id="unit_stack">
<property name="visible">1</property>
- <property name="xalign">0</property>
- <style>
- <class name="dim-label"/>
- </style>
+ <child>
+ <object class="GtkLabel" id="unit_label">
+ <property name="visible">1</property>
+ <property name="xalign">0</property>
+ <property name="width-chars">10</property>
+ <property name="margin-start">9</property>
+ <property name="margin-end">9</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="name">unit_label</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="unit_entry">
+ <property name="visible">1</property>
+ <property name="xalign">0</property>
+ <property name="placeholder-text" translatable="yes">Amount</property>
+ <property name="width-chars">10</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
+ <signal name="activate" handler="save_row" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="name">unit_entry</property>
+ </packing>
+ </child>
</object>
</child>
<child>
- <object class="GtkLabel" id="ingredient_label">
+ <object class="GtkStack" id="ingredient_stack">
<property name="visible">1</property>
- <property name="xalign">0</property>
+ <child>
+ <object class="GtkLabel" id="ingredient_label">
+ <property name="visible">1</property>
+ <property name="xalign">0</property>
+ <property name="width-chars">20</property>
+ <property name="margin-start">9</property>
+ <property name="margin-end">9</property>
+ </object>
+ <packing>
+ <property name="name">ingredient_label</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="ingredient_entry">
+ <property name="visible">1</property>
+ <property name="xalign">0</property>
+ <property name="width-chars">20</property>
+ <property name="placeholder-text" translatable="yes">Ingredient</property>
+ <property name="margin-top">4</property>
+ <property name="margin-bottom">4</property>
+ <signal name="activate" handler="save_row" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="name">ingredient_entry</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">1</property>
@@ -49,6 +99,24 @@
<object class="GtkButton">
<property name="visible">1</property>
<property name="relief">none</property>
+ <signal name="clicked" handler="edit_ingredient" swapped="yes"/>
+ <style>
+ <class name="image-button"/>
+ <class name="circular"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">1</property>
+ <property name="icon-name">document-edit-symbolic</property>
+ <property name="icon-size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">1</property>
+ <property name="relief">none</property>
<signal name="clicked" handler="emit_delete" swapped="yes"/>
<style>
<class name="image-button"/>
diff --git a/src/gr-ingredients-viewer.c b/src/gr-ingredients-viewer.c
index 22945ea..e47ccc8 100644
--- a/src/gr-ingredients-viewer.c
+++ b/src/gr-ingredients-viewer.c
@@ -225,6 +225,12 @@ move_row (GtkWidget *source,
g_object_notify (G_OBJECT (viewer), "ingredients");
}
+static void
+edit_ingredient_row (GrIngredientsViewerRow *row,
+ GrIngredientsViewer *viewer)
+{
+ g_object_notify (G_OBJECT (viewer), "ingredients");
+}
static void
add_row (GtkButton *button,
@@ -241,6 +247,7 @@ add_row (GtkButton *button,
NULL);
g_signal_connect (row, "delete", G_CALLBACK (delete_row), viewer);
g_signal_connect (row, "move", G_CALLBACK (move_row), viewer);
+ g_signal_connect (row, "notify::ingredient" , G_CALLBACK(edit_ingredient_row), viewer);
gtk_container_add (GTK_CONTAINER (viewer->list), row);
g_object_notify (G_OBJECT (viewer), "ingredients");
@@ -286,6 +293,7 @@ gr_ingredients_viewer_set_ingredients (GrIngredientsViewer *viewer,
NULL);
g_signal_connect (row, "delete", G_CALLBACK (delete_row), viewer);
g_signal_connect (row, "move", G_CALLBACK (move_row), viewer);
+ g_signal_connect (row, "edit", G_CALLBACK (edit_ingredient_row), viewer);
gtk_container_add (GTK_CONTAINER (viewer->list), row);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]