1 /* gsheet-hetero-column.c
2 * PSPPIRE --- A Graphical User Interface for PSPP
3 * Copyright (C) 2006 Free Software Foundation
4 * Written by John Darrington
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
20 #include "gsheet-column-iface.h"
21 #include "gsheet-hetero-column.h"
25 static void g_sheet_hetero_column_init (GSheetHeteroColumn *hg);
26 static void g_sheet_hetero_column_class_init (GSheetHeteroColumnClass *class);
27 static void g_sheet_hetero_column_finalize (GObject *object);
29 static void g_sheet_column_init (GSheetColumnIface *iface);
32 static GObjectClass *parent_class = NULL;
35 g_sheet_hetero_column_get_type (void)
37 static GType hetero_column_type = 0;
39 if (!hetero_column_type)
41 static const GTypeInfo hetero_column_info =
43 sizeof (GSheetHeteroColumnClass),
45 NULL, /* base_finalize */
46 (GClassInitFunc) g_sheet_hetero_column_class_init,
47 NULL, /* class_finalize */
48 NULL, /* class_data */
49 sizeof (GSheetHeteroColumn),
51 (GInstanceInitFunc) g_sheet_hetero_column_init,
54 static const GInterfaceInfo column_info =
56 (GInterfaceInitFunc) g_sheet_column_init,
62 g_type_register_static (G_TYPE_OBJECT, "g_sheet_hetero_column",
63 &hetero_column_info, 0);
65 g_type_add_interface_static (hetero_column_type,
70 return hetero_column_type;
74 static GtkSheetButton default_button;
79 * g_sheet_hetero_column_new:
80 * @width: The size of columns in this hetero column
82 * Return value: a new #g_sheet_hetero_column
85 g_sheet_hetero_column_new (gint default_width, gint n_columns)
88 GSheetHeteroColumn *hg;
91 retval = g_object_new (G_TYPE_SHEET_HETERO_COLUMN, NULL);
93 hg = G_SHEET_HETERO_COLUMN(retval);
94 hg->n_columns = n_columns;
95 hg->default_width = default_width;
96 hg->col = g_new0(struct GSheetHeteroColumnUnit, n_columns);
98 for (i = 0 ; i < hg->n_columns; ++i )
100 hg->col[i].button = default_button;
107 g_sheet_hetero_column_get_width(const GSheetColumn *geom, gint i)
109 GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
111 g_return_val_if_fail(i < hg->n_columns, -1);
113 return hg->col[i].width;
117 g_sheet_hetero_column_get_sensitivity(const GSheetColumn *geom, gint u)
124 g_sheet_hetero_column_get_visibility(const GSheetColumn *geom, gint u)
132 g_sheet_hetero_column_get_button_label(const GSheetColumn *geom, gint u)
134 GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
136 return hg->col[u].button.label;
140 static GtkJustification
141 g_sheet_hetero_column_get_justification(const GSheetColumn *geom, gint u)
143 return GTK_JUSTIFY_FILL;
149 g_sheet_hetero_column_get_column_count(const GSheetColumn *geom)
151 GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(geom);
153 return hg->n_columns;
157 g_sheet_hetero_column_class_init (GSheetHeteroColumnClass *class)
159 GObjectClass *object_class;
161 parent_class = g_type_class_peek_parent (class);
162 object_class = (GObjectClass*) class;
164 object_class->finalize = g_sheet_hetero_column_finalize;
166 default_button.label=NULL;
167 default_button.child=NULL;
168 default_button.state=GTK_STATE_NORMAL;
169 default_button.justification=GTK_JUSTIFY_CENTER;
170 default_button.label_visible = TRUE;
175 g_sheet_hetero_column_init (GSheetHeteroColumn *o)
180 g_sheet_hetero_column_finalize (GObject *object)
182 GSheetHeteroColumn *hg = G_SHEET_HETERO_COLUMN(object);
189 g_sheet_column_init (GSheetColumnIface *iface)
191 iface->get_width = g_sheet_hetero_column_get_width ;
192 iface->set_width = g_sheet_hetero_column_set_width ;
193 iface->get_sensitivity = g_sheet_hetero_column_get_sensitivity ;
194 iface->get_visibility = g_sheet_hetero_column_get_visibility ;
195 iface->get_justification = g_sheet_hetero_column_get_justification;
196 iface->get_column_count = g_sheet_hetero_column_get_column_count;
198 iface->get_button_label = g_sheet_hetero_column_get_button_label;
203 g_sheet_hetero_column_set_button_label(GSheetHeteroColumn *geo,
204 gint i, const gchar *label)
206 g_return_if_fail(i < geo->n_columns);
208 g_free(geo->col[i].button.label);
209 geo->col[i].button.label = g_malloc(strlen(label) + 1);
211 g_stpcpy(geo->col[i].button.label, label);
217 g_sheet_hetero_column_set_width(GSheetHeteroColumn *geo,
220 g_return_if_fail(i < geo->n_columns);
222 geo->col[i].width = size;