#if FRAMEWORK20 using System; using System.Windows.Forms; using DevComponents.Schedule.Model; using System.ComponentModel; namespace DevComponents.DotNetBar.Schedule { public class CustomCalendarItem : CalendarItem { #region Events /// /// Occurs when the OwnerKey has changed /// [Description("Occurs when the OwnerKey has changed.")] public event EventHandler OwnerKeyChanged; /// /// Occurs when Locked has changed /// [Description("Occurs when the Locked property has changed.")] public event EventHandler LockedChanged; #endregion #region Private variables private string _OwnerKey = ""; // OwnerKey private bool _Locked; // Locked state private CustomCalendarItem _BaseCalendarItem; // Base CalendarItem private CalendarView _CalendarView; #endregion #region Public properties #region CollateId /// /// Gets or sets the CollateId used for TimeLine row collation. /// public override int CollateId { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.CollateId); return (base.CollateId); } set { if (_BaseCalendarItem != null) _BaseCalendarItem.CollateId = value; base.CollateId = value; } } #endregion #region OwnerKey /// /// Gets and sets the item OwnerKey /// public string OwnerKey { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.OwnerKey); return (_OwnerKey); } set { if (_BaseCalendarItem != null) { _BaseCalendarItem.OwnerKey = value; } else { if (value == null) value = ""; if (_OwnerKey.Equals(value) == false) { string oldValue = _OwnerKey; _OwnerKey = value; OnOwnerKeyChanged(oldValue, value); } } } } /// /// Sends ChangedEvent for the OwnerKey property /// /// Old OwnerKey /// New OwnerKey protected virtual void OnOwnerKeyChanged(string oldValue, string newValue) { if (OwnerKeyChanged != null) OwnerKeyChanged(this, new OwnerKeyChangedEventArgs(oldValue, newValue)); } #endregion #region Locked /// /// Gets and set whether modification is enabled /// through the user interface" /// public bool Locked { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.Locked); return (_Locked); } set { if (_BaseCalendarItem != null) { _BaseCalendarItem.Locked = value; } else { if (_Locked != value) { bool oldValue = _Locked; _Locked = value; OnLockedChanged(oldValue, value); } } } } /// /// Sends ChangedEvent for the Locked property /// /// Old OwnerKey /// New OwnerKey protected virtual void OnLockedChanged(bool oldValue, bool newValue) { if (LockedChanged != null) LockedChanged(this, new LockedChangedEventArgs(oldValue, newValue)); } #endregion #region StartTime public override DateTime StartTime { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.StartTime); return (base.StartTime); } set { if (_BaseCalendarItem != null) _BaseCalendarItem.StartTime = value; base.StartTime = value; } } #endregion #region EndTime public override DateTime EndTime { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.EndTime); return (base.EndTime); } set { if (_BaseCalendarItem != null) _BaseCalendarItem.EndTime = value; base.EndTime = value; } } #endregion #region BaseCalendarItem /// /// Base CalendarItem /// /// This property holds the base CalendarItem from which /// each displayed CustomItem (of this type) is based. /// /// In order to keep all displayed items "in-sync", it is necessary /// to propagate data to and from the base CalendarItem. This is /// accomplished via hooking those members you are interested in, at /// both the item (HookEvents) and BaseCalendarItem (HookBaseEvents) /// level. /// /// public virtual CustomCalendarItem BaseCalendarItem { get { return (_BaseCalendarItem); } set { _BaseCalendarItem = value; } } #endregion #region IsMultiDayOrAllDayEvent public bool IsMultiDayOrAllDayEvent { get { return (StartTime < EndTime && (EndTime.Subtract(StartTime).TotalDays >= 1 || DateTimeHelper.IsSameDay(StartTime, EndTime) == false)); } } #endregion #region CategoryColor /// /// Gets or sets the category color used for TimeLine CondensedView markers. /// Use static members on Appointment class to assign the category color for example Appointment.CategoryRed. /// public override string CategoryColor { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.CategoryColor); return (base.CategoryColor); } set { if (_BaseCalendarItem != null) _BaseCalendarItem.CategoryColor = value; base.CategoryColor = value; } } #endregion #region IsSelected /// /// Gets or sets whether the item is selected. /// public override bool IsSelected { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.IsSelected); return (base.IsSelected); } set { if (_BaseCalendarItem != null) _BaseCalendarItem.IsSelected = value; base.IsSelected = value; } } #endregion #region Visible /// /// Gets and sets the item Visibility /// public override bool Visible { get { if (_BaseCalendarItem != null) return (_BaseCalendarItem.Visible); return (base.Visible); } set { if (_BaseCalendarItem != null) { _BaseCalendarItem.Visible = value; } else { if (_BaseCalendarItem != null) _BaseCalendarItem.Visible = value; base.Visible = value; } } } #endregion #endregion #region Internal properties #region CalendarView internal CalendarView CalendarView { get { return (_CalendarView); } set { _CalendarView = value; } } #endregion #endregion #region Refresh public override void Refresh() { if (_CalendarView != null) { Control c = (Control)_CalendarView.GetContainerControl(); if (c != null) { foreach (BaseItem item in _CalendarView.CalendarPanel.SubItems) { BaseView view = item as BaseView; if (view != null) RefreshItems(c, view.SubItems); } } } } private void RefreshItems(Control c, SubItemsCollection subItems) { foreach (BaseItem item in subItems) { CustomCalendarItem ci = item as CustomCalendarItem; if (ci != null) { if (ci == this || ci.BaseCalendarItem == this) ci.Invalidate(c); } else if (item is AllDayPanel) { RefreshItems(c, item.SubItems); } } } #endregion #region Paint public override void Paint(ItemPaintArgs e) { } #endregion #region Copy /// /// Returns copy of the item. /// public override BaseItem Copy() { CustomCalendarItem objCopy = new CustomCalendarItem(); CopyToItem(objCopy); return (objCopy); } /// /// Copies the CustomCalendarItem specific properties to new instance of the item. /// /// New CustomCalendarItem instance protected override void CopyToItem(BaseItem copy) { CustomCalendarItem objCopy = copy as CustomCalendarItem; if (objCopy != null) { base.CopyToItem(objCopy); objCopy._OwnerKey = this._OwnerKey; objCopy._Locked = this.Locked; objCopy._CalendarView = this.CalendarView; } } #endregion } #region OwnerKeyChangedEventArgs /// /// OwnerKeyChangedEventArgs /// /// public class OwnerKeyChangedEventArgs : ValueChangedEventArgs { public OwnerKeyChangedEventArgs(string oldValue, string newValue) : base(oldValue, newValue) { } } #endregion #region LockedChangedEventArgs /// /// LockedChangedEventArgs /// /// public class LockedChangedEventArgs : ValueChangedEventArgs { public LockedChangedEventArgs(bool oldValue, bool newValue) : base(oldValue, newValue) { } } #endregion #region CategoryColorChangedEventArgs /// /// CategoryColorChangedEventArgs /// /// public class CategoryColorChangedEventArgs : ValueChangedEventArgs { public CategoryColorChangedEventArgs(string oldValue, string newValue) : base(oldValue, newValue) { } } #endregion } #endif