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"
32 static guint sheet_model_signals[LAST_SIGNAL] = { 0 };
35 static void g_sheet_model_base_init (gpointer g_class);
39 g_sheet_model_get_type (void)
41 static GType sheet_model_type = 0;
43 if (! sheet_model_type)
45 static const GTypeInfo sheet_model_info =
47 sizeof (GSheetModelIface), /* class_size */
48 g_sheet_model_base_init, /* base_init */
49 NULL, /* base_finalize */
51 NULL, /* class_finalize */
52 NULL, /* class_data */
59 g_type_register_static (G_TYPE_INTERFACE, "GSheetModel",
60 &sheet_model_info, 0);
62 g_type_interface_add_prerequisite (sheet_model_type, G_TYPE_OBJECT);
65 return sheet_model_type;
69 g_sheet_model_base_init (gpointer g_class)
71 static gboolean initialized = FALSE;
75 sheet_model_signals[RANGE_CHANGED] =
76 g_signal_new ("range_changed",
79 G_STRUCT_OFFSET (GSheetModelIface, range_changed),
81 gtkextra_VOID__INT_INT_INT_INT,
90 sheet_model_signals[ROWS_INSERTED] =
91 g_signal_new ("rows_inserted",
94 G_STRUCT_OFFSET (GSheetModelIface, rows_inserted),
96 gtkextra_VOID__INT_INT,
102 sheet_model_signals[ROWS_DELETED] =
103 g_signal_new ("rows_deleted",
106 G_STRUCT_OFFSET (GSheetModelIface, rows_deleted),
108 gtkextra_VOID__INT_INT,
113 sheet_model_signals[COLUMNS_INSERTED] =
114 g_signal_new ("columns_inserted",
117 G_STRUCT_OFFSET (GSheetModelIface, columns_inserted),
119 gtkextra_VOID__INT_INT,
125 sheet_model_signals[COLUMNS_DELETED] =
126 g_signal_new ("columns_deleted",
129 G_STRUCT_OFFSET (GSheetModelIface, columns_deleted),
131 gtkextra_VOID__INT_INT,
143 * g_sheet_model_free_strings
144 * @sheet_model: A #GSheetModel
146 * Returns: True if strings obtained with get_string should be freed by the
147 * sheet when no longer required.
150 g_sheet_model_free_strings (const GSheetModel *sheet_model)
152 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), FALSE);
154 return G_SHEET_MODEL_GET_IFACE (sheet_model)->free_strings;
159 * g_sheet_model_get_string:
160 * @sheet_model: A #GSheetModel
161 * @row: The row of the cell to be retrieved.
162 * @column: The column of the cell to be retrieved.
164 * Retrieves the datum at location ROW, COLUMN in the form of a string.
165 * Returns: The string representation of the datum, or NULL on error.
168 g_sheet_model_get_string (const GSheetModel *sheet_model,
169 gint row, gint column)
171 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), 0);
173 g_assert (G_SHEET_MODEL_GET_IFACE (sheet_model)->get_string);
175 return (G_SHEET_MODEL_GET_IFACE (sheet_model)->get_string) (sheet_model, row, column);
179 * g_sheet_model_set_string
180 * @sheet_model: A #GSheetModel
181 * @text: The text describing the datum to be set.
182 * @row: The row of the cell to be cleared.
183 * @column: The column of the cell to be cleared.
185 * Sets the datum at a location from a string.
186 * Returns: TRUE if the datum was changed, FALSE otherwise.
189 g_sheet_model_set_string (GSheetModel *sheet_model,
191 gint row, gint column)
193 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), FALSE);
195 g_assert (G_SHEET_MODEL_GET_IFACE (sheet_model)->set_string);
197 return G_SHEET_MODEL_GET_IFACE (sheet_model)->set_string (sheet_model,
204 * g_sheet_model_datum_clear:
205 * @sheet_model: A #GSheetModel
206 * @row: The row of the cell to be cleared.
207 * @column: The column of the cell to be cleared.
209 * Called when the datum at a location is to be cleared.
210 * Returns: TRUE if the datum was cleared, FALSE otherwise.
213 g_sheet_model_datum_clear (GSheetModel *sheet_model,
214 gint row, gint column)
216 g_return_val_if_fail (G_IS_SHEET_MODEL (sheet_model), FALSE);
218 g_assert (G_SHEET_MODEL_GET_IFACE (sheet_model)->clear_datum);
220 return G_SHEET_MODEL_GET_IFACE (sheet_model)->clear_datum (sheet_model,
226 * g_sheet_model_range_changed:
227 * @sheet_model: A #GSheetModel
228 * @range: The #GSheetRange range of cells which have changed.
230 * Emits the "range_changed" signal on @sheet_model.
233 g_sheet_model_range_changed (GSheetModel *sheet_model,
234 gint row0, gint col0,
235 gint rowi, gint coli)
237 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
239 g_signal_emit (sheet_model, sheet_model_signals[RANGE_CHANGED], 0,
240 row0, col0, rowi, coli);
247 * g_sheet_model_rows_inserted:
248 * @sheet_model: A #GSheetModel
249 * @row: The row before which the new rows should be inserted.
250 * @n_rows: The number of rows to insert.
252 * Emits the "rows_inserted" signal on @sheet_model.
255 g_sheet_model_rows_inserted (GSheetModel *sheet_model,
256 gint row, gint n_rows)
258 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
260 g_signal_emit (sheet_model, sheet_model_signals[ROWS_INSERTED], 0,
266 * g_sheet_model_columns_inserted:
267 * @sheet_model: A #GSheetModel
268 * @column: The column before which the new columns should be inserted.
269 * @n_columns: The number of columns to insert.
271 * Emits the "columns_inserted" signal on @sheet_model.
274 g_sheet_model_columns_inserted (GSheetModel *sheet_model,
275 gint column, gint n_columns)
277 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
279 g_signal_emit (sheet_model, sheet_model_signals[COLUMNS_INSERTED], 0,
287 * g_sheet_model_rows_deleted:
288 * @sheet_model: A #GSheetModel
289 * @row: The first row to be deleted.
290 * @n_rows: The number of rows to delete.
292 * Emits the "rows_deleted" signal on @sheet_model.
295 g_sheet_model_rows_deleted (GSheetModel *sheet_model,
296 gint row, gint n_rows)
298 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
300 g_signal_emit (sheet_model, sheet_model_signals[ROWS_DELETED], 0,
307 * g_sheet_model_columns_deleted:
308 * @sheet_model: A #GSheetModel
309 * @column: The first column to be deleted.
310 * @n_columns: The number of columns to delete.
312 * Emits the "columns_deleted" signal on @sheet_model.
315 g_sheet_model_columns_deleted (GSheetModel *sheet_model,
316 gint column, gint n_columns)
318 g_return_if_fail (G_IS_SHEET_MODEL (sheet_model));
320 g_signal_emit (sheet_model, sheet_model_signals[COLUMNS_DELETED], 0,
329 * g_sheet_model_is_editable:
330 * @sheet_model: A #GSheetModel
332 * @column: The column
334 * Returns: TRUE if the cell is editable, FALSE otherwise
337 g_sheet_model_is_editable (const GSheetModel *model,
338 gint row, gint column)
340 g_return_val_if_fail (G_IS_SHEET_MODEL (model), TRUE);
342 if ( ! G_SHEET_MODEL_GET_IFACE (model)->is_editable )
345 return G_SHEET_MODEL_GET_IFACE (model)->is_editable (model,
350 * g_sheet_model_is_visible:
351 * @sheet_model: A #GSheetModel
353 * @column: The column
355 * Returns: TRUE if the cell is visible, FALSE otherwise
358 g_sheet_model_is_visible (const GSheetModel *model,
359 gint row, gint column)
361 g_return_val_if_fail (G_IS_SHEET_MODEL (model), TRUE);
363 if ( ! G_SHEET_MODEL_GET_IFACE (model)->is_visible )
366 return G_SHEET_MODEL_GET_IFACE (model)->is_visible (model,
372 * g_sheet_model_get_foreground:
373 * @sheet_model: A #GSheetModel
375 * @column: The column
377 * Returns the foreground colour of the cell at @row, @column
378 * Returns: the foreground colour, or NULL on error.
380 inline const GdkColor *
381 g_sheet_model_get_foreground (const GSheetModel *model,
382 gint row, gint column)
384 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
386 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_foreground )
389 return G_SHEET_MODEL_GET_IFACE (model)->get_foreground (model,
394 * g_sheet_model_get_background:
395 * @sheet_model: A #GSheetModel
397 * @column: The column
399 * Returns the background colour of the cell at @row, @column
400 * Returns: the background colour, or NULL on error.
402 inline const GdkColor *
403 g_sheet_model_get_background (const GSheetModel *model,
404 gint row, gint column)
406 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
408 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_background )
411 return G_SHEET_MODEL_GET_IFACE (model)->get_background (model,
416 * g_sheet_model_get_justification:
417 * @sheet_model: A #GSheetModel
419 * @column: The column
421 * Returns the justification of the cell at @row, @column
422 * Returns: the justification, or NULL on error.
424 inline const GtkJustification *
425 g_sheet_model_get_justification (const GSheetModel *model,
426 gint row, gint column)
428 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
430 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_justification)
433 return G_SHEET_MODEL_GET_IFACE (model)->get_justification (model,
438 * g_sheet_model_get_font_desc:
439 * @sheet_model: A #GSheetModel
441 * @column: The column
443 * Returns the font description of the cell at @row, @column
444 * Returns: the font description, or NULL on error.
446 inline const PangoFontDescription *
447 g_sheet_model_get_font_desc(const GSheetModel *model,
448 gint row, gint column)
450 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
451 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_font_desc)
454 return G_SHEET_MODEL_GET_IFACE (model)->get_font_desc (model,
459 * g_sheet_model_get_cell_border:
460 * @sheet_model: A #GSheetModel
462 * @column: The column
464 * Returns the cell border of the cell at @row, @column
465 * Returns: the cell border, or NULL on error.
467 inline const GtkSheetCellBorder *
468 g_sheet_model_get_cell_border (const GSheetModel *model,
469 gint row, gint column)
471 g_return_val_if_fail (G_IS_SHEET_MODEL (model), NULL);
472 if ( ! G_SHEET_MODEL_GET_IFACE (model)->get_cell_border)
475 return G_SHEET_MODEL_GET_IFACE (model)->get_cell_border (model,
482 * g_sheet_model_get_column_count:
483 * @model: A #GSheetModel
485 * Returns the total number of columns represented by the model
488 g_sheet_model_get_column_count(const GSheetModel *model)
490 g_return_val_if_fail (G_IS_SHEET_MODEL (model), -1);
492 return G_SHEET_MODEL_GET_IFACE (model)->get_column_count (model);
496 * g_sheet_model_get_row_count:
497 * @model: A #GSheetModel
499 * Returns the total number of rows represented by the model
502 g_sheet_model_get_row_count(const GSheetModel *model)
504 g_return_val_if_fail (G_IS_SHEET_MODEL (model), -1);
507 return G_SHEET_MODEL_GET_IFACE (model)->get_row_count (model);