1 /* GSheetColumn --- an abstract model of the column geometry of a
4 * Copyright (C) 2006 Free Software Foundation
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26 #include <glib/gprintf.h>
27 #include <gobject/gvaluecollector.h>
28 #include "gsheet-column-iface.h"
29 #include "gtkextra-marshal.h"
30 #include "gtkextra-sheet.h"
37 static guint sheet_column_signals[LAST_SIGNAL];
39 static void g_sheet_column_base_init (gpointer g_class);
42 g_sheet_column_get_type (void)
44 static GType sheet_column_type = 0;
46 if (! sheet_column_type)
48 static const GTypeInfo sheet_column_info =
51 sizeof (GSheetColumnIface), /* class_size */
52 g_sheet_column_base_init, /* base_init */
53 NULL, /* base_finalize */
55 NULL, /* class_finalize */
56 NULL, /* class_data */
63 g_type_register_static (G_TYPE_INTERFACE, "GSheetColumn",
64 &sheet_column_info, 0);
66 g_assert (sheet_column_type);
68 g_type_interface_add_prerequisite (sheet_column_type, G_TYPE_OBJECT);
71 return sheet_column_type;
76 g_sheet_column_base_init (gpointer g_class)
78 static gboolean initialized = FALSE;
83 sheet_column_signals[COLUMNS_CHANGED] =
84 g_signal_new ("columns_changed",
87 G_STRUCT_OFFSET (GSheetColumnIface, columns_changed),
89 gtkextra_VOID__INT_INT,
101 g_sheet_column_set_width (GSheetColumn *column, glong col, gint size)
103 g_return_if_fail (G_IS_SHEET_COLUMN (column));
105 if ((G_SHEET_COLUMN_GET_IFACE (column)->set_width) )
106 (G_SHEET_COLUMN_GET_IFACE (column)->set_width) (column, col, size);
111 g_sheet_column_get_width (const GSheetColumn *column, glong col)
113 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
115 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_width);
117 return (G_SHEET_COLUMN_GET_IFACE (column)->get_width) (column, col);
123 g_sheet_column_get_sensitivity (const GSheetColumn *column,
126 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
128 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity);
130 return (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity) (column,
137 g_sheet_column_get_button (const GSheetColumn *column,
140 GtkSheetButton *button = gtk_sheet_button_new ();
142 GSheetColumnIface *iface = G_SHEET_COLUMN_GET_IFACE (column);
144 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
146 if ( iface->get_button_label)
147 button->label = iface->get_button_label (column, col);
153 g_sheet_column_get_justification (const GSheetColumn *column,
156 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
158 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_justification);
160 return (G_SHEET_COLUMN_GET_IFACE (column)->get_justification) (column, col);
164 g_sheet_column_get_subtitle (const GSheetColumn *column, glong col)
166 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), NULL);
168 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_subtitle)
171 return (G_SHEET_COLUMN_GET_IFACE (column)->get_subtitle) (column, col);
177 g_sheet_column_get_left_text_column (const GSheetColumn *column,
180 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
182 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column)
185 return (G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column) (column, col);
190 g_sheet_column_get_right_text_column (const GSheetColumn *column,
193 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
195 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column)
198 return (G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column) (column, col);
203 g_sheet_column_set_left_text_column (const GSheetColumn *column,
206 g_return_if_fail (G_IS_SHEET_COLUMN (column));
208 if ( G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column)
209 (G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column) (column, col, i);
215 g_sheet_column_set_right_text_column (const GSheetColumn *column,
218 g_return_if_fail (G_IS_SHEET_COLUMN (column));
220 if ( G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column)
221 (G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column) (column, col, i);
225 g_sheet_column_get_column_count (const GSheetColumn *geo)
227 g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
229 g_assert ( G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count);
231 return (G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count) (geo);
235 g_sheet_column_start_pixel (const GSheetColumn *geo, glong col)
238 gint start_pixel = 0;
240 g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
241 g_return_val_if_fail (col <= g_sheet_column_get_column_count (geo), -1);
243 for (i = 0; i < col; ++i)
245 start_pixel += g_sheet_column_get_width (geo, i);
254 g_sheet_column_columns_changed (GSheetColumn *geo,
255 glong first, glong n_columns)
257 g_return_if_fail (G_IS_SHEET_COLUMN (geo));
259 g_signal_emit (geo, sheet_column_signals[COLUMNS_CHANGED], 0,