28 #include <libgnomecanvas/libgnomecanvas.h>
29 #include <gdk/gdkkeysyms.h>
30 #include "gnucash-date-picker.h"
42 static GnomeCanvasWidgetClass *gnc_date_picker_parent_class;
43 static guint gnc_date_picker_signals[LAST_SIGNAL];
48 guint day, guint mon, guint year)
50 g_return_if_fail (IS_GNC_DATE_PICKER (date_picker));
51 g_return_if_fail (date_picker->calendar != NULL);
53 gtk_calendar_select_day (date_picker->calendar, 1);
54 gtk_calendar_select_month (date_picker->calendar, mon, year);
55 gtk_calendar_select_day (date_picker->calendar, day);
60 guint *day, guint *mon, guint *year)
62 g_return_if_fail (IS_GNC_DATE_PICKER (date_picker));
63 g_return_if_fail (date_picker->calendar != NULL);
65 gtk_calendar_get_date (date_picker->calendar, year, mon, day);
71 date_picker->calendar = NULL;
75 gnc_date_picker_button_event (GtkWidget *widget, GdkEventButton *event,
79 g_signal_stop_emission_by_name (widget,
"button_press_event");
85 gnc_date_picker_key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
89 switch (event->keyval)
92 case GDK_KEY_KP_Enter:
93 g_signal_emit (date_picker, gnc_date_picker_signals[DATE_PICKED], 0);
94 g_signal_stop_emission_by_name (widget,
"key_press_event");
111 g_signal_stop_emission_by_name (widget,
"key_press_event");
113 g_signal_emit (date_picker,
114 gnc_date_picker_signals[KEY_PRESS_EVENT], 0, event);
122 GtkObjectClass *object_class;
124 gnc_date_picker_parent_class =
125 g_type_class_peek_parent (date_picker_class);
127 object_class = GTK_OBJECT_CLASS (date_picker_class);
129 gnc_date_picker_signals[DATE_SELECTED] =
130 g_signal_new(
"date_selected",
131 G_TYPE_FROM_CLASS(object_class),
135 g_cclosure_marshal_VOID__VOID,
138 gnc_date_picker_signals[DATE_PICKED] =
139 g_signal_new(
"date_picked",
140 G_TYPE_FROM_CLASS(object_class),
144 g_cclosure_marshal_VOID__VOID,
147 gnc_date_picker_signals[KEY_PRESS_EVENT] =
148 g_signal_new (
"key_press_event",
149 G_TYPE_FROM_CLASS(object_class),
153 g_cclosure_marshal_VOID__BOXED,
157 date_picker_class->date_selected = NULL;
158 date_picker_class->date_picked = NULL;
159 date_picker_class->key_press_event = NULL;
163 gnc_date_picker_get_type (
void)
165 static GType gnc_date_picker_type = 0;
167 if (gnc_date_picker_type == 0)
169 GTypeInfo type_info =
174 (GClassInitFunc)gnc_date_picker_class_init,
179 (GInstanceInitFunc)gnc_date_picker_init,
182 gnc_date_picker_type =
183 g_type_register_static (gnome_canvas_widget_get_type(),
188 return gnc_date_picker_type;
195 g_signal_emit (gdp, gnc_date_picker_signals [DATE_SELECTED], 0);
199 day_selected_double_click (GtkCalendar *calendar,
GNCDatePicker *gdp)
201 g_signal_emit (gdp, gnc_date_picker_signals [DATE_PICKED], 0);
206 gnc_date_picker_new (GnomeCanvasGroup *parent)
209 GnomeCanvasItem *item;
212 calendar = gtk_calendar_new ();
216 GtkAllocation allocation;
217 GtkRequisition requisition;
219 hbox = gtk_hbox_new (FALSE, 0);
221 gtk_widget_set_direction (hbox, GTK_TEXT_DIR_LTR);
222 gtk_box_pack_start (GTK_BOX(hbox), calendar, TRUE, TRUE, 0);
224 item = gnome_canvas_item_new (parent, gnc_date_picker_get_type (),
230 gtk_widget_show_all( hbox );
232 gtk_widget_size_request (calendar, &requisition);
236 allocation.width = requisition.width;
237 allocation.height = requisition.height;
239 gtk_widget_size_allocate (calendar, &allocation);
242 date_picker = GNC_DATE_PICKER (item);
244 date_picker->calendar = GTK_CALENDAR (calendar);
246 g_signal_connect_after (calendar,
"button_press_event",
247 G_CALLBACK (gnc_date_picker_button_event),
250 g_signal_connect (calendar,
"key_press_event",
251 G_CALLBACK (gnc_date_picker_key_event),
254 g_signal_connect (calendar,
"day_selected",
255 G_CALLBACK (day_selected),
258 g_signal_connect (calendar,
"day_selected_double_click",
259 G_CALLBACK (day_selected_double_click),