[libhandy] examples: Use the new carousel indicator widgets



commit e02e993cfa9eba51b8c889c3656bc290b1244f6f
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Tue Jul 14 00:47:18 2020 +0500

    examples: Use the new carousel indicator widgets
    
    Stop using indicator-type and indicator-spacing so that they can be
    removed.
    
    Signed-off-by: Alexander Mikhaylenko <alexm gnome org>

 examples/hdy-demo-window.c  |  92 ++++++++++++------
 examples/hdy-demo-window.ui | 232 ++++++++++++++++++++++++++------------------
 2 files changed, 201 insertions(+), 123 deletions(-)
---
diff --git a/examples/hdy-demo-window.c b/examples/hdy-demo-window.c
index 94c94394..15aa0eeb 100644
--- a/examples/hdy-demo-window.c
+++ b/examples/hdy-demo-window.c
@@ -25,9 +25,12 @@ struct _HdyDemoWindow
   HdyComboRow *combo_row;
   HdyComboRow *enum_combo_row;
   HdyCarousel *carousel;
+  GtkBox *carousel_box;
   GtkListBox *carousel_listbox;
+  GtkStack *carousel_indicators_stack;
   HdyComboRow *carousel_orientation_row;
-  HdyComboRow *carousel_indicator_style_row;
+  HdyComboRow *carousel_indicators_row;
+  GListStore *carousel_indicators_model;
   HdyAvatar *avatar;
   GtkFileChooserButton *avatar_filechooser;
 };
@@ -224,50 +227,50 @@ notify_carousel_orientation_cb (GObject       *sender,
                                 HdyDemoWindow *self)
 {
   HdyComboRow *row = HDY_COMBO_ROW (sender);
-  gboolean horizontal;
 
   g_assert (HDY_IS_COMBO_ROW (row));
   g_assert (HDY_IS_DEMO_WINDOW (self));
 
-  horizontal = (hdy_combo_row_get_selected_index (row) == GTK_ORIENTATION_HORIZONTAL);
-  g_object_set (self->carousel,
-                "orientation", hdy_combo_row_get_selected_index (row),
-                "margin-top", horizontal ? 6 : 0,
-                "margin-bottom", horizontal ? 6 : 0,
-                "margin-left", horizontal ? 0 : 6,
-                "margin-right", horizontal ? 0 : 6,
-                NULL);
+  gtk_orientable_set_orientation (GTK_ORIENTABLE (self->carousel_box),
+                                  1 - hdy_combo_row_get_selected_index (row));
+  gtk_orientable_set_orientation (GTK_ORIENTABLE (self->carousel),
+                                  hdy_combo_row_get_selected_index (row));
 }
 
 static gchar *
-carousel_indicator_style_name (HdyEnumValueObject *value,
-                               gpointer            user_data)
+carousel_indicators_name (HdyValueObject *value)
 {
-  g_return_val_if_fail (HDY_IS_ENUM_VALUE_OBJECT (value), NULL);
+  const gchar *style;
 
-  switch (hdy_enum_value_object_get_value (value)) {
-  case HDY_CAROUSEL_INDICATOR_STYLE_NONE:
-    return g_strdup (_("None"));
-  case HDY_CAROUSEL_INDICATOR_STYLE_DOTS:
+  g_assert (HDY_IS_VALUE_OBJECT (value));
+
+  style = hdy_value_object_get_string (value);
+
+  if (!g_strcmp0 (style, "dots"))
     return g_strdup (_("Dots"));
-  case HDY_CAROUSEL_INDICATOR_STYLE_LINES:
+
+  if (!g_strcmp0 (style, "lines"))
     return g_strdup (_("Lines"));
-  default:
-    return NULL;
-  }
+
+  return NULL;
 }
 
 static void
-notify_carousel_indicator_style_cb (GObject       *sender,
-                                    GParamSpec    *pspec,
-                                    HdyDemoWindow *self)
+notify_carousel_indicators_cb (GObject       *sender,
+                               GParamSpec    *pspec,
+                               HdyDemoWindow *self)
 {
   HdyComboRow *row = HDY_COMBO_ROW (sender);
+  HdyValueObject *obj;
 
   g_assert (HDY_IS_COMBO_ROW (row));
   g_assert (HDY_IS_DEMO_WINDOW (self));
 
-  hdy_carousel_set_indicator_style (self->carousel, hdy_combo_row_get_selected_index (row));
+  obj = g_list_model_get_item (G_LIST_MODEL (self->carousel_indicators_model),
+                               hdy_combo_row_get_selected_index (row));
+
+  gtk_stack_set_visible_child_name (self->carousel_indicators_stack,
+                                    hdy_value_object_get_string (obj));
 }
 
 static void
