/// <summary>
/// Initialize a new instance of the ViewDrawMenuRadioButton class.
/// </summary>
/// <param name="provider">Reference to provider.</param>
/// <param name="radioButton">Reference to owning radio button entry.</param>
public ViewDrawMenuRadioButton(IContextMenuProvider provider,
KryptonContextMenuRadioButton radioButton)
{
_provider = provider;
_radioButton = radioButton;
// Create fixed storage of the content values
_contentValues = new FixedContentValue(radioButton.Text,
radioButton.ExtraText,
radioButton.Image,
radioButton.ImageTransparentColor);
// Decide on the enabled state of the display
_itemEnabled = provider.ProviderEnabled && _radioButton.Enabled;
// Give the heading object the redirector to use when inheriting values
_radioButton.SetPaletteRedirect(provider.ProviderRedirector);
// Create the content for the actual heading text/image
_drawContent = new ViewDrawContent((_itemEnabled ? (IPaletteContent)_radioButton.OverrideNormal : (IPaletteContent)_radioButton.OverrideDisabled),
_contentValues, VisualOrientation.Top);
_drawContent.UseMnemonic = true;
_drawContent.Enabled = _itemEnabled;
// Create the radio button image drawer and place inside element so it is always centered
_drawRadioButton = new ViewDrawRadioButton(_radioButton.StateRadioButtonImages);
_drawRadioButton.CheckState = _radioButton.Checked;
_drawRadioButton.Enabled = _itemEnabled;
_layoutCenter = new ViewLayoutCenter();
_layoutCenter.Add(_drawRadioButton);
// Place the radio button on the left of the available space but inside separators
_innerDocker = new ViewLayoutDocker();
_innerDocker.Add(_drawContent, ViewDockStyle.Fill);
_innerDocker.Add(_layoutCenter, ViewDockStyle.Left);
_innerDocker.Add(new ViewLayoutSeparator(1), ViewDockStyle.Right);
_innerDocker.Add(new ViewLayoutSeparator(3), ViewDockStyle.Left);
_innerDocker.Add(new ViewLayoutSeparator(1), ViewDockStyle.Top);
_innerDocker.Add(new ViewLayoutSeparator(1), ViewDockStyle.Bottom);
// Use outer docker so that any extra space not needed is used by the null
_outerDocker = new ViewLayoutDocker();
_outerDocker.Add(_innerDocker, ViewDockStyle.Top);
_outerDocker.Add(new ViewLayoutNull(), ViewDockStyle.Fill);
// Use context menu specific version of the radio button controller
MenuRadioButtonController mrbc = new MenuRadioButtonController(provider.ProviderViewManager, _innerDocker, this, provider.ProviderNeedPaintDelegate);
mrbc.Click += new EventHandler(OnClick);
_innerDocker.MouseController = mrbc;
_innerDocker.KeyController = mrbc;
// We need to be notified whenever the checked state changes
_radioButton.CheckedChanged += new EventHandler(OnCheckedChanged);
// Add docker as the composite content
Add(_outerDocker);
}