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