diff options
author | Milan Crha <mcrha@redhat.com> | 2009-04-27 18:07:09 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2009-04-27 18:07:09 +0800 |
commit | b29f1ed5e653974acf983f211901139d0f76cf12 (patch) | |
tree | 2ce4ece0fe5dd73586a896ecf0d16e2be2f1c6ac | |
parent | c8938bd337a03f1d4221cabfff76add54af9aa76 (diff) | |
download | gsoc2013-evolution-b29f1ed5e653974acf983f211901139d0f76cf12.tar.gz gsoc2013-evolution-b29f1ed5e653974acf983f211901139d0f76cf12.tar.zst gsoc2013-evolution-b29f1ed5e653974acf983f211901139d0f76cf12.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.
-rw-r--r-- | calendar/ChangeLog | 20 | ||||
-rw-r--r-- | calendar/conduits/todo/todo-conduit.c | 5 | ||||
-rw-r--r-- | calendar/gui/e-cal-component-preview.c | 4 | ||||
-rw-r--r-- | calendar/gui/e-cal-list-view.etspec | 6 | ||||
-rw-r--r-- | calendar/gui/e-cal-model.c | 69 | ||||
-rw-r--r-- | calendar/gui/e-cal-model.h | 4 | ||||
-rw-r--r-- | calendar/gui/e-calendar-table.etspec | 14 | ||||
-rw-r--r-- | calendar/gui/e-memo-table.etspec | 2 | ||||
-rw-r--r-- | calendar/gui/print.c | 4 |
9 files changed, 116 insertions, 12 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 3e574be3ca..793c4d71d8 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,23 @@ +2009-04-27 Milan Crha <mcrha@redhat.com> + + ** 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. + 2009-04-24 Milan Crha <mcrha@redhat.com> ** Fix for bug #573704 diff --git a/calendar/conduits/todo/todo-conduit.c b/calendar/conduits/todo/todo-conduit.c index 0b9d1505b9..620e9ec6f0 100644 --- a/calendar/conduits/todo/todo-conduit.c +++ b/calendar/conduits/todo/todo-conduit.c @@ -764,12 +764,13 @@ local_record_from_comp (EToDoLocalRecord *local, ECalComponent *comp, EToDoCondu local->todo->priority = 4; else local->todo->priority = 5; - - e_cal_component_free_priority (priority); } else { local->todo->priority = ctxt->cfg->priority; } + if (priority) + e_cal_component_free_priority (priority); + e_cal_component_get_classification (comp, &classif); if (classif == E_CAL_COMPONENT_CLASS_PRIVATE) diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c index 221ae36753..0c759a1591 100644 --- a/calendar/gui/e-cal-component-preview.c +++ b/calendar/gui/e-cal-component-preview.c @@ -272,9 +272,11 @@ write_html (GtkHTMLStream *stream, ECal *ecal, ECalComponent *comp, icaltimezone 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 ed4eb0f9dd..20306b7128 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 ccf0c7c618..adbfc2cc77 100644 --- a/calendar/gui/print.c +++ b/calendar/gui/print.c @@ -2583,7 +2583,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, @@ -2592,6 +2591,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) { |