#if FRAMEWORK20 using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using DevComponents.Schedule.Model; namespace DevComponents.DotNetBar.Schedule { public class CalendarItem : PopupItem { #region enums public enum eHitArea { None, Move, LeftResize, RightResize, TopResize, BottomResize } #endregion #region Events /// /// Occurs when CategoryColor has changed /// [Description("Occurs when the CategoryColor property has changed.")] public event EventHandler CategoryColorChanged; /// /// Occurs when StartTime has Changed /// public event EventHandler StartTimeChanged; /// /// Occurs when EndTime has Changed /// public event EventHandler EndTimeChanged; /// /// Occurs when IsSelected has Changed /// public event EventHandler IsSelectedChanged; /// /// Occurs when CollateId has Changed /// public event EventHandler CollateIdChanged; #endregion #region Private variables private DateTime _StartTime; // Start time private DateTime _EndTime; // End time private string _CategoryColor; // CategoryColor private int _CollateId = -1; private object _ModelItem; // Model item private object _RootItem; // Root model item private bool _IsRecurring; // Is recurring private bool _IsSelected; // Is selected private eHitArea _HitArea = eHitArea.None; private DateTime _LastMouseDown = DateTime.MinValue; private uint _RefreshCount; #endregion /// /// Constructor /// public CalendarItem() { // Set our default Model item _ModelItem = this; MouseUpNotification = true; SetIsContainer(true); } #region Public properties #region CollateId /// /// Gets or sets the CollateId used for TimeLine row collation. /// public virtual int CollateId { get { return (_CollateId); } set { if (_CollateId != value) { _CollateId = value; OnCollateIdChanged(); } } } protected virtual void OnCollateIdChanged() { if (CollateIdChanged != null) CollateIdChanged(this, new EventArgs()); this.Refresh(); } #endregion #region StartTime /// /// Gets or sets the CalendarItem Start time. /// public virtual DateTime StartTime { get { return (_StartTime); } set { if (_StartTime != value) { _StartTime = value; OnStartTimeChanged(); } } } protected virtual void OnStartTimeChanged() { if (StartTimeChanged != null) StartTimeChanged(this, new EventArgs()); this.Refresh(); } #endregion #region EndTime /// /// Gets or sets the CalendarItem End time. /// public virtual DateTime EndTime { get { return (_EndTime); } set { if (_EndTime != value) { _EndTime = value; OnEndTimeChanged(); } } } protected virtual void OnEndTimeChanged() { if (EndTimeChanged != null) EndTimeChanged(this, new EventArgs()); this.Refresh(); } #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 virtual string CategoryColor { get { return (_CategoryColor); } set { if (_CategoryColor == null || _CategoryColor.Equals(value) == false) { string oldValue = _CategoryColor; _CategoryColor = value; OnCategoryColorChanged(oldValue, value); } } } /// /// Sends ChangedEvent for the CategoryColor property /// /// Old CategoryColor /// New CategoryColor protected virtual void OnCategoryColorChanged(string oldValue, string newValue) { if (CategoryColorChanged != null) CategoryColorChanged(this, new CategoryColorChangedEventArgs(oldValue, newValue)); } #endregion #region ModelItem /// /// Gets and sets the Model item /// public object ModelItem { get { return (_ModelItem); } set { _ModelItem = value; } } #endregion #region RootItem /// /// Gets and sets the Root Model item /// public object RootItem { get { return (_RootItem); } set { _RootItem = value; } } #endregion #region IsRecurring /// /// Gets and sets the IsRecurring item status /// public bool IsRecurring { get { return (_IsRecurring); } set { _IsRecurring = value; } } #endregion #region IsSelected /// /// Gets and sets the selection state /// public virtual bool IsSelected { get { return (_IsSelected); } set { if (_IsSelected != value) { _IsSelected = value; Control c = this.ContainerControl as Control; if (c != null) { Rectangle r = Bounds; r.Inflate(4, 4); c.Invalidate(r); } Appointment ap = ModelItem as Appointment; if (ap != null) ap.IsSelected = value; OnIsSelectedChanged(); } } } private void OnIsSelectedChanged() { if (IsSelectedChanged != null) IsSelectedChanged(this, new EventArgs()); } #endregion #region HitArea /// /// Gets and sets the last hit area /// public eHitArea HitArea { get { return (_HitArea); } set { _HitArea = value; } } #endregion #endregion #region Internal properties internal uint RefreshCount { get { return (_RefreshCount); } set { _RefreshCount = value; } } #endregion #region Mouse support /// /// Handles control MouseDown events /// /// MouseEventArgs public override void InternalMouseDown(MouseEventArgs objArg) { base.InternalMouseDown(objArg); if (objArg.Button == MouseButtons.Left) { if (IsSimpleMouseDown()) this.IsSelected = true; InternalMouseMove(objArg); _LastMouseDown = DateTime.Now; } } /// /// Determines if it is a simple, single-click MouseDown /// /// private bool IsSimpleMouseDown() { return (_LastMouseDown == DateTime.MinValue || _LastMouseDown != DateTime.MinValue && DateTime.Now.Subtract(_LastMouseDown).TotalMilliseconds > SystemInformation.DoubleClickTime); } #endregion #region RecalcSize public override void RecalcSize() { } #endregion #region Paint public override void Paint(ItemPaintArgs p) { } #endregion #region IsMarkupSupported /// /// IsMarkupSupported /// protected override bool IsMarkupSupported { get { return (true); } } #endregion #region Copy object /// /// Returns copy of the item. /// public override BaseItem Copy() { CalendarItem objCopy = new CalendarItem(); CopyToItem(objCopy); return (objCopy); } /// /// Copies the CalendarItem specific properties to new instance of the item. /// /// New CalendarItem instance protected override void CopyToItem(BaseItem copy) { CalendarItem objCopy = copy as CalendarItem; if (objCopy != null) { base.CopyToItem(objCopy); objCopy._StartTime = this._StartTime; objCopy._EndTime = this._EndTime; } } #endregion } } #endif