@@ -374,9 +377,11 @@ hdy_demo_window_class_init (HdyDemoWindowClass *klass)
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, combo_row);
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, enum_combo_row);
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel);
+  gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel_box);
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel_listbox);
+  gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel_indicators_stack);
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel_orientation_row);
-  gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel_indicator_style_row);
+  gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, carousel_indicators_row);
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, avatar);
   gtk_widget_class_bind_template_child (widget_class, HdyDemoWindow, avatar_filechooser);
   gtk_widget_class_bind_template_callback_full (widget_class, "key_pressed_cb", 
G_CALLBACK(hdy_demo_window_key_pressed_cb));
@@ -390,7 +395,7 @@ hdy_demo_window_class_init (HdyDemoWindowClass *klass)
   gtk_widget_class_bind_template_callback_full (widget_class, "theme_variant_button_clicked_cb", 
G_CALLBACK(theme_variant_button_clicked_cb));
   gtk_widget_class_bind_template_callback_full (widget_class, "view_switcher_demo_clicked_cb", 
G_CALLBACK(view_switcher_demo_clicked_cb));
   gtk_widget_class_bind_template_callback_full (widget_class, "notify_carousel_orientation_cb", 
G_CALLBACK(notify_carousel_orientation_cb));
-  gtk_widget_class_bind_template_callback_full (widget_class, "notify_carousel_indicator_style_cb", 
G_CALLBACK(notify_carousel_indicator_style_cb));
+  gtk_widget_class_bind_template_callback_full (widget_class, "notify_carousel_indicators_cb", 
G_CALLBACK(notify_carousel_indicators_cb));
   gtk_widget_class_bind_template_callback_full (widget_class, "carousel_return_clicked_cb", 
G_CALLBACK(carousel_return_clicked_cb));
   gtk_widget_class_bind_template_callback_full (widget_class, "avatar_file_remove_cb", 
G_CALLBACK(avatar_file_remove_cb));
   gtk_widget_class_bind_template_callback_full (widget_class, "avatar_file_set_cb", 
G_CALLBACK(avatar_file_set_cb));
@@ -422,6 +427,34 @@ lists_page_init (HdyDemoWindow *self)
   update (self);
 }
 
+static void
+carousel_page_init (HdyDemoWindow *self)
+{
+  HdyValueObject *obj;
+
+  hdy_combo_row_set_for_enum (self->carousel_orientation_row,
+                              GTK_TYPE_ORIENTATION,
+                              carousel_orientation_name,
+                              NULL,
+                              NULL);
+
+  self->carousel_indicators_model = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
+
+  obj = hdy_value_object_new_string ("dots");
+  g_list_store_insert (self->carousel_indicators_model, 0, obj);
+  g_clear_object (&obj);
+
+  obj = hdy_value_object_new_string ("lines");
+  g_list_store_insert (self->carousel_indicators_model, 1, obj);
+  g_clear_object (&obj);
+
+  hdy_combo_row_bind_name_model (self->carousel_indicators_row,
+                                 G_LIST_MODEL (self->carousel_indicators_model),
+                                 (HdyComboRowGetNameFunc) carousel_indicators_name,
+                                 NULL,
+                                 NULL);
+}
+
 static void
 hdy_demo_window_init (HdyDemoWindow *self)
 {
@@ -444,10 +477,7 @@ hdy_demo_window_init (HdyDemoWindow *self)
   hdy_combo_row_set_selected_index (self->deck_transition_row, HDY_DECK_TRANSITION_TYPE_OVER);
 
   lists_page_init (self);
-
-  hdy_combo_row_set_for_enum (self->carousel_orientation_row, GTK_TYPE_ORIENTATION, 
carousel_orientation_name, NULL, NULL);
-  hdy_combo_row_set_for_enum (self->carousel_indicator_style_row, HDY_TYPE_CAROUSEL_INDICATOR_STYLE, 
carousel_indicator_style_name, NULL, NULL);
-  hdy_combo_row_set_selected_index (self->carousel_indicator_style_row, HDY_CAROUSEL_INDICATOR_STYLE_DOTS);
+  carousel_page_init (self);
 
   hdy_leaflet_set_visible_child_name (self->content_box, "content");
 }
