1/* Stack Sidebar
2 *
3 * GtkStackSidebar provides an automatic sidebar widget to control
4 * navigation of a GtkStack object. This widget automatically updates
5 * its content based on what is presently available in the GtkStack
6 * object, and using the "title" child property to set the display labels.
7 */
8
9#include <glib/gi18n.h>
10#include <gtk/gtk.h>
11
12GtkWidget *
13do_sidebar (GtkWidget *do_widget)
14{
15 static GtkWidget *window = NULL;
16 GtkWidget *sidebar;
17 GtkWidget *stack;
18 GtkWidget *box;
19 GtkWidget *widget;
20 GtkWidget *header;
21 const char * pages[] = {
22 "Welcome to GTK",
23 "GtkStackSidebar Widget",
24 "Automatic navigation",
25 "Consistent appearance",
26 "Scrolling",
27 "Page 6",
28 "Page 7",
29 "Page 8",
30 "Page 9",
31 NULL
32 };
33 const char *c = NULL;
34 guint i;
35
36 if (!window)
37 {
38 window = gtk_window_new ();
39 gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
40
41 header = gtk_header_bar_new ();
42 gtk_window_set_titlebar (GTK_WINDOW(window), titlebar: header);
43 gtk_window_set_title (GTK_WINDOW(window), title: "Stack Sidebar");
44 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
45
46 box = gtk_box_new (orientation: GTK_ORIENTATION_HORIZONTAL, spacing: 0);
47 sidebar = gtk_stack_sidebar_new ();
48 gtk_box_append (GTK_BOX (box), child: sidebar);
49
50 stack = gtk_stack_new ();
51 gtk_stack_set_transition_type (GTK_STACK (stack), transition: GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN);
52 gtk_stack_sidebar_set_stack (GTK_STACK_SIDEBAR (sidebar), GTK_STACK (stack));
53 gtk_widget_set_hexpand (widget: stack, TRUE);
54
55 gtk_box_append (GTK_BOX (box), child: stack);
56
57 for (i=0; (c = *(pages+i)) != NULL; i++ )
58 {
59 if (i == 0)
60 {
61 widget = gtk_image_new_from_icon_name (icon_name: "org.gtk.Demo4");
62 gtk_widget_add_css_class (widget, css_class: "icon-dropshadow");
63 gtk_image_set_pixel_size (GTK_IMAGE (widget), pixel_size: 256);
64 }
65 else
66 {
67 widget = gtk_label_new (str: c);
68 }
69 gtk_stack_add_named (GTK_STACK (stack), child: widget, name: c);
70 g_object_set (object: gtk_stack_get_page (GTK_STACK (stack), child: widget), first_property_name: "title", c, NULL);
71 }
72
73 gtk_window_set_child (GTK_WINDOW (window), child: box);
74 }
75
76 if (!gtk_widget_get_visible (widget: window))
77 gtk_widget_show (widget: window);
78 else
79 gtk_window_destroy (GTK_WINDOW (window));
80
81 return window;
82}
83

source code of gtk/demos/gtk-demo/sidebar.c