private void Tree_NodePropertyChanged(MapNode node, NodePropertyChangedEventArgs e) { if (TaskTextChanged == null) { return; } if (e.ChangedProperty == NodeProperties.Text) { // update task title if (node.DueDateExists()) { TaskTextChanged(node, new TaskTextEventArgs() { ChangeType = TaskTextChange.TextChange, OldText = (string)e.OldValue }); } // update task parent if (node.HasChildren) { foreach (MapNode n in this) { if (n.IsDescendent(node)) { TaskTextChanged(n, new TaskTextEventArgs() { ChangeType = TaskTextChange.AncestorTextChange, ChangedAncestor = node, OldText = (string)e.OldValue }); } } } } }
/// <summary> /// Set Due Date for selected nodes of the active MapTree using DateTimePicker /// Should only update the model, all interested views should be updated through the event generated by the model. /// </summary> public void SetDueDateUsingPicker() { if (PluginManager.ActiveNodes.IsEmpty) { return; } //using (PluginManager.ActiveTree.ChangeManager.StartBatch("Add Task Due Date")) { DateTime value; // initialize date time picker MapNode temp = PluginManager.ActiveNodes.First(); if (temp != null && temp.DueDateExists()) { value = ShowDueDatePicker(temp.GetDueDate()); } else { value = ShowDueDatePicker(); } // show and set due dates if (value != DateTime.MinValue) { foreach (MapNode node in PluginManager.ActiveNodes) { node.AddTask(value); } } } }
/// <summary> /// Sets the date component of DueDate. Time component is set if it is empty, otherwise left unchanged. /// </summary> /// <param name="node"></param> /// <param name="dueDate"></param> private void SetDueDateKeepTimePart(MapNode node, DateTime dueDate) { if (node.DueDateExists()) { dueDate = dueDate.Date.Add(node.GetDueDate().TimeOfDay); } node.AddTask(dueDate); }
/// <summary> /// End Date of the Task i.e. Due Date. If due date doesn't exits, then completion date is returned /// </summary> /// <param name="node"></param> /// <returns></returns> public static DateTime GetEndDate(this MapNode node) { if (node.DueDateExists()) { return(node.GetDueDate()); } else if (node.CompletionDateExists()) { return(node.GetCompletionDate()); } else { return(DateTime.MinValue); } }
private PendingTaskEventArgs GetEventArgs(MapNode node, PendingTaskChange change, AttributeChangeEventArgs e) { pendingTaskArgs.TaskChange = change; pendingTaskArgs.OldTaskStatus = (e.AttributeSpec.IsTaskStatus() && e.oldValue != null) ? (TaskStatus)Enum.Parse(typeof(TaskStatus), e.oldValue) : node.GetTaskStatus(); if (e.AttributeSpec.IsDueDate()) { pendingTaskArgs.OldDueDate = e.oldValue == null ? DateTime.MinValue : DateHelper.ToDateTime(e.oldValue); } else { pendingTaskArgs.OldDueDate = node.DueDateExists() ? node.GetDueDate() : DateTime.MinValue; } return(pendingTaskArgs); }
/// <summary> /// Should only update the model, all interested views should be updated through the event generated by the model. /// </summary> /// <param name="node"></param> private void SetDueDateUsingPicker(MapNode node) { // initialize date time picker if (node.DueDateExists()) { dateTimePicker.Value = node.GetDueDate(); } else { dateTimePicker.Value = DateHelper.GetDefaultDueDate(); } // show and set due dates if (dateTimePicker.ShowDialog() == DialogResult.OK) { node.AddTask(dateTimePicker.Value); } }
public static bool IsTaskPending(this MapNode node) { return(node.DueDateExists() && !node.CompletionDateExists()); }
private void Tree_AttributeChanged(MapNode node, AttributeChangeEventArgs e) { //// Task List Change // task added if (e.ChangeType == AttributeChange.Added && e.AttributeSpec.IsDueDate() && !node.IsTaskComplete()) { Add(node); TaskChanged(node, GetEventArgs(node, PendingTaskChange.TaskAdded, e)); } // task removed else if (e.ChangeType == AttributeChange.Removed && e.AttributeSpec.IsDueDate() && !node.IsTaskComplete()) { if (Remove(node)) { TaskChanged(node, GetEventArgs(node, PendingTaskChange.TaskRemoved, e)); } } // task completed else if (e.ChangeType == AttributeChange.Added && e.AttributeSpec.IsCompletionDate() && node.DueDateExists()) { if (Remove(node)) { TaskChanged(node, GetEventArgs(node, PendingTaskChange.TaskCompleted, e)); } } // task reopened else if (e.ChangeType == AttributeChange.Removed && e.AttributeSpec.IsCompletionDate() && node.DueDateExists()) { Add(node); TaskChanged(node, GetEventArgs(node, PendingTaskChange.TaskReopened, e)); } // task due date updated else if (e.ChangeType == AttributeChange.ValueUpdated && e.AttributeSpec.IsDueDate() && !node.IsTaskComplete()) { Remove(node); Add(node); TaskChanged(node, GetEventArgs(node, PendingTaskChange.DueDateUpdated, e)); } //// Task Property Change (which doesn't affect list) else if (PendingTaskPropertyChanged != null && e.AttributeSpec.IsStartDate() && node.IsTaskPending()) { var args = new PendingTaskPropertyEventArgs() { PropertyChanged = PendingTaskProperty.StartDate }; if (!string.IsNullOrEmpty(e.oldValue)) { args.OldValue = DateHelper.ToDateTime(e.oldValue); } PendingTaskPropertyChanged(node, args); } }
public bool ShowIcon(MapNode node) { return(node.DueDateExists() && node.IsTaskPending()); }