Merge commit 'origin/stable'
[pspp-builds.git] / src / ui / gui / sheet / 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 <gtk-contrib/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   gboolean (*get_row_overstrike) (const PsppireSheetModel *, gint row);
133 };
134
135
136
137 GType              psppire_sheet_model_get_type   (void) G_GNUC_CONST;
138
139
140 gchar * psppire_sheet_model_get_string (const PsppireSheetModel *sheet_model,
141                                   glong row, glong column);
142
143 gboolean  psppire_sheet_model_set_string (PsppireSheetModel *sheet_model,
144                                     const gchar *s,
145                                     glong row, glong column);
146
147 gboolean psppire_sheet_model_datum_clear    (PsppireSheetModel *sheet_model,
148                                        glong row, glong column);
149
150
151 void psppire_sheet_model_range_changed (PsppireSheetModel *sheet_model,
152                                   glong row0, glong col0,
153                                   glong rowi, glong coli);
154
155 void psppire_sheet_model_rows_deleted (PsppireSheetModel *sheet_model,
156                                  glong row, glong n_rows);
157
158 void psppire_sheet_model_rows_inserted (PsppireSheetModel *sheet_model,
159                                   glong row, glong n_rows);
160
161 void psppire_sheet_model_columns_inserted (PsppireSheetModel *sheet_model,
162                                      glong column, glong n_columns);
163
164 void psppire_sheet_model_columns_deleted (PsppireSheetModel *sheet_model,
165                                     glong column, glong n_columns);
166
167
168 gboolean psppire_sheet_model_is_editable (const PsppireSheetModel *model,
169                                     glong row, glong column);
170
171 gboolean psppire_sheet_model_is_visible
172  (const PsppireSheetModel *model, glong row, glong column);
173
174
175 GdkColor *psppire_sheet_model_get_foreground
176  (const PsppireSheetModel *model, glong row, glong column);
177
178 GdkColor *psppire_sheet_model_get_background
179  (const PsppireSheetModel *model, glong row, glong column);
180
181 const GtkJustification *psppire_sheet_model_get_justification
182  (const PsppireSheetModel *model, glong row, glong column);
183
184 const PsppireSheetCellBorder * psppire_sheet_model_get_cell_border
185  (const PsppireSheetModel *model, glong row, glong column);
186
187 gboolean psppire_sheet_model_free_strings (const PsppireSheetModel *sheet_model);
188
189 glong psppire_sheet_model_get_column_count (const PsppireSheetModel *sheet_model);
190
191 gint psppire_sheet_model_get_row_count (const PsppireSheetModel *sheet_model);
192
193 \f
194
195 gboolean psppire_sheet_model_get_column_sensitivity (const PsppireSheetModel *model,
196                                                gint col);
197
198 gchar * psppire_sheet_model_get_column_subtitle (const PsppireSheetModel *model,
199                                             gint col);
200
201 PsppireSheetButton * psppire_sheet_model_get_column_button (const PsppireSheetModel *, gint);
202
203 GtkJustification psppire_sheet_model_get_column_justification (const PsppireSheetModel *,
204                                                          gint);
205
206 \f
207
208 gboolean psppire_sheet_model_get_row_sensitivity (const PsppireSheetModel *model,
209                                             gint row);
210
211
212 gchar * psppire_sheet_model_get_row_subtitle (const PsppireSheetModel *model,
213                                             gint row);
214
215
216 PsppireSheetButton * psppire_sheet_model_get_row_button (const PsppireSheetModel *, gint);
217
218
219
220
221 G_END_DECLS
222
223 #endif /* __PSPPIRE_SHEET_MODEL_H__ */