-static void g_date_determine_dmy(void)
-{
-GDate d;
-gchar buf[128];
-GDateParseTokens testpt;
-gint i;
-
- DB( g_print("\n[dateentry] determine dmy\n") );
-
-
- g_date_clear (&d, 1); /* clear for scratch use */
-
-
- /* had to pick a random day - don't change this, some strftimes
- * are broken on some days, and this one is good so far. */
- g_date_set_dmy (&d, 4, 7, 1976);
-
- g_date_strftime (buf, 127, "%x", &d);
-
- g_date_fill_parse_tokens (buf, &testpt);
-
- i = 0;
- while (i < testpt.num_ints)
- {
- switch (testpt.n[i])
- {
- case 7:
- dmy_order[i] = G_DATE_MONTH;
- break;
- case 4:
- dmy_order[i] = G_DATE_DAY;
- break;
- //case 76:
- //using_twodigit_years = TRUE; /* FALL THRU */
- case 1976:
- dmy_order[2] = G_DATE_YEAR;
- break;
- }
- ++i;
- }
-
- DB( g_print(" dmy legend: 0=day, 1=month, 2=year\n") );
- DB( g_print(" dmy is: %d %d %d\n", dmy_order[0], dmy_order[1], dmy_order[2]) );
-}
-
-
-//end
-
-
-GType
-gtk_dateentry_get_type ()
-{
-static GType dateentry_type = 0;
-
- //DB( g_print("\n[dateentry] get_type\n") );
-
- if (!dateentry_type)
- {
- static const GTypeInfo dateentry_info =
- {
- sizeof (GtkDateEntryClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_dateentry_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkDateEntry),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_dateentry_init,
- NULL
- };
-
- //dateentry_type = gtk_type_unique (gtk_hbox_get_type (), &dateentry_info);
-
- dateentry_type = g_type_register_static (GTK_TYPE_HBOX, "GtkDateEntry",
- &dateentry_info, 0);
-
-
- }
- return dateentry_type;
-}
-
-static void
-gtk_dateentry_class_init (GtkDateEntryClass * klass)
-{
- //GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- //GtkWidgetClass *widget_class;
-
- //gobject_class = (GObjectClass*) klass;
- object_class = (GtkObjectClass*) klass;
- //widget_class = (GtkWidgetClass*) klass;
-
- parent_class = g_type_class_peek_parent (klass);
-
- DB( g_print("\n[dateentry] class_init\n") );
-
-
- object_class->destroy = gtk_dateentry_destroy;
-
- dateentry_signals[CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GtkDateEntryClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- g_date_determine_dmy();
-
- /*
- gobject_class->set_property = gtk_dateentry_set_property;
- gobject_class->get_property = gtk_dateentry_get_property;
-
- g_object_class_install_property (gobject_class,
- PROPERTY_DATE,
- g_param_spec_uint( "date",
- "Date",
- "The date currently selected",
- 0, G_MAXUINT,
- 0,
- (G_PARAM_READABLE | G_PARAM_WRITABLE)
- )
- );
- */
-}
-
-static gboolean gtk_dateentry_focus(GtkWidget *widget,
- GdkEventFocus *event,
- gpointer user_data)
-{
-GtkDateEntry *dateentry = user_data;
-
- DB( g_print("\n[dateentry] focus-out-event %d\n", gtk_widget_is_focus(GTK_WIDGET(dateentry))) );
-
- gtk_dateentry_entry_parse(GTK_WIDGET(dateentry), dateentry);
-
- return FALSE;
-}
-
-static void
-gtk_dateentry_init (GtkDateEntry *dateentry)
-{
-GtkWidget *widget;
-GtkWidget *arrow;
-
- DB( g_print("\n[dateentry] init\n") );
-
- /* initialize datas */
- dateentry->date = g_date_new();
-
- g_date_set_time_t(dateentry->date, time(NULL));
-
- g_date_set_dmy(&dateentry->mindate, 1, 1, 1900);
- g_date_set_dmy(&dateentry->maxdate, 31, 12, 2200);
-
-
- widget=GTK_WIDGET(dateentry);
- gtk_box_set_homogeneous(GTK_BOX(widget), FALSE);
-
- dateentry->entry = gtk_entry_new ();
- gtk_widget_set_size_request(dateentry->entry, 90, -1);
- gtk_box_pack_start (GTK_BOX (dateentry), dateentry->entry, TRUE, TRUE, 0);
-
- dateentry->arrow = gtk_toggle_button_new ();
- arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_IN);
- gtk_container_add (GTK_CONTAINER (dateentry->arrow), arrow);
- gtk_box_pack_end (GTK_BOX (dateentry), dateentry->arrow, FALSE, FALSE, 0);
-
- gtk_widget_show (dateentry->entry);
- gtk_widget_show (dateentry->arrow);
-
-
- /* our popup window */
- dateentry->popwin = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_widget_set_events (dateentry->popwin,
- gtk_widget_get_events(dateentry->popwin) | GDK_KEY_PRESS_MASK);
-
- dateentry->frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (dateentry->popwin), dateentry->frame);
- gtk_frame_set_shadow_type (GTK_FRAME (dateentry->frame), GTK_SHADOW_OUT);
- gtk_widget_show (dateentry->frame);
-
- dateentry->calendar = gtk_calendar_new ();
- gtk_container_add (GTK_CONTAINER (dateentry->frame), dateentry->calendar);
- gtk_widget_show (dateentry->calendar);
-
- // dateentry signals
- g_signal_connect (GTK_OBJECT (dateentry->entry), "activate",
- G_CALLBACK (gtk_dateentry_entry_parse), dateentry);
-
- g_signal_connect (GTK_OBJECT (dateentry->entry), "focus-out-event",
- G_CALLBACK (gtk_dateentry_focus), dateentry);
-
-
- g_signal_connect (GTK_OBJECT (dateentry->entry), "key_press_event",
- G_CALLBACK (gtk_dateentry_entry_key), dateentry);
-
- // arrow/popwin signals
- g_signal_connect (GTK_OBJECT (dateentry->arrow), "toggled",
- G_CALLBACK (gtk_dateentry_arrow_press), dateentry);
-
- g_signal_connect (GTK_OBJECT (dateentry->popwin), "key_press_event",
- G_CALLBACK (key_press_popup), dateentry);
-
- g_signal_connect (GTK_OBJECT (dateentry->popwin), "button_press_event",
- G_CALLBACK (gtk_dateentry_button_press), dateentry);
-
- // calendar signals
- g_signal_connect (GTK_OBJECT (dateentry->calendar), "prev-year",
- G_CALLBACK (gtk_dateentry_calendar_year), dateentry);
- g_signal_connect (GTK_OBJECT (dateentry->calendar), "next-year",
- G_CALLBACK (gtk_dateentry_calendar_year), dateentry);
- g_signal_connect (GTK_OBJECT (dateentry->calendar), "prev-month",
- G_CALLBACK (gtk_dateentry_calendar_year), dateentry);
- g_signal_connect (GTK_OBJECT (dateentry->calendar), "next-month",
- G_CALLBACK (gtk_dateentry_calendar_year), dateentry);
-
- g_signal_connect (GTK_OBJECT (dateentry->calendar), "day-selected",
- G_CALLBACK (gtk_dateentry_calendar_getfrom), dateentry);
-
- g_signal_connect (GTK_OBJECT (dateentry->calendar), "day-selected-double-click",
- G_CALLBACK (gtk_dateentry_calendar_select), dateentry);
-
- //gtk_dateentry_calendar_getfrom(NULL, dateentry);
-}
-
-
-GtkWidget *gtk_dateentry_new ()
-{
-GtkDateEntry *dateentry;
-
- DB( g_print("\n[dateentry] new\n") );
-
- dateentry = g_object_new (GTK_TYPE_DATE_ENTRY, NULL);
-
- return GTK_WIDGET(dateentry);
-}
-
-
-static void gtk_dateentry_destroy (GtkObject * object)
-{
-GtkDateEntry *dateentry;
-
- DB( g_print(" \n[dateentry] destroy\n") );
-
- g_return_if_fail (GTK_IS_DATE_ENTRY (object));
-
- dateentry = GTK_DATE_ENTRY (object);
-
- DB( g_print(" free gtkentry: %p\n", dateentry->entry) );
- DB( g_print(" free arrow: %p\n", dateentry->arrow) );
- DB( g_print(" free popwin: %p\n", dateentry->popwin) );
-
- DB( g_print(" free dateentry: %p\n", dateentry) );
-
- if(dateentry->popwin)
- gtk_widget_destroy (dateentry->popwin);
- dateentry->popwin = NULL;
-
- if(dateentry->date)
- g_date_free(dateentry->date);
- dateentry->date = NULL;
-
- GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-/*
-**
-*/
-void gtk_dateentry_set_date(GtkDateEntry *dateentry, guint32 julian_days)
-{
- DB( g_print(" \n[dateentry] set date\n") );
-
- g_return_if_fail (GTK_IS_DATE_ENTRY (dateentry));
-
- if(g_date_valid_julian(julian_days))
- {
- g_date_set_julian (dateentry->date, julian_days);
- }
- else
- {
- g_date_set_time_t(dateentry->date, time(NULL));
- }
- gtk_dateentry_entry_set_text(dateentry);
-}
-
-/*
-**
-*/
-void gtk_dateentry_set_mindate(GtkDateEntry *dateentry, guint32 julian_days)
-{
- DB( g_print(" \n[dateentry] set date\n") );
-
- g_return_if_fail (GTK_IS_DATE_ENTRY (dateentry));
-
- if(g_date_valid_julian(julian_days))
- {
- g_date_set_julian (&dateentry->mindate, julian_days);
- }
-}
-
-
-/*
-**
-*/
-void gtk_dateentry_set_maxdate(GtkDateEntry *dateentry, guint32 julian_days)
-{
- DB( g_print(" \n[dateentry] set date\n") );
-
- g_return_if_fail (GTK_IS_DATE_ENTRY (dateentry));
-
- if(g_date_valid_julian(julian_days))
- {
- g_date_set_julian (&dateentry->maxdate, julian_days);
- }
-}
-
-
-/*
-**
-*/
-guint32 gtk_dateentry_get_date(GtkDateEntry * dateentry)
-{
- DB( g_print(" \n[dateentry] get date\n") );
-
- g_return_val_if_fail (GTK_IS_DATE_ENTRY (dateentry), 0);
-
- return(g_date_get_julian(dateentry->date));
-}
-
-
-/*
-static void
-gtk_dateentry_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
-GtkDateEntry *dateentry = GTK_DATE_ENTRY (object);
-
- DB( g_print("\n[dateentry] set %d\n", prop_id) );
-
-
- switch (prop_id)
- {
- case PROPERTY_DATE:
- DB( g_print(" -> date to %d\n", g_value_get_uint (value)) );
-
- g_date_set_julian (dateentry->date, g_value_get_uint (value));
- gtk_dateentry_entry_set_text(dateentry);
- break;
-
-
- default:
- //G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-
-
-static void
-gtk_dateentry_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
-GtkDateEntry *dateentry = GTK_DATE_ENTRY (object);
-
- DB( g_print("\n[dateentry] get\n") );
-
- switch (prop_id)
- {
- case PROPERTY_DATE:
- DB( g_print(" -> date is %d\n", 0) );
- g_value_set_uint (value, g_date_get_julian(dateentry->date));
- break;
-
- default:
- //G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-*/
-
-
-/*
-** fill in our gtkentry from our GDate
-*/
-static void gtk_dateentry_entry_set_text(GtkDateEntry * dateentry)
-{
-gchar buffer[256];
-
- DB( g_print("\n[dateentry] date2entry\n") );
-
- g_date_clamp(dateentry->date, &dateentry->mindate, &dateentry->maxdate);
-
-
- if(g_date_valid(dateentry->date) == TRUE)
- {
- g_date_strftime (buffer, 256 - 1, "%x", dateentry->date);
- gtk_entry_set_text (GTK_ENTRY (dateentry->entry), buffer);
-
- DB( g_print(" = %s\n", buffer) );
- }
- else
- gtk_entry_set_text (GTK_ENTRY (dateentry->entry), "??");
-
-
- /* emit the signal */
- if(dateentry->lastdate != g_date_get_julian(dateentry->date))
- {
- DB( g_print(" **emit 'changed' signal**\n") );
-
- g_signal_emit_by_name (dateentry, "changed", NULL, NULL);
- }
-
- dateentry->lastdate = g_date_get_julian(dateentry->date);
-
-}
-