/// <summary>
/// Initialize a new instance of the ViewDrawMenuCheckBox class.
/// </summary>
/// <param name="provider">Reference to provider.</param>
/// <param name="checkBox">Reference to owning check box entry.</param>
public ViewDrawMenuCheckBox(IContextMenuProvider provider,
KryptonContextMenuCheckBox checkBox)
{
_provider = provider;
KryptonContextMenuCheckBox = 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
KryptonContextMenuCheckBox.SetPaletteRedirect(provider.ProviderRedirector);
// Create the content for the actual heading text/image
ViewDrawContent = new ViewDrawContent((ItemEnabled ? KryptonContextMenuCheckBox.OverrideNormal : KryptonContextMenuCheckBox.OverrideDisabled),
_contentValues, VisualOrientation.Top)
{
UseMnemonic = true,
Enabled = ItemEnabled
};
// Create the check box image drawer and place inside element so it is always centered
ViewDrawCheckBox = new ViewDrawCheckBox(KryptonContextMenuCheckBox.StateCheckBoxImages)
{
CheckState = ResolveCheckState,
Enabled = ItemEnabled
};
_layoutCenter = new ViewLayoutCenter
{
ViewDrawCheckBox
};
// Place the check box on the left of the available space but inside separators
_innerDocker = new ViewLayoutDocker
{
{ ViewDrawContent, ViewDockStyle.Fill },
{ _layoutCenter, ViewDockStyle.Left },
{ new ViewLayoutSeparator(1), ViewDockStyle.Right },
{ new ViewLayoutSeparator(3), ViewDockStyle.Left },
{ new ViewLayoutSeparator(1), ViewDockStyle.Top },
{ new ViewLayoutSeparator(1), ViewDockStyle.Bottom }
};
// Use outer docker so that any extra space not needed is used by the null
_outerDocker = new ViewLayoutDocker
{
{ _innerDocker, ViewDockStyle.Top },
{ 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 += OnClick;
_innerDocker.MouseController = mcbc;
_innerDocker.KeyController = mcbc;
// Add docker as the composite content
Add(_outerDocker);
// Want to know when a property changes whilst displayed
KryptonContextMenuCheckBox.PropertyChanged += OnPropertyChanged;
// We need to know if a property of the command changes
if (KryptonContextMenuCheckBox.KryptonCommand != null)
{
_cachedCommand = KryptonContextMenuCheckBox.KryptonCommand;
KryptonContextMenuCheckBox.KryptonCommand.PropertyChanged += OnCommandPropertyChanged;
}
}