Inheritance: KryptonContextMenuItemBase
        /// <summary>
        /// Initialize a new instance of the ViewDrawMenuMonthCalendar class.
        /// </summary>
        /// <param name="provider">Reference to provider.</param>
        /// <param name="monthCalendar">Reference to owning month calendar entry.</param>
        public ViewDrawMenuMonthCalendar(IContextMenuProvider provider,
                                         KryptonContextMenuMonthCalendar monthCalendar)
        {
            _provider = provider;
            _monthCalendar = monthCalendar;
            _firstDayOfWeek = _monthCalendar.FirstDayOfWeek;
            _minDate = _monthCalendar.MinDate;
            _maxDate = _monthCalendar.MaxDate;
            _todayDate = _monthCalendar.TodayDate;
            _maxSelectionCount = _monthCalendar.MaxSelectionCount;
            _scrollChange = _monthCalendar.ScrollChange;
            _todayText = _monthCalendar.TodayText;
            _todayFormat = _monthCalendar.TodayFormat;
            _dimensions = _monthCalendar.CalendarDimensions;

            // Decide on the enabled state of the display
            _itemEnabled = provider.ProviderEnabled && _monthCalendar.Enabled;

            // Give the item object the redirector to use when inheriting values
            _monthCalendar.SetPaletteRedirect(provider.ProviderRedirector);

            // Create view that is used by standalone control as well as this context menu element
            _layoutMonths = new ViewLayoutMonths(provider, monthCalendar, provider.ProviderViewManager, this, provider.ProviderRedirector, provider.ProviderNeedPaintDelegate);
            _layoutMonths.CloseOnTodayClick = _monthCalendar.CloseOnTodayClick;
            _layoutMonths.ShowWeekNumbers = _monthCalendar.ShowWeekNumbers;
            _layoutMonths.ShowTodayCircle = _monthCalendar.ShowTodayCircle;
            _layoutMonths.ShowToday = _monthCalendar.ShowToday;
            _layoutMonths.Enabled = _itemEnabled;

            Add(_layoutMonths);
        }
 /// <summary>
 /// Initialize a new instance of the MonthCalendarController class.
 /// </summary>
 /// <param name="monthCalendar">Reference to owning month calendar entry.</param>
 /// <param name="viewManager">Owning view manager instance.</param>
 /// <param name="months">Reference to view that manages the display of months.</param>
 /// <param name="needPaint">Delegate for handling repainting requests.</param>
 public MonthCalendarController(KryptonContextMenuMonthCalendar monthCalendar,
                                ViewContextMenuManager viewManager,
                                ViewLayoutMonths months, 
                                NeedPaintHandler needPaint)
 {
     _monthCalendar = monthCalendar;
     _viewManager = viewManager;
     _months = months;
     _needPaint = needPaint;
     _mouseOver = false;
     _captured = false;
 }
        /// <summary>
        /// Initialize a new instance of the ViewLayoutMonths class.
        /// </summary>
        /// <param name="provider">Provider of context menu information.</param>
        /// <param name="monthCalendar">Reference to owning month calendar entry.</param>
        /// <param name="viewManager">Owning view manager instance.</param>
        /// <param name="calendar">Reference to calendar provider.</param>
        /// <param name="redirector">Redirector for getting values.</param>
        /// <param name="needPaintDelegate">Delegate for requesting paint changes.</param>
        public ViewLayoutMonths(IContextMenuProvider provider,
                                KryptonContextMenuMonthCalendar monthCalendar,
                                ViewContextMenuManager viewManager,
                                IKryptonMonthCalendar calendar,
                                PaletteRedirect redirector,
                                NeedPaintHandler needPaintDelegate)
        {
            _provider = provider;
            _calendar = calendar;
            _oldSelectionStart = _calendar.SelectionStart;
            _oldSelectionEnd = _calendar.SelectionEnd;
            _displayMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            _redirector = redirector;
            _needPaintDelegate = needPaintDelegate;
            _showToday = true;
            _showTodayCircle = true;
            _closeOnTodayClick = false;
            _firstTimeSync = true;
            _allowButtonSpecToolTips = false;

            // Use a controller that can work against all the displayed months
            MonthCalendarController controller = new MonthCalendarController(monthCalendar, viewManager, this, _needPaintDelegate);
            MouseController = controller;
            SourceController = controller;
            KeyController = controller;

            _borderForced = new PaletteBorderInheritForced(_calendar.StateNormal.Header.Border);
            _borderForced.ForceBorderEdges(PaletteDrawBorders.None);
            _drawHeader = new ViewDrawDocker(_calendar.StateNormal.Header.Back, _borderForced, null);
            _emptyContent = new ViewDrawEmptyContent(_calendar.StateDisabled.Header.Content, _calendar.StateNormal.Header.Content);
            _drawHeader.Add(_emptyContent, ViewDockStyle.Fill);
            Add(_drawHeader);

            // Using a button spec manager to add the buttons to the header
            _buttonSpecs = new MonthCalendarButtonSpecCollection(this);
            _buttonManager = new ButtonSpecManagerDraw(_calendar.CalendarControl, redirector, _buttonSpecs, null,
                                                       new ViewDrawDocker[] { _drawHeader },
                                                       new IPaletteMetric[] { _calendar.StateCommon },
                                                       new PaletteMetricInt[] { PaletteMetricInt.HeaderButtonEdgeInsetCalendar },
                                                       new PaletteMetricPadding[] { PaletteMetricPadding.None },
                                                       _calendar.GetToolStripDelegate, _needPaintDelegate);

            // Create the manager for handling tooltips
            _toolTipManager = new ToolTipManager();
            _toolTipManager.ShowToolTip += new EventHandler<ToolTipEventArgs>(OnShowToolTip);
            _toolTipManager.CancelToolTip += new EventHandler(OnCancelToolTip);
            _buttonManager.ToolTipManager = _toolTipManager;

            // Create the bottom header used for showing 'today' and defined button specs
            _remapPalette = (ButtonSpecRemapByContentView)_buttonManager.CreateButtonSpecRemap(redirector, new ButtonSpecAny());
            _remapPalette.Foreground = _emptyContent;

            // Use a redirector to get button values directly from palette
            _palette = new PaletteTripleRedirect(_remapPalette,
                                                 PaletteBackStyle.ButtonButtonSpec,
                                                 PaletteBorderStyle.ButtonButtonSpec,
                                                 PaletteContentStyle.ButtonButtonSpec,
                                                 _needPaintDelegate);

            _drawToday = new ViewDrawToday(_calendar, _palette, _palette, _palette, _palette, _needPaintDelegate);
            _drawToday.Click += new EventHandler(OnTodayClick);
            _drawHeader.Add(_drawToday, ViewDockStyle.Left);
        }