#if FRAMEWORK20 using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Imaging; using DevComponents.DotNetBar.Rendering; namespace DevComponents.DotNetBar.Schedule { /// /// Represents date-navigation control that is used with CalendarView to provide calendar date navigation. /// [ToolboxItem(true), ToolboxBitmap(typeof(DateNavigator), "Schedule.DateNavigator.ico")] [Designer("DevComponents.DotNetBar.Design.DateNavigatorDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public partial class DateNavigator : PanelEx { #region Events /// /// Occurs when a date Navigation is occurring /// [Description("Occurs when a date Navigation is occurring.")] public event EventHandler DateChanging; /// /// Occurs when a date Navigation has occurred /// [Description("Occurs when a date Navigation has occurred.")] public event EventHandler DateChanged; /// /// Occurs when the DateNavigator needs a formatted date label /// [Description("Occurs when the DateNavigator needs a formatted date label.")] public event EventHandler GetDateLabel; #endregion #region Constants private const int MaxYearMonthSpan = 120; #endregion #region Private variables private CalendarView _CalendarView; private string _CurrentDayLabel = "MMMM dd, yyyy"; private string _CurrentWeekStartLabel = "MMMM dd, yyyy"; private string _CurrentWeekEndLabel = "MMMM dd, yyyy"; private string _CurrentWeekSameYearStartLabel = "MMMM dd"; private string _CurrentWeekSameYearEndLabel = "MMMM dd, yyyy"; private string _CurrentWeekSameMonthYearStartLabel = "MMMM dd"; private string _CurrentWeekSameMonthYearEndLabel = "dd, yyyy"; private string _CurrentMonthStartLabel = "MMMM yyyy"; private string _CurrentMonthEndLabel = "MMMM yyyy"; private string _CurrentYearStartLabel = "MMMM yyyy"; private string _CurrentYearEndLabel = "MMMM yyyy"; private string _CurrentTimeLineHourLabel = "MMMM dd, yyyy"; private string _CurrentTimeLineDayStartLabel = "MMMM dd, yyyy"; private string _CurrentTimeLineDayEndLabel = "MMMM dd, yyyy"; private string _CurrentTimeLineDaySameYearStartLabel = "MMMM dd"; private string _CurrentTimeLineDaySameYearEndLabel = "MMMM dd, yyyy"; private string _CurrentTimeLineDaySameMonthYearStartLabel = "MMMM dd"; private string _CurrentTimeLineDaySameMonthYearEndLabel = "dd, yyyy"; private string _CurrentTimeLineYearStartLabel = "yyyy"; private string _CurrentTimeLineYearEndLabel = "yyyy"; #endregion public DateNavigator() { InitializeComponent(); UpdateButtonImages(); Style.BackColor1.Color = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.CalendarView.TimeRulerColors[0].Colors[0]; StyleManager.Register(this); } #region Public properties #region CalendarView /// /// Gets or sets the CalendarView date navigation will be applied to. /// [DefaultValue(null), Category("Behavior")] [Description("Indicates CalendarView date navigation will be applied to.")] public CalendarView CalendarView { get { return _CalendarView; } set { if (_CalendarView != null) { _CalendarView.SelectedViewChanged -= CalendarSelectedViewChanged; _CalendarView.ViewDateChanged -= CalendarViewViewDateChanged; _CalendarView.TimeLineViewScrollDateChanged -= CalendarViewTimeLineViewScrollDateChanged; } _CalendarView = value; if (_CalendarView != null) { _CalendarView.SelectedViewChanged += CalendarSelectedViewChanged; _CalendarView.ViewDateChanged += CalendarViewViewDateChanged; _CalendarView.TimeLineViewScrollDateChanged += CalendarViewTimeLineViewScrollDateChanged; } UpdateDisplay(); } } /// /// Handles CalendarView ViewDateChanged events /// /// /// void CalendarViewViewDateChanged(object sender, ViewDateChangedEventArgs e) { UpdateDisplay(); } /// /// Handle CalendarView SelectedViewChanged events /// /// /// private void CalendarSelectedViewChanged(object sender, SelectedViewEventArgs e) { UpdateDisplay(); } /// /// Handles CalendarView_TimeLineViewScrollDateChanged events /// /// /// void CalendarViewTimeLineViewScrollDateChanged(object sender, EventArgs e) { UpdateDisplay(); } #endregion #region CurrentDayLabel /// /// Gets or sets the current Day format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current Day format label.")] public string CurrentDayLabel { get { return (_CurrentDayLabel); } set { if (value == null) value = ""; _CurrentDayLabel = value; UpdateDisplay(); } } #endregion #region CurrentWeekStartLabel /// /// Gets or sets the current Week, start format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current Week, start format label.")] public string CurrentWeekStartLabel { get { return (_CurrentWeekStartLabel); } set { if (value == null) value = ""; _CurrentWeekStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentWeekEndLabel /// /// Gets or sets the current Week, end format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current Week, end format label.")] public string CurrentWeekEndLabel { get { return (_CurrentWeekEndLabel); } set { if (value == null) value = ""; _CurrentWeekEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentWeekSameYearStartLabel /// /// Gets or sets the current Week, same Year, start format label /// [Localizable(true), DefaultValue("MMMM dd"), Category("Appearance")] [Description("Indicates the current Week, same Year, start format label.")] public string CurrentWeekSameYearStartLabel { get { return (_CurrentWeekSameYearStartLabel); } set { if (value == null) value = ""; _CurrentWeekSameYearStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentWeekSameYearEndLabel /// /// Gets or sets the current Week, same Year, end format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current Week, same Year, end format label.")] public string CurrentWeekSameYearEndLabel { get { return (_CurrentWeekSameYearEndLabel); } set { if (value == null) value = ""; _CurrentWeekSameYearEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentWeekSameMonthYearStartLabel /// /// Gets or sets the current Week, same Month & Year, start format label /// [Localizable(true), DefaultValue("MMMM dd"), Category("Appearance")] [Description("Indicates the current Week, same Month & Year, start format label.")] public string CurrentWeekSameMonthYearStartLabel { get { return (_CurrentWeekSameMonthYearStartLabel); } set { if (value == null) value = ""; _CurrentWeekSameMonthYearStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentWeekSameMonthYearEndLabel /// /// Gets or sets the current Week, same Month & Year, end format label /// [Localizable(true), DefaultValue("dd, yyyy"), Category("Appearance")] [Description("Indicates the current Week, same Month & Year, end format label.")] public string CurrentWeekSameMonthYearEndLabel { get { return (_CurrentWeekSameMonthYearEndLabel); } set { if (value == null) value = ""; _CurrentWeekSameMonthYearEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentMonthStartLabel /// /// Gets or sets the current Month, start format label /// [Localizable(true), DefaultValue("MMMM yyyy"), Category("Appearance")] [Description("Indicates the current Month, start format label.")] public string CurrentMonthStartLabel { get { return (_CurrentMonthStartLabel); } set { if (value == null) value = ""; _CurrentMonthStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentMonthEndLabel /// /// Gets or sets the current Month, end format label /// [Localizable(true), DefaultValue("MMMM yyyy"), Category("Appearance")] [Description("Indicates the current Month, end format label.")] public string CurrentMonthEndLabel { get { return (_CurrentMonthEndLabel); } set { if (value == null) value = ""; _CurrentMonthEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentYearStartLabel /// /// Gets or sets the current Year, start format label /// [Localizable(true), DefaultValue("MMMM yyyy"), Category("Appearance")] [Description("Indicates the current Year, start format label.")] public string CurrentYearStartLabel { get { return (_CurrentYearStartLabel); } set { if (value == null) value = ""; _CurrentYearStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentYearEndLabel /// /// Gets or sets the current Year, end format label /// [Localizable(true), DefaultValue("MMMM yyyy"), Category("Appearance")] [Description("Indicates the current Year, end format label.")] public string CurrentYearEndLabel { get { return (_CurrentYearEndLabel); } set { if (value == null) value = ""; _CurrentYearEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineHourLabel /// /// Gets or sets the current TimeLine Hour format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Hour format label.")] public string CurrentTimeLineHourLabel { get { return (_CurrentTimeLineHourLabel); } set { if (value == null) value = ""; _CurrentTimeLineHourLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineDayStartLabel /// /// Gets or sets the current TimeLine Day, start format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Day, start format label.")] public string CurrentTimeLineDayStartLabel { get { return (_CurrentTimeLineDayStartLabel); } set { if (value == null) value = ""; _CurrentTimeLineDayStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineDayEndLabel /// /// Gets or sets the current TimeLine Day, end format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Day, end format label.")] public string CurrentTimeLineDayEndLabel { get { return (_CurrentTimeLineDayEndLabel); } set { if (value == null) value = ""; _CurrentTimeLineDayEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineDaySameYearStartLabel /// /// Gets or sets the current TimeLine Day, same Year, start format label /// [Localizable(true), DefaultValue("MMMM dd"), Category("Appearance")] [Description("Indicates the current TimeLine Day, same Year, start format label.")] public string CurrentTimeLineDaySameYearStartLabel { get { return (_CurrentTimeLineDaySameYearStartLabel); } set { if (value == null) value = ""; _CurrentTimeLineDaySameYearStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineDaySameYearEndLabel /// /// Gets or sets the current TimeLine Day, same Year, end format label /// [Localizable(true), DefaultValue("MMMM dd, yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Day, same Year, end format label.")] public string CurrentTimeLineDaySameYearEndLabel { get { return (_CurrentTimeLineDaySameYearEndLabel); } set { if (value == null) value = ""; _CurrentTimeLineDaySameYearEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineDaySameMonthYearStartLabel /// /// Gets or sets the current TimeLine Day, same Month & Year, start format label /// [Localizable(true), DefaultValue("MMMM dd"), Category("Appearance")] [Description("Indicates the current TimeLine Day, same Month & Year, start format label.")] public string CurrentTimeLineDaySameMonthYearStartLabel { get { return (_CurrentTimeLineDaySameMonthYearStartLabel); } set { if (value == null) value = ""; _CurrentTimeLineDaySameMonthYearStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineDaySameMonthYearEndLabel /// /// Gets or sets the current TimeLine Day, same Month & Year, end format label /// [Localizable(true), DefaultValue("dd, yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Day, same Month & Year, end format label.")] public string CurrentTimeLineDaySameMonthYearEndLabel { get { return (_CurrentTimeLineDaySameMonthYearEndLabel); } set { if (value == null) value = ""; _CurrentTimeLineDaySameMonthYearEndLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineYearStartLabel /// /// Gets or sets the current TimeLine Year, start format label /// [Localizable(true), DefaultValue("yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Year, start format label.")] public string CurrentTimeLineYearStartLabel { get { return (_CurrentTimeLineYearStartLabel); } set { if (value == null) value = ""; _CurrentTimeLineYearStartLabel = value; UpdateDisplay(); } } #endregion #region CurrentTimeLineYearEndLabel /// /// Gets or sets the current TimeLine Year, end format label /// [Localizable(true), DefaultValue("yyyy"), Category("Appearance")] [Description("Indicates the current TimeLine Year, end format label.")] public string CurrentTimeLineYearEndLabel { get { return (_CurrentTimeLineYearEndLabel); } set { if (value == null) value = ""; _CurrentTimeLineYearEndLabel = value; UpdateDisplay(); } } #endregion #region WeekDaysNavigationEnabled private bool _WeekDaysNavigationEnabled = true; /// /// Gets or sets whether in Week View week-days navigation is enabled. Default value is true. When week-days navigation is enabled /// and start date points to Monday and end date points to Friday, navigating to next day will navigate to next Monday-Friday view. /// [DefaultValue(true), Category("Behavior")] [Description("Indicates whether in Week View week-days navigation is enabled. When week-days navigation is enabled and start date points to Monday and end date points to Friday, navigating to next day will navigate to next Monday-Friday view.")] public bool WeekDaysNavigationEnabled { get { return _WeekDaysNavigationEnabled; } set { _WeekDaysNavigationEnabled = value; } } #endregion #endregion #region StyleManagerStyleChanged /// /// Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if /// its style is controlled by StyleManager. /// /// New active style. [EditorBrowsable(EditorBrowsableState.Never)] public override void StyleManagerStyleChanged(eDotNetBarStyle newStyle) { base.StyleManagerStyleChanged(newStyle); UpdateButtonImages(); this.Style.BackColor1.Color = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.CalendarView.TimeRulerColors[0].Colors[0]; } #endregion #region Navigate_click routines /// /// Handles NavigateForward button clicks /// /// /// private void NavigateForwardClick(object sender, EventArgs e) { NavigateDatesForward(); } /// /// Handles NavigateBack button clicks /// /// /// private void NavigateBackClick(object sender, EventArgs e) { NavigateDatesBack(); } #endregion #region NavigateDatesForward /// /// Navigates forward /// private void NavigateDatesForward() { if (_CalendarView != null) { switch (_CalendarView.SelectedView) { case eCalendarView.Day: NavigateDayForward(); break; case eCalendarView.Week: NavigateWeekForward(); break; case eCalendarView.Month: NavigateMonthForward(); break; case eCalendarView.Year: NavigateYearForward(); break; case eCalendarView.TimeLine: NavigateTimeLineForward(); break; } UpdateDisplay(); } } #region NavigateDayForward /// /// NavigateDayForward /// private void NavigateDayForward() { DateTime oldDate = _CalendarView.DayViewDate; DateTime newDate = _CalendarView.DayViewDate.AddDays(1); if (DoDateChanging(NavigationDirection.Forward, oldDate, oldDate, ref newDate, ref newDate) == false) { _CalendarView.DayViewDate = newDate; DoDateChanged(NavigationDirection.Forward, oldDate, oldDate, newDate, newDate); } } #endregion #region NavigateWeekForward /// /// NavigateWeekForward /// private void NavigateWeekForward() { DateTime calendarStart = _CalendarView.WeekViewStartDate; DateTime calendarEnd = _CalendarView.WeekViewEndDate; TimeSpan span = calendarEnd.Subtract(calendarStart); DateTime start = calendarStart.AddDays(1).Add(span); DateTime end = calendarEnd.AddDays(1).Add(span); if (WeekDaysNavigationEnabled && calendarStart.DayOfWeek == DayOfWeek.Monday && calendarEnd.DayOfWeek == DayOfWeek.Friday) { // Browse week-days only start = calendarStart.AddDays(7); end = start.AddDays(4); } if (DoDateChanging(NavigationDirection.Forward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.WeekViewStartDate = start; _CalendarView.WeekViewEndDate = end; DoDateChanged(NavigationDirection.Forward, calendarStart, calendarEnd, start, end); } } #endregion #region NavigateMonthForward /// /// NavigateMonthForward /// private void NavigateMonthForward() { DateTime calendarStart = _CalendarView.MonthViewStartDate; DateTime calendarEnd = _CalendarView.MonthViewEndDate; TimeSpan span = calendarEnd.Subtract(calendarStart); DateTime start = calendarStart.AddMonths(1); DateTime end = start.Add(span); if (calendarStart.Day == 1 && calendarEnd.Day == ScheduleSettings.GetActiveCulture().Calendar.GetDaysInMonth(calendarEnd.Year, calendarEnd.Month)) { end = start.AddMonths(1).AddMinutes(-1); } if (DoDateChanging(NavigationDirection.Forward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.MonthViewStartDate = start; _CalendarView.MonthViewEndDate = end; DoDateChanged(NavigationDirection.Forward, calendarStart, calendarEnd, start, end); } } #endregion #region NavigateYearForward /// /// NavigateYearForward /// private void NavigateYearForward() { DateTime calendarStart = _CalendarView.YearViewStartDate; DateTime calendarEnd = _CalendarView.YearViewEndDate; int months = CountMonthSpan(calendarStart, calendarEnd); DateTime start = calendarEnd.AddMonths(1); start = start.AddDays(-start.Day + 1); DateTime end = start.AddMonths(months + 1); end = end.AddDays(-1); if (DoDateChanging(NavigationDirection.Forward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.YearViewStartDate = start; _CalendarView.YearViewEndDate = end; DoDateChanged(NavigationDirection.Forward, calendarStart, calendarEnd, start, end); } } #endregion #region NavigateTimeLineForward /// /// NavigateTimeLineForward /// private void NavigateTimeLineForward() { DateTime calendarStart = _CalendarView.TimeLineViewScrollStartDate; DateTime calendarEnd = _CalendarView.TimeLineViewScrollEndDate; DateTime start = GetForwardPeriodDate(_CalendarView.TimeLineViewScrollStartDate); DateTime end = start; if (DoDateChanging(NavigationDirection.Forward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.TimeLineViewScrollStartDate = start; DoDateChanged(NavigationDirection.Forward, calendarStart, calendarEnd, _CalendarView.TimeLineViewScrollStartDate, _CalendarView.TimeLineViewScrollEndDate); } } #endregion #region GetForwardPeriodDate /// /// Gets the next forward TimeLine Period Date /// /// Current date /// Next Period Date private DateTime GetForwardPeriodDate(DateTime calendarStart) { // Hours or Minutes if (_CalendarView.TimeLinePeriod == eTimeLinePeriod.Minutes || _CalendarView.TimeLinePeriod == eTimeLinePeriod.Hours) { // Move forward by a day calendarStart = calendarStart.AddDays(1); return (new DateTime(calendarStart.Year, calendarStart.Month, calendarStart.Day, 0, 0, 0)); } // Days if (_CalendarView.TimeLinePeriod == eTimeLinePeriod.Days) { // If our interval is a single day, then // move forward by a month if (_CalendarView.TimeLineInterval == 1) { calendarStart = calendarStart.AddMonths(1); return (new DateTime(calendarStart.Year, calendarStart.Month, 1)); } // The interval is multiple days, so // move forward by a year calendarStart = calendarStart.AddYears(1); if (calendarStart.AddMinutes(_CalendarView.BaseInterval).Year > calendarStart.Year) calendarStart = calendarStart.AddYears(1); return (new DateTime(calendarStart.Year, 1, 1)); } // Years if (_CalendarView.TimeLinePeriod == eTimeLinePeriod.Years) { TimeSpan ts = calendarStart - _CalendarView.TimeLineViewStartDate; // Move forward by 10 columns at a time int interval = (int)(ts.TotalMinutes / _CalendarView.BaseInterval); interval = ((interval + 10) / 10) * 10; return (_CalendarView.TimeLineViewStartDate.AddMinutes( interval * _CalendarView.BaseInterval)); } return (calendarStart); } #endregion #endregion #region NavigateDatesBack /// /// Navigates back /// private void NavigateDatesBack() { if (_CalendarView != null) { switch (_CalendarView.SelectedView) { case eCalendarView.Day: NavigateDayBack(); break; case eCalendarView.Week: NavigateWeekBack(); break; case eCalendarView.Month: NavigateMonthBack(); break; case eCalendarView.Year: NavigateYearBack(); break; case eCalendarView.TimeLine: NavigateTimeLineBack(); break; } UpdateDisplay(); } } #region NavigateDayBack /// /// NavigateDayBack /// private void NavigateDayBack() { DateTime oldDate = _CalendarView.DayViewDate; DateTime newDate = _CalendarView.DayViewDate.AddDays(-1); if (DoDateChanging(NavigationDirection.Backward, oldDate, oldDate, ref newDate, ref newDate) == false) { _CalendarView.DayViewDate = newDate; DoDateChanged(NavigationDirection.Backward, oldDate, oldDate, newDate, newDate); } } #endregion #region NavigateWeekBack /// /// NavigateWeekBack /// private void NavigateWeekBack() { DateTime calendarStart = _CalendarView.WeekViewStartDate; DateTime calendarEnd = _CalendarView.WeekViewEndDate; TimeSpan span = calendarEnd.Subtract(calendarStart).Negate(); DateTime start = calendarStart.AddDays(-1).Add(span); DateTime end = calendarEnd.AddDays(-1).Add(span); if (WeekDaysNavigationEnabled && calendarStart.DayOfWeek == DayOfWeek.Monday && calendarEnd.DayOfWeek == DayOfWeek.Friday) { // Browse week-days only start = calendarStart.AddDays(-7); end = start.AddDays(4); } if (DoDateChanging(NavigationDirection.Backward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.WeekViewStartDate = start; _CalendarView.WeekViewEndDate = end; DoDateChanged(NavigationDirection.Backward, calendarStart, calendarEnd, start, end); } } #endregion #region NavigateMonthBack /// /// NavigateMonthBack /// private void NavigateMonthBack() { DateTime calendarStart = _CalendarView.MonthViewStartDate; DateTime calendarEnd = _CalendarView.MonthViewEndDate; TimeSpan span = calendarEnd.Subtract(calendarStart); DateTime start = calendarStart.AddMonths(-1); DateTime end = start.Add(span); if (calendarStart.Day == 1 && calendarEnd.Day == ScheduleSettings.GetActiveCulture().Calendar.GetDaysInMonth(calendarEnd.Year, calendarEnd.Month)) { end = start.AddMonths(1).AddMinutes(-1); } if (DoDateChanging(NavigationDirection.Backward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.MonthViewStartDate = start; _CalendarView.MonthViewEndDate = end; DoDateChanged(NavigationDirection.Backward, calendarStart, calendarEnd, start, end); } } #endregion #region NavigateYearBack /// /// NavigateYearBack /// private void NavigateYearBack() { DateTime calendarStart = _CalendarView.YearViewStartDate; DateTime calendarEnd = _CalendarView.YearViewEndDate; int months = CountMonthSpan(calendarStart, calendarEnd); DateTime end = calendarStart.AddDays(-1); DateTime start = end.AddMonths(-months); start = start.AddDays(-start.Day + 1); if (DoDateChanging(NavigationDirection.Backward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.YearViewStartDate = start; _CalendarView.YearViewEndDate = end; DoDateChanged(NavigationDirection.Backward, calendarStart, calendarEnd, start, end); } } #endregion #region NavigateTimeLineBack /// /// NavigateTimeLineBack /// private void NavigateTimeLineBack() { DateTime calendarStart = _CalendarView.TimeLineViewScrollStartDate; DateTime calendarEnd = _CalendarView.TimeLineViewScrollEndDate; DateTime start = GetBackPeriodDate(_CalendarView.TimeLineViewScrollStartDate); DateTime end = start; if (DoDateChanging(NavigationDirection.Backward, calendarStart, calendarEnd, ref start, ref end) == false) { _CalendarView.TimeLineViewScrollStartDate = start; DoDateChanged(NavigationDirection.Backward, calendarStart, calendarEnd, _CalendarView.TimeLineViewScrollStartDate, _CalendarView.TimeLineViewScrollEndDate); } } #endregion #region GetBackPeriodDate /// /// Gets the next back TimeLine Period Date /// /// Current date /// Next back Period Date private DateTime GetBackPeriodDate(DateTime calendarStart) { // Hours or minutes if (_CalendarView.TimeLinePeriod == eTimeLinePeriod.Minutes || _CalendarView.TimeLinePeriod == eTimeLinePeriod.Hours) { // Go back by a day if (calendarStart.Hour == 0) calendarStart = calendarStart.AddDays(-1); return (new DateTime(calendarStart.Year, calendarStart.Month, calendarStart.Day, 0, 0, 0)); } // Days if (_CalendarView.TimeLinePeriod == eTimeLinePeriod.Days) { // If the interval is a single day // then go back by a month if (_CalendarView.TimeLineInterval == 1) { if (calendarStart.Day == 1) calendarStart = calendarStart.AddMonths(-1); return (new DateTime(calendarStart.Year, calendarStart.Month, 1)); } // Multi-day interval, go back // by a year if (calendarStart.AddMinutes(-_CalendarView.BaseInterval).Year < calendarStart.Year) calendarStart = calendarStart.AddYears(-1); return (new DateTime(calendarStart.Year, 1, 1)); } // Years if (_CalendarView.TimeLinePeriod == eTimeLinePeriod.Years) { TimeSpan ts = calendarStart - _CalendarView.TimeLineViewStartDate; // Go back 10 columns int interval = (int)(ts.TotalMinutes / _CalendarView.BaseInterval); interval = ((interval % 10 == 0) ? interval - 10 : (interval / 10) * 10); return (_CalendarView.TimeLineViewStartDate.AddMinutes( interval * _CalendarView.BaseInterval)); } return (calendarStart); } #endregion #endregion #region CountMonthSpan /// /// CountMonthSpan /// /// /// /// private int CountMonthSpan(DateTime calendarStart, DateTime calendarEnd) { int monthSpan = (calendarEnd.Year * 12 + calendarEnd.Month) - (calendarStart.Year * 12 + calendarStart.Month); return (monthSpan > MaxYearMonthSpan ? MaxYearMonthSpan : monthSpan); } #endregion #region UpdateDisplay #region UpdateDisplay /// /// Updates the Date Label text /// public void UpdateDisplay() { if (IsDisposed == false) { if (_CalendarView == null) { CurrentDateLabel.Text = ""; } else { if (GetDateLabel != null) { GetDateLabelEventArgs args = new GetDateLabelEventArgs(); GetDateLabel(this, args); if (string.IsNullOrEmpty(args.DateLabel) == false) { CurrentDateLabel.Text = args.DateLabel; return; } } IFormatProvider formatProvider = ScheduleSettings.GetActiveCulture(); //.GetFormat(typeof (DateTime)); switch (_CalendarView.SelectedView) { case eCalendarView.Day: UpdateDayDisplay(formatProvider, _CalendarView.DayViewDate); break; case eCalendarView.Week: UpdateWeekDisplay(formatProvider, _CalendarView.WeekViewStartDate, _CalendarView.WeekViewEndDate); break; case eCalendarView.Month: UpdateMonthDisplay(formatProvider, _CalendarView.MonthViewStartDate, _CalendarView.MonthViewEndDate); break; case eCalendarView.Year: UpdateYearDisplay(formatProvider, _CalendarView.YearViewStartDate, _CalendarView.YearViewEndDate); break; case eCalendarView.TimeLine: UpdateTimeLineDisplay(formatProvider, _CalendarView.TimeLineViewScrollStartDate, _CalendarView.TimeLineViewScrollEndDate); break; } } } } #endregion #region UpdateDayDisplay /// /// Updates the DayView display /// /// /// private void UpdateDayDisplay(IFormatProvider formatProvider, DateTime start) { CurrentDateLabel.Text = (start == DateTime.MinValue) ? "" : start.ToString(CurrentDayLabel, formatProvider); } #endregion #region UpdateWeekDisplay /// /// Updates the WeekView display /// /// /// /// private void UpdateWeekDisplay(IFormatProvider formatProvider, DateTime start, DateTime end) { if (start == DateTime.MinValue || end == DateTime.MinValue) { CurrentDateLabel.Text = ""; } else { if (start.Year == end.Year && start.Month == end.Month) { CurrentDateLabel.Text = start.ToString(CurrentWeekSameYearStartLabel, formatProvider) + @" - " + end.ToString(CurrentWeekSameYearEndLabel, formatProvider); } else if (start.Year == end.Year) { CurrentDateLabel.Text = start.ToString(CurrentWeekSameMonthYearStartLabel, formatProvider) + @" - " + end.ToString(CurrentWeekSameMonthYearEndLabel, formatProvider); } else { CurrentDateLabel.Text = start.ToString(CurrentWeekStartLabel, formatProvider) + @" - " + end.ToString(CurrentWeekEndLabel, formatProvider); } } } #endregion #region UpdateMonthDisplay /// /// Updates the MonthView display /// /// /// /// private void UpdateMonthDisplay(IFormatProvider formatProvider, DateTime start, DateTime end) { if (start == DateTime.MinValue || end == DateTime.MinValue) { CurrentDateLabel.Text = ""; } else { string s = start.ToString(CurrentMonthStartLabel, formatProvider); if (end.Year != start.Year) s += " - " + end.ToString(CurrentMonthEndLabel, formatProvider); CurrentDateLabel.Text = s; } } #endregion #region UpdateYearDisplay /// /// Updates the YearView display /// /// /// /// private void UpdateYearDisplay(IFormatProvider formatProvider, DateTime start, DateTime end) { if (start == DateTime.MinValue) { CurrentDateLabel.Text = ""; } else { string s = start.ToString(CurrentYearStartLabel, formatProvider); if (start.Month != end.Month || start.Year != end.Year) s += " - " + end.ToString(CurrentYearEndLabel, formatProvider); CurrentDateLabel.Text = s; } } #endregion #region UpdateTimeLineDisplay /// /// Updates the TimeLineView display /// /// /// /// private void UpdateTimeLineDisplay(IFormatProvider formatProvider, DateTime start, DateTime end) { if (start == DateTime.MinValue || end == DateTime.MinValue) { CurrentDateLabel.Text = ""; } else { switch (_CalendarView.TimeLinePeriod) { case eTimeLinePeriod.Hours: case eTimeLinePeriod.Minutes: CurrentDateLabel.Text = start.ToString(CurrentTimeLineHourLabel, formatProvider); break; case eTimeLinePeriod.Days: if (start.Year == end.Year && start.Month == end.Month) { CurrentDateLabel.Text = start.ToString(CurrentTimeLineDaySameMonthYearStartLabel, formatProvider) + @" - " + end.ToString(CurrentTimeLineDaySameMonthYearEndLabel, formatProvider); } else if (start.Year == end.Year) { CurrentDateLabel.Text = start.ToString(CurrentTimeLineDaySameYearStartLabel, formatProvider) + @" - " + end.ToString(CurrentTimeLineDaySameYearEndLabel, formatProvider); } else { CurrentDateLabel.Text = start.ToString(CurrentTimeLineDayStartLabel, formatProvider) + @" - " + end.ToString(CurrentTimeLineDayEndLabel, formatProvider); } break; case eTimeLinePeriod.Years: CurrentDateLabel.Text = start.ToString(CurrentTimeLineYearStartLabel, formatProvider) + @" - " + end.ToString(CurrentTimeLineYearEndLabel, formatProvider); break; } } } #endregion #endregion #region UpdateButtonImages /// /// Updates the button images /// private void UpdateButtonImages() { Bitmap image = new Bitmap(10, 10, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(image)) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; using (Pen pen = new Pen(GetImageForeColor(), 2)) { g.DrawLines(pen, new Point[] { new Point(5,0), new Point(1,4), new Point(5,8) }); g.DrawLines(pen, new Point[] { new Point(1,4), new Point(9,4) }); } } if (NavigateBack.Image != null) { Image img = NavigateBack.Image; NavigateBack.Image = null; img.Dispose(); } NavigateBack.Image = image; image = new Bitmap(10, 10, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(image)) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; using (Pen pen = new Pen(GetImageForeColor(), 2)) { g.DrawLines(pen, new Point[] { new Point(0,4), new Point(8,4), new Point(4,0), new Point(8,4), new Point(4,8) }); } } if (NavigateForward.Image != null) { Image img = NavigateForward.Image; NavigateForward.Image = null; img.Dispose(); } NavigateForward.Image = image; } /// /// Gets image fore color /// /// private Color GetImageForeColor() { if (GlobalManager.Renderer is Office2007Renderer) { return ((Office2007Renderer)GlobalManager.Renderer).ColorTable.CheckBoxItem.Default.Text; } return this.ColorScheme.ItemText; } #endregion #region DoDateChanging private bool DoDateChanging(NavigationDirection direction, DateTime oldStartDate, DateTime oldEndDate, ref DateTime newStartDate, ref DateTime newEndDate) { if (DateChanging != null) { DateChangingEventArgs ev = new DateChangingEventArgs( direction, oldStartDate, oldEndDate, newStartDate, newEndDate); DateChanging(this, ev); if (ev.Cancel == true) return (true); newStartDate = ev.NewStartDate; newEndDate = ev.NewEndDate; } return (false); } #endregion #region DoDateChanged private void DoDateChanged(NavigationDirection direction, DateTime oldStartDate, DateTime oldEndDate, DateTime newStartDate, DateTime newEndDate) { if (DateChanged != null) { DateChangedEventArgs ev = new DateChangedEventArgs( direction, oldStartDate, oldEndDate, newStartDate, newEndDate); DateChanged(this, ev); } } #endregion #region DateChangingEventArgs /// /// DateChangingEventArgs /// public class DateChangingEventArgs : DateChangedEventArgs { #region Private variables private bool _Cancel; #endregion public DateChangingEventArgs(NavigationDirection direction, DateTime oldStartDate, DateTime oldEndDate, DateTime newStartDate, DateTime newEndDate) : base(direction, oldStartDate, oldEndDate, newStartDate, newEndDate) { } #region Public properties /// /// Gets or sets whether to cancel the operation /// public bool Cancel { get { return (_Cancel); } set { _Cancel = value; } } #endregion } #endregion #region DateChangedEventArgs /// /// DateChangingEventArgs /// public class DateChangedEventArgs : EventArgs { #region Private variables NavigationDirection _Direction; private DateTime _OldStartDate; private DateTime _OldEndDate; private DateTime _NewStartDate; private DateTime _NewEndDate; #endregion public DateChangedEventArgs(NavigationDirection direction, DateTime oldStartDate, DateTime oldEndDate, DateTime newStartDate, DateTime newEndDate) { _Direction = direction; _OldStartDate = oldStartDate; _OldEndDate = oldEndDate; _NewStartDate = newStartDate; _NewEndDate = newEndDate; } #region Public properties /// /// Gets the navigation direction /// public NavigationDirection Direction { get { return (_Direction); } set { _Direction = value; } } /// /// Gets the old navigation start date /// public DateTime OldStartDate { get { return (_OldStartDate); } } /// /// Gets the old navigation end date /// public DateTime OldEndDate { get { return (_OldEndDate); } } /// /// Gets or sets the new navigation start date /// public DateTime NewStartDate { get { return (_NewStartDate); } set { _NewStartDate = value; } } /// /// Gets or sets the new navigation end date /// public DateTime NewEndDate { get { return (_NewEndDate); } set { _NewEndDate = value; } } #endregion } #endregion #region GetDateLabelEventArgs /// /// GetDateLabelEventArgs /// public class GetDateLabelEventArgs : EventArgs { #region Private variables private string _DateLabel; #endregion #region Public properties /// /// Gets the formatted DateLabel /// public string DateLabel { get { return (_DateLabel); } set { _DateLabel = value; } } #endregion } #endregion } #region enums public enum NavigationDirection { Forward, Backward } #endregion } #endif