1 /* GtkSheet widget for Gtk+.
2 * Copyright (C) 1999-2001 Adrian E. Feiguin <adrian@ifir.ifir.edu.ar>
4 * Based on GtkClist widget by Jay Painter, but major changes.
5 * Memory allocation routines inspired on SC (Spreadsheet Calculator)
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Library General Public License for more details.
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
23 #ifndef __GTK_SHEET_H__
24 #define __GTK_SHEET_H__
29 #endif /* __cplusplus */
32 typedef enum{GTK_SHEET_FOREGROUND
,
35 GTK_SHEET_JUSTIFICATION
,
37 GTK_SHEET_BORDER_COLOR
,
38 GTK_SHEET_IS_EDITABLE
,
39 GTK_SHEET_IS_VISIBLE
} GtkSheetAttrType
;
43 enum {GTK_SHEET_NORMAL
,
44 GTK_SHEET_ROW_SELECTED
,
45 GTK_SHEET_COLUMN_SELECTED
,
46 GTK_SHEET_RANGE_SELECTED
};
50 GTK_SHEET_LEFT_BORDER
= 1 << 0,
51 GTK_SHEET_RIGHT_BORDER
= 1 << 1,
52 GTK_SHEET_TOP_BORDER
= 1 << 2,
53 GTK_SHEET_BOTTOM_BORDER
= 1 << 3
59 GTK_SHEET_IS_LOCKED
= 1 << 0,
60 GTK_SHEET_IS_FROZEN
= 1 << 1,
61 GTK_SHEET_IN_XDRAG
= 1 << 2,
62 GTK_SHEET_IN_YDRAG
= 1 << 3,
63 GTK_SHEET_IN_DRAG
= 1 << 4,
64 GTK_SHEET_IN_SELECTION
= 1 << 5,
65 GTK_SHEET_IN_RESIZE
= 1 << 6,
66 GTK_SHEET_IN_CLIP
= 1 << 7,
67 GTK_SHEET_ROW_FROZEN
= 1 << 8, /* set rows to be resizeable */
68 GTK_SHEET_COLUMN_FROZEN
= 1 << 9, /* set cols to be resizeable */
69 GTK_SHEET_AUTORESIZE
= 1 << 10, /* resize column if text width is great than column width */
70 GTK_SHEET_CLIP_TEXT
= 1 << 11, /* clip text to cell */
71 GTK_SHEET_ROW_TITLES_VISIBLE
= 1 << 12,
72 GTK_SHEET_COL_TITLES_VISIBLE
= 1 << 13,
73 GTK_SHEET_AUTO_SCROLL
= 1 << 14,
74 GTK_SHEET_JUSTIFY_ENTRY
= 1 << 15
77 #define GTK_TYPE_SHEET_RANGE (gtk_sheet_range_get_type ())
78 #define GTK_TYPE_SHEET (gtk_sheet_get_type ())
80 #define GTK_SHEET(obj) GTK_CHECK_CAST (obj, gtk_sheet_get_type (), GtkSheet)
81 #define GTK_SHEET_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_sheet_get_type (), GtkSheetClass)
82 #define GTK_IS_SHEET(obj) GTK_CHECK_TYPE (obj, gtk_sheet_get_type ())
84 #define GTK_SHEET_FLAGS(sheet) (GTK_SHEET (sheet)->flags)
85 #define GTK_SHEET_SET_FLAGS(sheet,flag) (GTK_SHEET_FLAGS (sheet) |= (flag))
86 #define GTK_SHEET_UNSET_FLAGS(sheet,flag) (GTK_SHEET_FLAGS (sheet) &= ~(flag))
88 #define GTK_SHEET_IS_LOCKED(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IS_LOCKED)
89 #define GTK_SHEET_IS_FROZEN(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IS_FROZEN)
90 #define GTK_SHEET_IN_XDRAG(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_XDRAG)
91 #define GTK_SHEET_IN_YDRAG(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_YDRAG)
92 #define GTK_SHEET_IN_DRAG(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_DRAG)
93 #define GTK_SHEET_IN_SELECTION(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_SELECTION)
94 #define GTK_SHEET_IN_RESIZE(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_RESIZE)
95 #define GTK_SHEET_IN_CLIP(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_IN_CLIP)
96 #define GTK_SHEET_ROW_FROZEN(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_ROW_FROZEN)
97 #define GTK_SHEET_COLUMN_FROZEN(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_COLUMN_FROZEN)
98 #define GTK_SHEET_AUTORESIZE(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_AUTORESIZE)
99 #define GTK_SHEET_CLIP_TEXT(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_CLIP_TEXT)
100 #define GTK_SHEET_ROW_TITLES_VISIBLE(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_ROW_TITLES_VISIBLE)
101 #define GTK_SHEET_COL_TITLES_VISIBLE(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_COL_TITLES_VISIBLE)
102 #define GTK_SHEET_AUTO_SCROLL(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_AUTO_SCROLL)
103 #define GTK_SHEET_JUSTIFY_ENTRY(sheet) (GTK_SHEET_FLAGS (sheet) & GTK_SHEET_JUSTIFY_ENTRY)
105 typedef struct _GtkSheet GtkSheet
;
106 typedef struct _GtkSheetClass GtkSheetClass
;
107 typedef struct _GtkSheetChild GtkSheetChild
;
108 typedef struct _GtkSheetRow GtkSheetRow
;
109 typedef struct _GtkSheetColumn GtkSheetColumn
;
110 typedef struct _GtkSheetCell GtkSheetCell
;
111 typedef struct _GtkSheetRange GtkSheetRange
;
112 typedef struct _GtkSheetButton GtkSheetButton
;
113 typedef struct _GtkSheetCellAttr GtkSheetCellAttr
;
114 typedef struct _GtkSheetCellBorder GtkSheetCellBorder
;
116 struct _GtkSheetChild
121 gboolean attached_to_cell
;
123 gfloat x_align
, y_align
;
126 struct _GtkSheetButton
131 gboolean label_visible
;
132 GtkSheetChild
*child
;
134 GtkJustification justification
;
137 struct _GtkSheetCellBorder
141 GdkLineStyle line_style
;
142 GdkCapStyle cap_style
;
143 GdkJoinStyle join_style
;
147 struct _GtkSheetCellAttr
149 GtkJustification justification
;
153 GtkSheetCellBorder border
;
154 gboolean is_editable
;
164 GtkSheetCellAttr
*attributes
;
170 struct _GtkSheetRange
172 gint row0
,col0
; /* upper-left cell */
173 gint rowi
,coli
; /* lower-right cell */
183 GtkSheetButton button
;
184 gboolean is_sensitive
;
188 struct _GtkSheetColumn
194 GtkSheetButton button
;
196 gint left_text_column
; /* min left column displaying text on this column */
197 gint right_text_column
; /* max right column displaying text on this column */
199 GtkJustification justification
;
200 gboolean is_sensitive
;
206 GtkContainer container
;
210 GtkSelectionMode selection_mode
;
214 /* Background colors */
222 /* allocation rectangle after the container_border_width
223 and the width of the shadow border */
224 GdkRectangle internal_allocation
;
229 GtkSheetColumn
*column
;
231 /* max number of diplayed cells */
235 /* Displayed range */
239 /* sheet data: dynamically allocated array of cell pointers */
240 GtkSheetCell
***data
;
242 /* max number of allocated cells */
247 GtkSheetCell active_cell
;
248 GtkWidget
*sheet_entry
;
249 GdkWindow
*sheet_entry_window
; /* for NO_WINDOW entry widgets(ala GtkLayout) */
253 /* expanding selection */
254 GtkSheetCell selection_cell
;
256 /* timer for automatic scroll during selection */
258 /* timer for flashing clipped range */
262 /* global selection button */
271 /*the scrolling window and it's height and width to
272 * make things a little speedier */
273 GdkWindow
*sheet_window
;
274 guint sheet_window_width
;
275 guint sheet_window_height
;
277 /* sheet backing pixmap */
280 /* offsets for scrolling */
283 gfloat old_hadjustment
;
284 gfloat old_vadjustment
;
286 /* border shadow style */
287 GtkShadowType shadow_type
;
290 GdkRectangle column_title_area
;
291 GdkWindow
*column_title_window
;
294 GdkRectangle row_title_area
;
295 GdkWindow
*row_title_window
;
298 GtkAdjustment
*hadjustment
;
299 GtkAdjustment
*vadjustment
;
301 /* xor GC for the verticle drag line */
304 /* gc for drawing unselected cells */
308 /* cursor used to indicate dragging */
309 GdkCursor
*cursor_drag
;
311 /* the current x-pixel location of the xor-drag vline */
314 /* the current y-pixel location of the xor-drag hline */
317 /* current cell being dragged */
318 GtkSheetCell drag_cell
;
319 /* current range being dragged */
320 GtkSheetRange drag_range
;
323 GtkSheetRange clip_range
;
326 struct _GtkSheetClass
328 GtkContainerClass parent_class
;
330 void (*set_scroll_adjustments
) (GtkSheet
*sheet
,
331 GtkAdjustment
*hadjustment
,
332 GtkAdjustment
*vadjustment
);
334 void (*select_row
) (GtkSheet
*sheet
, gint row
);
336 void (*select_column
) (GtkSheet
*sheet
, gint column
);
338 void (*select_range
) (GtkSheet
*sheet
, GtkSheetRange
*range
);
340 void (*clip_range
) (GtkSheet
*sheet
, GtkSheetRange
*clip_range
);
342 void (*resize_range
) (GtkSheet
*sheet
,
343 GtkSheetRange
*old_range
,
344 GtkSheetRange
*new_range
);
346 void (*move_range
) (GtkSheet
*sheet
,
347 GtkSheetRange
*old_range
,
348 GtkSheetRange
*new_range
);
350 gboolean (*traverse
) (GtkSheet
*sheet
,
351 gint row
, gint column
,
352 gint
*new_row
, gint
*new_column
);
354 gboolean (*deactivate
) (GtkSheet
*sheet
,
355 gint row
, gint column
);
357 gboolean (*activate
) (GtkSheet
*sheet
,
358 gint row
, gint column
);
360 void (*set_cell
) (GtkSheet
*sheet
,
361 gint row
, gint column
);
363 void (*clear_cell
) (GtkSheet
*sheet
,
364 gint row
, gint column
);
366 void (*changed
) (GtkSheet
*sheet
,
367 gint row
, gint column
);
369 void (*new_column_width
) (GtkSheet
*sheet
,
373 void (*new_row_height
) (GtkSheet
*sheet
,
379 GtkType
gtk_sheet_get_type (void);
380 GtkType
gtk_sheet_range_get_type (void);
382 /* create a new sheet */
384 gtk_sheet_new (guint rows
, guint columns
, const gchar
*title
);
387 gtk_sheet_construct (GtkSheet
*sheet
,
388 guint rows
, guint columns
, const gchar
*title
);
390 /* create a new browser sheet. It cells can not be edited */
392 gtk_sheet_new_browser (guint rows
, guint columns
, const gchar
*title
);
395 gtk_sheet_construct_browser (GtkSheet
*sheet
,
396 guint rows
, guint columns
, const gchar
*title
);
398 /* create a new sheet with custom entry */
400 gtk_sheet_new_with_custom_entry (guint rows
, guint columns
,
404 gtk_sheet_construct_with_custom_entry (GtkSheet
*sheet
,
405 guint rows
, guint columns
,
408 /* change scroll adjustments */
410 gtk_sheet_set_hadjustment (GtkSheet
*sheet
,
411 GtkAdjustment
*adjustment
);
413 gtk_sheet_set_vadjustment (GtkSheet
*sheet
,
414 GtkAdjustment
*adjustment
);
417 gtk_sheet_change_entry (GtkSheet
*sheet
, GtkType entry_type
);
419 /* Returns sheet's entry widget */
421 gtk_sheet_get_entry (GtkSheet
*sheet
);
423 gtk_sheet_get_entry_widget (GtkSheet
*sheet
);
425 /* Returns sheet->state
426 * Added by Steven Rostedt <steven.rostedt@lmco.com> */
428 gtk_sheet_get_state (GtkSheet
*sheet
);
430 /* Returns sheet's ranges
431 * Added by Murray Cumming */
433 gtk_sheet_get_columns_count (GtkSheet
*sheet
);
436 gtk_sheet_get_rows_count (GtkSheet
*sheet
);
439 gtk_sheet_get_visible_range (GtkSheet
*sheet
,
440 GtkSheetRange
*range
);
442 gtk_sheet_set_selection_mode (GtkSheet
*sheet
, gint mode
);
443 /* set sheet title */
445 gtk_sheet_set_title (GtkSheet
*sheet
, const gchar
*title
);
447 /* freeze all visual updates of the sheet.
448 * Then thaw the sheet after you have made a number of changes.
449 * The updates will occure in a more efficent way than if
450 * you made them on a unfrozen sheet */
452 gtk_sheet_freeze (GtkSheet
*sheet
);
454 gtk_sheet_thaw (GtkSheet
*sheet
);
455 /* Background colors */
457 gtk_sheet_set_background (GtkSheet
*sheet
,
460 gtk_sheet_set_grid (GtkSheet
*sheet
,
461 GdkColor
*grid_color
);
463 gtk_sheet_show_grid (GtkSheet
*sheet
,
466 gtk_sheet_grid_visible (GtkSheet
*sheet
);
468 /* set column title */
470 gtk_sheet_set_column_title (GtkSheet
* sheet
,
472 const gchar
* title
);
476 gtk_sheet_set_row_title (GtkSheet
* sheet
,
478 const gchar
* title
);
480 /* set button label */
482 gtk_sheet_row_button_add_label (GtkSheet
*sheet
,
483 gint row
, const gchar
*label
);
485 gtk_sheet_column_button_add_label (GtkSheet
*sheet
,
486 gint column
, const gchar
*label
);
488 gtk_sheet_row_button_justify (GtkSheet
*sheet
,
489 gint row
, GtkJustification justification
);
491 gtk_sheet_column_button_justify (GtkSheet
*sheet
,
492 gint column
, GtkJustification justification
);
494 /* scroll the viewing area of the sheet to the given column
495 * and row; row_align and col_align are between 0-1 representing the
496 * location the row should appear on the screnn, 0.0 being top or left,
497 * 1.0 being bottom or right; if row or column is negative then there
500 gtk_sheet_moveto (GtkSheet
* sheet
,
506 /* resize column/row titles window */
508 gtk_sheet_set_row_titles_width(GtkSheet
*sheet
, guint width
);
510 gtk_sheet_set_column_titles_height(GtkSheet
*sheet
, guint height
);
512 /* show/hide column/row titles window */
514 gtk_sheet_show_column_titles (GtkSheet
*sheet
);
516 gtk_sheet_show_row_titles (GtkSheet
*sheet
);
518 gtk_sheet_hide_column_titles (GtkSheet
*sheet
);
520 gtk_sheet_hide_row_titles (GtkSheet
*sheet
);
522 /* set column button sensitivity. If sensitivity is TRUE it can be toggled,
523 * otherwise it acts as a title */
525 gtk_sheet_column_set_sensitivity (GtkSheet
*sheet
,
526 gint column
, gboolean sensitive
);
528 /* set sensitivity for all column buttons */
530 gtk_sheet_columns_set_sensitivity (GtkSheet
*sheet
, gboolean sensitive
);
533 /* set row button sensitivity. If sensitivity is TRUE can be toggled,
534 * otherwise it acts as a title */
536 gtk_sheet_row_set_sensitivity (GtkSheet
*sheet
,
537 gint row
, gboolean sensitive
);
539 /* set sensitivity for all row buttons */
541 gtk_sheet_rows_set_sensitivity (GtkSheet
*sheet
, gboolean sensitive
);
543 /* set column visibility. The default value is TRUE. If FALSE, the
544 * column is hidden */
546 gtk_sheet_column_set_visibility (GtkSheet
*sheet
,
547 gint column
, gboolean visible
);
549 gtk_sheet_column_label_set_visibility (GtkSheet
*sheet
,
550 gint column
, gboolean visible
);
552 gtk_sheet_columns_labels_set_visibility (GtkSheet
*sheet
, gboolean visible
);
554 /* set row visibility. The default value is TRUE. If FALSE, the
557 gtk_sheet_row_set_visibility (GtkSheet
*sheet
,
558 gint row
, gboolean visible
);
560 gtk_sheet_row_label_set_visibility (GtkSheet
*sheet
,
561 gint row
, gboolean visible
);
563 gtk_sheet_rows_labels_set_visibility (GtkSheet
*sheet
, gboolean visible
);
566 /* select the row. The range is then highlighted, and the bounds are stored
569 gtk_sheet_select_row (GtkSheet
* sheet
,
572 /* select the column. The range is then highlighted, and the bounds are stored
575 gtk_sheet_select_column (GtkSheet
* sheet
,
578 /* save selected range to "clipboard" */
580 gtk_sheet_clip_range (GtkSheet
*sheet
, const GtkSheetRange
*range
);
583 gtk_sheet_unclip_range (GtkSheet
*sheet
);
585 /* get scrollbars adjustment */
587 gtk_sheet_get_vadjustment (GtkSheet
* sheet
);
589 gtk_sheet_get_hadjustment (GtkSheet
* sheet
);
591 /* highlight the selected range and store bounds in sheet->range */
592 void gtk_sheet_select_range (GtkSheet
*sheet
,
593 const GtkSheetRange
*range
);
596 void gtk_sheet_unselect_range (GtkSheet
*sheet
);
598 /* set active cell where the entry will be displayed
599 * returns FALSE if current cell can't be deactivated or
600 * requested cell can't be activated */
602 gtk_sheet_set_active_cell (GtkSheet
*sheet
,
603 gint row
, gint column
);
605 gtk_sheet_get_active_cell (GtkSheet
*sheet
,
606 gint
*row
, gint
*column
);
608 /* set cell contents and allocate memory if needed */
610 gtk_sheet_set_cell (GtkSheet
*sheet
,
612 GtkJustification justification
,
615 gtk_sheet_set_cell_text (GtkSheet
*sheet
,
619 /* get cell contents */
621 gtk_sheet_cell_get_text (GtkSheet
*sheet
, gint row
, gint col
);
624 /* clear cell contents */
626 gtk_sheet_cell_clear (GtkSheet
*sheet
, gint row
, gint col
);
627 /* clear cell contents and remove links */
629 gtk_sheet_cell_delete (GtkSheet
*sheet
, gint row
, gint col
);
631 /* clear range contents. If range==NULL the whole sheet will be cleared */
633 gtk_sheet_range_clear (GtkSheet
*sheet
,
634 const GtkSheetRange
*range
);
635 /* clear range contents and remove links */
637 gtk_sheet_range_delete (GtkSheet
*sheet
,
638 const GtkSheetRange
*range
);
640 /* get cell state: GTK_STATE_NORMAL, GTK_STATE_SELECTED */
642 gtk_sheet_cell_get_state (GtkSheet
*sheet
, gint row
, gint col
);
644 /* Handles cell links */
646 gtk_sheet_link_cell (GtkSheet
*sheet
, gint row
, gint col
,
650 gtk_sheet_get_link (GtkSheet
*sheet
, gint row
, gint col
);
652 gtk_sheet_remove_link (GtkSheet
*sheet
, gint row
, gint col
);
654 /* get row and column correspondig to the given position in the screen */
656 gtk_sheet_get_pixel_info (GtkSheet
* sheet
,
662 /* get area of a given cell */
664 gtk_sheet_get_cell_area (GtkSheet
*sheet
,
669 /* set column width */
671 gtk_sheet_set_column_width (GtkSheet
* sheet
,
677 gtk_sheet_set_row_height (GtkSheet
* sheet
,
681 /* append ncols columns to the end of the sheet */
683 gtk_sheet_add_column (GtkSheet
*sheet
, guint ncols
);
685 /* append nrows row to the end of the sheet */
687 gtk_sheet_add_row (GtkSheet
*sheet
, guint nrows
);
689 /* insert nrows rows before the given row and pull right */
691 gtk_sheet_insert_rows (GtkSheet
*sheet
, guint row
, guint nrows
);
693 /* insert ncols columns before the given col and pull down */
695 gtk_sheet_insert_columns (GtkSheet
*sheet
, guint col
, guint ncols
);
697 /* delete nrows rows starting in row */
699 gtk_sheet_delete_rows (GtkSheet
*sheet
, guint row
, guint nrows
);
701 /* delete ncols columns starting in col */
703 gtk_sheet_delete_columns (GtkSheet
*sheet
, guint col
, guint ncols
);
705 /* set abckground color of the given range */
707 gtk_sheet_range_set_background (GtkSheet
*sheet
,
708 const GtkSheetRange
*range
,
709 const GdkColor
*color
);
711 /* set foreground color (text color) of the given range */
713 gtk_sheet_range_set_foreground (GtkSheet
*sheet
,
714 const GtkSheetRange
*range
,
715 const GdkColor
*color
);
717 /* set text justification (GTK_JUSTIFY_LEFT, RIGHT, CENTER) of the given range.
718 * The default value is GTK_JUSTIFY_LEFT. If autoformat is on, the
719 * default justification for numbers is GTK_JUSTIFY_RIGHT */
721 gtk_sheet_range_set_justification (GtkSheet
*sheet
,
722 const GtkSheetRange
*range
,
723 GtkJustification justification
);
725 gtk_sheet_column_set_justification (GtkSheet
*sheet
,
727 GtkJustification justification
);
728 /* set if cell contents can be edited or not in the given range:
729 * accepted values are TRUE or FALSE. */
731 gtk_sheet_range_set_editable (GtkSheet
*sheet
,
732 const GtkSheetRange
*range
,
735 /* set if cell contents are visible or not in the given range:
736 * accepted values are TRUE or FALSE.*/
738 gtk_sheet_range_set_visible (GtkSheet
*sheet
,
739 const GtkSheetRange
*range
,
742 /* set cell border style in the given range.
743 * mask values are CELL_LEFT_BORDER, CELL_RIGHT_BORDER, CELL_TOP_BORDER,
745 * width is the width of the border line in pixels
746 * line_style is the line_style for the border line */
748 gtk_sheet_range_set_border (GtkSheet
*sheet
,
749 const GtkSheetRange
*range
,
754 /* set border color for the given range */
756 gtk_sheet_range_set_border_color (GtkSheet
*sheet
,
757 const GtkSheetRange
*range
,
758 const GdkColor
*color
);
760 /* set font for the given range */
762 gtk_sheet_range_set_font (GtkSheet
*sheet
,
763 const GtkSheetRange
*range
,
766 /* get cell attributes of the given cell */
767 /* TRUE means that the cell is currently allocated */
769 gtk_sheet_get_attributes (GtkSheet
*sheet
,
771 GtkSheetCellAttr
*attributes
);
775 gtk_sheet_put (GtkSheet
*sheet
,
780 gtk_sheet_attach (GtkSheet
*sheet
,
783 gfloat x_align
, gfloat y_align
);
786 gtk_sheet_move_child (GtkSheet
*sheet
,
791 gtk_sheet_get_child_at (GtkSheet
*sheet
,
795 gtk_sheet_button_attach (GtkSheet
*sheet
,
798 gfloat x_align
, gfloat y_align
);
803 #endif /* __cplusplus */
806 #endif /* __GTK_SHEET_H__ */