[libhandy] examples: Use the new carousel indicator widgets
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libhandy] examples: Use the new carousel indicator widgets
- Date: Tue, 4 Aug 2020 13:59:40 +0000 (UTC)
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]