1 #include "hdy-view-switcher-demo-window.h"
2
3 #include <glib/gi18n.h>
4 #define HANDY_USE_UNSTABLE_API
5 #include <handy.h>
6
7 struct _HdyViewSwitcherDemoWindow
8 {
9 GtkWindow parent_instance;
10
11 HdySqueezer *squeezer;
12 HdyViewSwitcherBar *switcher_bar;
13 GtkLabel *title_label;
14 HdyViewSwitcher *title_narrow_switcher;
15 HdyViewSwitcher *title_wide_switcher;
16 };
17
G_DEFINE_TYPE(HdyViewSwitcherDemoWindow,hdy_view_switcher_demo_window,GTK_TYPE_WINDOW)18 G_DEFINE_TYPE (HdyViewSwitcherDemoWindow, hdy_view_switcher_demo_window, GTK_TYPE_WINDOW)
19
20 static gboolean
21 is_title_label_visible (GBinding *binding,
22 const GValue *from_value,
23 GValue *to_value,
24 gpointer user_data)
25 {
26 g_value_set_boolean (to_value, g_value_get_object (from_value) == user_data);
27
28 return TRUE;
29 }
30
31 static void
hdy_view_switcher_demo_window_size_allocate(GtkWidget * widget,GtkAllocation * allocation)32 hdy_view_switcher_demo_window_size_allocate (GtkWidget *widget,
33 GtkAllocation *allocation)
34 {
35 HdyViewSwitcherDemoWindow *self = HDY_VIEW_SWITCHER_DEMO_WINDOW (widget);
36 hdy_squeezer_set_child_enabled (self->squeezer,
37 GTK_WIDGET (self->title_wide_switcher),
38 allocation->width > 600);
39 hdy_squeezer_set_child_enabled (self->squeezer,
40 GTK_WIDGET (self->title_narrow_switcher),
41 allocation->width > 400);
42
43 GTK_WIDGET_CLASS (hdy_view_switcher_demo_window_parent_class)->size_allocate (widget, allocation);
44 }
45
46 static void
hdy_view_switcher_demo_window_class_init(HdyViewSwitcherDemoWindowClass * klass)47 hdy_view_switcher_demo_window_class_init (HdyViewSwitcherDemoWindowClass *klass)
48 {
49 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
50
51 widget_class->size_allocate = hdy_view_switcher_demo_window_size_allocate;
52
53 gtk_widget_class_set_template_from_resource (widget_class, "/sm/puri/handy/demo/ui/hdy-view-switcher-demo-window.ui");
54 gtk_widget_class_bind_template_child (widget_class, HdyViewSwitcherDemoWindow, squeezer);
55 gtk_widget_class_bind_template_child (widget_class, HdyViewSwitcherDemoWindow, switcher_bar);
56 gtk_widget_class_bind_template_child (widget_class, HdyViewSwitcherDemoWindow, title_label);
57 gtk_widget_class_bind_template_child (widget_class, HdyViewSwitcherDemoWindow, title_narrow_switcher);
58 gtk_widget_class_bind_template_child (widget_class, HdyViewSwitcherDemoWindow, title_wide_switcher);
59 }
60
61 static void
hdy_view_switcher_demo_window_init(HdyViewSwitcherDemoWindow * self)62 hdy_view_switcher_demo_window_init (HdyViewSwitcherDemoWindow *self)
63 {
64 gtk_widget_init_template (GTK_WIDGET (self));
65
66 g_object_bind_property_full (self->squeezer,
67 "visible-child",
68 self->switcher_bar,
69 "reveal",
70 G_BINDING_SYNC_CREATE,
71 is_title_label_visible,
72 NULL,
73 self->title_label,
74 NULL);
75
76 }
77
78 HdyViewSwitcherDemoWindow *
hdy_view_switcher_demo_window_new(void)79 hdy_view_switcher_demo_window_new (void)
80 {
81 return g_object_new (HDY_TYPE_VIEW_SWITCHER_DEMO_WINDOW, NULL);
82 }
83