]> Pileus Git - ~andy/gtk/blob - docs/tools/widgets.c
add the doc shooter to the docs dir as an uninstalled helper tool.
[~andy/gtk] / docs / tools / widgets.c
1 #include "widgets.h"
2       
3
4 static WidgetInfo *
5 new_widget_info (const char *name,
6                  GtkWidget  *widget)
7 {
8   WidgetInfo *info;
9
10   info = g_new0 (WidgetInfo, 1);
11   info->name = g_strdup (name);
12   info->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
13   info->no_focus = TRUE;
14   info->include_decorations = FALSE;
15
16   gtk_widget_set_app_paintable (info->window, TRUE);
17   g_signal_connect (info->window, "focus", G_CALLBACK (gtk_true), NULL);
18   gtk_container_set_border_width (GTK_CONTAINER (info->window), 12);
19   gtk_widget_show_all (widget);
20   gtk_container_add (GTK_CONTAINER (info->window), widget);
21     
22   return info;
23 }
24
25 static WidgetInfo *
26 create_button (void)
27 {
28   GtkWidget *widget;
29   
30   widget = gtk_button_new_with_mnemonic ("_Button");
31
32   return new_widget_info ("button", widget);
33 }
34
35 static WidgetInfo *
36 create_toggle_button (void)
37 {
38   GtkWidget *widget;
39
40   widget = gtk_toggle_button_new_with_mnemonic ("_Toggle Button");
41   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
42
43   return new_widget_info ("toggle-button", widget);
44 }
45
46 static WidgetInfo *
47 create_check_button (void)
48 {
49   GtkWidget *widget;
50   
51   widget = gtk_check_button_new_with_mnemonic ("_Check Button");
52   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
53
54   return new_widget_info ("check-button", widget);
55 }
56
57 static WidgetInfo *
58 create_entry (void)
59 {
60   GtkWidget *widget;
61   
62   widget = gtk_entry_new ();
63   gtk_entry_set_text (GTK_ENTRY (widget), "Entry");
64   gtk_editable_set_position (GTK_EDITABLE (widget), -1);
65   
66   return  new_widget_info ("entry", widget);
67 }
68
69 static WidgetInfo *
70 create_radio (void)
71 {
72   GtkWidget *widget;
73   GtkWidget *radio;
74   
75   widget = gtk_vbox_new (FALSE, 3);
76   radio = gtk_radio_button_new_with_mnemonic (NULL, "Radio Button Item _One");
77   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
78   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button Item _Two");
79   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
80   radio = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (radio), "Radio Button Item T_hree");
81   gtk_box_pack_start (GTK_BOX (widget), radio, FALSE, FALSE, 0);
82
83   return new_widget_info ("radio-group", widget);
84 }
85
86 static WidgetInfo *
87 create_label (void)
88 {
89   GtkWidget *widget;
90
91   widget = gtk_label_new ("Label");
92
93   return new_widget_info ("label", widget);
94 }
95
96 static WidgetInfo *
97 create_combo_box_entry (void)
98 {
99   GtkWidget *widget;
100
101   widget = gtk_combo_box_entry_new_text ();
102   gtk_entry_set_text (GTK_ENTRY (GTK_BIN (widget)->child), "Combo Box Entry");
103
104
105   return new_widget_info ("combo-box-entry", widget);
106 }
107
108 static WidgetInfo *
109 create_text_view (void)
110 {
111   GtkWidget *widget;
112   GtkWidget *text_view;
113
114   widget = gtk_frame_new (NULL);
115   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
116   text_view = gtk_text_view_new ();
117   gtk_container_add (GTK_CONTAINER (widget), text_view);
118   /* Bad hack to add some size to the widget */
119   gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)),
120                             "Multiline             \nText\n\n", -1);
121   gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
122   
123   return new_widget_info ("multiline-text", widget);
124 }
125
126 static WidgetInfo *
127 create_tree_view (void)
128 {
129   GtkWidget *widget;
130   GtkWidget *tree_view;
131   GtkListStore *list_store;
132   GtkTreeIter iter;
133   WidgetInfo *info;
134
135   widget = gtk_frame_new (NULL);
136   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN);
137   list_store = gtk_list_store_new (1, G_TYPE_STRING);
138   gtk_list_store_append (list_store, &iter);
139   gtk_list_store_set (list_store, &iter, 0, "Line One", -1);
140   gtk_list_store_append (list_store, &iter);
141   gtk_list_store_set (list_store, &iter, 0, "Line Two", -1);
142   gtk_list_store_append (list_store, &iter);
143   gtk_list_store_set (list_store, &iter, 0, "Line Three", -1);
144
145   tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
146   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
147                                                0, "List and Tree",
148                                                gtk_cell_renderer_text_new (),
149                                                "text", 0, NULL);
150   gtk_container_add (GTK_CONTAINER (widget), tree_view);
151   
152   info = new_widget_info ("list-and-tree", widget);
153   info->no_focus = FALSE;
154
155   return info;
156 }
157
158 static WidgetInfo *
159 create_color_button (void)
160 {
161   GtkWidget *vbox;
162   GtkWidget *picker;
163   GtkWidget *align;
164   GdkColor color;
165
166   vbox = gtk_vbox_new (FALSE, 3);
167   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
168   color.red = 0x1e<<8;  /* Go Gagne! */
169   color.green = 0x90<<8;
170   color.blue = 0xff<<8;
171   picker = gtk_color_button_new_with_color (&color);
172   gtk_container_add (GTK_CONTAINER (align), picker);
173   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
174   gtk_box_pack_start (GTK_BOX (vbox),
175                       gtk_label_new ("Color Button"),
176                       FALSE, FALSE, 0);
177
178   return new_widget_info ("color-button", vbox);
179 }
180
181 static WidgetInfo *
182 create_font_button (void)
183 {
184   GtkWidget *vbox;
185   GtkWidget *picker;
186   GtkWidget *align;
187
188   vbox = gtk_vbox_new (FALSE, 3);
189   align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
190   picker = gtk_font_button_new_with_font ("Sans Serif 10");
191   gtk_container_add (GTK_CONTAINER (align), picker);
192   gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
193   gtk_box_pack_start (GTK_BOX (vbox),
194                       gtk_label_new ("Font Button"),
195                       FALSE, FALSE, 0);
196
197   return new_widget_info ("font-button", vbox);
198 }
199
200 static WidgetInfo *
201 create_separator (void)
202 {
203   GtkWidget *hbox;
204   GtkWidget *vbox;
205
206   vbox = gtk_vbox_new (FALSE, 3);
207   hbox = gtk_hbox_new (TRUE, 0);
208   gtk_box_pack_start (GTK_BOX (hbox),
209                       gtk_hseparator_new (),
210                       TRUE, TRUE, 0);
211   gtk_box_pack_start (GTK_BOX (hbox),
212                       gtk_vseparator_new (),
213                       TRUE, TRUE, 0);
214   gtk_widget_set_size_request (hbox, 200, 150);
215   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
216   gtk_box_pack_start (GTK_BOX (vbox),
217                       gtk_label_new ("Horizontal and Vertical Separators"),
218                       FALSE, FALSE, 0);
219   return new_widget_info ("separator", vbox);
220 }
221
222 static WidgetInfo *
223 create_panes (void)
224 {
225   GtkWidget *hbox;
226   GtkWidget *vbox;
227   GtkWidget *pane;
228
229   vbox = gtk_vbox_new (FALSE, 3);
230   hbox = gtk_hbox_new (TRUE, 12);
231   pane = gtk_hpaned_new ();
232   gtk_paned_pack1 (GTK_PANED (pane),
233                    g_object_new (GTK_TYPE_FRAME,
234                                  "shadow", GTK_SHADOW_IN,
235                                  NULL),
236                    FALSE, FALSE);
237   gtk_paned_pack2 (GTK_PANED (pane),
238                    g_object_new (GTK_TYPE_FRAME,
239                                  "shadow", GTK_SHADOW_IN,
240                                  NULL),
241                    FALSE, FALSE);
242   gtk_box_pack_start (GTK_BOX (hbox),
243                       pane,
244                       TRUE, TRUE, 0);
245   pane = gtk_vpaned_new ();
246   gtk_paned_pack1 (GTK_PANED (pane),
247                    g_object_new (GTK_TYPE_FRAME,
248                                  "shadow", GTK_SHADOW_IN,
249                                  NULL),
250                    FALSE, FALSE);
251   gtk_paned_pack2 (GTK_PANED (pane),
252                    g_object_new (GTK_TYPE_FRAME,
253                                  "shadow", GTK_SHADOW_IN,
254                                  NULL),
255                    FALSE, FALSE);
256   gtk_box_pack_start (GTK_BOX (hbox),
257                       pane,
258                       TRUE, TRUE, 0);
259   gtk_widget_set_size_request (hbox, 200, 150);
260   gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
261   gtk_box_pack_start (GTK_BOX (vbox),
262                       gtk_label_new ("Horizontal and Vertical Panes"),
263                       FALSE, FALSE, 0);
264   return new_widget_info ("panes", vbox);
265 }
266
267 static WidgetInfo *
268 create_frame (void)
269 {
270   GtkWidget *widget;
271
272   widget = gtk_frame_new ("Frame");
273   gtk_widget_set_size_request (widget, 150, 150);
274
275   return new_widget_info ("frame", widget);
276 }
277
278 static WidgetInfo *
279 create_window (void)
280 {
281   WidgetInfo *info;
282   GtkWidget *widget;
283
284   widget = gtk_frame_new (NULL);
285   gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_NONE);
286   gtk_widget_set_size_request (widget, 150, 150);
287   info = new_widget_info ("window", widget);
288   info->include_decorations = TRUE;
289   gtk_window_set_title (GTK_WINDOW (info->window), "Window");
290
291   return info;
292 }
293
294 GList *
295 get_all_widgets (void)
296 {
297   GList *retval = NULL;
298
299   retval = g_list_prepend (retval, create_button ());
300   retval = g_list_prepend (retval, create_toggle_button ());
301   retval = g_list_prepend (retval, create_check_button ());
302   retval = g_list_prepend (retval, create_entry ());
303   retval = g_list_prepend (retval, create_radio ());
304   retval = g_list_prepend (retval, create_label ());
305   retval = g_list_prepend (retval, create_combo_box_entry ());
306   retval = g_list_prepend (retval, create_text_view ());
307   retval = g_list_prepend (retval, create_tree_view ());
308   retval = g_list_prepend (retval, create_color_button ());
309   retval = g_list_prepend (retval, create_font_button ());
310   retval = g_list_prepend (retval, create_separator ());
311   retval = g_list_prepend (retval, create_panes ());
312   retval = g_list_prepend (retval, create_frame ());
313   retval = g_list_prepend (retval, create_window ());
314   
315   return retval;
316 }