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, GtkWidget *child)
19 GtkPaned *paned = GTK_PANED (child->parent);
20 gboolean is_child1 = (child == paned->child1);
21 gboolean resize, shrink;
23 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
24 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
26 gtk_widget_ref (child);
27 gtk_container_remove (GTK_CONTAINER (child->parent), child);
29 gtk_paned_pack1 (paned, child, !resize, shrink);
31 gtk_paned_pack2 (paned, child, !resize, shrink);
32 gtk_widget_unref (child);
36 toggle_shrink (GtkWidget *widget, GtkWidget *child)
38 GtkPaned *paned = GTK_PANED (child->parent);
39 gboolean is_child1 = (child == paned->child1);
40 gboolean resize, shrink;
42 resize = is_child1 ? paned->child1_resize : paned->child2_resize;
43 shrink = is_child1 ? paned->child1_shrink : paned->child2_shrink;
45 gtk_widget_ref (child);
46 gtk_container_remove (GTK_CONTAINER (child->parent), child);
48 gtk_paned_pack1 (paned, child, resize, !shrink);
50 gtk_paned_pack2 (paned, child, resize, !shrink);
51 gtk_widget_unref (child);
55 create_pane_options (GtkPaned *paned,
56 const gchar *frame_label,
63 GtkWidget *check_button;
65 frame = gtk_frame_new (frame_label);
66 gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
68 table = gtk_table_new (3, 2, 4);
69 gtk_container_add (GTK_CONTAINER (frame), table);
71 label = gtk_label_new (label1);
72 gtk_table_attach_defaults (GTK_TABLE (table), label,
75 check_button = gtk_check_button_new_with_label ("Resize");
76 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
78 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
79 GTK_SIGNAL_FUNC (toggle_resize),
82 check_button = gtk_check_button_new_with_label ("Shrink");
83 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
85 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
87 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
88 GTK_SIGNAL_FUNC (toggle_shrink),
91 label = gtk_label_new (label2);
92 gtk_table_attach_defaults (GTK_TABLE (table), label,
95 check_button = gtk_check_button_new_with_label ("Resize");
96 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
98 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
100 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
101 GTK_SIGNAL_FUNC (toggle_resize),
104 check_button = gtk_check_button_new_with_label ("Shrink");
105 gtk_table_attach_defaults (GTK_TABLE (table), check_button,
107 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
109 gtk_signal_connect (GTK_OBJECT (check_button), "toggled",
110 GTK_SIGNAL_FUNC (toggle_shrink),
119 static GtkWidget *window = NULL;
128 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
130 gtk_signal_connect (GTK_OBJECT (window), "destroy",
131 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
134 gtk_window_set_title (GTK_WINDOW (window), "Panes");
135 gtk_container_set_border_width (GTK_CONTAINER (window), 0);
137 vbox = gtk_vbox_new (FALSE, 0);
138 gtk_container_add (GTK_CONTAINER (window), vbox);
140 vpaned = gtk_vpaned_new ();
141 gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
142 gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
144 hpaned = gtk_hpaned_new ();
145 gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
147 frame = gtk_frame_new (NULL);
148 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
149 gtk_widget_set_usize (frame, 60, 60);
150 gtk_paned_add1 (GTK_PANED (hpaned), frame);
152 button = gtk_button_new_with_label ("Hi there");
153 gtk_container_add (GTK_CONTAINER(frame), button);
155 frame = gtk_frame_new (NULL);
156 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
157 gtk_widget_set_usize (frame, 80, 60);
158 gtk_paned_add2 (GTK_PANED (hpaned), frame);
160 frame = gtk_frame_new (NULL);
161 gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
162 gtk_widget_set_usize (frame, 60, 80);
163 gtk_paned_add2 (GTK_PANED (vpaned), frame);
165 /* Now create toggle buttons to control sizing */
167 gtk_box_pack_start (GTK_BOX (vbox),
168 create_pane_options (GTK_PANED (hpaned),
174 gtk_box_pack_start (GTK_BOX (vbox),
175 create_pane_options (GTK_PANED (vpaned),
181 gtk_widget_show_all (vbox);
184 if (!GTK_WIDGET_VISIBLE (window))
185 gtk_widget_show (window);
187 gtk_widget_destroy (window);