* doc/tmpl/* * hildon-widgets/* moved widget descriptions to respective source file...
[hildon] / doc / tmpl / hildon-grid.sgml
1 <!-- ##### SECTION Title ##### -->
2 HildonGrid
3
4 <!-- ##### SECTION Short_Description ##### -->
5
6
7 <!-- ##### SECTION Long_Description ##### -->
8 <para>
9
10 <informalexample>
11 Example:
12 <programlisting>
13 <!-- hildon-tests/wt/hildon-widgets-combo/testgrid.c -->
14 ##include &lt;hildon-widgets/hildon-app.h&gt;
15 ##include &lt;hildon-widgets/hildon-appview.h&gt;
16 ##include &lt;hildon-widgets/hildon-grid.h&gt;
17 ##include &lt;hildon-widgets/hildon-grid-item.h&gt;
18 ##include &lt;gtk/gtk.h&gt;
19 ##include &lt;pango/pango.h&gt;
20 ##include &lt;libintl.h&gt;
21 ##include &lt;locale.h&gt;
22 ##include &lt;string.h&gt;
23 ##include &lt;gtk/gtktoolbar.h&gt;
24 ##include &lt;gtk/gtkwidget.h&gt;
25
26 ##ifdef HAVE_CONFIG_H
27 ##include &lt;config.h&gt;
28 ##endif
29
30 ##include &lt;stdio.h&gt;
31 ##include &lt;stdlib.h&gt;
32
33 ##define _(String) gettext (String)
34
35 ##define ICONFILE    "Help"
36
37 enum {
38         ACTIVATE,
39         DISABLE_NEXT,
40         EMBLEM_NEXT
41 };
42
43 static int action = ACTIVATE;
44
45
46 static GtkWidget    *w_add_one = NULL;
47 static GtkWidget    *w_add_eight = NULL;
48 static GtkWidget    *w_disable_next = NULL;
49 static GtkWidget    *w_emblem_next = NULL;
50
51 static GtkWidget    *menu_small_icons;
52 static GtkWidget    *menu_big_icons;
53
54 static GtkWidget    *standard_icons;
55 static GtkWidget    *alt_empty_label;
56 static GtkWidget    *dim_selected;
57 static GtkWidget    *undim_all;
58
59
60 GtkWidget *create_layout(void);
61 static void activate (HildonGrid *grid, HildonGridItem *item, gpointer data);
62 static void generate_name (char *target, size_t len);
63 static void update_dim (HildonGrid *grid);
64
65 static void add_one (HildonGrid *grid);
66 static void add_eight (HildonGrid *grid);
67 static void disable_this (GtkWidget *widget);
68 static void emblem_this (GtkWidget *widget);
69
70 static void create_basic_icons (HildonGrid *grid);
71 static void remove_all_icons (HildonGrid *grid);
72 static void show_standard_icons_signal (GtkMenuItem *widget, gpointer data);
73 static void set_empty_label_signal (GtkMenuItem *widget, gpointer data);
74 static void dim_selected_signal (GtkMenuItem *widget, gpointer data);
75 static void undim_all_signal (GtkMenuItem *widget, gpointer data);
76 static void set_icon_size (GtkMenuItem *item, gpointer data);
77
78 void _testGrid(GtkWidget *parent, gchar **help);
79
80 void
81 _testGrid(GtkWidget *parent, gchar **help)
82 {
83
84         GtkIconTheme *icon_theme;
85         GtkWidget *grid;
86         GtkWidget *popup;
87         GtkMenu *menu;
88         GSList *group = NULL;
89
90         icon_theme = gtk_icon_theme_get_default ();
91
92         grid = create_layout ();
93         gtk_container_add (GTK_CONTAINER (parent), grid);
94
95         g_signal_connect (grid, "activate-child", G_CALLBACK (activate), NULL);
96
97         /* Create context menu. */
98         popup = gtk_menu_new ();
99         menu_small_icons = gtk_radio_menu_item_new_with_label (group,
100                         _("Small icons"));
101         menu_big_icons = gtk_radio_menu_item_new_with_label (
102                         gtk_radio_menu_item_get_group (
103                                 GTK_RADIO_MENU_ITEM (menu_small_icons)),
104                         _("Big icons"));
105         gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_big_icons),
106                         TRUE);
107
108         gtk_widget_show (menu_small_icons);
109         gtk_widget_show (menu_big_icons);
110         gtk_menu_shell_append (GTK_MENU_SHELL (popup), menu_small_icons);
111         gtk_menu_shell_append (GTK_MENU_SHELL (popup), menu_big_icons);
112         gtk_widget_tap_and_hold_setup (grid, popup, NULL, TRUE);
113
114         g_signal_connect (G_OBJECT (menu_small_icons), "activate",
115                         G_CALLBACK (set_icon_size), HILDON_GRID (grid));
116         g_signal_connect (G_OBJECT (menu_big_icons), "activate",
117                         G_CALLBACK (set_icon_size), HILDON_GRID (grid));
118
119         /* Add menuitem for showing/hiding standard icons. */
120         menu = hildon_appview_get_menu (HILDON_APPVIEW (
121                                 gtk_widget_get_ancestor (parent, HILDON_TYPE_APPVIEW)));
122         standard_icons = gtk_check_menu_item_new_with_label (
123                         _("Show standard icons"));
124         gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (standard_icons), TRUE);
125         alt_empty_label = gtk_check_menu_item_new_with_label (
126                         _("Alternative empty label"));
127         gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (alt_empty_label),
128                         FALSE);
129
130         dim_selected = gtk_menu_item_new_with_label (_("Dim current"));
131         undim_all = gtk_menu_item_new_with_label (_("Undim all"));
132
133
134         gtk_menu_shell_append (GTK_MENU_SHELL (menu), standard_icons);
135         gtk_widget_show (standard_icons);
136         gtk_menu_shell_append (GTK_MENU_SHELL (menu), alt_empty_label);
137         gtk_widget_show (alt_empty_label);
138         gtk_menu_shell_append (GTK_MENU_SHELL (menu), dim_selected);
139         gtk_widget_show (dim_selected);
140         gtk_menu_shell_append (GTK_MENU_SHELL (menu), undim_all);
141         gtk_widget_show (undim_all);
142
143         g_signal_connect (G_OBJECT (standard_icons), "toggled",
144                         G_CALLBACK (show_standard_icons_signal),
145                         (gpointer) grid);
146         g_signal_connect (G_OBJECT (alt_empty_label), "toggled",
147                         G_CALLBACK (set_empty_label_signal),
148                         (gpointer) grid);
149         g_signal_connect (G_OBJECT (dim_selected), "activate",
150                         G_CALLBACK (dim_selected_signal),
151                         (gpointer) grid);
152         g_signal_connect (G_OBJECT (undim_all), "activate",
153                         G_CALLBACK (undim_all_signal),
154                         (gpointer) grid);
155
156         create_basic_icons (HILDON_GRID (grid));
157         update_dim (HILDON_GRID (grid));
158
159         hildon_grid_set_style (HILDON_GRID (grid), "bigicons");
160         gtk_widget_show (GTK_WIDGET (grid));
161
162 }
163
164 static void
165 show_standard_icons_signal (GtkMenuItem *widget,
166                             gpointer    data)
167 {
168         HildonGrid *grid;
169         grid = HILDON_GRID (data);
170
171         if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
172                 create_basic_icons (grid);
173         else
174                 remove_all_icons (grid);
175
176         update_dim (grid);
177 }
178
179 static void
180 set_empty_label_signal (GtkMenuItem *widget,
181                         gpointer    data)
182 {
183         GValue val = {0, };
184         HildonGrid *grid;
185         grid = HILDON_GRID (data);
186
187         g_value_init (&amp;val, G_TYPE_STRING);
188
189         if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
190                 g_value_set_string (&amp;val, _("Alternative empty label here"));
191         else
192                 g_value_set_string (&amp;val, _("No icons"));
193
194         g_object_set_property (G_OBJECT (grid), "empty_label", &amp;val);
195 }
196
197 static void
198 create_basic_icons (HildonGrid *grid)
199 {
200         w_add_one = hildon_grid_item_new_with_label (
201                         "Calendar", _("Add one"));
202         w_add_eight = hildon_grid_item_new_with_label (
203                         "Clock", _("Add eight"));
204         w_disable_next = hildon_grid_item_new_with_label (
205                         "Calculator", _("Disable next"));
206         w_emblem_next = hildon_grid_item_new_with_label (
207                         "Paint", _("Set emblem"));
208         emblem_this (w_emblem_next);
209
210         gtk_container_add (GTK_CONTAINER (grid), w_add_one);
211         gtk_container_add (GTK_CONTAINER (grid), w_add_eight);
212         gtk_container_add (GTK_CONTAINER (grid), w_disable_next);
213         gtk_container_add (GTK_CONTAINER (grid), w_emblem_next);
214 }
215
216 static void
217 remove_all_icons (HildonGrid *grid)
218 {
219         gtk_container_remove (GTK_CONTAINER (grid), w_add_one);
220         gtk_container_remove (GTK_CONTAINER (grid), w_add_eight);
221         gtk_container_remove (GTK_CONTAINER (grid), w_disable_next);
222         gtk_container_remove (GTK_CONTAINER (grid), w_emblem_next);
223 }
224
225 static void
226 generate_name (gchar *target, size_t len)
227 {
228         int i;
229         target[len] = '\0';
230         for (i = 0; i &lt; len; i++)
231                 target[i] = (rand() &amp; 0x0f) + 'a';
232 }
233
234
235 GtkWidget *
236 create_layout (void)
237 {
238         GtkWidget *grid;
239         grid = hildon_grid_new ();
240         return GTK_WIDGET (grid);
241 }
242
243 static void
244 activate (HildonGrid *grid, HildonGridItem *item, gpointer data)
245 {
246         GtkWidget *widget;
247         widget = GTK_WIDGET (item);
248
249         switch (action)
250         {
251                 case ACTIVATE:
252                         if (widget == w_add_one)
253                                 add_one (grid);
254                         else if (widget == w_add_eight)
255                                 add_eight (grid);
256                         else if (widget == w_disable_next)
257                                 action = DISABLE_NEXT;
258                         else if (widget == w_emblem_next)
259                                 action = EMBLEM_NEXT;
260                         else
261                         {
262                                 gtk_container_remove (GTK_CONTAINER (grid), widget);
263                                 update_dim (grid);
264                         }
265                         break;
266
267                 case DISABLE_NEXT:
268                         disable_this (widget);
269                         action = ACTIVATE;
270                         break;
271
272                 case EMBLEM_NEXT:
273                         emblem_this (widget);
274                         action = ACTIVATE;
275                         break;
276         }
277 }
278
279 static void
280 add_one (HildonGrid *grid)
281 {
282 #define LABEL_WIDTH 64
283         static gchar foo[LABEL_WIDTH];
284         GtkWidget *t;
285         generate_name (foo, rand () % (LABEL_WIDTH - 1) + 1);
286         t = hildon_grid_item_new_with_label (ICONFILE, foo);
287         gtk_container_add (GTK_CONTAINER (grid), t);
288         gtk_widget_show (t);
289
290         update_dim (grid);
291 }
292
293 static void
294 add_eight (HildonGrid *grid)
295 {
296         int i;
297         for (i = 0; i &lt; 8; i++)
298                 add_one (grid);
299 }
300
301 static void
302 emblem_this (GtkWidget *widget)
303 {
304         const char *emblem;
305         emblem = hildon_grid_item_get_emblem_type (HILDON_GRID_ITEM (widget));
306
307         hildon_grid_item_set_emblem_type (HILDON_GRID_ITEM (widget),
308                         emblem == NULL ? "gnome-mime-image-png" : NULL);
309 }
310         
311 static void
312 disable_this (GtkWidget *widget)
313 {
314         gtk_widget_set_sensitive (widget, FALSE);
315 }
316
317 static void
318 dim_selected_signal (GtkMenuItem    *widget,
319                      gpointer       data)
320 {
321         GtkWidget *selected;
322
323         selected = GTK_CONTAINER (data)-&gt;focus_child;
324         gtk_widget_set_sensitive (selected, FALSE);
325 }
326
327 static void
328 undim_all_signal (GtkMenuItem   *widget,
329                   gpointer      data)
330 {
331         gtk_container_foreach (GTK_CONTAINER (data),
332                         (GtkCallback) gtk_widget_set_sensitive,
333                         (gpointer) TRUE);
334 }
335
336 static void
337 update_dim (HildonGrid *grid)
338 {
339         GtkWidget *selected;
340         selected = GTK_CONTAINER (grid)-&gt;focus_child;
341         gtk_widget_set_sensitive (dim_selected, selected != NULL);
342 }
343
344 static void
345 set_icon_size (GtkMenuItem *item, gpointer data)
346 {
347         HildonGrid *grid;
348         grid = HILDON_GRID (data);
349
350         if (GTK_WIDGET (item) == menu_small_icons)
351                 hildon_grid_set_style (grid, "smallicons");
352         else if (GTK_WIDGET (item) == menu_big_icons)
353                 hildon_grid_set_style (grid, "bigicons");
354
355 </programlisting>
356 </informalexample>
357 </para>
358
359 <!-- ##### SECTION See_Also ##### -->
360 <para>
361 #HildonGridItem
362 </para>
363
364 <!-- ##### SECTION Stability_Level ##### -->
365
366
367 <!-- ##### FUNCTION hildon_grid_new ##### -->
368 <para>
369
370 </para>
371
372 @Returns: 
373
374
375 <!-- ##### FUNCTION hildon_grid_set_style ##### -->
376 <para>
377
378 </para>
379
380 @grid: 
381 @style_name: 
382
383
384 <!-- ##### FUNCTION hildon_grid_get_style ##### -->
385 <para>
386
387 </para>
388
389 @grid: 
390 @Returns: 
391
392
393 <!-- ##### FUNCTION hildon_grid_set_scrollbar_pos ##### -->
394 <para>
395
396 </para>
397
398 @grid: 
399 @scrollbar_pos: 
400
401
402 <!-- ##### FUNCTION hildon_grid_get_scrollbar_pos ##### -->
403 <para>
404
405 </para>
406
407 @grid: 
408 @Returns: 
409
410
411 <!-- ##### FUNCTION hildon_grid_activate_child ##### -->
412 <para>
413
414 </para>
415
416 @grid: 
417 @item: 
418
419