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 | |
12 | GtkWidget * |
13 | (GtkWidget *do_widget) |
14 | { |
15 | static GtkWidget *window = NULL; |
16 | GtkWidget *; |
17 | GtkWidget *stack; |
18 | GtkWidget *box; |
19 | GtkWidget *widget; |
20 | GtkWidget *; |
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 | |