1 #include "hdy-flap-demo-window.h"
2 
3 #include <glib/gi18n.h>
4 
5 struct _HdyFlapDemoWindow
6 {
7   HdyWindow parent_instance;
8 
9   HdyFlap *flap;
10   GtkWidget *reveal_btn_start;
11   GtkWidget *reveal_btn_end;
12   HdyComboRow *fold_policy_row;
13   HdyComboRow *transition_type_row;
14 };
15 
G_DEFINE_TYPE(HdyFlapDemoWindow,hdy_flap_demo_window,HDY_TYPE_WINDOW)16 G_DEFINE_TYPE (HdyFlapDemoWindow, hdy_flap_demo_window, HDY_TYPE_WINDOW)
17 
18 static gchar *
19 fold_policy_name (HdyEnumValueObject *value,
20                   gpointer            user_data)
21 {
22   g_return_val_if_fail (HDY_IS_ENUM_VALUE_OBJECT (value), NULL);
23 
24   switch (hdy_enum_value_object_get_value (value)) {
25   case HDY_FLAP_FOLD_POLICY_NEVER:
26     return g_strdup (_("Never"));
27   case HDY_FLAP_FOLD_POLICY_ALWAYS:
28     return g_strdup (_("Always"));
29   case HDY_FLAP_FOLD_POLICY_AUTO:
30     return g_strdup (_("Auto"));
31   default:
32     return NULL;
33   }
34 }
35 
36 static gchar *
transition_type_name(HdyEnumValueObject * value,gpointer user_data)37 transition_type_name (HdyEnumValueObject *value,
38                       gpointer            user_data)
39 {
40   g_return_val_if_fail (HDY_IS_ENUM_VALUE_OBJECT (value), NULL);
41 
42   switch (hdy_enum_value_object_get_value (value)) {
43   case HDY_FLAP_TRANSITION_TYPE_OVER:
44     return g_strdup (_("Over"));
45   case HDY_FLAP_TRANSITION_TYPE_UNDER:
46     return g_strdup (_("Under"));
47   case HDY_FLAP_TRANSITION_TYPE_SLIDE:
48     return g_strdup (_("Slide"));
49   default:
50     return NULL;
51   }
52 }
53 
54 static void
start_toggle_button_toggled_cb(GtkToggleButton * button,HdyFlapDemoWindow * self)55 start_toggle_button_toggled_cb (GtkToggleButton    *button,
56                                 HdyFlapDemoWindow *self)
57 {
58   if (gtk_toggle_button_get_active (button)) {
59     hdy_flap_set_flap_position (self->flap, GTK_PACK_START);
60     gtk_widget_hide (self->reveal_btn_end);
61     gtk_widget_show (self->reveal_btn_start);
62   } else {
63     hdy_flap_set_flap_position (self->flap, GTK_PACK_END);
64     gtk_widget_hide (self->reveal_btn_start);
65     gtk_widget_show (self->reveal_btn_end);
66   }
67 }
68 
69 static void
stack_notify_visible_child_cb(HdyFlapDemoWindow * self)70 stack_notify_visible_child_cb (HdyFlapDemoWindow *self)
71 {
72   if (hdy_flap_get_folded (self->flap) && !hdy_flap_get_locked (self->flap))
73     hdy_flap_set_reveal_flap (self->flap, FALSE);
74 }
75 
76 static void
hdy_flap_demo_window_class_init(HdyFlapDemoWindowClass * klass)77 hdy_flap_demo_window_class_init (HdyFlapDemoWindowClass *klass)
78 {
79   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
80 
81   gtk_widget_class_set_template_from_resource (widget_class, "/sm/puri/Handy/Demo/ui/hdy-flap-demo-window.ui");
82   gtk_widget_class_bind_template_child (widget_class, HdyFlapDemoWindow, flap);
83   gtk_widget_class_bind_template_child (widget_class, HdyFlapDemoWindow, reveal_btn_start);
84   gtk_widget_class_bind_template_child (widget_class, HdyFlapDemoWindow, reveal_btn_end);
85   gtk_widget_class_bind_template_child (widget_class, HdyFlapDemoWindow, fold_policy_row);
86   gtk_widget_class_bind_template_child (widget_class, HdyFlapDemoWindow, transition_type_row);
87   gtk_widget_class_bind_template_callback (widget_class, start_toggle_button_toggled_cb);
88   gtk_widget_class_bind_template_callback (widget_class, stack_notify_visible_child_cb);
89 }
90 
91 static void
hdy_flap_demo_window_init(HdyFlapDemoWindow * self)92 hdy_flap_demo_window_init (HdyFlapDemoWindow *self)
93 {
94   gtk_widget_init_template (GTK_WIDGET (self));
95 
96   hdy_combo_row_set_for_enum (self->fold_policy_row,
97                               HDY_TYPE_FLAP_FOLD_POLICY,
98                               fold_policy_name, NULL, NULL);
99   hdy_combo_row_set_selected_index (self->fold_policy_row,
100                                     HDY_FLAP_FOLD_POLICY_AUTO);
101 
102   hdy_combo_row_set_for_enum (self->transition_type_row,
103                               HDY_TYPE_FLAP_TRANSITION_TYPE,
104                               transition_type_name, NULL, NULL);
105   hdy_combo_row_set_selected_index (self->transition_type_row,
106                                     HDY_FLAP_TRANSITION_TYPE_OVER);
107 }
108 
109 HdyFlapDemoWindow *
hdy_flap_demo_window_new(void)110 hdy_flap_demo_window_new (void)
111 {
112   return g_object_new (HDY_TYPE_FLAP_DEMO_WINDOW, NULL);
113 }
114