1 /* GSheetModel --- an abstract model for the GSheet widget.
2 * Copyright (C) 2006 Free Software Foundation
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library 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 GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 #include "gsheetmodel.h"
21 #include "gtkextra-marshal.h"
30 static guint sheet_model_signals[LAST_SIGNAL] = { 0 };
33 static void g_sheet_model_base_init (gpointer g_class);
37 g_sheet_model_get_type (void)
39 static GType sheet_model_type = 0;
41 if (! sheet_model_type)
43 static const GTypeInfo sheet_model_info =
45 sizeof (GSheetModelIface), /* class_size */
46 g_sheet_model_base_init, /* base_init */
47 NULL, /* base_finalize */
49 NULL, /* class_finalize */
50 NULL, /* class_data */
57 g_type_register_static (G_TYPE_INTERFACE, "GSheetModel",
58 &sheet_model_info, 0);
60 g_type_interface_add_prerequisite (sheet_model_type, G_TYPE_OBJECT);
63 return sheet_model_type;
67 g_sheet_model_base_init (gpointer g_class)
69 static gboolean initialized = FALSE;
73 sheet_model_signals[RANGE_CHANGED] =
74 g_signal_new ("range_changed",
77 G_STRUCT_OFFSET (GSheetModelIface, range_changed),
79 gtkextra_VOID__INT_INT_INT_INT,
88 sheet_model_signals[ROWS_INSERTED] =
89 g_signal_new ("rows_inserted",
92 G_STRUCT_OFFSET (GSheetModelIface, rows_inserted),
94 gtkextra_VOID__INT_INT,
100 sheet_model_signals[ROWS_DELETED] =
101 g_signal_new ("rows_deleted",
104 G_STRUCT_OFFSET (GSheetModelIface, rows_deleted),
106 gtkextra_VOID__INT_INT,
117 * g_sheet_model_get_string:
118 * @sheet_model: A #GSheetModel
119 * @row: The row of the cell to be retrieved.
120 * @column: The column of the cell to be retrieved.
122 * Retrieves the datum at location ROW, COLUMN in the form of a string.
123 * Returns: The string representation of the datum, or NULL on error.
126 g_sheet_model_get_string (const GSheetModel *sheet_model,
127 gint row, gint column)
129 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), 0);
131 g_assert (G_SHEET_MODEL_GET_IFACE (sheet_model)->get_string);
133 return (G_SHEET_MODEL_GET_IFACE (sheet_model)->get_string) (sheet_model, row, column);
137 * g_sheet_model_set_string
138 * @sheet_model: A #GSheetModel
139 * @text: The text describing the datum to be set.
140 * @row: The row of the cell to be cleared.
141 * @column: The column of the cell to be cleared.
143 * Sets the datum at a location from a string.
144 * Returns: TRUE if the datum was changed, FALSE otherwise.
147 g_sheet_model_set_string (GSheetModel *sheet_model,
149 gint row, gint column)
151 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), FALSE);
153 g_assert (G_SHEET_MODEL_GET_IFACE (sheet_model)->set_string);
155 return G_SHEET_MODEL_GET_IFACE (sheet_model)->set_string (sheet_model,
162 * g_sheet_model_datum_clear:
163 * @sheet_model: A #GSheetModel
164 * @row: The row of the cell to be cleared.
165 * @column: The column of the cell to be cleared.
167 * Called when the datum at a location is to be cleared.
168 * Returns: TRUE if the datum was cleared, FALSE otherwise.
171 g_sheet_model_datum_clear (GSheetModel *sheet_model,
172 gint row, gint column)
174 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), FALSE);
176 g_assert (G_SHEET_MODEL_GET_IFACE (sheet_model)->clear_datum);
178 return G_SHEET_MODEL_GET_IFACE (sheet_model)->clear_datum (sheet_model,
184 * g_sheet_model_range_changed:
185 * @sheet_model: A #GSheetModel
186 * @range: The #GSheetRange range of cells which have changed.
188 * Emits the "range_changed" signal on @sheet_model.
191 g_sheet_model_range_changed (GSheetModel *sheet_model,
192 gint row0, gint col0,
193 gint rowi, gint coli)
195 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
197 g_signal_emit (sheet_model, sheet_model_signals[RANGE_CHANGED], 0,
198 row0, col0, rowi, coli);
205 * g_sheet_model_rows_inserted:
206 * @sheet_model: A #GSheetModel
207 * @row: The row before which the new rows should be inserted.
208 * @n_rows: The number of rows to insert.
210 * Emits the "rows_inserted" signal on @sheet_model.
213 g_sheet_model_rows_inserted (GSheetModel *sheet_model,
214 gint row, gint n_rows)
216 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
218 g_signal_emit (sheet_model, sheet_model_signals[ROWS_INSERTED], 0,
226 * g_sheet_model_rows_deleted:
227 * @sheet_model: A #GSheetModel
228 * @row: The first row to be deleted.
229 * @n_rows: The number of rows to delete.
231 * Emits the "rows_deleted" signal on @sheet_model.
234 g_sheet_model_rows_deleted (GSheetModel *sheet_model,
235 gint row, gint n_rows)
237 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
239 g_signal_emit (sheet_model, sheet_model_signals[ROWS_DELETED], 0,
247 * g_sheet_model_is_editable:
248 * @sheet_model: A #GSheetModel
250 * @column: The column
252 * Returns: TRUE if the cell is editable, FALSE otherwise
255 g_sheet_model_is_editable (const GSheetModel *model,
256 gint row, gint column)
258 g_return_val_if_fail (G_IS_SHEET_MODEL (model), TRUE);
260 if ( ! G_SHEET_MODEL_GET_IFACE (model)->is_editable )
263 return G_SHEET_MODEL_GET_IFACE (model)->is_editable (model,
268 * g_sheet_model_is_visible:
269 * @sheet_model: A #GSheetModel
271 * @column: The column
273 * Returns: TRUE if the cell is visible, FALSE otherwise
276 g_sheet_model_is_visible (const GSheetModel *model,
277 gint row, gint column)
279 g_return_val_if_fail (G_IS_SHEET_MODEL (model), TRUE);
281 if ( ! G_SHEET_MODEL_GET_IFACE (model)->is_visible )
284 return G_SHEET_MODEL_GET_IFACE (model)->is_visible (model,
290 * g_sheet_model_get_foreground:
291 * @sheet_model: A #GSheetModel
293 * @column: The column
295 * Returns the foreground colour of the cell at @row, @column
296 * Returns: the foreground colour, or NULL on error.
298 inline const GdkColor *
299 g_sheet_model_get_foreground (const GSheetModel *model,
300 gint row, gint column)
302 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
304 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_foreground )
307 return G_SHEET_MODEL_GET_IFACE (model)->get_foreground (model,
312 * g_sheet_model_get_background:
313 * @sheet_model: A #GSheetModel
315 * @column: The column
317 * Returns the background colour of the cell at @row, @column
318 * Returns: the background colour, or NULL on error.
320 inline const GdkColor *
321 g_sheet_model_get_background (const GSheetModel *model,
322 gint row, gint column)
324 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
326 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_background )
329 return G_SHEET_MODEL_GET_IFACE (model)->get_background (model,
334 * g_sheet_model_get_justification:
335 * @sheet_model: A #GSheetModel
337 * @column: The column
339 * Returns the justification of the cell at @row, @column
340 * Returns: the justification, or NULL on error.
342 inline const GtkJustification *
343 g_sheet_model_get_justification (const GSheetModel *model,
344 gint row, gint column)
346 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
348 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_justification)
351 return G_SHEET_MODEL_GET_IFACE (model)->get_justification (model,
356 * g_sheet_model_get_font_desc:
357 * @sheet_model: A #GSheetModel
359 * @column: The column
361 * Returns the font description of the cell at @row, @column
362 * Returns: the font description, or NULL on error.
364 inline const PangoFontDescription *
365 g_sheet_model_get_font_desc(const GSheetModel *model,
366 gint row, gint column)
368 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
369 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_font_desc)
372 return G_SHEET_MODEL_GET_IFACE (model)->get_font_desc (model,
377 * g_sheet_model_get_cell_border:
378 * @sheet_model: A #GSheetModel
380 * @column: The column
382 * Returns the cell border of the cell at @row, @column
383 * Returns: the cell border, or NULL on error.
385 inline const GtkSheetCellBorder *
386 g_sheet_model_get_cell_border (const GSheetModel *model,
387 gint row, gint column)
389 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
390 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_cell_border)
393 return G_SHEET_MODEL_GET_IFACE (model)->get_cell_border (model,