diff --git a/examples/hdy-demo-window.ui b/examples/hdy-demo-window.ui
index 38fb6fce..8731cf9a 100644
--- a/examples/hdy-demo-window.ui
+++ b/examples/hdy-demo-window.ui
@@ -1704,101 +1704,153 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="HdyCarousel" id="carousel">
+                      <object class="GtkBox">
+                        <property name="visible">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="carousel_box">
                         <property name="visible">True</property>
-                        <property name="center_content">True</property>
-                        <property name="indicator_spacing">6</property>
+                        <property name="orientation">vertical</property>
                         <child>
-                          <object class="GtkBox">
+                          <object class="GtkBox" id="carousel_empty_box">
+                            <property name="visible">True</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="HdyCarousel" id="carousel">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <property name="can_focus">False</property>
-                            <property name="halign">center</property>
-                            <property name="valign">center</property>
-                            <property name="vexpand">True</property>
-                            <property name="hexpand">True</property>
-                            <child>
-                              <object class="GtkImage">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="valign">center</property>
-                                <property name="pixel_size">128</property>
-                                <property name="icon_name">view-continuous-symbolic</property>
-                                <property name="icon-size">0</property>
-                                <property name="margin-bottom">18</property>
-                                <style>
-                                  <class name="dim-label"/>
-                                  <class name="carousel-icon"/>
-                                </style>
-                              </object>
-                            </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">True</property>
                                 <property name="orientation">vertical</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">center</property>
+                                <property name="valign">center</property>
+                                <property name="vexpand">True</property>
+                                <property name="hexpand">True</property>
                                 <child>
-                                  <object class="GtkLabel">
+                                  <object class="GtkImage">
                                     <property name="visible">True</property>
-                                    <property name="opacity">0.5</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Carousel</property>
-                                    <property name="halign">center</property>
-                                    <property name="xalign">0</property>
-                                    <property name="margin-bottom">12</property>
-                                    <attributes>
-                                      <attribute name="weight" value="bold"/>
-                                      <attribute name="scale" value="2"/>
-                                    </attributes>
+                                    <property name="valign">center</property>
+                                    <property name="pixel_size">128</property>
+                                    <property name="icon_name">view-continuous-symbolic</property>
+                                    <property name="icon-size">0</property>
+                                    <property name="margin-bottom">18</property>
+                                    <style>
+                                      <class name="dim-label"/>
+                                      <class name="carousel-icon"/>
+                                    </style>
                                   </object>
                                 </child>
                                 <child>
-                                  <object class="GtkLabel">
+                                  <object class="GtkBox">
+                                    <property name="visible">True</property>
+                                    <property name="orientation">vertical</property>
+                                    <child>
+                                      <object class="GtkLabel">
+                                        <property name="visible">True</property>
+                                        <property name="opacity">0.5</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes">Carousel</property>
+                                        <property name="halign">center</property>
+                                        <property name="xalign">0</property>
+                                        <property name="margin-bottom">12</property>
+                                        <attributes>
+                                          <attribute name="weight" value="bold"/>
+                                          <attribute name="scale" value="2"/>
+                                        </attributes>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel">
+                                        <property name="visible">True</property>
+                                        <property name="opacity">0.5</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes">A widget for paginated 
scrolling.</property>
+                                        <property name="justify">center</property>
+                                        <property name="use_markup">true</property>
+                                        <property name="wrap">True</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="HdyClamp">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="halign">fill</property>
+                                <property name="valign">fill</property>
+                                <property name="margin-bottom">32</property>
+                                <property name="margin-start">12</property>
+                                <property name="margin-end">12</property>
+                                <property name="expand">True</property>
+                                <property name="maximum-size">400</property>
+                                <property name="tightening-threshold">300</property>
+                                <child>
+                                  <object class="GtkListBox" id="carousel_listbox">
                                     <property name="visible">True</property>
-                                    <property name="opacity">0.5</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">A widget for paginated 
scrolling.</property>
-                                    <property name="justify">center</property>
-                                    <property name="use_markup">true</property>
-                                    <property name="wrap">True</property>
+                                    <property name="valign">center</property>
+                                    <property name="selection-mode">none</property>
+                                    <style>
+                                      <class name="content"/>
+                                    </style>
+                                    <child>
+                                      <object class="HdyComboRow" id="carousel_orientation_row">
+                                        <property name="title" translatable="yes">Orientation</property>
+                                        <property name="visible">True</property>
+                                        <signal name="notify::selected-index" 
handler="notify_carousel_orientation_cb" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="HdyComboRow" id="carousel_indicators_row">
+                                        <property name="title" translatable="yes">Page Indicators</property>
+                                        <property name="visible">True</property>
+                                        <signal name="notify::selected-index" 
handler="notify_carousel_indicators_cb" swapped="no"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="HdyClamp">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="halign">fill</property>
-                            <property name="valign">fill</property>
-                            <property name="margin-bottom">32</property>
-                            <property name="margin-start">12</property>
-                            <property name="margin-end">12</property>
-                            <property name="expand">True</property>
-                            <property name="maximum-size">400</property>
-                            <property name="tightening-threshold">300</property>
                             <child>
