Readd lost files
[pspp-builds.git] / lib / gtksheet / psppire-sheetmodel.h
1 /* PsppireSheetModel --- an abstract model for the PsppireSheet widget.
2  * Copyright (C) 2006, 2008 Free Software Foundation
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16
17 #ifndef __PSPPIRE_SHEET_MODEL_H__
18 #define __PSPPIRE_SHEET_MODEL_H__
19
20
21 /* This file provides an abstract interface or the data displayed by the
22    PsppireSheet widget */
23
24 #include <glib-object.h>
25 #include <gdk/gdk.h>
26 #include <gtk/gtk.h>
27 #include "gtkextra-sheet.h"
28
29 G_BEGIN_DECLS
30
31 #define PSPPIRE_TYPE_SHEET_MODEL            (psppire_sheet_model_get_type ())
32 #define PSPPIRE_SHEET_MODEL(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSPPIRE_TYPE_SHEET_MODEL, PsppireSheetModel))
33 #define PSPPIRE_IS_SHEET_MODEL(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PSPPIRE_TYPE_SHEET_MODEL))
34 #define PSPPIRE_SHEET_MODEL_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PSPPIRE_TYPE_SHEET_MODEL, PsppireSheetModelIface))
35
36 typedef enum
37 {
38   PSPPIRE_SHEET_LEFT_BORDER     = 1 << 0,
39   PSPPIRE_SHEET_RIGHT_BORDER    = 1 << 1,
40   PSPPIRE_SHEET_TOP_BORDER      = 1 << 2,
41   PSPPIRE_SHEET_BOTTOM_BORDER   = 1 << 3
42 } PsppireSheetBorderType ;
43
44
45 typedef struct _PsppireSheetModel        PsppireSheetModel; /* Dummy typedef */
46 typedef struct _PsppireSheetModelIface   PsppireSheetModelIface;
47 typedef struct _PsppireSheetRange PsppireSheetRange;
48 typedef struct _PsppireSheetCellBorder     PsppireSheetCellBorder;
49
50 struct _PsppireSheetRange
51 {
52   gint row0, col0; /* upper-left cell */
53   gint rowi, coli; /* lower-right cell */
54 };
55
56 struct _PsppireSheetCellBorder
57 {
58   PsppireSheetBorderType mask;
59   guint width;
60   GdkLineStyle line_style;
61   GdkCapStyle cap_style;
62   GdkJoinStyle join_style;
63   GdkColor color;
64 };
65
66
67
68 struct _PsppireSheetModelIface
69 {
70   GTypeInterface g_iface;
71
72   gboolean free_strings;
73
74   /* Signals */
75   void         (* range_changed)    (PsppireSheetModel *sheet_model,
76                                      glong row0, glong col0,
77                                      glong rowi, glong coli);
78
79   void         (* rows_inserted)    (PsppireSheetModel *sheet_model,
80                                      glong row, glong n_rows);
81
82   void         (* rows_deleted)     (PsppireSheetModel *sheet_model,
83                                      glong row, glong n_rows);
84
85   void         (* columns_inserted)    (PsppireSheetModel *sheet_model,
86                                         glong column, glong n_columns);
87
88   void         (* columns_deleted)     (PsppireSheetModel *sheet_model,
89                                         glong column, glong n_columns);
90
91
92
93   /* Virtual Table */
94
95   gchar *      (* get_string)      (const PsppireSheetModel *sheet_model,
96                                     glong row, glong column);
97
98   gboolean  (* set_string) (PsppireSheetModel *sheet_model,
99                             const gchar *s, glong row, glong column);
100
101   gboolean  (* clear_datum) (PsppireSheetModel *sheet_model,
102                              glong row, glong column);
103
104   gboolean (* is_editable) (const PsppireSheetModel *sheet_model, glong row, glong column);
105
106   GdkColor *  (* get_foreground) (const PsppireSheetModel *sheet_model,
107                                   glong row, glong column);
108
109   GdkColor *  (* get_background) (const PsppireSheetModel *sheet_model,
110                                   glong row, glong column);
111
112   const GtkJustification *  (* get_justification) (const PsppireSheetModel *sheet_model,
113                                                    glong row, glong column);
114
115   /* column related metadata */
116
117   gchar * (*get_column_title) (const PsppireSheetModel *, gint col);
118   gchar * (*get_column_subtitle) (const PsppireSheetModel *, gint col);
119   gboolean (*get_column_sensitivity) (const PsppireSheetModel *, gint col);
120   GtkJustification (*get_column_justification) (const PsppireSheetModel *mode, gint col);
121   const PsppireSheetButton * (* get_button) (const PsppireSheetModel *model, gint col);
122
123   glong (*get_column_count) (const PsppireSheetModel *model);
124
125
126   /* row related metadata */
127   gchar * (*get_row_title) (const PsppireSheetModel *, gint row);
128   gchar * (*get_row_subtitle) (const PsppireSheetModel *, gint row);
129   glong (*get_row_count) (const PsppireSheetModel *model);
130   gboolean (*get_row_sensitivity) (const PsppireSheetModel *, gint row);
131 };
132
133
134
135 GType              psppire_sheet_model_get_type   (void) G_GNUC_CONST;
136
137
138 gchar * psppire_sheet_model_get_string (const PsppireSheetModel *sheet_model,
139                                   glong row, glong column);
140
141 gboolean  psppire_sheet_model_set_string (PsppireSheetModel *sheet_model,
142                                     const gchar *s,
143                                     glong row, glong column);
144
145 gboolean psppire_sheet_model_datum_clear    (PsppireSheetModel *sheet_model,
146                                        glong row, glong column);
147
148
149 void psppire_sheet_model_range_changed (PsppireSheetModel *sheet_model,
150                                   glong row0, glong col0,
151                                   glong rowi, glong coli);
152
153 void psppire_sheet_model_rows_deleted (PsppireSheetModel *sheet_model,
154                                  glong row, glong n_rows);
155
156 void psppire_sheet_model_rows_inserted (PsppireSheetModel *sheet_model,
157                                   glong row, glong n_rows);
158
159 void psppire_sheet_model_columns_inserted (PsppireSheetModel *sheet_model,
160                                      glong column, glong n_columns);
161
162 void psppire_sheet_model_columns_deleted (PsppireSheetModel *sheet_model,
163                                     glong column, glong n_columns);
164
165
166 gboolean psppire_sheet_model_is_editable (const PsppireSheetModel *model,
167                                     glong row, glong column);
168
169 gboolean psppire_sheet_model_is_visible
170  (const PsppireSheetModel *model, glong row, glong column);
171
172
173 GdkColor *psppire_sheet_model_get_foreground
174  (const PsppireSheetModel *model, glong row, glong column);
175
176 GdkColor *psppire_sheet_model_get_background
177  (const PsppireSheetModel *model, glong row, glong column);
178
179 const GtkJustification *psppire_sheet_model_get_justification
180  (const PsppireSheetModel *model, glong row, glong column);
181
182 const PsppireSheetCellBorder * psppire_sheet_model_get_cell_border
183  (const PsppireSheetModel *model, glong row, glong column);
184
185 gboolean psppire_sheet_model_free_strings (const PsppireSheetModel *sheet_model);
186
187 glong psppire_sheet_model_get_column_count (const PsppireSheetModel *sheet_model);
188
189 gint psppire_sheet_model_get_row_count (const PsppireSheetModel *sheet_model);
190
191 \f
192
193 gboolean psppire_sheet_model_get_column_sensitivity (const PsppireSheetModel *model,
194                                                gint col);
195
196 gchar * psppire_sheet_model_get_column_subtitle (const PsppireSheetModel *model,
197                                             gint col);
198
199 PsppireSheetButton * psppire_sheet_model_get_column_button (const PsppireSheetModel *, gint);
200
201 GtkJustification psppire_sheet_model_get_column_justification (const PsppireSheetModel *,
202                                                          gint);
203
204 \f
205
206 gboolean psppire_sheet_model_get_row_sensitivity (const PsppireSheetModel *model,
207                                             gint row);
208
209
210 gchar * psppire_sheet_model_get_row_subtitle (const PsppireSheetModel *model,
211                                             gint row);
212
213
214 PsppireSheetButton * psppire_sheet_model_get_row_button (const PsppireSheetModel *, gint);
215
216
217
218
219 G_END_DECLS
220
221 #endif /* __PSPPIRE_SHEET_MODEL_H__ */