private bool PrepareTaskNotify(CalendarItem item, Calendar.SelectionTool.Mode mode, UIExtension.ParentNotify notify, bool includeTimeEstimate = true) { switch (mode) { case Calendar.SelectionTool.Mode.Move: if (item.LengthDiffersFromOriginal()) { // Start date WITHOUT TIME ESTIMATE PrepareTaskNotify(item, Calendar.SelectionTool.Mode.ResizeLeft, notify, false); // End date WITHOUT TIME ESTIMATE PrepareTaskNotify(item, Calendar.SelectionTool.Mode.ResizeRight, notify, false); if (includeTimeEstimate && WantModifyTimeEstimate(item)) { notify.AddMod(Task.Attribute.TimeEstimate, item.LengthAsTimeEstimate(m_WorkWeek, false), item.TimeEstUnits); } return(true); } else if (item.StartDateDiffersFromOriginal()) { notify.AddMod(Task.Attribute.OffsetTask, item.StartDate); return(true); } break; case Calendar.SelectionTool.Mode.ResizeLeft: case Calendar.SelectionTool.Mode.ResizeTop: if (item.StartDateDiffersFromOriginal()) { notify.AddMod(Task.Attribute.StartDate, item.StartDate); if (includeTimeEstimate && WantModifyTimeEstimate(item)) { notify.AddMod(Task.Attribute.TimeEstimate, item.LengthAsTimeEstimate(m_WorkWeek, false), item.TimeEstUnits); } return(true); } break; case Calendar.SelectionTool.Mode.ResizeRight: case Calendar.SelectionTool.Mode.ResizeBottom: if (item.EndDateDiffersFromOriginal()) { // Allow for end of day var endDate = item.EndDate; if (endDate == endDate.Date) { endDate = endDate.AddDays(-1); } if (item.IsDone) { notify.AddMod(Task.Attribute.DoneDate, endDate); } else { notify.AddMod(Task.Attribute.DueDate, endDate); } if (includeTimeEstimate && WantModifyTimeEstimate(item)) { notify.AddMod(Task.Attribute.TimeEstimate, item.LengthAsTimeEstimate(m_WorkWeek, false), item.TimeEstUnits); } return(true); } break; } return(false); }