]> Pileus Git - ~andy/gtk/blob - docs/tools/widgets.c
Add accel label, file button and icon view.
[~andy/gtk] / docs / tools / widgets.c
1 #include <gdk/gdkkeysyms.h>
2 #include "widgets.h"
3       
4
5 static WidgetInfo *
6 new_widget_info (const char *name,
7                  GtkWidget  *widget)
8 {
9   WidgetInfo *info;
10
11   info = g_new0 (WidgetInfo, 1);
12   info->name = g_strdup (name);
13   info->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
14   info->no_focus = TRUE;
15   info->include_decorations = FALSE;
16
17   gtk_widget_set_app_paintable (info->window, TRUE);
18   g_signal_connect (info->window, "focus", G_CALLBACK (gtk_true), NULL);
19   gtk_container_set_border_width (GTK_CONTAINER (info->window), 12);
20   gtk_widget_show_all (widget);
21   gtk_container_add (GTK_CONTAINER (info->window), widget);
22     
23   return info;
24 }
25
26 static WidgetInfo *
27 create_button (void)
28 {
29   GtkWidget *widget;
30   
31   widget = gtk_button_new_with_mnemonic ("_Button");
32
33   return new_widget_info ("button", widget);
34 }
35
36 static WidgetInfo *
37 create_toggle_button (void)
38 {
39   GtkWidget *widget;
40
41   widget = gtk_toggle_button_new_with_mnemonic ("_Toggle Button");
42   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
43
44   return new_widget_info ("toggle-button", widget);
45 }
46
47 static WidgetInfo *
48 create_check_button (void)
49 {
50   GtkWidget *widget;
51   
52   widget = gtk_check_button_new_with_mnemonic ("_Check Button");
53   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
54
55   return new_widget_info ("check-button", widget);
56 }
57
58 static WidgetInfo *
59 create_entry (void)
60 {
61   GtkWidget *widget;
62   
63   widget = gtk_entry_new ();
64   gtk_entry_set_text (GTK_ENTRY (widget), "Entry");
65   gtk_editable_set_position (GTK_EDITABLE (widget), -1);
66   
67   return  new_widget_info ("entry", widget);
68 }
69
70 static WidgetInfo *
71 create_radio (void)
72 {
73   GtkWidget *widget;
74   GtkWidget *radio;
75   
76   widget = gtk_vbox_new (FALSE, 3);
77   radio = gtk_radio_button_new_with_mnemonic (NULL, "Radio Button Item _One");
78   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
79   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button Item _Two");
80   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
81   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button Item T_hree");
82   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
83
84   return new_widget_info ("radio-group", widget);
85 }
86
87 static WidgetInfo *
88 create_label (void)
89 {
90   GtkWidget *widget;
91
92   widget = gtk_label_new ("Label");
93
94   return new_widget_info ("label", widget);
95 }
96
97 static WidgetInfo *
98 create_accel_label (void)
99 {
100   WidgetInfo *info;
101   GtkWidget *widget, *button, *box;
102   GtkAccelGroup *accel_group;
103
104   widget = gtk_accel_label_new ("Accel Label");
105
106   button = gtk_button_new_with_label ("Quit");
107   gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (widget), button);
108   gtk_widget_set_no_show_all (button, TRUE);
109   
110   box = gtk_vbox_new (FALSE, 0);
111   gtk_container_add (GTK_CONTAINER (box), widget);
112   gtk_container_add (GTK_CONTAINER (box), button);
113
114   gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (widget), button);
115   accel_group = gtk_accel_group_new();
116
117   info = g_new0 (WidgetInfo, 1);
118   info->name = g_strdup ("accel-label");
119   info->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
120   gtk_widget_set_size_request (info->window, 200, -1);
121   gtk_widget_show_all (box);
122   gtk_container_add (GTK_CONTAINER (info->window), box);
123
124   info->no_focus = TRUE;
125   info->include_decorations = FALSE;
126
127   gtk_widget_set_app_paintable (info->window, TRUE);
128   g_signal_connect (info->window, "focus", G_CALLBACK (gtk_true), NULL);
129   gtk_container_set_border_width (GTK_CONTAINER (info->window), 12);
130   gtk_widget_add_accelerator (button, "activate", accel_group, GDK_Q, GDK_CONTROL_MASK,
131                               GTK_ACCEL_VISIBLE | GTK_ACCEL_LOCKED);
132
133   return info;
134 }
135
136 static WidgetInfo *
137 create_combo_box_entry (void)
138 {
139   GtkWidget *widget;
140
141   widget = gtk_combo_box_entry_new_text ();
142   gtk_entry_set_text (GTK_ENTRY (GTK_BIN (widget)->child), "Combo Box Entry");
143
144
145   return new_widget_info ("combo-box-entry", widget);
146 }
147
148 static WidgetInfo *
149 create_text_view (void)
150 {
151   GtkWidget *widget;
152   GtkWidget *text_view;
153
154   widget = gtk_frame_new (NULL);
155   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
156   text_view = gtk_text_view_new ();
157   gtk_container_add (GTK_CONTAINER (widget), text_view);
158   /* Bad hack to add some size to the widget */
159   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)),
160                             "Multiline             \nText\n\n", -1);
161   gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
162   
163   return new_widget_info ("multiline-text", widget);
164 }
165
166 static WidgetInfo *
167 create_tree_view (void)
168 {
169   GtkWidget *widget;
170   GtkWidget *tree_view;
171   GtkListStore *list_store;
172   GtkTreeIter iter;
173   WidgetInfo *info;
174
175   widget = gtk_frame_new (NULL);
176   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
177   list_store = gtk_list_store_new (1, G_TYPE_STRING);
178   gtk_list_store_append (list_store, &iter);
179   gtk_list_store_set (list_store, &iter, 0, "Line One", -1);
180   gtk_list_store_append (list_store, &iter);
181   gtk_list_store_set (list_store, &iter, 0, "Line Two", -1);
182   gtk_list_store_append (list_store, &iter);
183   gtk_list_store_set (list_store, &iter, 0, "Line Three", -1);
184
185   tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
186   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
187                                                0, "List and Tree",
188                                                gtk_cell_renderer_text_new (),
189                                                "text", 0, NULL);
190   gtk_container_add (GTK_CONTAINER (widget), tree_view);
191   
192   info = new_widget_info ("list-and-tree", widget);
193   info->no_focus = FALSE;
194
195   return info;
196 }
197
198 static WidgetInfo *
199 create_icon_view (void)
200 {
201   GtkWidget *widget;
202   GtkWidget *vbox;
203   GtkWidget *align;
204   GtkWidget *icon_view;
205   GtkListStore *list_store;
206   GtkTreeIter iter;
207   GdkPixbuf *pixbuf;
208   WidgetInfo *info;
209
210   widget = gtk_frame_new (NULL);
211   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
212   list_store = gtk_list_store_new (2, G_TYPE_STRING, GDK_TYPE_PIXBUF);
213   gtk_list_store_append (list_store, &iter);
214   pixbuf = gdk_pixbuf_new_from_file_at_size ("gnome-gmush.png", 20, 20, NULL);
215   gtk_list_store_set (list_store, &iter, 0, "One", 1, pixbuf, -1);
216   gtk_list_store_append (list_store, &iter);
217   pixbuf = gdk_pixbuf_new_from_file_at_size ("gnome-foot.png", 20, 20, NULL);
218   gtk_list_store_set (list_store, &iter, 0, "Two", 1, pixbuf, -1);
219
220   icon_view = gtk_icon_view_new();
221
222   gtk_icon_view_set_model (GTK_ICON_VIEW (icon_view), GTK_TREE_MODEL (list_store));
223   gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), 0);
224   gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), 1);
225   gtk_widget_set_size_request (icon_view, 220, 60);
226
227   gtk_container_add (GTK_CONTAINER (widget), icon_view);
228
229   vbox = gtk_vbox_new (FALSE, 3);
230   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
231   gtk_container_add (GTK_CONTAINER (align), widget);
232   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
233   gtk_box_pack_start (GTK_BOX (vbox),
234                       gtk_label_new ("Icon View"),
235                       FALSE, FALSE, 0);
236
237   info = new_widget_info ("icon-view", vbox);
238   info->no_focus = FALSE;
239
240   return info;
241 }
242
243 static WidgetInfo *
244 create_color_button (void)
245 {
246   GtkWidget *vbox;
247   GtkWidget *picker;
248   GtkWidget *align;
249   GdkColor color;
250
251   vbox = gtk_vbox_new (FALSE, 3);
252   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
253   color.red = 0x1e<<8;  /* Go Gagne! */
254   color.green = 0x90<<8;
255   color.blue = 0xff<<8;
256   picker = gtk_color_button_new_with_color (&color);
257   gtk_container_add (GTK_CONTAINER (align), picker);
258   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
259   gtk_box_pack_start (GTK_BOX (vbox),
260                       gtk_label_new ("Color Button"),
261                       FALSE, FALSE, 0);
262
263   return new_widget_info ("color-button", vbox);
264 }
265
266 static WidgetInfo *
267 create_font_button (void)
268 {
269   GtkWidget *vbox;
270   GtkWidget *picker;
271   GtkWidget *align;
272
273   vbox = gtk_vbox_new (FALSE, 3);
274   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
275   picker = gtk_font_button_new_with_font ("Sans Serif 10");
276   gtk_container_add (GTK_CONTAINER (align), picker);
277   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
278   gtk_box_pack_start (GTK_BOX (vbox),
279                       gtk_label_new ("Font Button"),
280                       FALSE, FALSE, 0);
281
282   return new_widget_info ("font-button", vbox);
283 }
284
285 static WidgetInfo *
286 create_file_button (void)
287 {
288   GtkWidget *vbox;
289   GtkWidget *picker;
290   GtkWidget *align;
291
292   vbox = gtk_vbox_new (FALSE, 3);
293   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
294   picker = gtk_file_chooser_button_new ("File Button");
295   gtk_widget_set_size_request (picker, 150, -1);
296   gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (picker), "/etc/yum.conf");
297   gtk_container_add (GTK_CONTAINER (align), picker);
298   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
299   gtk_box_pack_start (GTK_BOX (vbox),
300                       gtk_label_new ("File Button"),
301                       FALSE, FALSE, 0);
302
303   return new_widget_info ("file-button", vbox);
304 }
305
306 static WidgetInfo *
307 create_separator (void)
308 {
309   GtkWidget *hbox;
310   GtkWidget *vbox;
311
312   vbox = gtk_vbox_new (FALSE, 3);
313   hbox = gtk_hbox_new (TRUE, 0);
314   gtk_box_pack_start (GTK_BOX (hbox),
315                       gtk_hseparator_new (),
316                       TRUE, TRUE, 0);
317   gtk_box_pack_start (GTK_BOX (hbox),
318                       gtk_vseparator_new (),
319                       TRUE, TRUE, 0);
320   gtk_widget_set_size_request (hbox, 200, 150);
321   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
322   gtk_box_pack_start (GTK_BOX (vbox),
323                       gtk_label_new ("Horizontal and Vertical Separators"),
324                       FALSE, FALSE, 0);
325   return new_widget_info ("separator", vbox);
326 }
327
328 static WidgetInfo *
329 create_panes (void)
330 {
331   GtkWidget *hbox;
332   GtkWidget *vbox;
333   GtkWidget *pane;
334
335   vbox = gtk_vbox_new (FALSE, 3);
336   hbox = gtk_hbox_new (TRUE, 12);
337   pane = gtk_hpaned_new ();
338   gtk_paned_pack1 (GTK_PANED (pane),
339                    g_object_new (GTK_TYPE_FRAME,
340                                  "shadow", GTK_SHADOW_IN,
341                                  NULL),
342                    FALSE, FALSE);
343   gtk_paned_pack2 (GTK_PANED (pane),
344                    g_object_new (GTK_TYPE_FRAME,
345                                  "shadow", GTK_SHADOW_IN,
346                                  NULL),
347                    FALSE, FALSE);
348   gtk_box_pack_start (GTK_BOX (hbox),
349                       pane,
350                       TRUE, TRUE, 0);
351   pane = gtk_vpaned_new ();
352   gtk_paned_pack1 (GTK_PANED (pane),
353                    g_object_new (GTK_TYPE_FRAME,
354                                  "shadow", GTK_SHADOW_IN,
355                                  NULL),
356                    FALSE, FALSE);
357   gtk_paned_pack2 (GTK_PANED (pane),
358                    g_object_new (GTK_TYPE_FRAME,
359                                  "shadow", GTK_SHADOW_IN,
360                                  NULL),
361                    FALSE, FALSE);
362   gtk_box_pack_start (GTK_BOX (hbox),
363                       pane,
364                       TRUE, TRUE, 0);
365   gtk_widget_set_size_request (hbox, 200, 150);
366   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
367   gtk_box_pack_start (GTK_BOX (vbox),
368                       gtk_label_new ("Horizontal and Vertical Panes"),
369                       FALSE, FALSE, 0);
370   return new_widget_info ("panes", vbox);
371 }
372
373 static WidgetInfo *
374 create_frame (void)
375 {
376   GtkWidget *widget;
377
378   widget = gtk_frame_new ("Frame");
379   gtk_widget_set_size_request (widget, 150, 150);
380
381   return new_widget_info ("frame", widget);
382 }
383
384 static WidgetInfo *
385 create_window (void)
386 {
387   WidgetInfo *info;
388   GtkWidget *widget;
389
390   widget = gtk_frame_new (NULL);
391   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_NONE);
392   gtk_widget_set_size_request (widget, 150, 150);
393   info = new_widget_info ("window", widget);
394   info->include_decorations = TRUE;
395   gtk_window_set_title (GTK_WINDOW (info->window), "Window");
396
397   return info;
398 }
399
400 GList *
401 get_all_widgets (void)
402 {
403   GList *retval = NULL;
404
405   retval = g_list_prepend (retval, create_button ());
406   retval = g_list_prepend (retval, create_toggle_button ());
407   retval = g_list_prepend (retval, create_check_button ());
408   retval = g_list_prepend (retval, create_entry ());
409   retval = g_list_prepend (retval, create_radio ());
410   retval = g_list_prepend (retval, create_label ());
411   retval = g_list_prepend (retval, create_combo_box_entry ());
412   retval = g_list_prepend (retval, create_text_view ());
413   retval = g_list_prepend (retval, create_tree_view ());
414   retval = g_list_prepend (retval, create_color_button ());
415   retval = g_list_prepend (retval, create_font_button ());
416   retval = g_list_prepend (retval, create_separator ());
417   retval = g_list_prepend (retval, create_panes ());
418   retval = g_list_prepend (retval, create_frame ());
419   retval = g_list_prepend (retval, create_window ());
420   retval = g_list_prepend (retval, create_accel_label ());
421   retval = g_list_prepend (retval, create_file_button ());
422   retval = g_list_prepend (retval, create_icon_view ());
423   
424   return retval;
425 }