178 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
						|
 |