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