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
24 #include <glib/gprintf.h>
25 #include <gobject/gvaluecollector.h>
26 #include "gsheet-column-iface.h"
27 #include "gtkextra-marshal.h"
28 #include "gtkextra-sheet.h"
35 static guint sheet_column_signals[LAST_SIGNAL];
39 static void g_sheet_column_base_init (gpointer g_class);
43 g_sheet_column_get_type (void)
45 static GType sheet_column_type = 0;
47 if (! sheet_column_type)
49 static const GTypeInfo sheet_column_info =
52 sizeof (GSheetColumnIface), /* class_size */
53 g_sheet_column_base_init, /* base_init */
54 NULL, /* base_finalize */
56 NULL, /* class_finalize */
57 NULL, /* class_data */
64 g_type_register_static (G_TYPE_INTERFACE, "GSheetColumn",
65 &sheet_column_info, 0);
67 g_assert(sheet_column_type);
69 g_type_interface_add_prerequisite (sheet_column_type, G_TYPE_OBJECT);
72 return sheet_column_type;
77 g_sheet_column_base_init (gpointer g_class)
79 static gboolean initialized = FALSE;
84 sheet_column_signals[COLUMNS_CHANGED] =
85 g_signal_new ("columns_changed",
88 G_STRUCT_OFFSET (GSheetColumnIface, columns_changed),
90 gtkextra_VOID__INT_INT,
102 g_sheet_column_set_width (GSheetColumn *column,
103 gint col, gint size, const GtkSheet *sheet)
105 g_return_if_fail (G_IS_SHEET_COLUMN (column));
107 if ((G_SHEET_COLUMN_GET_IFACE (column)->set_width) )
108 (G_SHEET_COLUMN_GET_IFACE (column)->set_width) (column, col,
114 g_sheet_column_get_width (const GSheetColumn *column,
115 gint col, const GtkSheet *sheet)
117 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
119 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_width);
121 return (G_SHEET_COLUMN_GET_IFACE (column)->get_width) (column, col,
128 g_sheet_column_get_visibility(const GSheetColumn *column,
129 gint col, const GtkSheet *sheet)
131 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
133 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_visibility);
135 return (G_SHEET_COLUMN_GET_IFACE (column)->get_visibility) (column,
141 g_sheet_column_get_sensitivity(const GSheetColumn *column,
142 gint col, const GtkSheet *sheet)
144 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
146 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity);
148 return (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity) (column,
154 inline GtkSheetButton *
155 g_sheet_column_get_button(const GSheetColumn *column,
156 gint col, const GtkSheet *sheet)
158 GtkSheetButton *button = gtk_sheet_button_new();
160 GSheetColumnIface *iface = G_SHEET_COLUMN_GET_IFACE (column);
162 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
164 if ( iface->get_button_label)
165 button->label = iface->get_button_label(column, col, sheet);
170 inline GtkJustification
171 g_sheet_column_get_justification(const GSheetColumn *column,
172 gint col, const GtkSheet *sheet)
174 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
176 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_justification);
178 return (G_SHEET_COLUMN_GET_IFACE (column)->get_justification) (column, col, sheet);
185 g_sheet_column_get_left_text_column (const GSheetColumn *column,
186 gint col, const GtkSheet *sheet)
188 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
190 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column)
193 return (G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column) (column, col, sheet);
198 g_sheet_column_get_right_text_column (const GSheetColumn *column,
199 gint col, const GtkSheet *sheet)
201 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
203 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column)
206 return (G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column) (column, col, sheet);
211 g_sheet_column_set_left_text_column (const GSheetColumn *column,
212 gint col, gint i, const GtkSheet *sheet)
214 g_return_if_fail (G_IS_SHEET_COLUMN (column));
216 if ( G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column)
217 (G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column) (column, col, i, sheet);
223 g_sheet_column_set_right_text_column (const GSheetColumn *column,
224 gint col, gint i, const GtkSheet *sheet)
226 g_return_if_fail (G_IS_SHEET_COLUMN (column));
228 if ( G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column)
229 (G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column) (column, col, i, sheet);
233 g_sheet_column_get_column_count(const GSheetColumn *geo, const GtkSheet *sheet)
235 g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
237 g_assert ( G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count);
239 return (G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count) (geo, sheet);
243 g_sheet_column_start_pixel(const GSheetColumn *geo, gint col, const GtkSheet *sheet)
246 gint start_pixel = 0;
248 g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
249 g_return_val_if_fail (col <
250 g_sheet_column_get_column_count(geo, sheet),-1);
252 for ( i = 0 ; i < col ; ++i )
254 if ( g_sheet_column_get_visibility(geo, i, sheet))
255 start_pixel += g_sheet_column_get_width(geo, i, sheet);
265 g_sheet_column_columns_deleted(GSheetColumn *geo,
266 gint first, gint n_columns)
268 g_return_if_fail (G_IS_SHEET_COLUMN (geo));
270 g_signal_emit (geo, sheet_column_signals[COLUMNS_CHANGED], 0,