#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