public ViewDrawMenuCheckBox(IContextMenuProvider provider,
KryptonContextMenuCheckBox checkBox)
{
_provider = provider;
_checkBox = checkBox;
// Create fixed storage of the content values
_contentValues = new FixedContentValue(ResolveText,
ResolveExtraText,
ResolveImage,
ResolveImageTransparentColor);
// Decide on the enabled state of the display
_itemEnabled = provider.ProviderEnabled && ResolveEnabled;
// Give the heading object the redirector to use when inheriting values
_checkBox.SetPaletteRedirect(provider.ProviderRedirector);
// Create the content for the actual heading text/image
_drawContent = new ViewDrawContent((_itemEnabled ? (IPaletteContent)_checkBox.OverrideNormal : (IPaletteContent)_checkBox.OverrideDisabled),
_contentValues, VisualOrientation.Top);
_drawContent.UseMnemonic = true;
_drawContent.Enabled = _itemEnabled;
// Create the check box image drawer and place inside element so it is always centered
_drawCheckBox = new ViewDrawCheckBox(_checkBox.StateCheckBoxImages);
_drawCheckBox.CheckState = ResolveCheckState;
_drawCheckBox.Enabled = _itemEnabled;
_layoutCenter = new ViewLayoutCenter();
_layoutCenter.Add(_drawCheckBox);
// Place the check box 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 check box controller
MenuCheckBoxController mcbc = new MenuCheckBoxController(provider.ProviderViewManager, _innerDocker, this, provider.ProviderNeedPaintDelegate);
mcbc.Click += new EventHandler(OnClick);
_innerDocker.MouseController = mcbc;
_innerDocker.KeyController = mcbc;
// Add docker as the composite content
Add(_outerDocker);
// Want to know when a property changes whilst displayed
_checkBox.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChanged);
// We need to know if a property of the command changes
if (_checkBox.KryptonCommand != null)
{
_cachedCommand = _checkBox.KryptonCommand;
_checkBox.KryptonCommand.PropertyChanged += new PropertyChangedEventHandler(OnCommandPropertyChanged);
}
}