1/* Paned Widgets
2 *
3 * The GtkPaned Widget divides its content area into two panes
4 * with a divider in between that the user can adjust. A separate
5 * child is placed into each pane. GtkPaned widgets can be split
6 * horizontally or vertically. This test contains both a horizontal
7 * and a vertical GtkPaned widget.
8 *
9 * There are a number of options that can be set for each pane.
10 * You can use the Inspector to adjust the options for each side
11 * of each widget.
12 */
13
14#include <gtk/gtk.h>
15
16GtkWidget *
17do_panes (GtkWidget *do_widget)
18{
19 static GtkWidget *window = NULL;
20 GtkWidget *frame;
21 GtkWidget *hpaned;
22 GtkWidget *vpaned;
23 GtkWidget *label;
24 GtkWidget *vbox;
25
26 if (!window)
27 {
28 window = gtk_window_new ();
29 gtk_window_set_title (GTK_WINDOW (window), title: "Paned Widgets");
30 gtk_window_set_default_size (GTK_WINDOW (window), width: 330, height: 250);
31 gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
32 gtk_window_set_display (GTK_WINDOW (window),
33 display: gtk_widget_get_display (widget: do_widget));
34 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
35
36 vbox = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 8);
37 gtk_widget_set_margin_start (widget: vbox, margin: 8);
38 gtk_widget_set_margin_end (widget: vbox, margin: 8);
39 gtk_widget_set_margin_top (widget: vbox, margin: 8);
40 gtk_widget_set_margin_bottom (widget: vbox, margin: 8);
41 gtk_window_set_child (GTK_WINDOW (window), child: vbox);
42
43 frame = gtk_frame_new (NULL);
44 gtk_box_append (GTK_BOX (vbox), child: frame);
45
46 vpaned = gtk_paned_new (orientation: GTK_ORIENTATION_VERTICAL);
47 gtk_frame_set_child (GTK_FRAME (frame), child: vpaned);
48
49 hpaned = gtk_paned_new (orientation: GTK_ORIENTATION_HORIZONTAL);
50 gtk_paned_set_start_child (GTK_PANED (vpaned), child: hpaned);
51 gtk_paned_set_shrink_start_child (GTK_PANED (vpaned), FALSE);
52
53 label = gtk_label_new (str: "Hi there");
54 gtk_widget_set_margin_start (widget: label, margin: 4);
55 gtk_widget_set_margin_end (widget: label, margin: 4);
56 gtk_widget_set_margin_top (widget: label, margin: 4);
57 gtk_widget_set_margin_bottom (widget: label, margin: 4);
58 gtk_widget_set_hexpand (widget: label, TRUE);
59 gtk_widget_set_vexpand (widget: label, TRUE);
60 gtk_paned_set_start_child (GTK_PANED (hpaned), child: label);
61 gtk_paned_set_shrink_start_child (GTK_PANED (hpaned), FALSE);
62
63 label = gtk_label_new (str: "Hello");
64 gtk_widget_set_margin_start (widget: label, margin: 4);
65 gtk_widget_set_margin_end (widget: label, margin: 4);
66 gtk_widget_set_margin_top (widget: label, margin: 4);
67 gtk_widget_set_margin_bottom (widget: label, margin: 4);
68 gtk_widget_set_hexpand (widget: label, TRUE);
69 gtk_widget_set_vexpand (widget: label, TRUE);
70 gtk_paned_set_end_child (GTK_PANED (hpaned), child: label);
71 gtk_paned_set_shrink_end_child (GTK_PANED (hpaned), FALSE);
72
73 label = gtk_label_new (str: "Goodbye");
74 gtk_widget_set_margin_start (widget: label, margin: 4);
75 gtk_widget_set_margin_end (widget: label, margin: 4);
76 gtk_widget_set_margin_top (widget: label, margin: 4);
77 gtk_widget_set_margin_bottom (widget: label, margin: 4);
78 gtk_widget_set_hexpand (widget: label, TRUE);
79 gtk_widget_set_vexpand (widget: label, TRUE);
80 gtk_paned_set_end_child (GTK_PANED (vpaned), child: label);
81 gtk_paned_set_shrink_end_child (GTK_PANED (vpaned), FALSE);
82 }
83
84 if (!gtk_widget_get_visible (widget: window))
85 gtk_widget_show (widget: window);
86 else
87 gtk_window_destroy (GTK_WINDOW (window));
88
89 return window;
90}
91

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