evolution r37100 - in trunk/calendar: . gui



Author: mcrha
Date: Mon Jan 19 16:41:40 2009
New Revision: 37100
URL: http://svn.gnome.org/viewvc/evolution?rev=37100&view=rev

Log:
2009-01-19  Milan Crha  <mcrha redhat com>

	** Fix for bug #567850

	* gui/e-cal-model.h: (e_cal_model_set_default_time_func):
	* gui/e-cal-model.c: (struct _ECalModelPrivate), (ecm_append_row),
	(e_cal_model_set_default_time_func):
	New functionality to retrieve a default time for a model's new
	event created from a "click-to-add" row.
	* gui/gnome-cal.c: (gc_get_default_time), (setup_widgets):
	Set the new time callback for the memo table.



Modified:
   trunk/calendar/ChangeLog
   trunk/calendar/gui/e-cal-model.c
   trunk/calendar/gui/e-cal-model.h
   trunk/calendar/gui/gnome-cal.c

Modified: trunk/calendar/gui/e-cal-model.c
==============================================================================
--- trunk/calendar/gui/e-cal-model.c	(original)
+++ trunk/calendar/gui/e-cal-model.c	Mon Jan 19 16:41:40 2009
@@ -77,6 +77,10 @@
 
 	/* Whether we display dates in 24-hour format. */
         gboolean use_24_hour_format;
+
+	/* callback, to retrieve start time for newly added rows by click-to-add */
+	ECalModelDefaultTimeFunc get_default_time;
+	gpointer get_default_time_user_data;
 };
 
 #define E_CAL_MODEL_COMPONENT_GET_PRIVATE(obj) \
@@ -816,9 +820,26 @@
 	set_categories (&comp_data, e_table_model_value_at (source, E_CAL_MODEL_FIELD_CATEGORIES, row));
 	set_classification (&comp_data, e_table_model_value_at (source, E_CAL_MODEL_FIELD_CLASSIFICATION, row));
 	set_description (&comp_data, e_table_model_value_at (source, E_CAL_MODEL_FIELD_DESCRIPTION, row));
-	set_dtstart (model, &comp_data, e_table_model_value_at (source, E_CAL_MODEL_FIELD_DTSTART, row));
 	set_summary (&comp_data, e_table_model_value_at (source, E_CAL_MODEL_FIELD_SUMMARY, row));
 
+	if (e_table_model_value_at (source, E_CAL_MODEL_FIELD_DTSTART, row)) {
+		set_dtstart (model, &comp_data, e_table_model_value_at (source, E_CAL_MODEL_FIELD_DTSTART, row));
+	} else if (model->priv->get_default_time) {
+		time_t tt = model->priv->get_default_time (model, model->priv->get_default_time_user_data);
+
+		if (tt > 0) {
+			struct icaltimetype itt = icaltime_from_timet_with_zone (tt, FALSE, e_cal_model_get_timezone (model));
+			icalproperty *prop = icalcomponent_get_first_property (comp_data.icalcomp, ICAL_DTSTART_PROPERTY);
+
+			if (prop) {
+				icalproperty_set_dtstart (prop, itt);
+			} else {
+				prop = icalproperty_new_dtstart (itt);
+				icalcomponent_add_property (comp_data.icalcomp, prop);
+			}
+		}
+	}
+
 	/* call the class' method for filling the component */
 	model_class = (ECalModelClass *) G_OBJECT_GET_CLASS (model);
 	if (model_class->fill_component_from_model != NULL) {
@@ -2460,3 +2481,17 @@
 	}
 	comp_data->instance_end = icaltime_as_timet_with_zone (end_time, zone);
 }
+
+/**
+ * e_cal_model_set_default_time_func:
+ * This function will be used when creating new item from the "click-to-add",
+ * when user didn't fill a start date there.
+ **/
+void
+e_cal_model_set_default_time_func (ECalModel *model, ECalModelDefaultTimeFunc func, gpointer user_data)
+{
+	g_return_if_fail (E_IS_CAL_MODEL (model));
+
+	model->priv->get_default_time = func;
+	model->priv->get_default_time_user_data = user_data;
+}

Modified: trunk/calendar/gui/e-cal-model.h
==============================================================================
--- trunk/calendar/gui/e-cal-model.h	(original)
+++ trunk/calendar/gui/e-cal-model.h	Mon Jan 19 16:41:40 2009
@@ -121,6 +121,8 @@
 	void (* cal_view_done) (ECalModel *model, ECalendarStatus status, ECalSourceType type);
 } ECalModelClass;
 
+typedef time_t (*ECalModelDefaultTimeFunc)(ECalModel *model, gpointer user_data);
+
 GType               e_cal_model_get_type                       (void);
 GType 		    e_cal_model_component_get_type 	       (void);
 icalcomponent_kind  e_cal_model_get_component_kind             (ECalModel           *model);
@@ -184,6 +186,8 @@
 
 gboolean e_cal_model_test_row_editable (ECalModel *model, int row);
 
+void e_cal_model_set_default_time_func (ECalModel *model, ECalModelDefaultTimeFunc func, gpointer user_data);
+
 G_END_DECLS
 
 #endif

Modified: trunk/calendar/gui/gnome-cal.c
==============================================================================
--- trunk/calendar/gui/gnome-cal.c	(original)
+++ trunk/calendar/gui/gnome-cal.c	Mon Jan 19 16:41:40 2009
@@ -1595,6 +1595,20 @@
 	return GTK_WIDGET (gcal->priv->date_navigator);
 }
 
+static time_t
+gc_get_default_time (ECalModel *model, gpointer user_data)
+{
+	GnomeCalendar *gcal = user_data;
+	time_t res = 0, end;
+
+	g_return_val_if_fail (model != NULL, 0);
+	g_return_val_if_fail (GNOME_IS_CALENDAR (user_data), 0);
+
+	gnome_calendar_get_current_time_range (gcal, &res, &end);
+
+	return res;
+}
+
 static void
 setup_widgets (GnomeCalendar *gcal)
 {
@@ -1821,6 +1835,8 @@
 				     "MemoPad", NULL);
 	e_memo_table_load_state (E_MEMO_TABLE (priv->memo), filename);
 
+	e_cal_model_set_default_time_func (e_memo_table_get_model (E_MEMO_TABLE (priv->memo)), gc_get_default_time, gcal);
+
 	update_memo_view (gcal);
 	g_free (filename);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]