86c6c2df8db2b6e52e819a4e78a60a3deee2e79e
[pspp-builds.git] / lib / gtksheet / gtksheet.h
1 /* This version of GtkSheet has been heavily modified, for the specific
2    requirements of PSPPIRE. */
3
4
5 /* GtkSheet widget for Gtk+.
6  * Copyright (C) 1999-2001 Adrian E. Feiguin <adrian@ifir.ifir.edu.ar>
7  *
8  * Based on GtkClist widget by Jay Painter, but major changes.
9  * Memory allocation routines inspired on SC (Spreadsheet Calculator)
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with this library; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24  */
25
26 #ifndef __GTK_SHEET_H__
27 #define __GTK_SHEET_H__
28
29 #include <gtk/gtk.h>
30
31 #include "gtkextra-sheet.h"
32 #include "gsheetmodel.h"
33 #include "gsheet-column-iface.h"
34 #include "gsheet-row-iface.h"
35
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif /* __cplusplus */
40
41
42 typedef enum
43 {
44   GTK_SHEET_FOREGROUND,
45   GTK_SHEET_BACKGROUND,
46   GTK_SHEET_FONT,
47   GTK_SHEET_JUSTIFICATION,
48   GTK_SHEET_BORDER,
49   GTK_SHEET_BORDER_COLOR,
50   GTK_SHEET_IS_EDITABLE,
51   GTK_SHEET_IS_VISIBLE
52 } GtkSheetAttrType;
53
54 /* sheet->state */
55
56 enum
57 {
58   GTK_SHEET_NORMAL,
59   GTK_SHEET_ROW_SELECTED,
60   GTK_SHEET_COLUMN_SELECTED,
61   GTK_SHEET_RANGE_SELECTED
62 };
63
64
65 #define GTK_TYPE_SHEET_RANGE (gtk_sheet_range_get_type ())
66 #define GTK_TYPE_SHEET (gtk_sheet_get_type ())
67
68 #define GTK_SHEET(obj)          GTK_CHECK_CAST (obj, gtk_sheet_get_type (), GtkSheet)
69 #define GTK_SHEET_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_sheet_get_type (), GtkSheetClass)
70 #define GTK_IS_SHEET(obj)       GTK_CHECK_TYPE (obj, gtk_sheet_get_type ())
71
72 /* Public flags, for compatibility */
73
74 #define GTK_SHEET_ROW_FROZEN(sheet)      !gtk_sheet_rows_resizable (sheet)
75 #define GTK_SHEET_COLUMN_FROZEN(sheet)   !gtk_sheet_columns_resizable (sheet)
76 #define GTK_SHEET_AUTORESIZE(sheet)      gtk_sheet_autoresize (sheet)
77 #define GTK_SHEET_CLIP_TEXT(sheet)       gtk_sheet_clip_text (sheet)
78 #define GTK_SHEET_ROW_TITLES_VISIBLE(sheet)   gtk_sheet_row_titles_visible (sheet)
79 #define GTK_SHEET_COL_TITLES_VISIBLE(sheet)   gtk_sheet_column_titles_visible (sheet)
80 #define GTK_SHEET_AUTO_SCROLL(sheet)     gtk_sheet_autoscroll (sheet)
81 #define GTK_SHEET_JUSTIFY_ENTRY(sheet)   gtk_sheet_justify_entry (sheet)
82
83
84 typedef struct _GtkSheetClass GtkSheetClass;
85 typedef struct _GtkSheetCellAttr     GtkSheetCellAttr;
86 typedef struct _GtkSheetCell GtkSheetCell;
87 typedef struct _GtkSheetHoverTitle GtkSheetHoverTitle;
88
89
90 struct _GtkSheetCellAttr
91 {
92   GtkJustification justification;
93   const PangoFontDescription *font_desc;
94   GdkColor foreground;
95   GdkColor background;
96   GtkSheetCellBorder border;
97   gboolean is_editable;
98   gboolean is_visible;
99 };
100
101 struct _GtkSheetCell
102 {
103   gint row;
104   gint col;
105 };
106
107 struct _GtkSheetHoverTitle
108 {
109   GtkWidget *window;
110   GtkWidget *label;
111   gint row, column;
112 };
113
114 struct _GtkSheet{
115   GtkContainer container;
116
117   GSheetColumn *column_geometry;
118   GSheetRow *row_geometry;
119
120   guint16 flags;
121
122   GSheetModel *model;
123
124   GtkSelectionMode selection_mode;
125   gboolean autoresize;
126   gboolean autoscroll;
127   gboolean clip_text;
128   gboolean justify_entry;
129
130   guint freeze_count;
131
132   /* Background colors */
133   GdkColor bg_color;
134   GdkColor grid_color;
135   gboolean show_grid;
136
137   /* sheet children */
138   GList *children;
139
140   /* allocation rectangle after the container_border_width
141      and the width of the shadow border */
142   GdkRectangle internal_allocation;
143
144   gchar *name;
145
146   gint16 column_requisition;
147   gint16 row_requisition;
148
149   gboolean rows_resizable;
150   gboolean columns_resizable;
151
152   /* Displayed range */
153   GtkSheetRange view;
154
155   /* active cell */
156   GtkSheetCell active_cell;
157   GtkWidget *sheet_entry;
158
159   GtkType entry_type;
160
161   /* expanding selection */
162   GtkSheetCell selection_cell;
163
164   /* timer for flashing clipped range */
165   gint32 clip_timer;
166   gint interval;
167
168   /* global selection button */
169   GtkWidget *button;
170
171   /* sheet state */
172   gint state;
173
174   /* selected range */
175   GtkSheetRange range;
176
177   /*the scrolling window and it's height and width to
178    * make things a little speedier */
179   GdkWindow *sheet_window;
180   guint sheet_window_width;
181   guint sheet_window_height;
182
183   /* sheet backing pixmap */
184   GdkPixmap *pixmap;
185
186   /* offsets for scrolling */
187   gint hoffset;
188   gint voffset;
189   gfloat old_hadjustment;
190   gfloat old_vadjustment;
191
192   /* border shadow style */
193   GtkShadowType shadow_type;
194
195   /* Column Titles */
196   GdkRectangle column_title_area;
197   GdkWindow *column_title_window;
198   gboolean column_titles_visible;
199
200   /* Row Titles */
201   GdkRectangle row_title_area;
202   GdkWindow *row_title_window;
203   gboolean row_titles_visible;
204
205   /*scrollbars*/
206   GtkAdjustment *hadjustment;
207   GtkAdjustment *vadjustment;
208
209   /* xor GC for the verticle drag line */
210   GdkGC *xor_gc;
211
212   /* gc for drawing unselected cells */
213   GdkGC *fg_gc;
214   GdkGC *bg_gc;
215
216   /* cursor used to indicate dragging */
217   GdkCursor *cursor_drag;
218
219   /* the current x-pixel location of the xor-drag vline */
220   gint x_drag;
221
222   /* the current y-pixel location of the xor-drag hline */
223   gint y_drag;
224
225   /* current cell being dragged */
226   GtkSheetCell drag_cell;
227   /* current range being dragged */
228   GtkSheetRange drag_range;
229
230   /* clipped range */
231   GtkSheetRange clip_range;
232
233   /* Used for the subtitle (popups) */
234   gint motion_events;
235   GtkSheetHoverTitle *hover_window;
236 };
237
238 struct _GtkSheetClass
239 {
240  GtkContainerClass parent_class;
241
242  void (*set_scroll_adjustments) (GtkSheet *sheet,
243                                  GtkAdjustment *hadjustment,
244                                  GtkAdjustment *vadjustment);
245
246  void (*select_row)             (GtkSheet *sheet, gint row);
247
248  void (*select_column)          (GtkSheet *sheet, gint column);
249
250  void (*select_range)           (GtkSheet *sheet, GtkSheetRange *range);
251
252  void (*clip_range)             (GtkSheet *sheet, GtkSheetRange *clip_range);
253
254  void (*resize_range)           (GtkSheet *sheet,
255                                 GtkSheetRange *old_range,
256                                 GtkSheetRange *new_range);
257
258  void (*move_range)             (GtkSheet *sheet,
259                                 GtkSheetRange *old_range,
260                                 GtkSheetRange *new_range);
261
262  gboolean (*traverse)           (GtkSheet *sheet,
263                                 gint row, gint column,
264                                 gint *new_row, gint *new_column);
265
266  gboolean (*deactivate)         (GtkSheet *sheet,
267                                 gint row, gint column);
268
269  gboolean (*activate)           (GtkSheet *sheet,
270                                 gint row, gint column);
271
272  void (*set_cell)               (GtkSheet *sheet,
273                                 gint row, gint column);
274
275  void (*clear_cell)             (GtkSheet *sheet,
276                                 gint row, gint column);
277
278  void (*changed)                (GtkSheet *sheet,
279                                 gint row, gint column);
280
281  void (*new_column_width)       (GtkSheet *sheet,
282                                  gint col,
283                                  guint width);
284
285  void (*new_row_height)         (GtkSheet *sheet,
286                                  gint row,
287                                  guint height);
288
289 };
290
291 GType gtk_sheet_get_type (void);
292 GtkType gtk_sheet_range_get_type (void);
293
294
295 /* create a new sheet */
296 GtkWidget * gtk_sheet_new (GSheetRow *vgeo, GSheetColumn *hgeo,
297                            const gchar *title,
298                            GSheetModel *model);
299
300
301
302
303 /* create a new browser sheet. It cells can not be edited */
304 GtkWidget *
305 gtk_sheet_new_browser                   (guint rows, guint columns, const gchar *title);
306
307 void
308 gtk_sheet_construct_browser             (GtkSheet *sheet,
309                                          guint rows, guint columns, const gchar *title);
310
311 /* create a new sheet with custom entry */
312 GtkWidget *
313 gtk_sheet_new_with_custom_entry         (GSheetRow *vgeo,
314                                          GSheetColumn *hgeo,
315                                          const gchar *title,
316                                          GtkType entry_type);
317 void
318 gtk_sheet_construct_with_custom_entry   (GtkSheet *sheet,
319                                          GSheetRow *vgeo,
320                                          GSheetColumn *hgeo,
321                                          const gchar *title,
322                                          GtkType entry_type);
323 /* change scroll adjustments */
324 void
325 gtk_sheet_set_hadjustment               (GtkSheet *sheet,
326                                          GtkAdjustment *adjustment);
327 void
328 gtk_sheet_set_vadjustment               (GtkSheet *sheet,
329                                          GtkAdjustment *adjustment);
330 /* Change entry */
331 void
332 gtk_sheet_change_entry                  (GtkSheet *sheet, GtkType entry_type);
333
334 /* Returns sheet's entry widget */
335 GtkWidget *
336 gtk_sheet_get_entry                     (GtkSheet *sheet);
337 GtkWidget *
338 gtk_sheet_get_entry_widget              (GtkSheet *sheet);
339
340 /* Returns sheet->state
341  * Added by Steven Rostedt <steven.rostedt@lmco.com> */
342 gint
343 gtk_sheet_get_state                     (GtkSheet *sheet);
344
345 /* Returns sheet's ranges
346  * Added by Murray Cumming */
347 guint
348 gtk_sheet_get_columns_count             (GtkSheet *sheet);
349
350 guint
351 gtk_sheet_get_rows_count                (GtkSheet *sheet);
352
353 void
354 gtk_sheet_get_visible_range             (GtkSheet *sheet,
355                                          GtkSheetRange *range);
356
357 void
358 gtk_sheet_get_selected_range            (GtkSheet *sheet,
359                                          GtkSheetRange *range);
360
361 void
362 gtk_sheet_set_selection_mode            (GtkSheet *sheet, gint mode);
363
364 void
365 gtk_sheet_set_autoresize                (GtkSheet *sheet, gboolean autoresize);
366
367 gboolean
368 gtk_sheet_autoresize                    (GtkSheet *sheet);
369
370 void
371 gtk_sheet_set_autoscroll                (GtkSheet *sheet, gboolean autoscroll);
372
373 gboolean
374 gtk_sheet_autoscroll                    (GtkSheet *sheet);
375
376 void
377 gtk_sheet_set_clip_text                 (GtkSheet *sheet, gboolean clip_text);
378
379 gboolean
380 gtk_sheet_clip_text                     (GtkSheet *sheet);
381
382 void
383 gtk_sheet_set_justify_entry             (GtkSheet *sheet, gboolean justify);
384
385 gboolean
386 gtk_sheet_justify_entry                 (GtkSheet *sheet);
387
388 void
389 gtk_sheet_set_locked                    (GtkSheet *sheet, gboolean lock);
390
391 gboolean
392 gtk_sheet_locked                        (const GtkSheet *sheet);
393
394 /* set sheet title */
395 void
396 gtk_sheet_set_title                     (GtkSheet *sheet, const gchar *title);
397
398 /* freeze all visual updates of the sheet.
399  * Then thaw the sheet after you have made a number of changes.
400  * The updates will occure in a more efficent way than if
401  * you made them on a unfrozen sheet */
402 void
403 gtk_sheet_freeze                        (GtkSheet *sheet);
404 void
405 gtk_sheet_thaw                          (GtkSheet *sheet);
406 /* Background colors */
407 void
408 gtk_sheet_set_background                (GtkSheet *sheet,
409                                          GdkColor *bg_color);
410 void
411 gtk_sheet_set_grid                      (GtkSheet *sheet,
412                                          GdkColor *grid_color);
413 void
414 gtk_sheet_show_grid                     (GtkSheet *sheet,
415                                          gboolean show);
416 gboolean
417 gtk_sheet_grid_visible                  (GtkSheet *sheet);
418
419 /* set/get column title */
420 void
421 gtk_sheet_set_column_title              (GtkSheet * sheet,
422                                         gint column,
423                                         const gchar * title);
424
425 const gchar *
426 gtk_sheet_get_column_title              (GtkSheet * sheet,
427                                         gint column);
428
429 /* set/get row title */
430 void
431 gtk_sheet_set_row_title                 (GtkSheet * sheet,
432                                         gint row,
433                                         const gchar * title);
434 const gchar *
435 gtk_sheet_get_row_title                 (GtkSheet * sheet,
436                                         gint row);
437
438
439 /* set/get button label */
440 void
441 gtk_sheet_row_button_add_label          (GtkSheet *sheet,
442                                         gint row, const gchar *label);
443 const gchar *
444 gtk_sheet_row_button_get_label          (GtkSheet *sheet,
445                                         gint row);
446 void
447 gtk_sheet_row_button_justify            (GtkSheet *sheet,
448                                         gint row, GtkJustification justification);
449
450
451
452 /* scroll the viewing area of the sheet to the given column
453  * and row; row_align and col_align are between 0-1 representing the
454  * location the row should appear on the screen, 0.0 being top or left,
455  * 1.0 being bottom or right; if row or column is negative then there
456  * is no change */
457 void
458 gtk_sheet_moveto (GtkSheet *sheet,
459                   gint row,
460                   gint column,
461                   gfloat row_align,
462                   gfloat col_align);
463
464
465 void
466 gtk_sheet_show_row_titles               (GtkSheet *sheet);
467 void
468 gtk_sheet_hide_row_titles               (GtkSheet *sheet);
469 gboolean
470 gtk_sheet_row_titles_visible            (GtkSheet *sheet);
471
472
473 /* set row button sensitivity. If sensitivity is TRUE can be toggled,
474  * otherwise it acts as a title */
475 void
476 gtk_sheet_row_set_sensitivity           (GtkSheet *sheet,
477                                         gint row,  gboolean sensitive);
478
479 /* set sensitivity for all row buttons */
480 void
481 gtk_sheet_rows_set_sensitivity          (GtkSheet *sheet, gboolean sensitive);
482 void
483 gtk_sheet_rows_set_resizable            (GtkSheet *sheet, gboolean resizable);
484 gboolean
485 gtk_sheet_rows_resizable                (GtkSheet *sheet);
486
487 /* set row visibility. The default value is TRUE. If FALSE, the
488  * row is hidden */
489 void
490 gtk_sheet_row_set_visibility            (GtkSheet *sheet,
491                                          gint row, gboolean visible);
492 void
493 gtk_sheet_row_label_set_visibility      (GtkSheet *sheet,
494                                          gint row, gboolean visible);
495 void
496 gtk_sheet_rows_labels_set_visibility    (GtkSheet *sheet, gboolean visible);
497
498
499 /* select the row. The range is then highlighted, and the bounds are stored
500  * in sheet->range  */
501 void
502 gtk_sheet_select_row                    (GtkSheet * sheet,
503                                         gint row);
504
505 /* select the column. The range is then highlighted, and the bounds are stored
506  * in sheet->range  */
507 void
508 gtk_sheet_select_column                 (GtkSheet * sheet,
509                                         gint column);
510
511 /* save selected range to "clipboard" */
512 void
513 gtk_sheet_clip_range                    (GtkSheet *sheet, const GtkSheetRange *range);
514 /* free clipboard */
515 void
516 gtk_sheet_unclip_range                  (GtkSheet *sheet);
517
518 gboolean
519 gtk_sheet_in_clip                       (GtkSheet *sheet);
520
521 /* get scrollbars adjustment */
522 GtkAdjustment *
523 gtk_sheet_get_vadjustment               (GtkSheet * sheet);
524 GtkAdjustment *
525 gtk_sheet_get_hadjustment               (GtkSheet * sheet);
526
527 /* highlight the selected range and store bounds in sheet->range */
528 void gtk_sheet_select_range             (GtkSheet *sheet,
529                                          const GtkSheetRange *range);
530
531 /* obvious */
532 void gtk_sheet_unselect_range           (GtkSheet *sheet);
533
534 /* set active cell where the entry will be displayed
535  * returns FALSE if current cell can't be deactivated or
536  * requested cell can't be activated */
537 gboolean
538 gtk_sheet_set_active_cell               (GtkSheet *sheet,
539                                         gint row, gint column);
540
541 /* Sets *ROW and *COLUMN to be the coordinates of the active cell.
542    ROW and/or COLUMN may be null if the caller is not interested in their
543    values */
544 void
545 gtk_sheet_get_active_cell               (GtkSheet *sheet,
546                                         gint *row, gint *column);
547
548 /* set cell contents and allocate memory if needed */
549 void
550 gtk_sheet_set_cell                      (GtkSheet *sheet,
551                                         gint row, gint col,
552                                         GtkJustification justification,
553                                         const gchar *text);
554 void
555 gtk_sheet_set_cell_text                 (GtkSheet *sheet,
556                                         gint row, gint col,
557                                         const gchar *text);
558 /* get cell contents */
559 gchar *
560 gtk_sheet_cell_get_text                 (const GtkSheet *sheet, gint row, gint col);
561
562 /* clear cell contents */
563 void
564 gtk_sheet_cell_clear                    (GtkSheet *sheet, gint row, gint col);
565 /* clear cell contents and remove links */
566 void
567 gtk_sheet_cell_delete                   (GtkSheet *sheet, gint row, gint col);
568
569 /* clear range contents. If range==NULL the whole sheet will be cleared */
570 void
571 gtk_sheet_range_clear                   (GtkSheet *sheet,
572                                          const GtkSheetRange *range);
573 /* clear range contents and remove links */
574 void
575 gtk_sheet_range_delete                  (GtkSheet *sheet,
576                                          const GtkSheetRange *range);
577
578 /* get cell state: GTK_STATE_NORMAL, GTK_STATE_SELECTED */
579 GtkStateType
580 gtk_sheet_cell_get_state                (GtkSheet *sheet, gint row, gint col);
581
582 /* get row and column correspondig to the given position in the screen */
583 gboolean
584 gtk_sheet_get_pixel_info (GtkSheet * sheet,
585                           gint x,
586                           gint y,
587                           gint * row,
588                           gint * column);
589
590 /* get area of a given cell */
591 gboolean
592 gtk_sheet_get_cell_area (GtkSheet *sheet,
593                          gint row,
594                          gint column,
595                          GdkRectangle *area);
596
597 /* set row height */
598 void
599 gtk_sheet_set_row_height (GtkSheet * sheet,
600                           gint row,
601                           guint height);
602
603
604 /* delete nrows rows starting in row */
605 void
606 gtk_sheet_delete_rows                   (GtkSheet *sheet, guint row, guint nrows);
607
608 /* append nrows row to the end of the sheet */
609 void
610 gtk_sheet_add_row                       (GtkSheet *sheet, guint nrows);
611
612 /* insert nrows rows before the given row and pull right */
613 void
614 gtk_sheet_insert_rows                   (GtkSheet *sheet, guint row, guint nrows);
615
616 /* set abckground color of the given range */
617 void
618 gtk_sheet_range_set_background          (GtkSheet *sheet,
619                                         const GtkSheetRange *range,
620                                         const GdkColor *color);
621
622 /* set foreground color (text color) of the given range */
623 void
624 gtk_sheet_range_set_foreground          (GtkSheet *sheet,
625                                         const GtkSheetRange *range,
626                                         const GdkColor *color);
627
628 /* set text justification (GTK_JUSTIFY_LEFT, RIGHT, CENTER) of the given range.
629  * The default value is GTK_JUSTIFY_LEFT. If autoformat is on, the
630  * default justification for numbers is GTK_JUSTIFY_RIGHT */
631 void
632 gtk_sheet_range_set_justification       (GtkSheet *sheet,
633                                         const GtkSheetRange *range,
634                                         GtkJustification justification);
635 void
636 gtk_sheet_column_set_justification      (GtkSheet *sheet,
637                                         gint column,
638                                         GtkJustification justification);
639 /* set if cell contents can be edited or not in the given range:
640  * accepted values are TRUE or FALSE. */
641 void
642 gtk_sheet_range_set_editable            (GtkSheet *sheet,
643                                         const GtkSheetRange *range,
644                                         gint editable);
645
646 /* set if cell contents are visible or not in the given range:
647  * accepted values are TRUE or FALSE.*/
648 void
649 gtk_sheet_range_set_visible             (GtkSheet *sheet,
650                                         const GtkSheetRange *range,
651                                         gboolean visible);
652
653 /* set cell border style in the given range.
654  * mask values are CELL_LEFT_BORDER, CELL_RIGHT_BORDER, CELL_TOP_BORDER,
655  * CELL_BOTTOM_BORDER
656  * width is the width of the border line in pixels
657  * line_style is the line_style for the border line */
658 void
659 gtk_sheet_range_set_border              (GtkSheet *sheet,
660                                         const GtkSheetRange *range,
661                                         gint mask,
662                                         guint width,
663                                         gint line_style);
664
665 /* set border color for the given range */
666 void
667 gtk_sheet_range_set_border_color        (GtkSheet *sheet,
668                                         const GtkSheetRange *range,
669                                         const GdkColor *color);
670
671 /* set font for the given range */
672 void
673 gtk_sheet_range_set_font                (GtkSheet *sheet,
674                                         const GtkSheetRange *range,
675                                         PangoFontDescription *font);
676
677 /* get cell attributes of the given cell */
678 /* TRUE means that the cell is currently allocated */
679 gboolean
680 gtk_sheet_get_attributes                (const GtkSheet *sheet,
681                                         gint row, gint col,
682                                         GtkSheetCellAttr *attributes);
683
684
685 GtkSheetChild *
686 gtk_sheet_put                           (GtkSheet *sheet,
687                                          GtkWidget *widget,
688                                          gint x, gint y);
689 void
690 gtk_sheet_attach_floating               (GtkSheet *sheet,
691                                          GtkWidget *widget,
692                                          gint row, gint col);
693 void
694 gtk_sheet_attach_default                (GtkSheet *sheet,
695                                          GtkWidget *widget,
696                                          gint row, gint col);
697 void
698 gtk_sheet_attach                        (GtkSheet *sheet,
699                                          GtkWidget *widget,
700                                          gint row, gint col,
701                                          gint xoptions,
702                                          gint yoptions,
703                                          gint xpadding,
704                                          gint ypadding);
705
706
707 void
708 gtk_sheet_move_child                    (GtkSheet *sheet,
709                                          GtkWidget *widget,
710                                          gint x, gint y);
711
712 GtkSheetChild *
713 gtk_sheet_get_child_at                  (GtkSheet *sheet,
714                                          gint row, gint col);
715
716 void
717 gtk_sheet_button_attach                 (GtkSheet *sheet,
718                                          GtkWidget *widget,
719                                          gint row, gint col);
720
721
722
723 void           gtk_sheet_set_model (GtkSheet *sheet,
724                                    GSheetModel *model);
725
726 GSheetModel * gtk_sheet_get_model (const GtkSheet *sheet);
727
728
729 #ifdef __cplusplus
730 }
731 #endif /* __cplusplus */
732
733
734 #endif /* __GTK_SHEET_H__ */
735
736