sheet.h 4.01 KB
Newer Older
Arturo Espinosa's avatar
Arturo Espinosa committed
1 2
#ifndef SHEET_H
#define SHEET_H
3 4 5 6 7 8

typedef GList ColStyleList;

struct Workbook;

typedef struct {
Arturo Espinosa's avatar
Arturo Espinosa committed
9 10
	GtkWidget  *toplevel;
	GtkWidget  *notebook;
11 12 13 14 15 16
	GtkWidget  *table;

	/* Edit area */
	GtkWidget  *ea_status;
	GtkWidget  *ea_button_box;
	GtkWidget  *ea_input;
Arturo Espinosa's avatar
Arturo Espinosa committed
17 18 19 20 21
	
	Style      style;
	GHashTable *sheets;	/* keeps a list of the Sheets on this workbook */
} Workbook;

22 23 24 25 26 27
typedef struct {
	int        base_col, base_row;
	int        start_col, start_row;
	int        end_col, end_row;
} SheetSelection;

Arturo Espinosa's avatar
Arturo Espinosa committed
28 29
typedef struct {
	Workbook   *parent_workbook;
30
	GtkWidget  *toplevel, *col_canvas, *row_canvas;
Arturo Espinosa's avatar
Arturo Espinosa committed
31
	GtkWidget  *sheet_view;
32 33 34
	GnomeCanvasItem *col_item, *row_item;
	
	double     last_zoom_factor_used;
35 36 37
	char       *name;
		   
	Style      style;
38

39
	ColRowInfo default_col_style;
40
	GList      *cols_info;
41

42
	ColRowInfo default_row_style;
43
	GList      *rows_info;
Arturo Espinosa's avatar
Arturo Espinosa committed
44

45
	void       *contents;
46 47 48 49 50 51 52 53 54

	GList      *selections;

	/* Scrolling information */
	GtkWidget  *vs, *hs;	/* The scrollbars */
	GtkObject  *va, *ha;    /* The adjustments */
	
	int        max_col_used;
	int        max_row_used;
55 56
} Sheet;

57
typedef  void (*sheet_col_row_callback)(Sheet *sheet, ColRowInfo *ci, void *user_data);
Arturo Espinosa's avatar
Arturo Espinosa committed
58
typedef  void (*sheet_cell_foreach_callback)(Sheet *sheet, Cell *cell);
59

60 61 62 63 64 65 66 67 68 69 70
Sheet      *sheet_new                 (Workbook *wb, char *name);
void        sheet_destroy             (Sheet *sheet);
void        sheet_foreach_col         (Sheet *sheet, sheet_col_row_callback, void *user_data);
void        sheet_foreach_row         (Sheet *sheet, sheet_col_row_callback, void *user_data);
void        sheet_set_zoom_factor     (Sheet *sheet, double factor);
void        sheet_get_cell_bounds     (Sheet *sheet, ColType col, RowType row, int *x, int *y, int *w, int *h);

/* Selection management */
void        sheet_selection_append    (Sheet *sheet, int col, int row);
void        sheet_selection_extend_to (Sheet *sheet, int col, int row);
void        sheet_selection_clear     (Sheet *sheet);
71

72 73
int         sheet_selection_is_cell_selected (Sheet *sheet, int col, int row);
					 
Arturo Espinosa's avatar
Arturo Espinosa committed
74
/* Create new ColRowInfos from the default sheet style */
75 76
ColRowInfo *sheet_col_new             (Sheet *sheet);
ColRowInfo *sheet_row_new             (Sheet *sheet);
Arturo Espinosa's avatar
Arturo Espinosa committed
77 78

/* Duplicates the information of a col/row */
79
ColRowInfo *sheet_duplicate_colrow    (ColRowInfo *original);
Arturo Espinosa's avatar
Arturo Espinosa committed
80 81

/* Retrieve information from a col/row */
82 83
ColRowInfo *sheet_col_get_info        (Sheet *sheet, int col);
ColRowInfo *sheet_row_get_info        (Sheet *sheet, int row);
Arturo Espinosa's avatar
Arturo Espinosa committed
84

Arturo Espinosa's avatar
Arturo Espinosa committed
85 86 87 88
/* Returns a pointer to a ColRowInfo: existed or freshly created */
ColRowInfo *sheet_row_get             (Sheet *sheet, int pos);
ColRowInfo *sheet_col_get             (Sheet *sheet, int pos);

Arturo Espinosa's avatar
Arturo Espinosa committed
89
/* Add a ColRowInfo to the Sheet */
90 91
void        sheet_col_add             (Sheet *sheet, ColRowInfo *cp);
void        sheet_row_add             (Sheet *sheet, ColRowInfo *cp);
Arturo Espinosa's avatar
Arturo Espinosa committed
92 93

/* Measure distances in pixels from one col/row to another */
94 95
int         sheet_col_get_distance    (Sheet *sheet, int from_col, int to_col);
int         sheet_row_get_distance    (Sheet *sheet, int from_row, int to_row);
Arturo Espinosa's avatar
Arturo Espinosa committed
96 97

/* Sets the width/height of a column row in terms of pixels */
98 99
void        sheet_col_set_width       (Sheet *sheet, int col, int width);
void        sheet_row_set_height      (Sheet *sheet, int row, int width);
Arturo Espinosa's avatar
Arturo Espinosa committed
100

Arturo Espinosa's avatar
Arturo Espinosa committed
101 102 103 104 105 106 107 108 109 110 111
Style      *sheet_style_compute       (Sheet *sheet, int col, int row);

/* Cell management */
Cell       *sheet_cell_new            (Sheet *sheet, int col, int row);
Cell       *sheet_cell_new_with_text  (Sheet *sheet, int col, int row, char *text);
void        sheet_cell_foreach_range  (Sheet *sheet,
				       int start_col, int start_row,
				       int end_col, int end_row,
				       sheet_cell_foreach_callback callback,
				       void *closure);

112 113 114
Workbook   *workbook_new              (void);
Workbook   *workbook_new_with_sheets  (int sheet_count);
void        workbook_attach_sheet     (Workbook *, Sheet *);
Arturo Espinosa's avatar
Arturo Espinosa committed
115

116 117 118 119
/*
 * Callback routine: invoked when the first view ItemGrid
 * is realized to allocate the default styles
 */
120
void     workbook_realized            (Workbook *, GdkWindow *);
121

122
#endif