3 * The GtkHPaned and GtkVPaned Widgets divide their content
4 * area into two panes with a divider in between that the
5 * user can adjust. A separate child is placed into each
8 * There are a number of options that can be set for each pane.
9 * This test contains both a horizontal (HPaned) and a vertical
10 * (VPaned) widget, and allows you to adjust the options for
11 * each side of each widget.
17 toggle_resize (GtkWidget *widget,
20 GtkPaned *paned = GTK_PANED (child->parent);
21 gboolean is_child1 = (child == paned->child1);
22 gboolean resize, shrink;
24 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
25 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
28 gtk_container_remove (GTK_CONTAINER (child->parent), child);
30 gtk_paned_pack1 (paned, child, !resize, shrink);
32 gtk_paned_pack2 (paned, child, !resize, shrink);
33 g_object_unref (child);
37 toggle_shrink (GtkWidget *widget,
40 GtkPaned *paned = GTK_PANED (child->parent);
41 gboolean is_child1 = (child == paned->child1);
42 gboolean resize, shrink;
44 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
45 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
48 gtk_container_remove (GTK_CONTAINER (child->parent), child);
50 gtk_paned_pack1 (paned, child, resize, !shrink);
52 gtk_paned_pack2 (paned, child, resize, !shrink);
53 g_object_unref (child);
57 create_pane_options (GtkPaned *paned,
58 const gchar *frame_label,
65 GtkWidget *check_button;
67 frame = gtk_frame_new (frame_label);
68 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
70 table = gtk_table_new (3, 2, TRUE);
71 gtk_container_add (GTK_CONTAINER (frame), table);
73 label = gtk_label_new (label1);
74 gtk_table_attach_defaults (GTK_TABLE (table), label,
77 check_button = gtk_check_button_new_with_mnemonic ("_Resize");
78 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
80 g_signal_connect (check_button, "toggled",
81 G_CALLBACK (toggle_resize), paned->child1);
83 check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
84 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
86 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
88 g_signal_connect (check_button, "toggled",
89 G_CALLBACK (toggle_shrink), paned->child1);
91 label = gtk_label_new (label2);
92 gtk_table_attach_defaults (GTK_TABLE (table), label,
95 check_button = gtk_check_button_new_with_mnemonic ("_Resize");
96 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
98 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
100 g_signal_connect (check_button, "toggled",
101 G_CALLBACK (toggle_resize), paned->child2);
103 check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
104 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
106 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
108 g_signal_connect (check_button, "toggled",
109 G_CALLBACK (toggle_shrink), paned->child2);
115 do_panes (GtkWidget *do_widget)
117 static GtkWidget *window = NULL;
126 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
127 gtk_window_set_screen (GTK_WINDOW (window),
128 gtk_widget_get_screen (do_widget));
130 g_signal_connect (window, "destroy",
131 G_CALLBACK (gtk_widget_destroyed), &window);
133 gtk_window_set_title (GTK_WINDOW (window), "Panes");
134 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
136 vbox = gtk_vbox_new (FALSE, 0);
137 gtk_container_add (GTK_CONTAINER (window), vbox);
139 vpaned = gtk_vpaned_new ();
140 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
141 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
143 hpaned = gtk_hpaned_new ();
144 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
146 frame = gtk_frame_new (NULL);
147 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
148 gtk_widget_set_size_request (frame, 60, 60);
149 gtk_paned_add1 (GTK_PANED (hpaned), frame);
151 button = gtk_button_new_with_mnemonic ("_Hi there");
152 gtk_container_add (GTK_CONTAINER(frame), button);
154 frame = gtk_frame_new (NULL);
155 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
156 gtk_widget_set_size_request (frame, 80, 60);
157 gtk_paned_add2 (GTK_PANED (hpaned), frame);
159 frame = gtk_frame_new (NULL);
160 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
161 gtk_widget_set_size_request (frame, 60, 80);
162 gtk_paned_add2 (GTK_PANED (vpaned), frame);
164 /* Now create toggle buttons to control sizing */
166 gtk_box_pack_start (GTK_BOX (vbox),
167 create_pane_options (GTK_PANED (hpaned),
173 gtk_box_pack_start (GTK_BOX (vbox),
174 create_pane_options (GTK_PANED (vpaned),
180 gtk_widget_show_all (vbox);
183 if (!gtk_widget_get_visible (window))
185 gtk_widget_show (window);
189 gtk_widget_destroy (window);