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, gint col, gint size)
104 g_return_if_fail (G_IS_SHEET_COLUMN (column));
106 if ((G_SHEET_COLUMN_GET_IFACE (column)->set_width) )
107 (G_SHEET_COLUMN_GET_IFACE (column)->set_width) (column, col, size);
112 g_sheet_column_get_width (const GSheetColumn *column, gint col)
114 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
116 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_width);
118 return (G_SHEET_COLUMN_GET_IFACE (column)->get_width) (column, col);
124 g_sheet_column_get_visibility(const GSheetColumn *column,
127 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
129 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_visibility);
131 return (G_SHEET_COLUMN_GET_IFACE (column)->get_visibility) (column,
137 g_sheet_column_get_sensitivity(const GSheetColumn *column,
140 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
142 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity);
144 return (G_SHEET_COLUMN_GET_IFACE (column)->get_sensitivity) (column,
150 inline GtkSheetButton *
151 g_sheet_column_get_button(const GSheetColumn *column,
154 GtkSheetButton *button = gtk_sheet_button_new();
156 GSheetColumnIface *iface = G_SHEET_COLUMN_GET_IFACE (column);
158 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
160 if ( iface->get_button_label)
161 button->label = iface->get_button_label(column, col);
166 inline GtkJustification
167 g_sheet_column_get_justification(const GSheetColumn *column,
170 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), FALSE);
172 g_assert (G_SHEET_COLUMN_GET_IFACE (column)->get_justification);
174 return (G_SHEET_COLUMN_GET_IFACE (column)->get_justification) (column, col);
181 g_sheet_column_get_left_text_column (const GSheetColumn *column,
184 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
186 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column)
189 return (G_SHEET_COLUMN_GET_IFACE (column)->get_left_text_column) (column, col);
194 g_sheet_column_get_right_text_column (const GSheetColumn *column,
197 g_return_val_if_fail (G_IS_SHEET_COLUMN (column), -1);
199 if ( ! G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column)
202 return (G_SHEET_COLUMN_GET_IFACE (column)->get_right_text_column) (column, col);
207 g_sheet_column_set_left_text_column (const GSheetColumn *column,
210 g_return_if_fail (G_IS_SHEET_COLUMN (column));
212 if ( G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column)
213 (G_SHEET_COLUMN_GET_IFACE (column)->set_left_text_column) (column, col, i);
219 g_sheet_column_set_right_text_column (const GSheetColumn *column,
222 g_return_if_fail (G_IS_SHEET_COLUMN (column));
224 if ( G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column)
225 (G_SHEET_COLUMN_GET_IFACE (column)->set_right_text_column) (column, col, i);
229 g_sheet_column_get_column_count(const GSheetColumn *geo)
231 g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
233 g_assert ( G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count);
235 return (G_SHEET_COLUMN_GET_IFACE (geo)->get_column_count) (geo);
239 g_sheet_column_start_pixel(const GSheetColumn *geo, gint col)
242 gint start_pixel = 0;
244 g_return_val_if_fail (G_IS_SHEET_COLUMN (geo), -1);
245 g_return_val_if_fail (col <
246 g_sheet_column_get_column_count(geo),-1);
248 for ( i = 0 ; i < col ; ++i )
250 if ( g_sheet_column_get_visibility(geo, i))
251 start_pixel += g_sheet_column_get_width(geo, i);
261 g_sheet_column_columns_changed(GSheetColumn *geo,
262 gint first, gint n_columns)
264 g_return_if_fail (G_IS_SHEET_COLUMN (geo));
266 g_signal_emit (geo, sheet_column_signals[COLUMNS_CHANGED], 0,