#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 /// /// Normalizes the user specified start and end dates /// /// [out] Normalized start date /// [out] Normalized end date 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 /// /// Processes Up and Down key events /// /// /// 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 /// /// Processes Left and Right Key events /// /// /// 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