aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-04-27 18:07:09 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-04-28 20:06:00 +0800
commit06a883940fcd97c5324fc2cdf3b3ffc50772208e (patch)
tree12867ebca018c136de40a4d8f08bbc2afc33d320 /calendar/gui
parente887df9a554e452c7c1bb2bae3739cb43ddf73bc (diff)
downloadgsoc2013-evolution-06a883940fcd97c5324fc2cdf3b3ffc50772208e.tar.gz
gsoc2013-evolution-06a883940fcd97c5324fc2cdf3b3ffc50772208e.tar.zst
gsoc2013-evolution-06a883940fcd97c5324fc2cdf3b3ffc50772208e.zip
Allow Last Modified and Created columns for event table
** Fix for bug #575773 * gui/e-calendar-table.etspec: * gui/e-cal-list-view.etspec: * gui/e-memo-table.etspec: * gui/e-cal-model.h: (ECalModelField), (struct _ECalModelComponent): * gui/e-cal-model.c: (get_datetime_from_utc), (ecm_value_at), (ecm_duplicate_value), (ecm_free_value), (ecm_initialize_value), (ecm_value_is_empty), (ecm_value_to_string), (e_cal_view_objects_modified_cb), (e_cal_model_component_finalize), (e_cal_model_component_init): Allow showing CREATED and LAST-MODIFIED properties in a table. * gui/print.c: (print_comp_draw_real): * gui/e-cal-component-preview.c: (write_html): * conduits/todo/todo-conduit.c: (local_record_from_comp): Possible leak fix.
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/e-cal-component-preview.c4
-rw-r--r--calendar/gui/e-cal-list-view.etspec6
-rw-r--r--calendar/gui/e-cal-model.c69
-rw-r--r--calendar/gui/e-cal-model.h4
-rw-r--r--calendar/gui/e-calendar-table.etspec14
-rw-r--r--calendar/gui/e-memo-table.etspec2
-rw-r--r--calendar/gui/print.c4
7 files changed, 93 insertions, 10 deletions
diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c
index 9264d449f1..01c01be6f9 100644
--- a/calendar/gui/e-cal-component-preview.c
+++ b/calendar/gui/e-cal-component-preview.c
@@ -256,9 +256,11 @@ cal_component_preview_write_html (GtkHTMLStream *stream,
gtk_html_stream_printf (stream, "<TD>%s</TD></TR>", str);
g_free (str);
- e_cal_component_free_priority (priority_value);
}
+ if (priority_value)
+ e_cal_component_free_priority (priority_value);
+
/* write description and URL */
gtk_html_stream_printf (stream, "<TR><TD COLSPAN=\"2\"><HR></TD></TR>");
diff --git a/calendar/gui/e-cal-list-view.etspec b/calendar/gui/e-cal-list-view.etspec
index 2168d7363e..f8f2d72853 100644
--- a/calendar/gui/e-cal-list-view.etspec
+++ b/calendar/gui/e-cal-list-view.etspec
@@ -1,9 +1,11 @@
<ETableSpecification draw-grid="true" alternating-row-colors="true">
<ETableColumn model_col="5" _title="Start Date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
- <ETableColumn model_col="10" _title="End Date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col="12" _title="End Date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
<ETableColumn model_col="8" _title="Summary" expansion="3.0" minimum_width="10" resizable="true" cell="calstring" compare="collate" priority="10"/>
- <ETableColumn model_col="11" _title="Location" expansion="3.0" minimum_width="10" resizable="true" cell="calstring" compare="collate" priority="10"/>
+ <ETableColumn model_col="13" _title="Location" expansion="3.0" minimum_width="10" resizable="true" cell="calstring" compare="collate" priority="10"/>
<ETableColumn model_col="0" _title="Categories" cell="calstring" compare="collate" expansion="1.0" minimum_width="10" resizable="true" priority="-2"/>
+ <ETableColumn model_col="10" _title="Created" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col="11" _title="Last modified" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
<ETableState>
<column source="2"/>
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index fd26779169..c437b44dd7 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -435,6 +435,43 @@ get_dtstart (ECalModel *model, ECalModelComponent *comp_data)
return comp_data->dtstart;
}
+static ECellDateEditValue*
+get_datetime_from_utc (ECalModel *model, ECalModelComponent *comp_data, icalproperty_kind propkind, struct icaltimetype (*get_value)(const icalproperty* prop), ECellDateEditValue **buffer)
+{
+ ECalModelPrivate *priv;
+ struct icaltimetype tt_value;
+ icalproperty *prop;
+ ECellDateEditValue *res;
+
+ g_return_val_if_fail (buffer!= NULL, NULL);
+
+ if (*buffer)
+ return *buffer;
+
+ priv = model->priv;
+
+ prop = icalcomponent_get_first_property (comp_data->icalcomp, propkind);
+ if (!prop)
+ return NULL;
+
+ tt_value = get_value (prop);
+
+ /* these are always in UTC, thus convert to default zone, if any and done */
+ if (priv->zone)
+ icaltimezone_convert_time (&tt_value, icaltimezone_get_utc_timezone (), priv->zone);
+
+ if (!icaltime_is_valid_time (tt_value) || icaltime_is_null_time (tt_value))
+ return NULL;
+
+ res = g_new0 (ECellDateEditValue, 1);
+ res->tt = tt_value;
+ res->zone = NULL;
+
+ *buffer = res;
+
+ return res;
+}
+
static char *
get_summary (ECalModelComponent *comp_data)
{
@@ -484,6 +521,10 @@ ecm_value_at (ETableModel *etm, int col, int row)
return get_description (comp_data);
case E_CAL_MODEL_FIELD_DTSTART :
return (void *) get_dtstart (model, comp_data);
+ case E_CAL_MODEL_FIELD_CREATED :
+ return (void *) get_datetime_from_utc (model, comp_data, ICAL_CREATED_PROPERTY, icalproperty_get_created, &comp_data->created);
+ case E_CAL_MODEL_FIELD_LASTMODIFIED :
+ return (void *) get_datetime_from_utc (model, comp_data, ICAL_LASTMODIFIED_PROPERTY, icalproperty_get_lastmodified, &comp_data->lastmodified);
case E_CAL_MODEL_FIELD_HAS_ALARMS :
return GINT_TO_POINTER ((icalcomponent_get_first_component (comp_data->icalcomp,
ICAL_VALARM_COMPONENT) != NULL));
@@ -878,6 +919,8 @@ ecm_duplicate_value (ETableModel *etm, int col, const void *value)
case E_CAL_MODEL_FIELD_COMPONENT :
return icalcomponent_new_clone ((icalcomponent *) value);
case E_CAL_MODEL_FIELD_DTSTART :
+ case E_CAL_MODEL_FIELD_CREATED :
+ case E_CAL_MODEL_FIELD_LASTMODIFIED :
if (value) {
ECellDateEditValue *dv, *orig_dv;
@@ -911,6 +954,8 @@ ecm_free_value (ETableModel *etm, int col, void *value)
case E_CAL_MODEL_FIELD_COLOR :
break;
case E_CAL_MODEL_FIELD_DTSTART :
+ case E_CAL_MODEL_FIELD_CREATED :
+ case E_CAL_MODEL_FIELD_LASTMODIFIED :
if (value)
g_free (value);
break;
@@ -940,6 +985,8 @@ ecm_initialize_value (ETableModel *etm, int col)
case E_CAL_MODEL_FIELD_SUMMARY :
return g_strdup ("");
case E_CAL_MODEL_FIELD_DTSTART :
+ case E_CAL_MODEL_FIELD_CREATED :
+ case E_CAL_MODEL_FIELD_LASTMODIFIED :
case E_CAL_MODEL_FIELD_HAS_ALARMS :
case E_CAL_MODEL_FIELD_ICON :
case E_CAL_MODEL_FIELD_COLOR :
@@ -978,6 +1025,8 @@ ecm_value_is_empty (ETableModel *etm, int col, const void *value)
case E_CAL_MODEL_FIELD_SUMMARY :
return string_is_empty (value);
case E_CAL_MODEL_FIELD_DTSTART :
+ case E_CAL_MODEL_FIELD_CREATED :
+ case E_CAL_MODEL_FIELD_LASTMODIFIED :
return value ? FALSE : TRUE;
case E_CAL_MODEL_FIELD_HAS_ALARMS :
case E_CAL_MODEL_FIELD_ICON :
@@ -1001,6 +1050,8 @@ ecm_value_to_string (ETableModel *etm, int col, const void *value)
case E_CAL_MODEL_FIELD_SUMMARY :
return g_strdup (value);
case E_CAL_MODEL_FIELD_DTSTART :
+ case E_CAL_MODEL_FIELD_CREATED :
+ case E_CAL_MODEL_FIELD_LASTMODIFIED :
return e_cal_model_date_value_to_string (E_CAL_MODEL (etm), value);
case E_CAL_MODEL_FIELD_ICON :
if (GPOINTER_TO_INT (value) == 0)
@@ -1571,6 +1622,14 @@ e_cal_view_objects_modified_cb (ECalView *query, GList *objects, gpointer user_d
g_free (comp_data->completed);
comp_data->completed = NULL;
}
+ if (comp_data->created) {
+ g_free (comp_data->created);
+ comp_data->created = NULL;
+ }
+ if (comp_data->lastmodified) {
+ g_free (comp_data->lastmodified);
+ comp_data->lastmodified = NULL;
+ }
if (comp_data->color) {
g_free (comp_data->color);
comp_data->color = NULL;
@@ -2311,6 +2370,14 @@ e_cal_model_component_finalize (GObject *object)
g_free (comp_data->completed);
comp_data->completed = NULL;
}
+ if (comp_data->created) {
+ g_free (comp_data->created);
+ comp_data->created = NULL;
+ }
+ if (comp_data->lastmodified) {
+ g_free (comp_data->lastmodified);
+ comp_data->lastmodified = NULL;
+ }
if (comp_data->color) {
g_free (comp_data->color);
comp_data->color = NULL;
@@ -2328,6 +2395,8 @@ e_cal_model_component_init (ECalModelComponent *comp)
comp->dtend = NULL;
comp->due = NULL;
comp->completed = NULL;
+ comp->created = NULL;
+ comp->lastmodified = NULL;
comp->color = NULL;
}
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index 80ba4d4b5b..6ec66a3554 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -53,6 +53,8 @@ typedef enum {
E_CAL_MODEL_FIELD_ICON, /* not a real field */
E_CAL_MODEL_FIELD_SUMMARY,
E_CAL_MODEL_FIELD_UID,
+ E_CAL_MODEL_FIELD_CREATED,
+ E_CAL_MODEL_FIELD_LASTMODIFIED,
E_CAL_MODEL_FIELD_LAST
} ECalModelField;
@@ -86,6 +88,8 @@ struct _ECalModelComponent {
ECellDateEditValue *dtend;
ECellDateEditValue *due;
ECellDateEditValue *completed;
+ ECellDateEditValue *created;
+ ECellDateEditValue *lastmodified;
gchar *color;
ECalModelComponentPrivate *priv;
diff --git a/calendar/gui/e-calendar-table.etspec b/calendar/gui/e-calendar-table.etspec
index 4e1e6c175c..d63e0928e5 100644
--- a/calendar/gui/e-calendar-table.etspec
+++ b/calendar/gui/e-calendar-table.etspec
@@ -2,13 +2,15 @@
<ETableColumn model_col= "5" _title="Start date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
<ETableColumn model_col="7" pixbuf="icon" _title="Type" expansion="1.0" minimum_width="16" resizable="false" cell="icon" compare="integer" priority="-4"/>
<ETableColumn model_col= "8" _title="Summary" expansion="3.0" minimum_width="10" resizable="true" cell="calstring" compare="stringcase" priority="10"/>
- <ETableColumn model_col= "10" _title="Completion date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
- <ETableColumn model_col="11" pixbuf="complete" _title="Complete" expansion="1.0" minimum_width="16" resizable="false" cell="checkbox" compare="integer" priority="-4"/>
- <ETableColumn model_col= "12" _title="Due date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
- <ETableColumn model_col= "15" _title="% Complete" expansion="1.0" minimum_width="10" resizable="true" cell="percent" compare="percent-compare" priority="-3"/>
- <ETableColumn model_col= "16" _title="Priority" expansion="1.0" minimum_width="10" resizable="true" cell="priority" compare="priority-compare" priority="-3"/>
- <ETableColumn model_col="17" _title="Status" expansion="1.0" minimum_width="10" resizable="true" cell="calstatus" compare="status-compare" priority="-1"/>
+ <ETableColumn model_col= "12" _title="Completion date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col="13" pixbuf="complete" _title="Complete" expansion="1.0" minimum_width="16" resizable="false" cell="checkbox" compare="integer" priority="-4"/>
+ <ETableColumn model_col= "14" _title="Due date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col= "17" _title="% Complete" expansion="1.0" minimum_width="10" resizable="true" cell="percent" compare="percent-compare" priority="-3"/>
+ <ETableColumn model_col= "18" _title="Priority" expansion="1.0" minimum_width="10" resizable="true" cell="priority" compare="priority-compare" priority="-3"/>
+ <ETableColumn model_col="19" _title="Status" expansion="1.0" minimum_width="10" resizable="true" cell="calstatus" compare="status-compare" priority="-1"/>
<ETableColumn model_col="0" _title="Categories" cell="calstring" compare="stringcase" expansion="1.0" minimum_width="10" resizable="true" priority="-2"/>
+ <ETableColumn model_col="10" _title="Created" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col="11" _title="Last modified" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
<ETableState>
<column source="1"/>
diff --git a/calendar/gui/e-memo-table.etspec b/calendar/gui/e-memo-table.etspec
index a16793ecf1..aad61a0227 100644
--- a/calendar/gui/e-memo-table.etspec
+++ b/calendar/gui/e-memo-table.etspec
@@ -3,6 +3,8 @@
<ETableColumn model_col="7" pixbuf="icon" _title="Type" expansion="1.0" minimum_width="16" resizable="false" cell="icon" compare="integer" priority="-4"/>
<ETableColumn model_col="0" _title="Categories" cell="calstring" compare="collate" expansion="1.0" minimum_width="10" resizable="true" priority="-2"/>
<ETableColumn model_col="5" _title="Start Date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col="10" _title="Created" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
+ <ETableColumn model_col="11" _title="Last modified" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
<ETableState>
<column source="1"/>
diff --git a/calendar/gui/print.c b/calendar/gui/print.c
index c4f42fe4bd..52320eff25 100644
--- a/calendar/gui/print.c
+++ b/calendar/gui/print.c
@@ -2594,7 +2594,6 @@ print_comp_draw_real (GtkPrintOperation *operation,
char *priority_string, *pri_text;
priority_string = e_cal_util_priority_to_string (*priority);
- e_cal_component_free_priority (priority);
pri_text = g_strdup_printf (_("Priority: %s"), priority_string);
top = bound_text (context, font, pri_text, -1,
@@ -2603,6 +2602,9 @@ print_comp_draw_real (GtkPrintOperation *operation,
g_free (pri_text);
}
+ if (priority)
+ e_cal_component_free_priority (priority);
+
/* Percent Complete */
e_cal_component_get_percent (comp, &percent);
if (percent) {