[recipes/inline-editing] wip: More work on ingredients list refactoring
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes/inline-editing] wip: More work on ingredients list refactoring
- Date: Tue, 18 Apr 2017 02:13:19 +0000 (UTC)
commit 314b20e36d5c8270485b960914053f1f8339a6e6
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Apr 17 22:12:26 2017 -0400
wip: More work on ingredients list refactoring
Complete the non-editable mode and use it on the details page.
src/gr-details-page.c | 62 ++++--------------
src/gr-edit-page.c | 65 ++++++++++++++++++-
src/gr-edit-page.ui | 13 ++++
src/gr-ingredients-viewer-row.c | 132 +++++++++++++++++++++++++++++++++-----
src/gr-ingredients-viewer-row.h | 2 -
src/gr-ingredients-viewer-row.ui | 11 +++-
src/gr-ingredients-viewer.c | 101 +++++++++++++++++++++++------
src/gr-ingredients-viewer.ui | 4 +-
8 files changed, 297 insertions(+), 93 deletions(-)
---
diff --git a/src/gr-details-page.c b/src/gr-details-page.c
index fe961b0..edb7f87 100644
--- a/src/gr-details-page.c
+++ b/src/gr-details-page.c
@@ -36,6 +36,7 @@
#include "gr-image.h"
#include "gr-image-viewer.h"
#include "gr-ingredients-list.h"
+#include "gr-ingredients-viewer.h"
#include "gr-timer.h"
#include "gr-recipe-printer.h"
#include "gr-recipe-exporter.h"
@@ -52,6 +53,7 @@ struct _GrDetailsPage
GrRecipe *recipe;
GrChef *chef;
GrIngredientsList *ingredients;
+ char *ing_text;
GrRecipePrinter *printer;
GrRecipeExporter *exporter;
@@ -237,6 +239,7 @@ details_page_finalize (GObject *object)
g_clear_object (&self->printer);
g_clear_object (&self->exporter);
g_clear_pointer (&self->uri, g_free);
+ g_clear_pointer (&self->ing_text, g_free);
G_OBJECT_CLASS (gr_details_page_parent_class)->finalize (object);
}
@@ -455,64 +458,21 @@ populate_ingredients (GrDetailsPage *page,
{
g_autoptr(GtkSizeGroup) group = NULL;
g_autofree char **segments = NULL;
- int i, j;
+ int j;
GtkWidget *list;
- GtkWidget *label;
container_remove_all (GTK_CONTAINER (page->ingredients_box));
group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
segments = gr_ingredients_list_get_segments (page->ingredients);
for (j = 0; segments[j]; j++) {
- g_auto(GStrv) ings = NULL;
-
- if (segments[j] && segments[j][0]) {
- label = gtk_label_new (segments[j]);
- gtk_widget_show (label);
- gtk_label_set_xalign (GTK_LABEL (label), 0);
- gtk_style_context_add_class (gtk_widget_get_style_context (label), "heading");
- gtk_container_add (GTK_CONTAINER (page->ingredients_box), label);
- }
-
- list = gtk_list_box_new ();
- gtk_widget_show (list);
- gtk_style_context_add_class (gtk_widget_get_style_context (list), "frame");
- gtk_list_box_set_selection_mode (GTK_LIST_BOX (list), GTK_SELECTION_NONE);
- gtk_list_box_set_header_func (GTK_LIST_BOX (list), all_headers, NULL, NULL);
+ list = g_object_new (GR_TYPE_INGREDIENTS_VIEWER,
+ "title", segments[j],
+ "editable-title", FALSE,
+ "editable", FALSE,
+ "ingredients", page->ing_text,
+ NULL);
gtk_container_add (GTK_CONTAINER (page->ingredients_box), list);
-
- ings = gr_ingredients_list_get_ingredients (page->ingredients, segments[j]);
- for (i = 0; ings[i]; i++) {
- GtkWidget *row;
- GtkWidget *box;
- g_autofree char *s = NULL;
-
- box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_widget_show (box);
-
- s = gr_ingredients_list_scale_unit (page->ingredients, segments[j], ings[i], num,
denom);
- label = gtk_label_new (s);
- g_object_set (label,
- "visible", TRUE,
- "xalign", 0.0,
- "margin", 10,
- NULL);
- gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label");
- gtk_container_add (GTK_CONTAINER (box), label);
- gtk_size_group_add_widget (group, label);
-
- label = gtk_label_new (ings[i]);
- g_object_set (label,
- "visible", TRUE,
- "xalign", 0.0,
- "margin", 10,
- NULL);
- gtk_container_add (GTK_CONTAINER (box), label);
-
- gtk_container_add (GTK_CONTAINER (list), box);
- row = gtk_widget_get_parent (box);
- gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE);
- }
}
gtk_widget_hide (page->warning_box);
@@ -664,6 +624,8 @@ gr_details_page_set_recipe (GrDetailsPage *page,
ing = gr_ingredients_list_new (ingredients);
g_set_object (&page->ingredients, ing);
+ g_free (page->ing_text);
+ page->ing_text = g_strdup (ingredients);
if (same_recipe)
want_serves = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (page->serves_spin));
diff --git a/src/gr-edit-page.c b/src/gr-edit-page.c
index ac67075..f1d8d9e 100644
--- a/src/gr-edit-page.c
+++ b/src/gr-edit-page.c
@@ -50,6 +50,7 @@
#include "gr-account.h"
#include "gr-recipe-tile.h"
#include "gr-recipe-formatter.h"
+#include "gr-ingredients-viewer.h"
struct _GrEditPage
@@ -93,6 +94,8 @@ struct _GrEditPage
GtkWidget *ingredients_box;
GtkWidget *cooking_view;
+ GtkWidget *ingredients_box2;
+
GtkWidget *ing_list;
GtkWidget *ing_search_button;
GtkWidget *ing_search_button_label;
@@ -165,6 +168,8 @@ dismiss_error (GrEditPage *page)
static void add_image_cb (GrEditPage *page);
static void set_unsaved (GrEditPage *page);
+static void add_list2 (GtkButton *button, GrEditPage *page);
+
static void
populate_image_flowbox (GrEditPage *page)
{
@@ -1621,6 +1626,9 @@ gr_edit_page_class_init (GrEditPageClass *klass)
gtk_widget_class_bind_template_child (widget_class, GrEditPage, ing_search_button_label);
gtk_widget_class_bind_template_child (widget_class, GrEditPage, ing_search_revealer);
+ gtk_widget_class_bind_template_child (widget_class, GrEditPage, ingredients_box2);
+ gtk_widget_class_bind_template_callback (widget_class, add_list2);
+
gtk_widget_class_bind_template_child (widget_class, GrEditPage, unit_list);
gtk_widget_class_bind_template_child (widget_class, GrEditPage, amount_search_button);
gtk_widget_class_bind_template_child (widget_class, GrEditPage, amount_search_button_label);
@@ -1938,9 +1946,6 @@ static void
populate_ingredients (GrEditPage *page,
const char *text)
{
- g_autoptr(GrIngredientsList) ingredients = NULL;
- g_autofree char **segs = NULL;
- int i, j;
GtkWidget *button;
container_remove_all (GTK_CONTAINER (page->ingredients_box));
@@ -1951,11 +1956,16 @@ populate_ingredients (GrEditPage *page,
if (strcmp (text, "") == 0)
add_list (NULL, page);
else {
+ g_autoptr(GrIngredientsList) ingredients = NULL;
+ g_autofree char **segs = NULL;
+ int j;
+
ingredients = gr_ingredients_list_new (text);
segs = gr_ingredients_list_get_segments (ingredients);
for (j = 0; segs[j]; j++) {
GtkWidget *list;
g_auto(GStrv) ings = NULL;
+ int i;
list = add_ingredients_segment (page, segs[j]);
ings = gr_ingredients_list_get_ingredients (ingredients, segs[j]);
@@ -1983,6 +1993,55 @@ populate_ingredients (GrEditPage *page,
gtk_box_pack_end (GTK_BOX (page->ingredients_box), button, FALSE, TRUE, 0);
g_signal_connect (button, "clicked", G_CALLBACK (add_list), page);
update_segments (page);
+
+ container_remove_all (GTK_CONTAINER (page->ingredients_box2));
+
+ if (strcmp (text, "") == 0) {
+ GtkWidget *list;
+
+ list = g_object_new (GR_TYPE_INGREDIENTS_VIEWER,
+ "title", "",
+ "editable-title", FALSE,
+ "editable", TRUE,
+ "ingredients", "",
+ NULL);
+ gtk_container_add (GTK_CONTAINER (page->ingredients_box2), list);
+ }
+ else {
+ g_autoptr(GrIngredientsList) ingredients = NULL;
+ g_autofree char **segs = NULL;
+ gboolean editable_title;
+ int j;
+
+ ingredients = gr_ingredients_list_new (text);
+ segs = gr_ingredients_list_get_segments (ingredients);
+ editable_title = g_strv_length (segs) > 1;
+ for (j = 0; segs[j]; j++) {
+ GtkWidget *list;
+
+ list = g_object_new (GR_TYPE_INGREDIENTS_VIEWER,
+ "title", segs[j],
+ "editable-title", editable_title,
+ "editable", TRUE,
+ "ingredients", text,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (page->ingredients_box2), list);
+ }
+ }
+}
+
+static void
+add_list2 (GtkButton *button, GrEditPage *page)
+{
+ GtkWidget *list;
+
+ list = g_object_new (GR_TYPE_INGREDIENTS_VIEWER,
+ "title", "",
+ "editable-title", TRUE,
+ "editable", TRUE,
+ "ingredients", "",
+ NULL);
+ gtk_container_add (GTK_CONTAINER (page->ingredients_box2), list);
}
static void
diff --git a/src/gr-edit-page.ui b/src/gr-edit-page.ui
index 717a840..6dcf5c6 100644
--- a/src/gr-edit-page.ui
+++ b/src/gr-edit-page.ui
@@ -242,6 +242,19 @@
<property name="orientation">vertical</property>
</object>
</child>
+ <child>
+ <object class="GtkBox" id="ingredients_box2">
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">1</property>
+ <property name="label" translatable="yes">Add List</property>
+ <signal name="clicked" handler="add_list2"/>
+ </object>
+ </child>
</object>
<packing>
<property name="left-attach">0</property>
diff --git a/src/gr-ingredients-viewer-row.c b/src/gr-ingredients-viewer-row.c
index 5119044..9644d45 100644
--- a/src/gr-ingredients-viewer-row.c
+++ b/src/gr-ingredients-viewer-row.c
@@ -31,16 +31,27 @@ struct _GrIngredientsViewerRow
{
GtkListBoxRow parent_instance;
- GtkWidget *label;
+ GtkWidget *unit_label;
+ GtkWidget *ingredient_label;
+ char *amount;
+ char *unit;
char *ingredient;
+
+ gboolean editable;
+
+ GtkSizeGroup *group;
};
G_DEFINE_TYPE (GrIngredientsViewerRow, gr_ingredients_viewer_row, GTK_TYPE_LIST_BOX_ROW)
enum {
PROP_0,
- PROP_INGREDIENT
+ PROP_AMOUNT,
+ PROP_UNIT,
+ PROP_INGREDIENT,
+ PROP_SIZE_GROUP,
+ PROP_EDITABLE
};
static void
@@ -48,8 +59,12 @@ gr_ingredients_viewer_row_finalize (GObject *object)
{
GrIngredientsViewerRow *self = GR_INGREDIENTS_VIEWER_ROW (object);
+ g_free (self->amount);
+ g_free (self->unit);
g_free (self->ingredient);
+ g_clear_object (&self->group);
+
G_OBJECT_CLASS (gr_ingredients_viewer_row_parent_class)->finalize (object);
}
@@ -63,15 +78,69 @@ gr_ingredients_viewer_row_get_property (GObject *object,
switch (prop_id)
{
+ case PROP_AMOUNT:
+ g_value_set_string (value, self->amount);
+ break;
+
+ case PROP_UNIT:
+ g_value_set_string (value, self->unit);
+ break;
+
case PROP_INGREDIENT:
g_value_set_string (value, self->ingredient);
break;
+
+ case PROP_SIZE_GROUP:
+ g_value_set_object (value, self->group);
+ break;
+
+ case PROP_EDITABLE:
+ g_value_set_boolean (value, self->editable);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
+update_unit (GrIngredientsViewerRow *row)
+{
+ g_autofree char *tmp = NULL;
+
+ tmp = g_strconcat (row->amount ? row->amount : "", " ", row->unit, NULL);
+ gtk_label_set_label (GTK_LABEL (row->unit_label), tmp);
+}
+
+
+static void
+gr_ingredients_viewer_row_set_amount (GrIngredientsViewerRow *row,
+ const char *amount)
+{
+ g_free (row->amount);
+ row->amount = g_strdup (amount);
+ update_unit (row);
+}
+
+static void
+gr_ingredients_viewer_row_set_unit (GrIngredientsViewerRow *row,
+ const char *unit)
+{
+ g_free (row->unit);
+ row->unit = g_strdup (unit);
+ update_unit (row);
+}
+
+static void
+gr_ingredients_viewer_row_set_ingredient (GrIngredientsViewerRow *row,
+ const char *ingredient)
+{
+ g_free (row->ingredient);
+ row->ingredient = g_strdup (ingredient);
+ gtk_label_set_label (GTK_LABEL (row->ingredient_label), ingredient);
+}
+
+static void
gr_ingredients_viewer_row_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -81,13 +150,31 @@ gr_ingredients_viewer_row_set_property (GObject *object,
switch (prop_id)
{
+ case PROP_AMOUNT:
+ gr_ingredients_viewer_row_set_amount (self, g_value_get_string (value));
+ break;
+
+ case PROP_UNIT:
+ gr_ingredients_viewer_row_set_unit (self, g_value_get_string (value));
+ break;
+
case PROP_INGREDIENT:
- {
- g_free (self->ingredient);
- self->ingredient = g_value_dup_string (value);
- gtk_label_set_label (GTK_LABEL (self->label), self->ingredient);
- }
+ gr_ingredients_viewer_row_set_ingredient (self, g_value_get_string (value));
+ break;
+
+ case PROP_SIZE_GROUP:
+ if (self->group)
+ gtk_size_group_remove_widget (self->group, self->unit_label);
+ g_set_object (&self->group, g_value_get_object (value));
+ if (self->group)
+ gtk_size_group_add_widget (self->group, self->unit_label);
break;
+
+ case PROP_EDITABLE:
+ self->editable = g_value_get_boolean (value);
+ gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (object), self->editable);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -104,14 +191,35 @@ gr_ingredients_viewer_row_class_init (GrIngredientsViewerRowClass *klass)
object_class->get_property = gr_ingredients_viewer_row_get_property;
object_class->set_property = gr_ingredients_viewer_row_set_property;
+ pspec = g_param_spec_string ("amount", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_AMOUNT, pspec);
+
+ pspec = g_param_spec_string ("unit", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_UNIT, pspec);
+
pspec = g_param_spec_string ("ingredient", NULL, NULL,
NULL,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_INGREDIENT, pspec);
+ pspec = g_param_spec_object ("size-group", NULL, NULL,
+ GTK_TYPE_SIZE_GROUP,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_SIZE_GROUP, pspec);
+
+ pspec = g_param_spec_boolean ("editable", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT);
+ g_object_class_install_property (object_class, PROP_EDITABLE, pspec);
+
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, label);
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, unit_label);
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewerRow, ingredient_label);
}
static void
@@ -120,11 +228,3 @@ gr_ingredients_viewer_row_init (GrIngredientsViewerRow *self)
gtk_widget_set_has_window (GTK_WIDGET (self), FALSE);
gtk_widget_init_template (GTK_WIDGET (self));
}
-
-GrIngredientsViewerRow *
-gr_ingredients_viewer_row_new (const char *ingredient)
-{
- return GR_INGREDIENTS_VIEWER_ROW (g_object_new (GR_TYPE_INGREDIENTS_VIEWER_ROW,
- "ingredient", ingredient,
- NULL));
-}
diff --git a/src/gr-ingredients-viewer-row.h b/src/gr-ingredients-viewer-row.h
index a3d9fd2..317037e 100644
--- a/src/gr-ingredients-viewer-row.h
+++ b/src/gr-ingredients-viewer-row.h
@@ -28,6 +28,4 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GrIngredientsViewerRow, gr_ingredients_viewer_row, GR, INGREDIENTS_VIEWER_ROW,
GtkListBoxRow)
-GrIngredientsViewerRow *gr_ingredients_viewer_row_new (const char *ingredient);
-
G_END_DECLS
diff --git a/src/gr-ingredients-viewer-row.ui b/src/gr-ingredients-viewer-row.ui
index 5fb713f..e1c7413 100644
--- a/src/gr-ingredients-viewer-row.ui
+++ b/src/gr-ingredients-viewer-row.ui
@@ -8,7 +8,16 @@
<property name="spacing">12</property>
<property name="margin">6</property>
<child>
- <object class="GtkLabel" id="label">
+ <object class="GtkLabel" id="unit_label">
+ <property name="visible">1</property>
+ <property name="xalign">0</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ingredient_label">
<property name="visible">1</property>
<property name="xalign">0</property>
</object>
diff --git a/src/gr-ingredients-viewer.c b/src/gr-ingredients-viewer.c
index 51478fd..1530ca0 100644
--- a/src/gr-ingredients-viewer.c
+++ b/src/gr-ingredients-viewer.c
@@ -24,6 +24,7 @@
#include "gr-ingredients-viewer.h"
#include "gr-ingredients-viewer-row.h"
+#include "gr-ingredients-list.h"
#include "gr-utils.h"
@@ -34,8 +35,13 @@ struct _GrIngredientsViewer
GtkWidget *title_stack;
GtkWidget *title_entry;
GtkWidget *list;
+ GtkWidget *add_button;
- char **ingredients;
+ char *title;
+ char *ingredients;
+ gboolean editable;
+
+ GtkSizeGroup *group;
};
@@ -45,6 +51,7 @@ enum {
PROP_0,
PROP_TITLE,
PROP_EDITABLE_TITLE,
+ PROP_EDITABLE,
PROP_INGREDIENTS
};
@@ -53,7 +60,10 @@ gr_ingredients_viewer_finalize (GObject *object)
{
GrIngredientsViewer *viewer = GR_INGREDIENTS_VIEWER (object);
- g_strfreev (viewer->ingredients);
+ g_free (viewer->title);
+ g_free (viewer->ingredients);
+
+ g_clear_object (&viewer->group);
G_OBJECT_CLASS (gr_ingredients_viewer_parent_class)->finalize (object);
}
@@ -65,23 +75,25 @@ gr_ingredients_viewer_get_property (GObject *object,
GParamSpec *pspec)
{
GrIngredientsViewer *self = GR_INGREDIENTS_VIEWER (object);
+ const char *visible;
switch (prop_id)
{
case PROP_TITLE:
- g_value_set_string (value, gtk_entry_get_text (GTK_ENTRY (self->title_entry)));
+ g_value_set_string (value, self->title);
break;
- case PROP_EDITABLE_TITLE: {
- const char *visible;
+ case PROP_EDITABLE_TITLE:
+ visible = gtk_stack_get_visible_child_name (GTK_STACK (self->title_stack));
+ g_value_set_boolean (value, strcmp (visible, "entry") == 0);
+ break;
- visible = gtk_stack_get_visible_child_name (GTK_STACK (self->title_stack));
- g_value_set_boolean (value, strcmp (visible, "entry") == 0);
- }
+ case PROP_EDITABLE:
+ g_value_set_boolean (value, self->editable);
break;
case PROP_INGREDIENTS:
- g_value_set_boxed (value, self->ingredients);
+ g_value_set_string (value, self->ingredients);
break;
default:
@@ -90,26 +102,63 @@ gr_ingredients_viewer_get_property (GObject *object,
}
static void
-gr_ingredients_viewer_set_ingredients (GrIngredientsViewer *viewer,
- const char **ings)
+gr_ingredients_viewer_set_ingredients (GrIngredientsViewer *viewer,
+ const char *text)
{
+ g_autoptr(GrIngredientsList) ingredients = NULL;
+ g_auto(GStrv) ings = NULL;
int i;
- g_strfreev (viewer->ingredients);
- viewer->ingredients = g_strdupv ((char **)ings);
+ g_free (viewer->ingredients);
+ viewer->ingredients = g_strdup (text);
container_remove_all (GTK_CONTAINER (viewer->list));
+ ingredients = gr_ingredients_list_new (text);
+ ings = gr_ingredients_list_get_ingredients (ingredients, viewer->title);
for (i = 0; ings && ings[i]; i++) {
+ g_autofree char *s = NULL;
+ g_auto(GStrv) strv = NULL;
+ const char *amount;
+ const char *unit;
GtkWidget *row;
- row = g_object_new (GR_TYPE_INGREDIENTS_VIEWER_ROW, "ingredient", ings[i], NULL);
+ s = gr_ingredients_list_scale_unit (ingredients, viewer->title, ings[i], 1, 1);
+ strv = g_strsplit (s, " ", 2);
+ amount = strv[0];
+ unit = strv[1] ? strv[1] : "";
+
+ row = g_object_new (GR_TYPE_INGREDIENTS_VIEWER_ROW,
+ "amount", amount,
+ "unit", unit,
+ "ingredient", ings[i],
+ "size-group", viewer->group,
+ "editable", viewer->editable,
+ NULL);
gtk_container_add (GTK_CONTAINER (viewer->list), row);
}
}
static void
+gr_ingredients_viewer_set_title (GrIngredientsViewer *viewer,
+ const char *title)
+{
+ g_free (viewer->title);
+ viewer->title = g_strdup (title);
+
+ gtk_entry_set_text (GTK_ENTRY (viewer->title_entry), title);
+}
+
+static void
+gr_ingredients_viewer_set_editable (GrIngredientsViewer *viewer,
+ gboolean editable)
+{
+ viewer->editable = editable;
+ gtk_widget_set_visible (viewer->add_button, editable);
+}
+
+static void
gr_ingredients_viewer_set_property (GObject *object,
guint prop_id,
const GValue *value,
@@ -120,7 +169,7 @@ gr_ingredients_viewer_set_property (GObject *object,
switch (prop_id)
{
case PROP_TITLE:
- gtk_entry_set_text (GTK_ENTRY (self->title_entry), g_value_get_string (value));
+ gr_ingredients_viewer_set_title (self, g_value_get_string (value));
break;
case PROP_EDITABLE_TITLE: {
@@ -132,8 +181,12 @@ gr_ingredients_viewer_set_property (GObject *object,
}
break;
+ case PROP_EDITABLE:
+ gr_ingredients_viewer_set_editable (self, g_value_get_boolean (value));
+ break;
+
case PROP_INGREDIENTS:
- gr_ingredients_viewer_set_ingredients (self, (const char **)g_value_get_boxed (value));
+ gr_ingredients_viewer_set_ingredients (self, g_value_get_string (value));
break;
default:
@@ -146,6 +199,10 @@ gr_ingredients_viewer_init (GrIngredientsViewer *self)
{
gtk_widget_set_has_window (GTK_WIDGET (self), FALSE);
gtk_widget_init_template (GTK_WIDGET (self));
+
+ gtk_list_box_set_header_func (GTK_LIST_BOX (self->list), all_headers, self, NULL);
+
+ self->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
}
@@ -165,18 +222,24 @@ gr_ingredients_viewer_class_init (GrIngredientsViewerClass *klass)
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_EDITABLE_TITLE, pspec);
+ pspec = g_param_spec_boolean ("editable", NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_EDITABLE, pspec);
+
pspec = g_param_spec_string ("title", NULL, NULL,
NULL,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_TITLE, pspec);
- pspec = g_param_spec_boxed ("ingredients", NULL, NULL,
- G_TYPE_STRV,
- G_PARAM_READWRITE);
+ pspec = g_param_spec_string ("ingredients", NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_INGREDIENTS, pspec);
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/Recipes/gr-ingredients-viewer.ui");
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewer, title_stack);
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewer, title_entry);
gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewer, list);
+ gtk_widget_class_bind_template_child (widget_class, GrIngredientsViewer, add_button);
}
diff --git a/src/gr-ingredients-viewer.ui b/src/gr-ingredients-viewer.ui
index f02c15d..6a3f2d8 100644
--- a/src/gr-ingredients-viewer.ui
+++ b/src/gr-ingredients-viewer.ui
@@ -52,7 +52,7 @@
<child>
<object class="GtkListBox" id="list">
<property name="visible">1</property>
- <property name="selection-mode">single</property>
+ <property name="selection-mode">none</property>
<style>
<class name="frame"/>
</style>
@@ -74,7 +74,7 @@
</object>
</child>
<child>
- <object class="GtkButton">
+ <object class="GtkButton" id="add_button">
<property name="visible">1</property>
<property name="halign">start</property>
<property name="margin-top">10</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]