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 | |
16 | GtkWidget * |
17 | do_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 | |