38 #include <glib/gi18n.h>
45 #include "gnc-date-delta.h"
47 #define GDD_LABEL "gdd"
58 static guint date_delta_signals [LAST_SIGNAL] = { 0 };
63 static void gnc_date_delta_forall (GtkContainer *container,
64 gboolean include_internals,
66 gpointer callbabck_data);
68 static GtkHBoxClass *parent_class;
76 gnc_date_delta_get_type (
void)
78 static GType date_delta_type = 0;
80 if (date_delta_type == 0)
82 GTypeInfo date_delta_info =
87 (GClassInitFunc) gnc_date_delta_class_init,
92 (GInstanceInitFunc) gnc_date_delta_init
95 date_delta_type = g_type_register_static (gtk_hbox_get_type (),
101 return date_delta_type;
107 GObjectClass *object_class = G_OBJECT_CLASS (klass);
108 GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
110 parent_class = g_type_class_peek_parent (klass);
112 date_delta_signals [VALUE_CHANGED] =
113 g_signal_new (
"value_changed",
114 G_OBJECT_CLASS_TYPE (object_class),
119 g_cclosure_marshal_VOID__VOID,
123 date_delta_signals [UNITS_CHANGED] =
124 g_signal_new (
"units_changed",
125 G_OBJECT_CLASS_TYPE (object_class),
130 g_cclosure_marshal_VOID__VOID,
134 date_delta_signals [POLARITY_CHANGED] =
135 g_signal_new (
"polarity_changed",
136 G_OBJECT_CLASS_TYPE (object_class),
141 g_cclosure_marshal_VOID__VOID,
145 date_delta_signals [DELTA_CHANGED] =
146 g_signal_new (
"delta_changed",
147 G_OBJECT_CLASS_TYPE (object_class),
152 g_cclosure_marshal_VOID__VOID,
156 container_class->forall = gnc_date_delta_forall;
162 gdd->value_spin = NULL;
163 gdd->units_combo = NULL;
164 gdd->polarity_combo = NULL;
169 gdd->show_polarity = FALSE;
173 gnc_date_delta_forall (GtkContainer *container, gboolean include_internals,
174 GtkCallback callback, gpointer callback_data)
176 g_return_if_fail (container != NULL);
177 g_return_if_fail (GNC_IS_DATE_DELTA (container));
178 g_return_if_fail (callback != NULL);
183 if (include_internals)
184 if (GTK_CONTAINER_CLASS (parent_class)->forall)
185 (* GTK_CONTAINER_CLASS (parent_class)->forall)
186 (container, include_internals, callback, callback_data);
190 value_changed(GtkEditable *editable, gpointer data)
194 g_signal_emit(gdd, date_delta_signals [VALUE_CHANGED], 0);
195 g_signal_emit(gdd, date_delta_signals [DELTA_CHANGED], 0);
203 active = gtk_combo_box_get_active(GTK_COMBO_BOX(gdd->units_combo));
204 if ((active < GNC_DATE_DELTA_DAYS) || (active > GNC_DATE_DELTA_YEARS))
205 active = GNC_DATE_DELTA_DAYS;
208 g_signal_emit (gdd, date_delta_signals [UNITS_CHANGED], 0);
209 g_signal_emit (gdd, date_delta_signals [DELTA_CHANGED], 0);
215 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gdd->units_combo),
217 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gdd->units_combo),
219 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gdd->units_combo),
221 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gdd->units_combo),
224 g_signal_connect (gdd->units_combo,
"changed",
225 G_CALLBACK (set_units), gdd);
233 active = gtk_combo_box_get_active(GTK_COMBO_BOX(gdd->units_combo));
234 if ((active < GNC_DATE_DELTA_PAST) || (active > GNC_DATE_DELTA_FUTURE))
235 active = GNC_DATE_DELTA_PAST;
236 gdd->polarity = active;
238 g_signal_emit (gdd, date_delta_signals [POLARITY_CHANGED], 0);
239 g_signal_emit (gdd, date_delta_signals [DELTA_CHANGED], 0);
245 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gdd->polarity_combo),
247 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(gdd->polarity_combo),
250 g_signal_connect (gdd->polarity_combo,
"changed",
251 G_CALLBACK(set_polarity), gdd);
259 adj = gtk_adjustment_new(1.0, 1.0, 1000.0, 1.0, 5.0, 5.0);
260 gdd->value_spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1.0, 0);
261 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(gdd->value_spin), TRUE);
262 gtk_box_pack_start(GTK_BOX(gdd), gdd->value_spin, FALSE, FALSE, 0);
263 gtk_widget_show(gdd->value_spin);
265 g_signal_connect(gdd->value_spin,
"changed",
266 G_CALLBACK(value_changed), gdd);
268 gdd->units_combo = gtk_combo_box_text_new();
269 fill_units_combo(gdd);
270 gtk_combo_box_set_active(GTK_COMBO_BOX(gdd->units_combo), 0);
271 gtk_box_pack_start(GTK_BOX(gdd), gdd->units_combo, FALSE, FALSE, 0);
272 gtk_widget_show(gdd->units_combo);
274 gdd->polarity_combo = gtk_combo_box_text_new();
275 fill_polarity_combo(gdd);
276 gtk_combo_box_set_active(GTK_COMBO_BOX(gdd->polarity_combo), 0);
277 gtk_box_pack_start(GTK_BOX(gdd), gdd->polarity_combo, FALSE, FALSE, 0);
278 if (gdd->show_polarity)
279 gtk_widget_show(gdd->polarity_combo);
293 gnc_date_delta_new (gboolean show_polarity)
297 gdd = g_object_new (gnc_date_delta_get_type (), NULL);
299 gdd->show_polarity = show_polarity;
301 create_children (gdd);
303 return GTK_WIDGET (gdd);
316 g_return_if_fail(gdd != NULL);
317 g_return_if_fail(GNC_IS_DATE_DELTA(gdd));
319 gtk_spin_button_set_value(GTK_SPIN_BUTTON(gdd->value_spin), value);
331 g_return_val_if_fail(gdd != NULL, 0);
332 g_return_val_if_fail(GNC_IS_DATE_DELTA(gdd), 0);
334 return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(gdd->value_spin));
345 gnc_date_delta_set_units (
GNCDateDelta *gdd, GNCDateDeltaUnits units)
347 g_return_if_fail(gdd != NULL);
348 g_return_if_fail(GNC_IS_DATE_DELTA(gdd));
349 g_return_if_fail((units >= 0) && (units < GNC_DATE_DELTA_NUM_UNITS));
353 gtk_combo_box_set_active(GTK_COMBO_BOX(gdd->units_combo), units);
365 g_return_val_if_fail(gdd != NULL, GNC_DATE_DELTA_DAYS);
366 g_return_val_if_fail(GNC_IS_DATE_DELTA(gdd), GNC_DATE_DELTA_DAYS);
379 gnc_date_delta_set_polarity (
GNCDateDelta *gdd, GNCDateDeltaPolarity polarity)
381 g_return_if_fail(gdd != NULL);
382 g_return_if_fail(GNC_IS_DATE_DELTA(gdd));
383 g_return_if_fail((polarity >= 0) &&
384 (polarity < GNC_DATE_DELTA_NUM_POLARITY));
386 gdd->polarity = polarity;
388 gtk_combo_box_set_active(GTK_COMBO_BOX(gdd->polarity_combo), polarity);
400 g_return_val_if_fail(gdd != NULL, GNC_DATE_DELTA_PAST);
401 g_return_val_if_fail(GNC_IS_DATE_DELTA(gdd), GNC_DATE_DELTA_PAST);
403 return gdd->polarity;
414 gnc_date_delta_show_polarity (
GNCDateDelta *gdd, gboolean show_polarity)
416 g_return_if_fail(gdd != NULL);
417 g_return_if_fail(GNC_IS_DATE_DELTA(gdd));
419 gdd->show_polarity = show_polarity;
422 gtk_widget_show(gdd->polarity_combo);
424 gtk_widget_hide(gdd->polarity_combo);
Date and Time handling routines.