[recipes] Add UI for setting the default image



commit 0bcf3fdc9bd1081d6123e10d434c9b91282ca11a
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jan 28 13:41:02 2017 +0100

    Add UI for setting the default image
    
    For now, we just use a simple toggle button for this.

 src/gr-edit-page.c  |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/gr-edit-page.ui |   27 ++++++++++++++++++++++++
 2 files changed, 83 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-edit-page.c b/src/gr-edit-page.c
index d2cfa53..997bf11 100644
--- a/src/gr-edit-page.c
+++ b/src/gr-edit-page.c
@@ -79,6 +79,8 @@ struct _GrEditPage
         GtkWidget *images;
         GtkWidget *add_image_button;
         GtkWidget *remove_image_button;
+        GtkWidget *default_image_button;
+        GtkWidget *default_image_image;
         GtkWidget *rotate_image_right_button;
         GtkWidget *rotate_image_left_button;
         GtkWidget *ingredient_popover;
@@ -118,6 +120,8 @@ struct _GrEditPage
         char *ing_term;
         char *unit_term;
         char *recipe_term;
+
+        guint index_handler_id;
 };
 
 G_DEFINE_TYPE (GrEditPage, gr_edit_page, GTK_TYPE_BOX)
@@ -166,6 +170,35 @@ update_image_button_sensitivity (GrEditPage *page)
         gtk_widget_set_sensitive (page->remove_image_button, length > 0);
         gtk_widget_set_sensitive (page->rotate_image_left_button, length > 0);
         gtk_widget_set_sensitive (page->rotate_image_right_button, length > 0);
+        gtk_widget_set_sensitive (page->default_image_button, length > 0);
+}
+
+static void
+update_default_button (GrEditPage *page)
+{
+        int index;
+
+        g_object_get (page->images, "index", &index, NULL);
+
+        if (page->recipe && gr_recipe_get_default_image (page->recipe) == index) {
+                gtk_widget_set_state_flags (page->default_image_button, GTK_STATE_FLAG_CHECKED, FALSE);
+                gtk_image_set_from_icon_name (GTK_IMAGE (page->default_image_image), "starred-symbolic", 1);
+        }
+        else {
+                gtk_widget_unset_state_flags (page->default_image_button, GTK_STATE_FLAG_CHECKED);
+                gtk_image_set_from_icon_name (GTK_IMAGE (page->default_image_image), "non-starred-symbolic", 
1);
+        }
+}
+
+static void
+set_default_image (GrEditPage *page)
+{
+        int index;
+
+        g_object_get (page->images, "index", &index, NULL);
+
+        if (page->recipe)
+                g_object_set (page->recipe, "default-image", index, NULL);
 }
 
 static void
@@ -174,6 +207,13 @@ images_changed (GrEditPage *page)
         update_image_button_sensitivity (page);
         update_link_button_sensitivity (page);
         populate_image_flowbox (page);
+        update_default_button (page);
+}
+
+static void
+index_changed (GrEditPage *page)
+{
+        update_default_button (page);
 }
 
 static void
@@ -1328,6 +1368,8 @@ gr_edit_page_class_init (GrEditPageClass *klass)
         gtk_widget_class_bind_template_child (widget_class, GrEditPage, images);
         gtk_widget_class_bind_template_child (widget_class, GrEditPage, add_image_button);
         gtk_widget_class_bind_template_child (widget_class, GrEditPage, remove_image_button);
+        gtk_widget_class_bind_template_child (widget_class, GrEditPage, default_image_button);
+        gtk_widget_class_bind_template_child (widget_class, GrEditPage, default_image_image);
         gtk_widget_class_bind_template_child (widget_class, GrEditPage, rotate_image_left_button);
         gtk_widget_class_bind_template_child (widget_class, GrEditPage, rotate_image_right_button);
         gtk_widget_class_bind_template_child (widget_class, GrEditPage, author_label);
@@ -1360,6 +1402,7 @@ gr_edit_page_class_init (GrEditPageClass *klass)
         gtk_widget_class_bind_template_callback (widget_class, rotate_image_left);
         gtk_widget_class_bind_template_callback (widget_class, rotate_image_right);
         gtk_widget_class_bind_template_callback (widget_class, images_changed);
+        gtk_widget_class_bind_template_callback (widget_class, index_changed);
         gtk_widget_class_bind_template_callback (widget_class, add_ingredient2);
         gtk_widget_class_bind_template_callback (widget_class, remove_ingredient);
         gtk_widget_class_bind_template_callback (widget_class, ingredient_changed);
@@ -1381,6 +1424,7 @@ gr_edit_page_class_init (GrEditPageClass *klass)
         gtk_widget_class_bind_template_callback (widget_class, recipe_filter_changed);
         gtk_widget_class_bind_template_callback (widget_class, recipe_filter_stop);
         gtk_widget_class_bind_template_callback (widget_class, recipe_filter_activated);
+        gtk_widget_class_bind_template_callback (widget_class, set_default_image);
 }
 
 GtkWidget *
@@ -1860,7 +1904,19 @@ gr_edit_page_edit (GrEditPage *page,
                 gtk_widget_hide (page->author_label);
         }
 
+        if (page->index_handler_id) {
+                g_signal_handler_disconnect (page->recipe, page->index_handler_id);
+                page->index_handler_id = 0;
+        }
+
         g_set_object (&page->recipe, recipe);
+
+        if (recipe) {
+                page->index_handler_id = g_signal_connect_swapped (recipe, "notify::default-image",
+                                                                   G_CALLBACK (update_default_button), page);
+        }
+
+        update_default_button (page);
 }
 
 static void
diff --git a/src/gr-edit-page.ui b/src/gr-edit-page.ui
index 2cd867a..be41b49 100644
--- a/src/gr-edit-page.ui
+++ b/src/gr-edit-page.ui
@@ -87,6 +87,7 @@
                       <object class="GrImageViewer" id="images">
                         <property name="visible">1</property>
                         <signal name="notify::images" handler="images_changed" swapped="yes"/>
+                        <signal name="notify::index" handler="index_changed" swapped="yes"/>
                         <signal name="activate" handler="add_image" swapped="yes"/>
                         <accessibility>
                           <relation target="add_image_button" type="controlled-by"/>
@@ -183,6 +184,32 @@
                           </packing>
                         </child>
                         <child>
+                          <object class="GtkButton" id="default_image_button">
+                            <property name="visible">1</property>
+                            <property name="halign">center</property>
+                            <property name="valign">start</property>
+                            <property name="tooltip-text" translatable="yes">Default image</property>
+                            <accessibility>
+                              <relation target="images" type="controller-for"/>
+                            </accessibility>
+                            <style>
+                              <class name="image-button"/>
+                              <class name="dim-label"/>
+                            </style>
+                            <signal name="clicked" handler="set_default_image" swapped="yes"/>
+                            <child>
+                              <object class="GtkImage" id="default_image_image">
+                                <property name="visible">1</property>
+                                <property name="icon-name">non-starred-symbolic</property>
+                                <property name="icon-size">1</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">1</property>
+                          </packing>
+                        </child>
+                        <child>
                           <object class="GtkButton" id="remove_image_button">
                             <property name="visible">1</property>
                             <property name="halign">center</property>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]