]> Pileus Git - ~andy/gtk/blob - tests/testscrolledwindow.c
Add content size test for scrolled window
[~andy/gtk] / tests / testscrolledwindow.c
1 #include <gtk/gtk.h>
2
3
4 static void
5 horizontal_policy_changed (GtkComboBox *combo_box,
6                            GtkViewport *viewport)
7 {
8   GtkScrollablePolicy policy = gtk_combo_box_get_active (combo_box);
9
10   gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (viewport), policy);
11 }
12
13 static void
14 vertical_policy_changed (GtkComboBox *combo_box,
15                          GtkViewport *viewport)
16 {
17   GtkScrollablePolicy policy = gtk_combo_box_get_active (combo_box);
18
19   gtk_scrollable_set_vscroll_policy (GTK_SCROLLABLE (viewport), policy);
20 }
21
22 static void
23 label_flip_changed (GtkComboBox *combo_box,
24                     GtkLabel    *label)
25 {
26   gint active = gtk_combo_box_get_active (combo_box);
27
28   if (active == 0)
29     gtk_label_set_angle (label, 0.0);
30   else 
31     gtk_label_set_angle (label, 90.0);
32 }
33
34 static void
35 content_width_changed (GtkSpinButton *spin_button,
36                        gpointer       data)
37 {
38   GtkScrolledWindow *swindow = data;
39   gdouble value;
40
41   value = gtk_spin_button_get_value (spin_button);
42   gtk_scrolled_window_set_min_content_width (swindow, (gint)value);
43 }
44
45 static void
46 content_height_changed (GtkSpinButton *spin_button,
47                         gpointer       data)
48 {
49   GtkScrolledWindow *swindow = data;
50   gdouble value;
51
52   value = gtk_spin_button_get_value (spin_button);
53   gtk_scrolled_window_set_min_content_height (swindow, (gint)value);
54 }
55
56 static void
57 scrollable_policy (void)
58 {
59   GtkWidget *window, *swindow, *hbox, *vbox, *frame, *cntl;
60   GtkWidget *viewport, *label, *expander, *widget;
61
62   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
63   hbox   = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
64   vbox   = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 6);
65
66   gtk_container_set_border_width (GTK_CONTAINER (window), 8);
67
68   gtk_widget_show (vbox);
69   gtk_widget_show (hbox);
70   gtk_container_add (GTK_CONTAINER (window), hbox);
71   gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
72
73   frame = gtk_frame_new ("Scrolled Window");
74   gtk_widget_show (frame);
75   gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
76
77   swindow = gtk_scrolled_window_new (NULL, NULL);
78   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
79                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
80   
81   gtk_widget_show (swindow);
82   gtk_container_add (GTK_CONTAINER (frame), swindow);
83
84   viewport = gtk_viewport_new (NULL, NULL);
85   label = gtk_label_new ("Here is a wrapping label with a minimum width-chars of 40 and "
86                          "a natural max-width-chars of 100 to demonstrate the usage of "
87                          "scrollable widgets \"hscroll-policy\" and \"vscroll-policy\" "
88                          "properties. Note also that when playing with the window height, "
89                          "one can observe that the vscrollbar disappears as soon as there "
90                          "is enough height to fit the content vertically if the window were "
91                          "to be allocated a width without a vscrollbar present");
92
93   gtk_label_set_line_wrap  (GTK_LABEL (label), TRUE);
94   gtk_label_set_width_chars  (GTK_LABEL (label), 40);
95   gtk_label_set_max_width_chars  (GTK_LABEL (label), 100);
96
97   gtk_widget_show (label);
98   gtk_widget_show (viewport);
99   gtk_container_add (GTK_CONTAINER (viewport), label);
100   gtk_container_add (GTK_CONTAINER (swindow), viewport);
101
102   /* Add controls here */
103   expander = gtk_expander_new ("Controls");
104   gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE);
105   cntl = gtk_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 2);
106   gtk_widget_show (cntl);
107   gtk_widget_show (expander);
108   gtk_container_add (GTK_CONTAINER (expander), cntl);
109   gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0);
110
111   /* Add Horizontal policy control here */
112   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
113   gtk_widget_show (hbox);
114
115   widget = gtk_label_new ("hscroll-policy");
116   gtk_widget_show (widget);
117   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
118
119   widget = gtk_combo_box_text_new ();
120   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Minimum");
121   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Natural");
122   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
123   gtk_widget_show (widget);
124
125   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
126   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
127
128   g_signal_connect (G_OBJECT (widget), "changed",
129                     G_CALLBACK (horizontal_policy_changed), viewport);
130
131   /* Add Vertical policy control here */
132   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
133   gtk_widget_show (hbox);
134
135   widget = gtk_label_new ("vscroll-policy");
136   gtk_widget_show (widget);
137   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
138
139   widget = gtk_combo_box_text_new ();
140   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Minimum");
141   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Natural");
142   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
143   gtk_widget_show (widget);
144
145   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
146   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
147
148   g_signal_connect (G_OBJECT (widget), "changed",
149                     G_CALLBACK (vertical_policy_changed), viewport);
150
151   /* Content size controls */
152   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
153
154   widget = gtk_label_new ("min-content-width");
155   gtk_widget_show (widget);
156   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
157
158   widget = gtk_spin_button_new_with_range (100.0, 1000.0, 10.0);
159   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
160   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
161   gtk_widget_show (widget);
162   gtk_widget_show (hbox);
163
164   g_signal_connect (G_OBJECT (widget), "value-changed",
165                     G_CALLBACK (content_width_changed), swindow);
166
167   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
168
169   widget = gtk_label_new ("min-content-height");
170   gtk_widget_show (widget);
171   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
172
173   widget = gtk_spin_button_new_with_range (100.0, 1000.0, 10.0);
174   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
175   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
176   gtk_widget_show (widget);
177   gtk_widget_show (hbox);
178
179   g_signal_connect (G_OBJECT (widget), "value-changed",
180                     G_CALLBACK (content_height_changed), swindow);
181
182   /* Add Label orientation control here */
183   hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
184   gtk_widget_show (hbox);
185
186   widget = gtk_label_new ("label-flip");
187   gtk_widget_show (widget);
188   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
189
190   widget = gtk_combo_box_text_new ();
191   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
192   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
193   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
194   gtk_widget_show (widget);
195
196   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
197   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
198
199   g_signal_connect (G_OBJECT (widget), "changed",
200                     G_CALLBACK (label_flip_changed), label);
201
202   gtk_widget_show (window);
203 }
204
205
206 int
207 main (int argc, char *argv[])
208 {
209   gtk_init (NULL, NULL);
210
211   scrollable_policy ();
212
213   gtk_main ();
214
215   return 0;
216 }