-                              <object class="GtkListBox" id="carousel_listbox">
+                              <object class="GtkBox">
                                 <property name="visible">True</property>
+                                <property name="orientation">vertical</property>
                                 <property name="can_focus">False</property>
+                                <property name="halign">center</property>
                                 <property name="valign">center</property>
-                                <property name="selection-mode">none</property>
-                                <style>
-                                  <class name="content"/>
-                                </style>
+                                <property name="vexpand">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="spacing">24</property>
                                 <child>
-                                  <object class="HdyComboRow" id="carousel_orientation_row">
-                                    <property name="title" translatable="yes">Orientation</property>
+                                  <object class="GtkLabel">
                                     <property name="visible">True</property>
-                                    <signal name="notify::selected-index" 
handler="notify_carousel_orientation_cb" swapped="no"/>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Another page</property>
+                                    <property name="justify">center</property>
+                                    <property name="wrap">True</property>
+                                    <property name="opacity">0.5</property>
+                                    <attributes>
+                                      <attribute name="weight" value="bold"/>
+                                      <attribute name="scale" value="2"/>
+                                    </attributes>
                                   </object>
                                 </child>
                                 <child>
-                                  <object class="HdyComboRow" id="carousel_indicator_style_row">
-                                    <property name="title" translatable="yes">Page Indicators</property>
+                                  <object class="GtkButton">
                                     <property name="visible">True</property>
-                                    <signal name="notify::selected-index" 
handler="notify_carousel_indicator_style_cb" swapped="no"/>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">_Return to the first 
page</property>
+                                    <property name="use-underline">True</property>
+                                    <signal name="clicked" handler="carousel_return_clicked_cb" 
swapped="no"/>
+                                    <style>
+                                      <class name="suggested-action"/>
+                                    </style>
                                   </object>
                                 </child>
                               </object>
@@ -1806,40 +1858,29 @@
                           </object>
                         </child>
                         <child>
-                          <object class="GtkBox">
+                          <object class="GtkStack" id="carousel_indicators_stack">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <property name="can_focus">False</property>
-                            <property name="halign">center</property>
-                            <property name="valign">center</property>
-                            <property name="vexpand">True</property>
-                            <property name="hexpand">True</property>
-                            <property name="spacing">24</property>
+                            <property name="homogeneous">False</property>
+                            <property name="margin">6</property>
                             <child>
-                              <object class="GtkLabel">
+                              <object class="HdyCarouselIndicatorDots">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">Another page</property>
-                                <property name="justify">center</property>
-                                <property name="wrap">True</property>
-                                <property name="opacity">0.5</property>
-                                <attributes>
-                                  <attribute name="weight" value="bold"/>
-                                  <attribute name="scale" value="2"/>
-                                </attributes>
+                                <property name="carousel">carousel</property>
+                                <property name="orientation" bind-source="carousel" 
bind-property="orientation" bind-flags="sync-create"/>
                               </object>
+                              <packing>
+                                <property name="name">dots</property>
+                              </packing>
                             </child>
                             <child>
-                              <object class="GtkButton">
+                              <object class="HdyCarouselIndicatorLines">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">_Return to the first 
page</property>
-                                <property name="use-underline">True</property>
-                                <signal name="clicked" handler="carousel_return_clicked_cb" swapped="no"/>
-                                <style>
-                                  <class name="suggested-action"/>
-                                </style>
+                                <property name="carousel">carousel</property>
+                                <property name="orientation" bind-source="carousel" 
bind-property="orientation" bind-flags="sync-create"/>
                               </object>
+                              <packing>
+                                <property name="name">lines</property>
+                              </packing>
                             </child>
                           </object>
                         </child>
@@ -2400,6 +2441,13 @@
     <property name="page-increment">100</property>
     <property name="step-increment">10</property>
   </object>
+  <object class="GtkSizeGroup">
+    <property name="mode">both</property>
+    <widgets>
+      <widget name="carousel_empty_box"/>
+      <widget name="carousel_indicators_stack"/>
+    </widgets>
+  </object>
   <object class="GtkAdjustment" id="avatar_adjustment">
     <property name="lower">24</property>
     <property name="upper">320</property>


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