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