]> Pileus Git - ~andy/gtk/blob - tests/testscrolledwindow.c
cb8d3be1a8bf698c3b3d51d494039731890337bd
[~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
35 static void
36 scrollable_policy (void)
37 {
38   GtkWidget *window, *swindow, *hbox, *vbox, *frame, *cntl;
39   GtkWidget *viewport, *label, *expander, *widget;
40
41   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
42   hbox   = gtk_hbox_new (FALSE, 2);
43   vbox   = gtk_vbox_new (FALSE, 6);
44
45   gtk_container_set_border_width (GTK_CONTAINER (window), 8);
46
47   gtk_widget_show (vbox);
48   gtk_widget_show (hbox);
49   gtk_container_add (GTK_CONTAINER (window), hbox);
50   gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
51
52   frame = gtk_frame_new ("Scrolled Window");
53   gtk_widget_show (frame);
54   gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
55
56   swindow = gtk_scrolled_window_new (NULL, NULL);
57   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
58                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
59   
60   gtk_widget_show (swindow);
61   gtk_container_add (GTK_CONTAINER (frame), swindow);
62
63   viewport = gtk_viewport_new (NULL, NULL);
64   label = gtk_label_new ("Here is a wrapping label with a minimum width-chars of 40 and "
65                          "a natural max-width-chars of 100 to demonstrate the usage of "
66                          "scrollable widgets \"hscroll-policy\" and \"vscroll-policy\" "
67                          "properties. Note also that when playing with the window height, "
68                          "one can observe that the vscrollbar disappears as soon as there "
69                          "is enough height to fit the content vertically if the window were "
70                          "to be allocated a width without a vscrollbar present");
71
72   gtk_label_set_line_wrap  (GTK_LABEL (label), TRUE);
73   gtk_label_set_width_chars  (GTK_LABEL (label), 40);
74   gtk_label_set_max_width_chars  (GTK_LABEL (label), 100);
75
76   gtk_widget_show (label);
77   gtk_widget_show (viewport);
78   gtk_container_add (GTK_CONTAINER (viewport), label);
79   gtk_container_add (GTK_CONTAINER (swindow), viewport);
80
81   /* Add controls here */
82   expander = gtk_expander_new ("Controls");
83   gtk_expander_set_expanded (GTK_EXPANDER (expander), TRUE);
84   cntl = gtk_vbox_new (FALSE, 2);
85   gtk_widget_show (cntl);
86   gtk_widget_show (expander);
87   gtk_container_add (GTK_CONTAINER (expander), cntl);
88   gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0);
89
90   /* Add Horizontal policy control here */
91   hbox = gtk_hbox_new (FALSE, 2);
92   gtk_widget_show (hbox);
93
94   widget = gtk_label_new ("hscroll-policy");
95   gtk_widget_show (widget);
96   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
97
98   widget = gtk_combo_box_text_new ();
99   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Minimum");
100   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Natural");
101   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
102   gtk_widget_show (widget);
103
104   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
105   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
106
107   g_signal_connect (G_OBJECT (widget), "changed",
108                     G_CALLBACK (horizontal_policy_changed), viewport);
109
110   /* Add Vertical policy control here */
111   hbox = gtk_hbox_new (FALSE, 2);
112   gtk_widget_show (hbox);
113
114   widget = gtk_label_new ("vscroll-policy");
115   gtk_widget_show (widget);
116   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
117
118   widget = gtk_combo_box_text_new ();
119   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Minimum");
120   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Natural");
121   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
122   gtk_widget_show (widget);
123
124   gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
125   gtk_box_pack_start (GTK_BOX (cntl), hbox, FALSE, FALSE, 0);
126
127   g_signal_connect (G_OBJECT (widget), "changed",
128                     G_CALLBACK (vertical_policy_changed), viewport);
129
130
131   /* Add Label orientation control here */
132   hbox = gtk_hbox_new (FALSE, 2);
133   gtk_widget_show (hbox);
134
135   widget = gtk_label_new ("label-flip");
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), "Horizontal");
141   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
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 (label_flip_changed), label);
150
151   gtk_widget_show (window);
152 }
153
154
155 int
156 main (int argc, char *argv[])
157 {
158   gtk_init (NULL, NULL);
159
160   scrollable_policy ();
161
162   gtk_main ();
163
164   return 0;
165 }