/// <summary>
/// Initialize a new instance of the ViewDrawRibbonTab class.
/// </summary>
/// <param name="ribbon">Reference to owning ribbon control.</param>
/// <param name="layoutTabs">Reference to view used for layout out tabs.</param>
/// <param name="needPaint">Delegate for notifying paint requests.</param>
public ViewDrawRibbonTab(KryptonRibbon ribbon,
ViewLayoutRibbonTabs layoutTabs,
NeedPaintHandler needPaint)
{
Debug.Assert(ribbon != null);
Debug.Assert(layoutTabs != null);
Debug.Assert(needPaint != null);
// Cache incoming values
Ribbon = ribbon;
ViewLayoutRibbonTabs = layoutTabs;
_needPaint = needPaint;
// Create overrides for handling a focus state
_paletteGeneral = ribbon.StateCommon.RibbonGeneral;
_overrideStateNormal = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateNormal.RibbonTab, Ribbon.StateNormal.RibbonTab, PaletteState.FocusOverride);
_overrideStateTracking = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateTracking.RibbonTab, Ribbon.StateTracking.RibbonTab, PaletteState.FocusOverride);
_overrideStateCheckedNormal = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateCheckedNormal.RibbonTab, Ribbon.StateCheckedNormal.RibbonTab, PaletteState.FocusOverride);
_overrideStateCheckedTracking = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateCheckedTracking.RibbonTab, Ribbon.StateCheckedTracking.RibbonTab, PaletteState.FocusOverride);
_overrideStateContextTracking = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateContextTracking.RibbonTab, Ribbon.StateContextTracking.RibbonTab, PaletteState.FocusOverride);
_overrideStateContextCheckedNormal = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateContextCheckedNormal.RibbonTab, Ribbon.StateContextCheckedNormal.RibbonTab, PaletteState.FocusOverride);
_overrideStateContextCheckedTracking = new PaletteRibbonDoubleInheritOverride(Ribbon.OverrideFocus.RibbonTab, Ribbon.OverrideFocus.RibbonTab, Ribbon.StateContextCheckedTracking.RibbonTab, Ribbon.StateContextCheckedTracking.RibbonTab, PaletteState.FocusOverride);
_overrideCurrent = _overrideStateNormal;
// Create and default the setup of the context colors provider
_paletteContextCurrent = new PaletteRibbonContextDouble(Ribbon);
_paletteContextCurrent.SetInherit(_overrideCurrent);
// Use a class to convert from ribbon tab to content interface
_contentProvider = new RibbonTabToContent(_paletteGeneral, _paletteContextCurrent);
// Use a controller to change state because of mouse movement
RibbonTabController controller = new RibbonTabController(Ribbon, this, _needPaint);
controller.Click += OnTabClicked;
controller.ContextClick += OnTabContextClicked;
MouseController = controller;
SourceController = controller;
KeyController = controller;
// Associate this view with the source component (required for design time selection)
Component = _ribbonTab;
// Create and add the draw content for display inside the tab
Add(new ViewDrawContent(_contentProvider, this, VisualOrientation.Top, true, false));
// Create the state specific memento array
_mementos = new IDisposable[Enum.GetValues(typeof(PaletteState)).Length];
}