public KryptonRadioButton()
{
// Turn off standard click and double click events, we do that manually
SetStyle(ControlStyles.StandardClick |
ControlStyles.StandardDoubleClick, false);
// Set default properties
_style = LabelStyle.NormalControl;
_orientation = VisualOrientation.Top;
_checkPosition = VisualOrientation.Left;
_checked = false;
_useMnemonic = true;
_autoCheck = true;
// Create content storage
_labelValues = new LabelValues(NeedPaintDelegate);
_labelValues.TextChanged += new EventHandler(OnRadioButtonTextChanged);
_images = new RadioButtonImages(NeedPaintDelegate);
// Create palette redirector
_paletteCommonRedirect = new PaletteContentInheritRedirect(Redirector, PaletteContentStyle.LabelNormalControl);
_paletteRadioButtonImages = new PaletteRedirectRadioButton(Redirector, _images);
// Create the palette provider
_stateCommon = new PaletteContent(_paletteCommonRedirect, NeedPaintDelegate);
_stateDisabled = new PaletteContent(_stateCommon, NeedPaintDelegate);
_stateNormal = new PaletteContent(_stateCommon, NeedPaintDelegate);
_stateFocus = new PaletteContent(_paletteCommonRedirect, NeedPaintDelegate);
// Override the normal values with the focus, when the control has focus
_overrideNormal = new PaletteContentInheritOverride(_stateFocus, _stateNormal, PaletteState.FocusOverride, false);
// Our view contains background and border with content inside
_drawContent = new ViewDrawContent(_overrideNormal, _labelValues, VisualOrientation.Top);
_drawContent.UseMnemonic = _useMnemonic;
// Only draw a focus rectangle when focus cues are needed in the top level form
_drawContent.TestForFocusCues = true;
// Create the check box image drawer and place inside element so it is always centered
_drawRadioButton = new ViewDrawRadioButton(_paletteRadioButtonImages);
_drawRadioButton.CheckState = _checked;
_layoutCenter = new ViewLayoutCenter();
_layoutCenter.Add(_drawRadioButton);
// Place check box on the left and the label in the remainder
_layoutDocker = new ViewLayoutDocker();
_layoutDocker.Add(_layoutCenter, ViewDockStyle.Left);
_layoutDocker.Add(_drawContent, ViewDockStyle.Fill);
// Need a controller for handling mouse input
_controller = new RadioButtonController(_drawRadioButton, _layoutDocker, NeedPaintDelegate);
_controller.Click += new EventHandler(OnControllerClick);
_controller.Enabled = true;
_layoutDocker.MouseController = _controller;
_layoutDocker.KeyController = _controller;
// Change the layout to match the inital right to left setting and orientation
UpdateForOrientation();
// Create the view manager instance
ViewManager = new ViewManager(this, _layoutDocker);
// We want to be auto sized by default, but not the property default!
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
}