#if FRAMEWORK20 using System; using System.Collections.Generic; using System.Text; using System.Collections.ObjectModel; namespace DevComponents.Schedule.Model { /// /// Represents collection of working days. /// public class WorkDayCollection : Collection { #region Constructor /// /// Initializes a new instance of the AppointmentCollection class. /// /// public WorkDayCollection(CalendarModel calendar) { _Calendar = calendar; } /// /// Initializes a new instance of the WorkDayCollection class. /// /// public WorkDayCollection(Owner owner) { _Owner = owner; } #endregion #region Internal Implementation private Owner _Owner = null; /// /// Gets the Owner of work-day collection. /// public Owner Owner { get { return _Owner; } internal set { _Owner = value; } } private CalendarModel _Calendar = null; /// /// Gets the calendar collection is associated with. /// public CalendarModel Calendar { get { return _Calendar; } internal set { _Calendar = value; UpdateItemsCalendarModel(); } } internal void UpdateItemsCalendarModel() { CalendarModel model = GetCalendarModel(); foreach (WorkDay item in this.Items) { item.Calendar = model; } } protected override void RemoveItem(int index) { WorkDay day = this[index]; OnBeforeRemove(index, day); base.RemoveItem(index); OnAfterRemove(index, day); } private void OnAfterRemove(int index, WorkDay day) { CalendarModel model = GetCalendarModel(); if (model != null) model.WorkDayRemoved(day); } private void OnBeforeRemove(int index, WorkDay day) { day.Calendar = null; } protected override void InsertItem(int index, WorkDay item) { OnBeforeInsert(index, item); base.InsertItem(index, item); OnAfterInsert(index, item); } private void OnAfterInsert(int index, WorkDay item) { CalendarModel model = GetCalendarModel(); if (model != null) model.WorkDayAdded(item); } private void OnBeforeInsert(int index, WorkDay item) { if (this[item.DayOfWeek] != null) throw new InvalidOperationException("Day '" + item.DayOfWeek.ToString() + "' already in collection."); item.Calendar = GetCalendarModel(); } private CalendarModel GetCalendarModel() { if (_Calendar != null) return _Calendar; if (_Owner != null) return _Owner.Calendar; return null; } protected override void SetItem(int index, WorkDay newItem) { WorkDay oldItem = this[index]; OnBeforeSetItem(index, oldItem, newItem); base.SetItem(index, newItem); OnAfterSetItem(index, oldItem, newItem); } private void OnAfterSetItem(int index, WorkDay oldItem, WorkDay newItem) { CalendarModel model = GetCalendarModel(); if (model != null) { model.WorkDayRemoved(oldItem); model.WorkDayAdded(newItem); } } private void OnBeforeSetItem(int index, WorkDay oldItem, WorkDay newItem) { oldItem.Calendar = null; newItem.Calendar = GetCalendarModel(); } protected override void ClearItems() { CalendarModel model = GetCalendarModel(); foreach (WorkDay item in this) { item.Calendar = null; if (model != null) model.WorkDayRemoved(item); } base.ClearItems(); } /// /// Gets the item based on the Key assigned to the item /// /// Day of week to retrive data for. /// Reference to WorkDay or null if no day in collection. public WorkDay this[DayOfWeek day] { get { foreach (WorkDay item in this.Items) { if (item.DayOfWeek == day) return item; } return null; } } #endregion } } #endif