private void CheckPaletteState(ViewContext context)
{
// Should control be enabled or disabled
bool enabled = IsFixed || context.Control.Enabled;
// Ensure we and child and in correct enabled state
Enabled = enabled;
// Better check we have a child!
if (Count > 0)
this[0].Enabled = enabled;
// If disabled...
if (!enabled)
{
//...must always be using the normal overrides
_paletteContextCurrent.SetInherit(_overrideStateNormal);
}
else
{
// Default to using this element calculated state
PaletteState buttonState = State;
// Update the checked state
Checked = (_ribbon.SelectedTab == RibbonTab);
// Is this tab a context tab?
bool contextTab = !string.IsNullOrEmpty(RibbonTab.ContextName);
// Apply the checked state if not fixed
if (!IsFixed)
{
if (Checked)
{
switch (buttonState)
{
case PaletteState.Normal:
case PaletteState.CheckedNormal:
case PaletteState.ContextCheckedNormal:
if (contextTab)
buttonState = PaletteState.ContextCheckedNormal;
else
buttonState = PaletteState.CheckedNormal;
break;
case PaletteState.Tracking:
case PaletteState.CheckedTracking:
case PaletteState.ContextCheckedTracking:
if (contextTab)
buttonState = PaletteState.ContextCheckedTracking;
else
buttonState = PaletteState.CheckedTracking;
break;
}
}
else
{
switch (buttonState)
{
case PaletteState.CheckedNormal:
case PaletteState.ContextCheckedNormal:
buttonState = PaletteState.Normal;
break;
case PaletteState.Tracking:
case PaletteState.CheckedTracking:
case PaletteState.ContextCheckedTracking:
if (contextTab)
buttonState = PaletteState.ContextTracking;
else
buttonState = PaletteState.Tracking;
break;
}
}
}
// Set the correct palette based on state
switch (buttonState)
{
case PaletteState.Disabled:
case PaletteState.Normal:
_overrideCurrent = _overrideStateNormal;
break;
case PaletteState.Tracking:
_overrideCurrent = _overrideStateTracking;
break;
case PaletteState.CheckedNormal:
_overrideCurrent = _overrideStateCheckedNormal;
break;
case PaletteState.CheckedTracking:
_overrideCurrent = _overrideStateCheckedTracking;
break;
case PaletteState.ContextTracking:
_overrideCurrent = _overrideStateContextTracking;
break;
case PaletteState.ContextCheckedNormal:
_overrideCurrent = _overrideStateContextCheckedNormal;
break;
case PaletteState.ContextCheckedTracking:
_overrideCurrent = _overrideStateContextCheckedTracking;
break;
default:
// Should never happen!
Debug.Assert(false);
break;
}
// Switch the child elements over to correct state
ElementState = buttonState;
// Better check we have a child!
if (Count > 0)
this[0].ElementState = buttonState;
// Update the actual source palette
_paletteContextCurrent.SetInherit(_overrideCurrent);
}
}