]> Pileus Git - ~andy/gtk/blob - tests/testcellarea.c
Merge branch 'master' into treeview-refactor
[~andy/gtk] / tests / testcellarea.c
1 #include <gtk/gtk.h>
2 #include "cellareascaffold.h"
3
4 /*******************************************************
5  *                      Simple Test                    *
6  *******************************************************/
7 enum {
8   SIMPLE_COLUMN_NAME,
9   SIMPLE_COLUMN_ICON,
10   SIMPLE_COLUMN_DESCRIPTION,
11   N_SIMPLE_COLUMNS
12 };
13
14 static GtkCellRenderer *cell_1 = NULL, *cell_2 = NULL, *cell_3 = NULL;
15
16 static GtkTreeModel *
17 simple_list_model (void)
18 {
19   GtkTreeIter   iter;
20   GtkListStore *store = 
21     gtk_list_store_new (N_SIMPLE_COLUMNS,
22                         G_TYPE_STRING,  /* name text */
23                         G_TYPE_STRING,  /* icon name */
24                         G_TYPE_STRING); /* description text */
25
26   gtk_list_store_append (store, &iter);
27   gtk_list_store_set (store, &iter, 
28                       SIMPLE_COLUMN_NAME, "Alice in wonderland",
29                       SIMPLE_COLUMN_ICON, "gtk-execute",
30                       SIMPLE_COLUMN_DESCRIPTION, 
31                       "Twas brillig, and the slithy toves "
32                       "did gyre and gimble in the wabe; "
33                       "all mimsy were the borogoves, "
34                       "and the mome raths outgrabe",
35                       -1);
36
37   gtk_list_store_append (store, &iter);
38   gtk_list_store_set (store, &iter, 
39                       SIMPLE_COLUMN_NAME, "Marry Poppins",
40                       SIMPLE_COLUMN_ICON, "gtk-yes",
41                       SIMPLE_COLUMN_DESCRIPTION, "Supercalifragilisticexpialidocious",
42                       -1);
43
44   gtk_list_store_append (store, &iter);
45   gtk_list_store_set (store, &iter, 
46                       SIMPLE_COLUMN_NAME, "George Bush",
47                       SIMPLE_COLUMN_ICON, "gtk-dialog-warning",
48                       SIMPLE_COLUMN_DESCRIPTION, "It's a very good question, very direct, "
49                       "and I'm not going to answer it",
50                       -1);
51
52   gtk_list_store_append (store, &iter);
53   gtk_list_store_set (store, &iter, 
54                       SIMPLE_COLUMN_NAME, "Whinnie the pooh",
55                       SIMPLE_COLUMN_ICON, "gtk-stop",
56                       SIMPLE_COLUMN_DESCRIPTION, "The most wonderful thing about tiggers, "
57                       "is tiggers are wonderful things",
58                       -1);
59
60   gtk_list_store_append (store, &iter);
61   gtk_list_store_set (store, &iter, 
62                       SIMPLE_COLUMN_NAME, "Aleister Crowley",
63                       SIMPLE_COLUMN_ICON, "gtk-about",
64                       SIMPLE_COLUMN_DESCRIPTION, 
65                       "Thou shalt do what thou wilt shall be the whole of the law",
66                       -1);
67
68   gtk_list_store_append (store, &iter);
69   gtk_list_store_set (store, &iter, 
70                       SIMPLE_COLUMN_NAME, "Mark Twain",
71                       SIMPLE_COLUMN_ICON, "gtk-quit",
72                       SIMPLE_COLUMN_DESCRIPTION, 
73                       "Giving up smoking is the easiest thing in the world. "
74                       "I know because I've done it thousands of times.",
75                       -1);
76
77
78   return (GtkTreeModel *)store;
79 }
80
81 static GtkWidget *
82 simple_scaffold (void)
83 {
84   GtkTreeModel *model;
85   GtkWidget *scaffold;
86   GtkCellArea *area;
87   GtkCellRenderer *renderer;
88
89   scaffold = cell_area_scaffold_new ();
90   gtk_widget_show (scaffold);
91
92   model = simple_list_model ();
93
94   cell_area_scaffold_set_model (CELL_AREA_SCAFFOLD (scaffold), model);
95
96   area = cell_area_scaffold_get_area (CELL_AREA_SCAFFOLD (scaffold));
97
98   cell_1 = renderer = gtk_cell_renderer_text_new ();
99   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, FALSE);
100   gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_NAME);
101
102   cell_2 = renderer = gtk_cell_renderer_pixbuf_new ();
103   g_object_set (G_OBJECT (renderer), "xalign", 0.0F, NULL);
104   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE);
105   gtk_cell_area_attribute_connect (area, renderer, "stock-id", SIMPLE_COLUMN_ICON);
106
107   cell_3 = renderer = gtk_cell_renderer_text_new ();
108   g_object_set (G_OBJECT (renderer), 
109                 "wrap-mode", PANGO_WRAP_WORD,
110                 "wrap-width", 215,
111                 NULL);
112   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
113   gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_DESCRIPTION);
114
115   return scaffold;
116 }
117
118 static void
119 orientation_changed (GtkComboBox      *combo,
120                      CellAreaScaffold *scaffold)
121 {
122   GtkOrientation orientation = gtk_combo_box_get_active (combo);
123
124   gtk_orientable_set_orientation (GTK_ORIENTABLE (scaffold), orientation);
125 }
126
127 static void
128 align_cell_2_toggled (GtkToggleButton  *toggle,
129                       CellAreaScaffold *scaffold)
130 {
131   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
132   gboolean     align = gtk_toggle_button_get_active (toggle);
133
134   gtk_cell_area_cell_set (area, cell_2, "align", align, NULL);
135 }
136
137 static void
138 align_cell_3_toggled (GtkToggleButton  *toggle,
139                       CellAreaScaffold *scaffold)
140 {
141   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
142   gboolean     align = gtk_toggle_button_get_active (toggle);
143
144   gtk_cell_area_cell_set (area, cell_3, "align", align, NULL);
145 }
146
147 static void
148 expand_cell_1_toggled (GtkToggleButton  *toggle,
149                        CellAreaScaffold *scaffold)
150 {
151   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
152   gboolean     expand = gtk_toggle_button_get_active (toggle);
153
154   gtk_cell_area_cell_set (area, cell_1, "expand", expand, NULL);
155 }
156
157 static void
158 expand_cell_2_toggled (GtkToggleButton  *toggle,
159                        CellAreaScaffold *scaffold)
160 {
161   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
162   gboolean     expand = gtk_toggle_button_get_active (toggle);
163
164   gtk_cell_area_cell_set (area, cell_2, "expand", expand, NULL);
165 }
166
167 static void
168 expand_cell_3_toggled (GtkToggleButton  *toggle,
169                        CellAreaScaffold *scaffold)
170 {
171   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
172   gboolean     expand = gtk_toggle_button_get_active (toggle);
173
174   gtk_cell_area_cell_set (area, cell_3, "expand", expand, NULL);
175 }
176
177 static void
178 simple_cell_area (void)
179 {
180   GtkWidget *window, *widget;
181   GtkWidget *scaffold, *frame, *vbox, *hbox;
182
183   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
184
185   gtk_window_set_title (GTK_WINDOW (window), "CellArea expand and alignments");
186
187   scaffold = simple_scaffold ();
188
189   hbox  = gtk_hbox_new (FALSE, 4);
190   frame = gtk_frame_new (NULL);
191   gtk_widget_show (hbox);
192   gtk_widget_show (frame);
193
194   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
195   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
196
197   gtk_container_add (GTK_CONTAINER (frame), scaffold);
198
199   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
200
201   /* Now add some controls */
202   vbox  = gtk_vbox_new (FALSE, 4);
203   gtk_widget_show (vbox);
204   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
205
206   widget = gtk_combo_box_text_new ();
207   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
208   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
209   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
210   gtk_widget_show (widget);
211   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
212
213   g_signal_connect (G_OBJECT (widget), "changed",
214                     G_CALLBACK (orientation_changed), scaffold);
215
216   widget = gtk_check_button_new_with_label ("Align 2nd Cell");
217   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
218   gtk_widget_show (widget);
219   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
220   
221   g_signal_connect (G_OBJECT (widget), "toggled",
222                     G_CALLBACK (align_cell_2_toggled), scaffold);
223
224   widget = gtk_check_button_new_with_label ("Align 3rd Cell");
225   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
226   gtk_widget_show (widget);
227   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
228   
229   g_signal_connect (G_OBJECT (widget), "toggled",
230                     G_CALLBACK (align_cell_3_toggled), scaffold);
231
232
233   widget = gtk_check_button_new_with_label ("Expand 1st Cell");
234   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
235   gtk_widget_show (widget);
236   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
237   
238   g_signal_connect (G_OBJECT (widget), "toggled",
239                     G_CALLBACK (expand_cell_1_toggled), scaffold);
240
241   widget = gtk_check_button_new_with_label ("Expand 2nd Cell");
242   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
243   gtk_widget_show (widget);
244   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
245   
246   g_signal_connect (G_OBJECT (widget), "toggled",
247                     G_CALLBACK (expand_cell_2_toggled), scaffold);
248
249   widget = gtk_check_button_new_with_label ("Expand 3rd Cell");
250   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
251   gtk_widget_show (widget);
252   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
253   
254   g_signal_connect (G_OBJECT (widget), "toggled",
255                     G_CALLBACK (expand_cell_3_toggled), scaffold);
256
257   gtk_container_add (GTK_CONTAINER (window), hbox);
258
259   gtk_widget_show (window);
260 }
261
262 /*******************************************************
263  *                      Focus Test                     *
264  *******************************************************/
265 static GtkCellRenderer *focus_renderer, *sibling_renderer;
266
267 enum {
268   FOCUS_COLUMN_NAME,
269   FOCUS_COLUMN_CHECK,
270   FOCUS_COLUMN_STATIC_TEXT,
271   N_FOCUS_COLUMNS
272 };
273
274 static GtkTreeModel *
275 focus_list_model (void)
276 {
277   GtkTreeIter   iter;
278   GtkListStore *store = 
279     gtk_list_store_new (N_FOCUS_COLUMNS,
280                         G_TYPE_STRING,  /* name text */
281                         G_TYPE_BOOLEAN, /* check */
282                         G_TYPE_STRING); /* static text */
283
284   gtk_list_store_append (store, &iter);
285   gtk_list_store_set (store, &iter, 
286                       FOCUS_COLUMN_NAME, "Enter a string",
287                       FOCUS_COLUMN_CHECK, TRUE,
288                       FOCUS_COLUMN_STATIC_TEXT, "Does it fly ?",
289                       -1);
290
291   gtk_list_store_append (store, &iter);
292   gtk_list_store_set (store, &iter, 
293                       FOCUS_COLUMN_NAME, "Enter a string",
294                       FOCUS_COLUMN_CHECK, FALSE,
295                       FOCUS_COLUMN_STATIC_TEXT, "Would you put it in a toaster ?",
296                       -1);
297
298   gtk_list_store_append (store, &iter);
299   gtk_list_store_set (store, &iter, 
300                       FOCUS_COLUMN_NAME, "Type something",
301                       FOCUS_COLUMN_CHECK, FALSE,
302                       FOCUS_COLUMN_STATIC_TEXT, "Does it feed on cute kittens ?",
303                       -1);
304
305   return (GtkTreeModel *)store;
306 }
307
308 static void
309 cell_toggled (GtkCellRendererToggle *cell_renderer,
310               const gchar           *path,
311               CellAreaScaffold      *scaffold)
312 {
313   GtkTreeModel *model = cell_area_scaffold_get_model (scaffold);
314   GtkTreeIter   iter;
315   gboolean      active;
316
317   g_print ("Cell toggled !\n");
318
319   if (!gtk_tree_model_get_iter_from_string (model, &iter, path))
320     return;
321
322   gtk_tree_model_get (model, &iter, FOCUS_COLUMN_CHECK, &active, -1);
323   gtk_list_store_set (GTK_LIST_STORE (model), &iter, FOCUS_COLUMN_CHECK, !active, -1);
324 }
325
326 static void
327 cell_edited (GtkCellRendererToggle *cell_renderer,
328              const gchar           *path,
329              const gchar           *new_text,
330              CellAreaScaffold      *scaffold)
331 {
332   GtkTreeModel *model = cell_area_scaffold_get_model (scaffold);
333   GtkTreeIter   iter;
334
335   g_print ("Cell edited with new text '%s' !\n", new_text);
336
337   if (!gtk_tree_model_get_iter_from_string (model, &iter, path))
338     return;
339
340   gtk_list_store_set (GTK_LIST_STORE (model), &iter, FOCUS_COLUMN_NAME, new_text, -1);
341 }
342
343 static GtkWidget *
344 focus_scaffold (gboolean color_bg, GtkCellRenderer **focus, GtkCellRenderer **sibling)
345 {
346   GtkTreeModel *model;
347   GtkWidget *scaffold;
348   GtkCellArea *area;
349   GtkCellRenderer *renderer, *toggle;
350
351   scaffold = cell_area_scaffold_new ();
352   gtk_widget_show (scaffold);
353
354   model = focus_list_model ();
355
356   cell_area_scaffold_set_model (CELL_AREA_SCAFFOLD (scaffold), model);
357
358   area = cell_area_scaffold_get_area (CELL_AREA_SCAFFOLD (scaffold));
359
360   renderer = gtk_cell_renderer_text_new ();
361   g_object_set (G_OBJECT (renderer), "editable", TRUE, NULL);
362   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE);
363   gtk_cell_area_attribute_connect (area, renderer, "text", FOCUS_COLUMN_NAME);
364
365   if (color_bg)
366     g_object_set (G_OBJECT (renderer), "cell-background", "red", NULL);
367
368   g_signal_connect (G_OBJECT (renderer), "edited",
369                     G_CALLBACK (cell_edited), scaffold);
370
371   toggle = renderer = gtk_cell_renderer_toggle_new ();
372   g_object_set (G_OBJECT (renderer), "xalign", 0.0F, NULL);
373   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
374   gtk_cell_area_attribute_connect (area, renderer, "active", FOCUS_COLUMN_CHECK);
375
376   if (color_bg)
377     g_object_set (G_OBJECT (renderer), "cell-background", "green", NULL);
378
379   if (focus)
380     *focus = renderer;
381
382   g_signal_connect (G_OBJECT (renderer), "toggled",
383                     G_CALLBACK (cell_toggled), scaffold);
384
385   renderer = gtk_cell_renderer_text_new ();
386   g_object_set (G_OBJECT (renderer), 
387                 "wrap-mode", PANGO_WRAP_WORD,
388                 "wrap-width", 150,
389                 NULL);
390
391   if (color_bg)
392     g_object_set (G_OBJECT (renderer), "cell-background", "blue", NULL);
393
394   if (sibling)
395     *sibling = renderer;
396
397   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
398   gtk_cell_area_attribute_connect (area, renderer, "text", FOCUS_COLUMN_STATIC_TEXT);
399
400   gtk_cell_area_add_focus_sibling (area, toggle, renderer);
401
402   return scaffold;
403 }
404
405 static void
406 focus_sibling_toggled (GtkToggleButton  *toggle,
407                        CellAreaScaffold *scaffold)
408 {
409   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
410   gboolean     active = gtk_toggle_button_get_active (toggle);
411
412   if (active)
413     gtk_cell_area_add_focus_sibling (area, focus_renderer, sibling_renderer);
414   else
415     gtk_cell_area_remove_focus_sibling (area, focus_renderer, sibling_renderer);
416
417   gtk_widget_queue_draw (GTK_WIDGET (scaffold));
418 }
419
420
421 static void
422 focus_cell_area (void)
423 {
424   GtkWidget *window, *widget;
425   GtkWidget *scaffold, *frame, *vbox, *hbox;
426
427   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
428   hbox  = gtk_hbox_new (FALSE, 4);
429   gtk_widget_show (hbox);
430
431   gtk_window_set_title (GTK_WINDOW (window), "Focus and editable cells");
432
433   scaffold = focus_scaffold (FALSE, &focus_renderer, &sibling_renderer);
434
435   frame = gtk_frame_new (NULL);
436   gtk_widget_show (frame);
437
438   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
439   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
440
441   gtk_container_add (GTK_CONTAINER (frame), scaffold);
442
443   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
444
445   /* Now add some controls */
446   vbox  = gtk_vbox_new (FALSE, 4);
447   gtk_widget_show (vbox);
448   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
449
450   widget = gtk_combo_box_text_new ();
451   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
452   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
453   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
454   gtk_widget_show (widget);
455   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
456
457   g_signal_connect (G_OBJECT (widget), "changed",
458                     G_CALLBACK (orientation_changed), scaffold);
459
460   widget = gtk_check_button_new_with_label ("Focus Sibling");
461   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
462   gtk_widget_show (widget);
463   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
464
465   g_signal_connect (G_OBJECT (widget), "toggled",
466                     G_CALLBACK (focus_sibling_toggled), scaffold);
467
468   gtk_container_add (GTK_CONTAINER (window), hbox);
469
470   gtk_widget_show (window);
471 }
472
473
474
475 /*******************************************************
476  *                  Background Area                    *
477  *******************************************************/
478 static void
479 cell_spacing_changed (GtkSpinButton    *spin_button,
480                       CellAreaScaffold *scaffold)
481 {
482   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
483   gint        value;
484
485   value = (gint)gtk_spin_button_get_value (spin_button);
486
487   gtk_cell_area_box_set_spacing (GTK_CELL_AREA_BOX (area), value);
488 }
489
490 static void
491 row_spacing_changed (GtkSpinButton    *spin_button,
492                      CellAreaScaffold *scaffold)
493 {
494   gint value;
495
496   value = (gint)gtk_spin_button_get_value (spin_button);
497
498   cell_area_scaffold_set_row_spacing (scaffold, value);
499 }
500
501 static void
502 indentation_changed (GtkSpinButton    *spin_button,
503                      CellAreaScaffold *scaffold)
504 {
505   gint value;
506
507   value = (gint)gtk_spin_button_get_value (spin_button);
508
509   cell_area_scaffold_set_indentation (scaffold, value);
510 }
511
512 static void
513 background_area (void)
514 {
515   GtkWidget *window, *widget, *label, *main_vbox;
516   GtkWidget *scaffold, *frame, *vbox, *hbox;
517
518   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
519   hbox  = gtk_hbox_new (FALSE, 4);
520   main_vbox  = gtk_vbox_new (FALSE, 4);
521   gtk_widget_show (hbox);
522   gtk_widget_show (main_vbox);
523   gtk_container_add (GTK_CONTAINER (window), main_vbox);
524
525   gtk_window_set_title (GTK_WINDOW (window), "Background Area");
526
527   label = gtk_label_new ("In this example, row spacing gets devided into the background area, "
528                          "column spacing is added between each background area, indentation is "
529                          "prepended space distributed to the background area.");
530   gtk_label_set_line_wrap  (GTK_LABEL (label), TRUE);
531   gtk_label_set_width_chars  (GTK_LABEL (label), 40);
532   gtk_widget_show (label);
533   gtk_box_pack_start (GTK_BOX (main_vbox), label, FALSE, FALSE, 0);
534
535   scaffold = focus_scaffold (TRUE, NULL, NULL);
536
537   frame = gtk_frame_new (NULL);
538   gtk_widget_show (frame);
539
540   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
541   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
542
543   gtk_container_add (GTK_CONTAINER (frame), scaffold);
544
545   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
546
547   /* Now add some controls */
548   vbox  = gtk_vbox_new (FALSE, 4);
549   gtk_widget_show (vbox);
550   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
551   gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
552
553   widget = gtk_combo_box_text_new ();
554   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
555   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
556   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
557   gtk_widget_show (widget);
558   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
559
560   g_signal_connect (G_OBJECT (widget), "changed",
561                     G_CALLBACK (orientation_changed), scaffold);
562
563   widget = gtk_spin_button_new_with_range (0, 10, 1);
564   label = gtk_label_new ("Cell spacing");
565   hbox = gtk_hbox_new (FALSE, 4);
566   gtk_widget_show (hbox);
567   gtk_widget_show (label);
568   gtk_widget_show (widget);
569   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
570   gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
571   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
572
573   g_signal_connect (G_OBJECT (widget), "value-changed",
574                     G_CALLBACK (cell_spacing_changed), scaffold);
575
576
577   widget = gtk_spin_button_new_with_range (0, 10, 1);
578   label = gtk_label_new ("Row spacing");
579   hbox = gtk_hbox_new (FALSE, 4);
580   gtk_widget_show (hbox);
581   gtk_widget_show (label);
582   gtk_widget_show (widget);
583   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
584   gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
585   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
586
587   g_signal_connect (G_OBJECT (widget), "value-changed",
588                     G_CALLBACK (row_spacing_changed), scaffold);
589
590   widget = gtk_spin_button_new_with_range (0, 30, 1);
591   label = gtk_label_new ("Intentation");
592   hbox = gtk_hbox_new (FALSE, 4);
593   gtk_widget_show (hbox);
594   gtk_widget_show (label);
595   gtk_widget_show (widget);
596   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
597   gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
598   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
599
600   g_signal_connect (G_OBJECT (widget), "value-changed",
601                     G_CALLBACK (indentation_changed), scaffold);
602
603   gtk_widget_show (window);
604 }
605
606
607
608
609
610
611 int
612 main (int argc, char *argv[])
613 {
614   gtk_init (NULL, NULL);
615
616   simple_cell_area ();
617   focus_cell_area ();
618   background_area ();
619
620   gtk_main ();
621
622   return 0;
623 }