private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { ViewItemHomework homework = ViewModel.Item as ViewItemHomework; if (homework == null) { return; } try { switch (e.PropertyName) { case nameof(homework.PercentComplete): UpdatePercentCompleteFromItem(); break; } } catch (ObjectDisposedException) { // If disposed, de-register the changed handler if (_itemPropertyChangedHandler != null && ViewModel?.Item != null) { ViewModel.Item.PropertyChanged -= _itemPropertyChangedHandler; } } }
public void SetPercentComplete(double percentComplete) { ViewItemHomework homework = Item as ViewItemHomework; if (homework == null || homework.PercentComplete == percentComplete) { return; } TryStartDataOperationAndThenNavigate(delegate { DataChanges changes = new DataChanges(); changes.Add(new DataItemMegaItem() { Identifier = homework.Identifier, PercentComplete = percentComplete }); return(PowerPlannerApp.Current.SaveChanges(changes)); }, delegate { // Go back immediately before if (percentComplete == 1) { this.GoBack(); } }); }
private void UpdatePercentCompleteFromItem() { ViewItemHomework homework = ViewModel.Item as ViewItemHomework; if (homework == null) { return; } _homeworkProgressBarControl.SetProgress(homework.PercentComplete); }
private void AssignClass(DataItemMegaItem data, ViewItemHomework view) { if (data.MegaItemType == PowerPlannerSending.MegaItemType.Task) { view.Class = _semester.NoClassClass; } else { view.Class = _semester.Classes.First(i => i.Identifier == data.UpperIdentifier); } }
/// <summary> /// Returns null if none of the expected types /// </summary> /// <param name="semester"></param> /// <returns></returns> public BaseViewItemHomeworkExam CreateViewItemTaskOrEvent(IEnumerable <ViewItemClass> classes, ViewItemClass noClassClass) { BaseViewItemHomeworkExam view; switch (MegaItemType) { case MegaItemType.Homework: case MegaItemType.Task: view = new ViewItemHomework(this); break; case MegaItemType.Exam: case MegaItemType.Event: view = new ViewItemExam(this); break; default: return(null); } if (view is ViewItemHomework) { var h = view as ViewItemHomework; if (this.MegaItemType == MegaItemType.Task) { h.Class = noClassClass; } else { h.Class = classes.First(i => i.Identifier == this.UpperIdentifier); } } else if (view is ViewItemExam) { var e = view as ViewItemExam; if (this.MegaItemType == MegaItemType.Event) { e.Class = noClassClass; } else { e.Class = classes.First(i => i.Identifier == this.UpperIdentifier); } } return(view); }
protected override void OnDataChangedEvent(DataChangedEvent e) { base.OnDataChangedEvent(e); if (_semester != null) { // Look through edited items if (Class.HomeworkAndExams != null) { foreach (var edited in e.EditedItems.OfType <DataItemMegaItem>()) { var matched = Class.HomeworkAndExams.FirstOrDefault(i => i.Identifier == edited.Identifier); // If found matching if (matched != null) { // If no longer under this class, we need to re-assign the class if (matched is ViewItemHomework) { var h = matched as ViewItemHomework; if (h.Class.Identifier != edited.UpperIdentifier) { if (edited.UpperIdentifier == _semester.NoClassClass.Identifier) { h.Class = _semester.NoClassClass; } else { h.Class = _semester.Classes.FirstOrDefault(i => i.Identifier == edited.UpperIdentifier); } } } else if (matched is ViewItemExam) { var exam = matched as ViewItemExam; if (exam.Class.Identifier != edited.UpperIdentifier) { if (edited.UpperIdentifier == _semester.NoClassClass.Identifier) { exam.Class = _semester.NoClassClass; } else { exam.Class = _semester.Classes.FirstOrDefault(i => i.Identifier == edited.UpperIdentifier); } } } } } } // Re-assigning classes needs to be done before, otherwise we'll no longer have a reference to the object _semester.HandleDataChangedEvent(e); // Only calculates if needed if (IsGradesLoaded) { Class.CalculateEverything(); } // If we previously didn't have old items, see whether we do now if (!HasPastCompletedHomework) { bool hasPastCompleted = e.EditedItems.Concat(e.NewItems).OfType <DataItemMegaItem>().Any( h => IsPastCompletedHomeworkFunction(_classId, TodayAsUtc).Invoke(h)); if (hasPastCompleted) { HasPastCompletedHomework = true; } } if (!HasPastCompletedExams) { bool hasPastCompleted = e.EditedItems.Concat(e.NewItems).OfType <DataItemMegaItem>().Any( exam => IsPastCompletedExamFunction(_classId, TodayAsUtc).Invoke(exam)); if (hasPastCompleted) { HasPastCompletedExams = true; } } if (UnassignedItems != null) { // Remove any deleted if (e.DeletedItems.Any()) { UnassignedItems.RemoveWhere(i => e.DeletedItems.Contains(i.Identifier)); } List <DataItemMegaItem> potentialNew = new List <DataItemMegaItem>(e.NewItems.OfType <DataItemMegaItem>()); // Look through edited foreach (var edited in e.EditedItems.OfType <DataItemMegaItem>()) { var matching = UnassignedItems.FirstOrDefault(i => i.Identifier == edited.Identifier); if (matching != null) { // If it should be removed if (!IsUnassignedChild(edited)) { UnassignedItems.Remove(matching); } // Otherwise it needs to be updated and then re-sorted else { matching.PopulateFromDataItem(edited); UnassignedItems.Remove(matching); UnassignedItems.InsertSorted(matching); } } // New else { potentialNew.Add(edited); } } foreach (var newItem in potentialNew) { if (IsUnassignedChild(newItem)) { BaseViewItemHomeworkExam newViewItem; if (newItem.MegaItemType == PowerPlannerSending.MegaItemType.Homework) { newViewItem = new ViewItemHomework(newItem) { Class = this.Class, WeightCategory = ViewItemWeightCategory.UNASSIGNED }; } else if (newItem.MegaItemType == PowerPlannerSending.MegaItemType.Exam) { newViewItem = new ViewItemExam(newItem) { Class = this.Class, WeightCategory = ViewItemWeightCategory.UNASSIGNED }; } else { continue; } UnassignedItems.InsertSorted(newViewItem); } } HasUnassignedItems = UnassignedItems.Count > 0; } } }