213 lines
5.2 KiB
C#

#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Drawing;
using DevComponents.Schedule.Model;
namespace DevComponents.DotNetBar.Schedule
{
public class DayColumn
{
#region Consts
public const int NumberOfTimeSlices = 48;
#endregion
#region Private variables
private Rectangle _Bounds; // Slot bounding rectangle
private DateTime _Date; // Column date
private float _TimeSliceHeight; // TimeSlice height
private WorkTime _BusyStartTime; // Busy time
private WorkTime _BusyEndTime;
private WorkTime _WorkStartTime; // Work time
private WorkTime _WorkEndTime;
private List<CalendarItem> // Column CalendarItems
_CalendarItems = new List<CalendarItem>();
private bool _NeedRecalcLayout = true;
#endregion
/// <summary>
/// Constructor
/// </summary>
/// <param name="timeSliceHeight">Slice height</param>
public DayColumn(float timeSliceHeight)
{
_TimeSliceHeight = timeSliceHeight;
}
#region Public properties
#region BoundingRect
/// <summary>
/// Gets and sets the week bounding Rectangle
/// </summary>
public Rectangle Bounds
{
get { return (_Bounds); }
set
{
if (_Bounds.Equals(value) == false)
{
int yOffset = value.Y - _Bounds.Y;
_Bounds = value;
if (yOffset != 0)
OffsetItemRects(yOffset);
}
}
}
/// <summary>
/// Offsets the bounding rectangles for the
/// DayColumn's non-extended appointments
/// </summary>
/// <param name="yOffset">Amount to offset</param>
private void OffsetItemRects(int yOffset)
{
for (int i = 0; i < _CalendarItems.Count; i++)
{
Rectangle r = _CalendarItems[i].Bounds;
r.Y += yOffset;
_CalendarItems[i].Bounds = r;
}
}
#endregion
#region Date
/// <summary>
/// Gets and sets the column date
/// </summary>
public DateTime Date
{
get { return (_Date); }
set { _Date = value; }
}
#endregion
#region TimeSliceHeight
/// <summary>
/// Gets and sets the TimeSlice height
/// </summary>
public float TimeSliceHeight
{
get { return (_TimeSliceHeight); }
set { _TimeSliceHeight = value; }
}
#endregion
#region WorkTime properties
/// <summary>
/// Gets and sets the busy time start
/// </summary>
public WorkTime BusyStartTime
{
get { return (_BusyStartTime); }
set { _BusyStartTime = value; }
}
/// <summary>
/// Gets and sets the busy time end
/// </summary>
public WorkTime BusyEndTime
{
get { return (_BusyEndTime); }
set { _BusyEndTime = value; }
}
/// <summary>
/// Gets and sets the work time start
/// </summary>
public WorkTime WorkStartTime
{
get { return (_WorkStartTime); }
set { _WorkStartTime = value; }
}
/// <summary>
/// Gets and sets the work time end
/// </summary>
public WorkTime WorkEndTime
{
get { return (_WorkEndTime); }
set { _WorkEndTime = value; }
}
#endregion
#region CalendarItems
/// <summary>
/// Gets the column CalendarItems list
/// </summary>
public List<CalendarItem> CalendarItems
{
get { return (_CalendarItems); }
}
#endregion
#region NeedRecalcLayout
public bool NeedRecalcLayout
{
get { return (_NeedRecalcLayout); }
set { _NeedRecalcLayout = value; }
}
#endregion
#endregion
#region Public methods
/// <summary>
/// Determines if the given time is tagged as a "Busy time"
/// </summary>
/// <param name="time">WorkTime to test</param>
/// <returns>true if specified "time" is a Busy time</returns>
public bool IsBusyTime(WorkTime time)
{
return ((!BusyStartTime.IsEmpty && !BusyEndTime.IsEmpty) &&
(time >= BusyStartTime && time < BusyEndTime));
}
/// <summary>
/// Determines if the given time is tagged as a "Work time"
/// </summary>
/// <param name="time">WorkTime to test</param>
/// <returns>true if specified "time" is a Work time</returns>
public bool IsWorkTime(WorkTime time)
{
if (WorkStartTime <= WorkEndTime)
return (time >= WorkStartTime && time < WorkEndTime);
return (time < WorkEndTime || time >= WorkStartTime);
}
#endregion
}
}
#endif