178 lines
6.1 KiB
C#

#if FRAMEWORK20
using System;
using System.Windows.Forms;
namespace DevComponents.DotNetBar.Schedule
{
public class WeekView : WeekDayView
{
public WeekView(CalendarView calendarView)
: base(calendarView, eCalendarView.Week)
{
}
#region RecalcSize support
/// <summary>
/// Normalizes the user specified start and end dates
/// </summary>
/// <param name="startDate">[out] Normalized start date</param>
/// <param name="endDate">[out] Normalized end date</param>
protected override void NormalizeDates(out DateTime startDate, out DateTime endDate)
{
startDate = this.StartDate;
endDate = this.EndDate;
DaysOfTheWeek = new DaysOfTheWeek(startDate.DayOfWeek, DaysInWeek);
}
#endregion
#region ProcessUpDownKey
/// <summary>
/// Processes Up and Down key events
/// </summary>
/// <param name="objArg"></param>
/// <param name="dy"></param>
protected override void ProcessUpDownKey(KeyEventArgs objArg, int dy)
{
if (ValidDateSelection())
{
DateTime startDate = CalendarView.DateSelectionStart.Value;
DateTime endDate = CalendarView.DateSelectionEnd.Value;
if (startDate.Equals(DateSelectionAnchor.Value) == true)
startDate = endDate.AddMinutes(-CalendarView.TimeSlotDuration);
int col = GetColumnFromDate(startDate);
startDate = startDate.AddMinutes(dy);
if (GetColumnFromDate(startDate) == col)
{
if (col < 0)
{
startDate = CalendarView.DateSelectionStart.Value;
col = GetColumnFromDate(startDate);
}
if (col < 0)
{
startDate = CalendarView.DateSelectionEnd.Value;
col = GetColumnFromDate(startDate);
}
if (col >= 0)
{
endDate = startDate.AddMinutes(CalendarView.TimeSlotDuration);
DateTime sd = DayColumns[col].Date.AddMinutes(CalendarView.StartSlice * CalendarView.TimeSlotDuration);
DateTime ed = sd.AddMinutes(CalendarView.NumberOfActiveSlices * CalendarView.TimeSlotDuration);
if (startDate >= sd && endDate <= ed)
{
ExtendSelection(ref startDate, ref endDate);
CalendarView.DateSelectionStart = startDate;
CalendarView.DateSelectionEnd = endDate;
EnsureSelectionVisible();
}
}
}
}
objArg.Handled = true;
}
#endregion
#region ProcessLeftRightKey
/// <summary>
/// Processes Left and Right Key events
/// </summary>
/// <param name="objArg"></param>
/// <param name="dx"></param>
protected override void ProcessLeftRightKey(KeyEventArgs objArg, int dx)
{
objArg.Handled = true;
if (ValidDateSelection())
{
DateTime startDate = CalendarView.DateSelectionStart.Value;
DateTime endDate = CalendarView.DateSelectionEnd.Value;
bool newRange = (startDate < DayColumns[0].Date ||
endDate > DayColumns[NumberOfColumns - 1].Date.AddDays(1));
if (CalendarView.WeekDayCanExtendRange == true || newRange == false)
{
bool cancelled = false;
if ((objArg.Modifiers & Keys.Shift) == Keys.Shift)
{
if (startDate.Equals(DateSelectionAnchor.Value) == true)
startDate = endDate.AddMinutes(-CalendarView.TimeSlotDuration);
startDate = startDate.AddDays(dx);
endDate = startDate.AddMinutes(CalendarView.TimeSlotDuration);
if (IsNewRange(startDate, endDate) == true)
{
if (CalendarView.WeekDayCanExtendRange == false)
return;
cancelled = CalendarView.DoViewDateChanging(this,
StartDate, EndDate, ref startDate, ref endDate);
if (cancelled == false)
CalendarView.EnsureVisible(startDate, startDate.AddDays(1));
}
ExtendSelection(ref startDate, ref endDate);
}
else
{
startDate = startDate.AddDays(dx);
endDate = endDate.AddDays(dx);
if (IsNewRange(startDate, endDate) == true)
{
if (CalendarView.WeekDayCanExtendRange == false)
return;
cancelled = CalendarView.DoViewDateChanging(this,
StartDate, EndDate, ref startDate, ref endDate);
if (cancelled == false)
CalendarView.EnsureVisible(startDate, startDate.AddDays(1));
}
DateSelectionAnchor = startDate;
}
if (cancelled == false)
{
CalendarView.DateSelectionStart = startDate;
CalendarView.DateSelectionEnd = endDate;
}
EnsureSelectionVisible();
}
}
}
private bool IsNewRange(DateTime startDate, DateTime endDate)
{
return (startDate < DayColumns[0].Date ||
endDate > DayColumns[NumberOfColumns - 1].Date.AddDays(1));
}
#endregion
}
}
#endif