]> Pileus Git - ~andy/gtk/blob - tests/testcellarea.c
Changed tests/testcellarea.c (and scaffolding) to only reorient the GtkCellArea
[~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   GtkCellArea   *area = cell_area_scaffold_get_area (scaffold);
123   GtkOrientation orientation = gtk_combo_box_get_active (combo);
124
125   gtk_orientable_set_orientation (GTK_ORIENTABLE (area), orientation);
126 }
127
128 static void
129 align_cell_2_toggled (GtkToggleButton  *toggle,
130                       CellAreaScaffold *scaffold)
131 {
132   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
133   gboolean     align = gtk_toggle_button_get_active (toggle);
134
135   gtk_cell_area_cell_set (area, cell_2, "align", align, NULL);
136 }
137
138 static void
139 align_cell_3_toggled (GtkToggleButton  *toggle,
140                       CellAreaScaffold *scaffold)
141 {
142   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
143   gboolean     align = gtk_toggle_button_get_active (toggle);
144
145   gtk_cell_area_cell_set (area, cell_3, "align", align, NULL);
146 }
147
148 static void
149 expand_cell_1_toggled (GtkToggleButton  *toggle,
150                        CellAreaScaffold *scaffold)
151 {
152   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
153   gboolean     expand = gtk_toggle_button_get_active (toggle);
154
155   gtk_cell_area_cell_set (area, cell_1, "expand", expand, NULL);
156 }
157
158 static void
159 expand_cell_2_toggled (GtkToggleButton  *toggle,
160                        CellAreaScaffold *scaffold)
161 {
162   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
163   gboolean     expand = gtk_toggle_button_get_active (toggle);
164
165   gtk_cell_area_cell_set (area, cell_2, "expand", expand, NULL);
166 }
167
168 static void
169 expand_cell_3_toggled (GtkToggleButton  *toggle,
170                        CellAreaScaffold *scaffold)
171 {
172   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
173   gboolean     expand = gtk_toggle_button_get_active (toggle);
174
175   gtk_cell_area_cell_set (area, cell_3, "expand", expand, NULL);
176 }
177
178 static void
179 simple_cell_area (void)
180 {
181   GtkWidget *window, *widget;
182   GtkWidget *scaffold, *frame, *vbox, *hbox;
183
184   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
185
186   gtk_window_set_title (GTK_WINDOW (window), "CellArea expand and alignments");
187
188   scaffold = simple_scaffold ();
189
190   hbox  = gtk_hbox_new (FALSE, 4);
191   frame = gtk_frame_new (NULL);
192   gtk_widget_show (hbox);
193   gtk_widget_show (frame);
194
195   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
196   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
197
198   gtk_container_add (GTK_CONTAINER (frame), scaffold);
199
200   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
201
202   /* Now add some controls */
203   vbox  = gtk_vbox_new (FALSE, 4);
204   gtk_widget_show (vbox);
205   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
206
207   widget = gtk_combo_box_text_new ();
208   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
209   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
210   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
211   gtk_widget_show (widget);
212   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
213
214   g_signal_connect (G_OBJECT (widget), "changed",
215                     G_CALLBACK (orientation_changed), scaffold);
216
217   widget = gtk_check_button_new_with_label ("Align 2nd Cell");
218   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
219   gtk_widget_show (widget);
220   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
221   
222   g_signal_connect (G_OBJECT (widget), "toggled",
223                     G_CALLBACK (align_cell_2_toggled), scaffold);
224
225   widget = gtk_check_button_new_with_label ("Align 3rd Cell");
226   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
227   gtk_widget_show (widget);
228   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
229   
230   g_signal_connect (G_OBJECT (widget), "toggled",
231                     G_CALLBACK (align_cell_3_toggled), scaffold);
232
233
234   widget = gtk_check_button_new_with_label ("Expand 1st Cell");
235   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
236   gtk_widget_show (widget);
237   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
238   
239   g_signal_connect (G_OBJECT (widget), "toggled",
240                     G_CALLBACK (expand_cell_1_toggled), scaffold);
241
242   widget = gtk_check_button_new_with_label ("Expand 2nd Cell");
243   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
244   gtk_widget_show (widget);
245   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
246   
247   g_signal_connect (G_OBJECT (widget), "toggled",
248                     G_CALLBACK (expand_cell_2_toggled), scaffold);
249
250   widget = gtk_check_button_new_with_label ("Expand 3rd Cell");
251   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
252   gtk_widget_show (widget);
253   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
254   
255   g_signal_connect (G_OBJECT (widget), "toggled",
256                     G_CALLBACK (expand_cell_3_toggled), scaffold);
257
258   gtk_container_add (GTK_CONTAINER (window), hbox);
259
260   gtk_widget_show (window);
261 }
262
263 /*******************************************************
264  *                      Focus Test                     *
265  *******************************************************/
266 static GtkCellRenderer *focus_renderer, *sibling_renderer;
267
268 enum {
269   FOCUS_COLUMN_NAME,
270   FOCUS_COLUMN_CHECK,
271   FOCUS_COLUMN_STATIC_TEXT,
272   N_FOCUS_COLUMNS
273 };
274
275 static GtkTreeModel *
276 focus_list_model (void)
277 {
278   GtkTreeIter   iter;
279   GtkListStore *store = 
280     gtk_list_store_new (N_FOCUS_COLUMNS,
281                         G_TYPE_STRING,  /* name text */
282                         G_TYPE_BOOLEAN, /* check */
283                         G_TYPE_STRING); /* static text */
284
285   gtk_list_store_append (store, &iter);
286   gtk_list_store_set (store, &iter, 
287                       FOCUS_COLUMN_NAME, "Enter a string",
288                       FOCUS_COLUMN_CHECK, TRUE,
289                       FOCUS_COLUMN_STATIC_TEXT, "Does it fly ?",
290                       -1);
291
292   gtk_list_store_append (store, &iter);
293   gtk_list_store_set (store, &iter, 
294                       FOCUS_COLUMN_NAME, "Enter a string",
295                       FOCUS_COLUMN_CHECK, FALSE,
296                       FOCUS_COLUMN_STATIC_TEXT, "Would you put it in a toaster ?",
297                       -1);
298
299   gtk_list_store_append (store, &iter);
300   gtk_list_store_set (store, &iter, 
301                       FOCUS_COLUMN_NAME, "Type something",
302                       FOCUS_COLUMN_CHECK, FALSE,
303                       FOCUS_COLUMN_STATIC_TEXT, "Does it feed on cute kittens ?",
304                       -1);
305
306   return (GtkTreeModel *)store;
307 }
308
309 static void
310 cell_toggled (GtkCellRendererToggle *cell_renderer,
311               const gchar           *path,
312               CellAreaScaffold      *scaffold)
313 {
314   GtkTreeModel *model = cell_area_scaffold_get_model (scaffold);
315   GtkTreeIter   iter;
316   gboolean      active;
317
318   g_print ("Cell toggled !\n");
319
320   if (!gtk_tree_model_get_iter_from_string (model, &iter, path))
321     return;
322
323   gtk_tree_model_get (model, &iter, FOCUS_COLUMN_CHECK, &active, -1);
324   gtk_list_store_set (GTK_LIST_STORE (model), &iter, FOCUS_COLUMN_CHECK, !active, -1);
325 }
326
327 static void
328 cell_edited (GtkCellRendererToggle *cell_renderer,
329              const gchar           *path,
330              const gchar           *new_text,
331              CellAreaScaffold      *scaffold)
332 {
333   GtkTreeModel *model = cell_area_scaffold_get_model (scaffold);
334   GtkTreeIter   iter;
335
336   g_print ("Cell edited with new text '%s' !\n", new_text);
337
338   if (!gtk_tree_model_get_iter_from_string (model, &iter, path))
339     return;
340
341   gtk_list_store_set (GTK_LIST_STORE (model), &iter, FOCUS_COLUMN_NAME, new_text, -1);
342 }
343
344 static GtkWidget *
345 focus_scaffold (gboolean color_bg, GtkCellRenderer **focus, GtkCellRenderer **sibling)
346 {
347   GtkTreeModel *model;
348   GtkWidget *scaffold;
349   GtkCellArea *area;
350   GtkCellRenderer *renderer, *toggle;
351
352   scaffold = cell_area_scaffold_new ();
353   gtk_widget_show (scaffold);
354
355   model = focus_list_model ();
356
357   cell_area_scaffold_set_model (CELL_AREA_SCAFFOLD (scaffold), model);
358
359   area = cell_area_scaffold_get_area (CELL_AREA_SCAFFOLD (scaffold));
360
361   renderer = gtk_cell_renderer_text_new ();
362   g_object_set (G_OBJECT (renderer), "editable", TRUE, NULL);
363   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE);
364   gtk_cell_area_attribute_connect (area, renderer, "text", FOCUS_COLUMN_NAME);
365
366   if (color_bg)
367     g_object_set (G_OBJECT (renderer), "cell-background", "red", NULL);
368
369   g_signal_connect (G_OBJECT (renderer), "edited",
370                     G_CALLBACK (cell_edited), scaffold);
371
372   toggle = renderer = gtk_cell_renderer_toggle_new ();
373   g_object_set (G_OBJECT (renderer), "xalign", 0.0F, NULL);
374   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
375   gtk_cell_area_attribute_connect (area, renderer, "active", FOCUS_COLUMN_CHECK);
376
377   if (color_bg)
378     g_object_set (G_OBJECT (renderer), "cell-background", "green", NULL);
379
380   if (focus)
381     *focus = renderer;
382
383   g_signal_connect (G_OBJECT (renderer), "toggled",
384                     G_CALLBACK (cell_toggled), scaffold);
385
386   renderer = gtk_cell_renderer_text_new ();
387   g_object_set (G_OBJECT (renderer), 
388                 "wrap-mode", PANGO_WRAP_WORD,
389                 "wrap-width", 150,
390                 NULL);
391
392   if (color_bg)
393     g_object_set (G_OBJECT (renderer), "cell-background", "blue", NULL);
394
395   if (sibling)
396     *sibling = renderer;
397
398   gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
399   gtk_cell_area_attribute_connect (area, renderer, "text", FOCUS_COLUMN_STATIC_TEXT);
400
401   gtk_cell_area_add_focus_sibling (area, toggle, renderer);
402
403   return scaffold;
404 }
405
406 static void
407 focus_sibling_toggled (GtkToggleButton  *toggle,
408                        CellAreaScaffold *scaffold)
409 {
410   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
411   gboolean     active = gtk_toggle_button_get_active (toggle);
412
413   if (active)
414     gtk_cell_area_add_focus_sibling (area, focus_renderer, sibling_renderer);
415   else
416     gtk_cell_area_remove_focus_sibling (area, focus_renderer, sibling_renderer);
417
418   gtk_widget_queue_draw (GTK_WIDGET (scaffold));
419 }
420
421
422 static void
423 focus_cell_area (void)
424 {
425   GtkWidget *window, *widget;
426   GtkWidget *scaffold, *frame, *vbox, *hbox;
427
428   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
429   hbox  = gtk_hbox_new (FALSE, 4);
430   gtk_widget_show (hbox);
431
432   gtk_window_set_title (GTK_WINDOW (window), "Focus and editable cells");
433
434   scaffold = focus_scaffold (FALSE, &focus_renderer, &sibling_renderer);
435
436   frame = gtk_frame_new (NULL);
437   gtk_widget_show (frame);
438
439   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
440   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
441
442   gtk_container_add (GTK_CONTAINER (frame), scaffold);
443
444   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
445
446   /* Now add some controls */
447   vbox  = gtk_vbox_new (FALSE, 4);
448   gtk_widget_show (vbox);
449   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
450
451   widget = gtk_combo_box_text_new ();
452   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
453   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
454   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
455   gtk_widget_show (widget);
456   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
457
458   g_signal_connect (G_OBJECT (widget), "changed",
459                     G_CALLBACK (orientation_changed), scaffold);
460
461   widget = gtk_check_button_new_with_label ("Focus Sibling");
462   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
463   gtk_widget_show (widget);
464   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
465
466   g_signal_connect (G_OBJECT (widget), "toggled",
467                     G_CALLBACK (focus_sibling_toggled), scaffold);
468
469   gtk_container_add (GTK_CONTAINER (window), hbox);
470
471   gtk_widget_show (window);
472 }
473
474
475
476 /*******************************************************
477  *                  Background Area                    *
478  *******************************************************/
479 static void
480 cell_spacing_changed (GtkSpinButton    *spin_button,
481                       CellAreaScaffold *scaffold)
482 {
483   GtkCellArea *area = cell_area_scaffold_get_area (scaffold);
484   gint        value;
485
486   value = (gint)gtk_spin_button_get_value (spin_button);
487
488   gtk_cell_area_box_set_spacing (GTK_CELL_AREA_BOX (area), value);
489 }
490
491 static void
492 row_spacing_changed (GtkSpinButton    *spin_button,
493                      CellAreaScaffold *scaffold)
494 {
495   gint value;
496
497   value = (gint)gtk_spin_button_get_value (spin_button);
498
499   cell_area_scaffold_set_row_spacing (scaffold, value);
500 }
501
502 static void
503 indentation_changed (GtkSpinButton    *spin_button,
504                      CellAreaScaffold *scaffold)
505 {
506   gint value;
507
508   value = (gint)gtk_spin_button_get_value (spin_button);
509
510   cell_area_scaffold_set_indentation (scaffold, value);
511 }
512
513 static void
514 background_area (void)
515 {
516   GtkWidget *window, *widget, *label, *main_vbox;
517   GtkWidget *scaffold, *frame, *vbox, *hbox;
518
519   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
520   hbox  = gtk_hbox_new (FALSE, 4);
521   main_vbox  = gtk_vbox_new (FALSE, 4);
522   gtk_widget_show (hbox);
523   gtk_widget_show (main_vbox);
524   gtk_container_add (GTK_CONTAINER (window), main_vbox);
525
526   gtk_window_set_title (GTK_WINDOW (window), "Background Area");
527
528   label = gtk_label_new ("In this example, row spacing gets devided into the background area, "
529                          "column spacing is added between each background area, indentation is "
530                          "prepended space distributed to the background area.");
531   gtk_label_set_line_wrap  (GTK_LABEL (label), TRUE);
532   gtk_label_set_width_chars  (GTK_LABEL (label), 40);
533   gtk_widget_show (label);
534   gtk_box_pack_start (GTK_BOX (main_vbox), label, FALSE, FALSE, 0);
535
536   scaffold = focus_scaffold (TRUE, NULL, NULL);
537
538   frame = gtk_frame_new (NULL);
539   gtk_widget_show (frame);
540
541   gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
542   gtk_widget_set_halign (frame, GTK_ALIGN_FILL);
543
544   gtk_container_add (GTK_CONTAINER (frame), scaffold);
545
546   gtk_box_pack_end (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
547
548   /* Now add some controls */
549   vbox  = gtk_vbox_new (FALSE, 4);
550   gtk_widget_show (vbox);
551   gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
552   gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
553
554   widget = gtk_combo_box_text_new ();
555   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
556   gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
557   gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
558   gtk_widget_show (widget);
559   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
560
561   g_signal_connect (G_OBJECT (widget), "changed",
562                     G_CALLBACK (orientation_changed), scaffold);
563
564   widget = gtk_spin_button_new_with_range (0, 10, 1);
565   label = gtk_label_new ("Cell spacing");
566   hbox = gtk_hbox_new (FALSE, 4);
567   gtk_widget_show (hbox);
568   gtk_widget_show (label);
569   gtk_widget_show (widget);
570   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
571   gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
572   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
573
574   g_signal_connect (G_OBJECT (widget), "value-changed",
575                     G_CALLBACK (cell_spacing_changed), scaffold);
576
577
578   widget = gtk_spin_button_new_with_range (0, 10, 1);
579   label = gtk_label_new ("Row spacing");
580   hbox = gtk_hbox_new (FALSE, 4);
581   gtk_widget_show (hbox);
582   gtk_widget_show (label);
583   gtk_widget_show (widget);
584   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
585   gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
586   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
587
588   g_signal_connect (G_OBJECT (widget), "value-changed",
589                     G_CALLBACK (row_spacing_changed), scaffold);
590
591   widget = gtk_spin_button_new_with_range (0, 30, 1);
592   label = gtk_label_new ("Intentation");
593   hbox = gtk_hbox_new (FALSE, 4);
594   gtk_widget_show (hbox);
595   gtk_widget_show (label);
596   gtk_widget_show (widget);
597   gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
598   gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
599   gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
600
601   g_signal_connect (G_OBJECT (widget), "value-changed",
602                     G_CALLBACK (indentation_changed), scaffold);
603
604   gtk_widget_show (window);
605 }
606
607
608
609
610
611
612 int
613 main (int argc, char *argv[])
614 {
615   gtk_init (NULL, NULL);
616
617   simple_cell_area ();
618   focus_cell_area ();
619   background_area ();
620
621   gtk_main ();
622
623   return 0;
624 }