/// <summary> /// Initialize a new instance of the ContextMenuProvider class. /// </summary> /// <param name="viewManager">View manager used to organize keyboard events.</param> /// <param name="menuCollection">Top level set of menu items.</param> /// <param name="viewColumns">Stack used for adding new columns.</param> /// <param name="palette">Local palette setting to use initially.</param> /// <param name="paletteMode">Palette mode setting to use initially.</param> /// <param name="redirector">Redirector used for obtaining palette values.</param> /// <param name="needPaintDelegate">Delegate used to when paint changes occur.</param> public AppButtonMenuProvider(ViewContextMenuManager viewManager, KryptonContextMenuItemCollection menuCollection, ViewLayoutStack viewColumns, IPalette palette, PaletteMode paletteMode, PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) { // Store incoming state _viewManager = viewManager; _menuCollection = menuCollection; _viewColumns = viewColumns; _palette = palette; _paletteMode = paletteMode; _redirector = redirector; _needPaintDelegate = needPaintDelegate; // Create all other state _parent = null; _enabled = true; _canCloseMenu = true; _showHorz = KryptonContextMenuPositionH.After; _showVert = KryptonContextMenuPositionV.Top; _stateCommon = new PaletteContextMenuRedirect(redirector, needPaintDelegate); _stateNormal = new PaletteContextMenuItemState(_stateCommon); _stateDisabled = new PaletteContextMenuItemState(_stateCommon); _stateHighlight = new PaletteContextMenuItemStateHighlight(_stateCommon); _stateChecked = new PaletteContextMenuItemStateChecked(_stateCommon); _redirectorImages = new PaletteRedirectContextMenu(redirector, new ContextMenuImages(needPaintDelegate)); }
/// <summary> /// Initialize a new instance of the ContextMenuProvider class. /// </summary> /// <param name="contextMenu">Originating context menu instance.</param> /// <param name="viewManager">Reference to view manager.</param> /// <param name="viewColumns">Columns view element.</param> /// <param name="palette">Local palette setting to use initially.</param> /// <param name="paletteMode">Palette mode setting to use initially.</param> /// <param name="redirector">Redirector used for obtaining palette values.</param> /// <param name="redirectorImages">Redirector used for obtaining images.</param> /// <param name="needPaintDelegate">Delegate for requesting paint changes.</param> /// <param name="enabled">Enabled state of the context menu.</param> public ContextMenuProvider(KryptonContextMenu contextMenu, ViewContextMenuManager viewManager, ViewLayoutStack viewColumns, IPalette palette, PaletteMode paletteMode, PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, NeedPaintHandler needPaintDelegate, bool enabled) { ProviderShowHorz = KryptonContextMenuPositionH.Left; ProviderShowVert = KryptonContextMenuPositionV.Below; ProviderEnabled = enabled; ProviderViewManager = viewManager; ProviderViewColumns = viewColumns; ProviderStateCommon = contextMenu.StateCommon; ProviderStateDisabled = contextMenu.StateDisabled; ProviderStateNormal = contextMenu.StateNormal; ProviderStateHighlight = contextMenu.StateHighlight; ProviderStateChecked = contextMenu.StateChecked; ProviderImages = redirectorImages; ProviderPalette = palette; ProviderPaletteMode = paletteMode; ProviderRedirector = redirector; ProviderNeedPaintDelegate = needPaintDelegate; ProviderCanCloseMenu = true; }
/// <summary> /// Initialize a new instance of the VisualPopupAppMenu class. /// </summary> /// <param name="ribbon">Owning ribbon instance.</param> /// <param name="appButton">Originating app button instance.</param> /// <param name="palette">Local palette setting to use initially.</param> /// <param name="paletteMode">Palette mode setting to use initially.</param> /// <param name="redirector">Redirector used for obtaining palette values.</param> /// <param name="rectAppButtonTopHalf">Screen location of the upper half of the app button.</param> /// <param name="rectAppButtonBottomHalf">Screen location of the lower half of the app button.</param> /// <param name="keyboardActivated">Was the context menu activated by a keyboard action.</param> public VisualPopupAppMenu(KryptonRibbon ribbon, RibbonAppButton appButton, IPalette palette, PaletteMode paletteMode, PaletteRedirect redirector, Rectangle rectAppButtonTopHalf, Rectangle rectAppButtonBottomHalf, bool keyboardActivated) : base(true) { // Remember incoming state _redirector = redirector; _ribbon = ribbon; _rectAppButtonTopHalf = rectAppButtonTopHalf; _rectAppButtonBottomHalf = rectAppButtonBottomHalf; // Create the view manager instance with root element ViewManager = new ViewContextMenuManager(this, new ViewLayoutNull()); // Set the initial resolved palette to the appropriate setting if (palette != null) { SetPalette(palette); } else { SetPalette(KryptonManager.GetPaletteForMode(paletteMode)); } // Set of context menu columns _viewColumns = new ViewLayoutStack(true); // Create provider instance _provider = new AppButtonMenuProvider((ViewContextMenuManager)ViewManager, _ribbon.RibbonAppButton.AppButtonMenuItems, _viewColumns, palette, paletteMode, redirector, NeedPaintDelegate); _provider.Closing += new CancelEventHandler(OnProviderClosing); _provider.Close += new EventHandler <CloseReasonEventArgs>(OnProviderClose); _provider.Dispose += new EventHandler(OnProviderClose); CreateAppButtonBottom(); CreateButtonSpecView(); CreateContextMenuView(appButton); CreateRecentDocumentsView(); CreateInnerBacking(CreateInsideCanvas()); CreateOuterBacking(); CreateOutsideDocker(); CreateButtonManager(appButton); ViewManager.Root = _drawOutsideDocker; // With keyboard activate we select the first valid item if (keyboardActivated) { ((ViewContextMenuManager)ViewManager).KeyDown(); } }
/// <summary> /// Create view elements appropriate for the collection items. /// </summary> /// <param name="provider">Context menu information provider.</param> /// <param name="parent">Parent object.</param> /// <param name="columns">Collection of columns to create view inside.</param> /// <param name="standardStyle">Should the standard style be applied.</param> /// <param name="imageColumn">Should the image column be applied.</param> public void GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) { // Create the initial column ViewLayoutStack column = AddColumn(columns); // Process each item in the collection in turn foreach (KryptonContextMenuItemBase item in this.Where(static item => item.Visible))
/// <summary> /// Returns a view appropriate for this item based on the object it is inside. /// </summary> /// <param name="provider">Provider of context menu information.</param> /// <param name="parent">Owning object reference.</param> /// <param name="columns">Containing columns.</param> /// <param name="standardStyle">Draw items with standard or alternate style.</param> /// <param name="imageColumn">Draw an image background for the item images.</param> /// <returns>ViewBase that is the root of the view hierarchy being added.</returns> public override ViewBase GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) { // Add child items into columns of display views ViewLayoutStack itemsColumns = new(true); Items.GenerateView(provider, this, this, itemsColumns, StandardStyle, ImageColumn); return(itemsColumns); }
private void CreateRecentDocumentsView() { // Do we need to add the recent docs view? if (_ribbon.RibbonAppButton.AppButtonShowRecentDocs) { // Create a dummy vertical menu separator for separating recent documents from menu items KryptonContextMenuSeparator dummySep1 = new KryptonContextMenuSeparator { Horizontal = false }; _viewColumns.Add(new ViewDrawMenuSeparator(dummySep1, _provider.ProviderStateCommon.Separator)); _viewColumns.Add(new ViewLayoutSeparator(0, _ribbon.RibbonAppButton.AppButtonMinRecentSize.Height)); // Use a layout that draws the background color of the recent docs area ViewDrawRibbonAppMenuDocs recentDocsBack = new ViewDrawRibbonAppMenuDocs(_ribbon); _viewColumns.Add(recentDocsBack); // Stack the document entries vertically ViewLayoutStack documentStack = new ViewLayoutStack(false); recentDocsBack.Add(documentStack); // Use fixed width separator to enforce a minimum width to column documentStack.Add(new ViewLayoutSeparator(_ribbon.RibbonAppButton.AppButtonMinRecentSize.Width, 0)); // Add the recent document title documentStack.Add(new ViewDrawRibbonRecentDocs(_ribbon)); // Followed by a horizontal separator KryptonContextMenuSeparator dummySep2 = new KryptonContextMenuSeparator(); documentStack.Add(new ViewDrawMenuSeparator(dummySep2, _provider.ProviderStateCommon.Separator)); documentStack.Add(new ViewLayoutSeparator(2)); // Then generate an item per recent document entry int index = 1; foreach (KryptonRibbonRecentDoc recentDoc in _ribbon.RibbonAppButton.AppButtonRecentDocs) { documentStack.Add(new ViewDrawRibbonAppMenuRecentDec(_ribbon, _provider, recentDoc, _ribbon.RibbonAppButton.AppButtonMaxRecentSize.Width, NeedPaintDelegate, index++)); } // Add separator entry which is then used to fill remained space documentStack.Add(new ViewLayoutSeparator(1)); // Update provider with element to use as the fixed size for submenus _provider.FixedViewBase = recentDocsBack; } }
/// <summary> /// Initialize a new instance of the ViewLayoutMenuItemsPile class. /// </summary> /// <param name="provider">Provider of context menu values.</param> /// <param name="items">Reference to the owning collection.</param> /// <param name="standardStyle">Draw items with standard or alternate style.</param> /// <param name="imageColumn">Draw an image background for the item images.</param> public ViewLayoutMenuItemsPile(IContextMenuProvider provider, KryptonContextMenuItems items, bool standardStyle, bool imageColumn) { // Cache access to the highlight item palette _paletteItemHighlight = provider.ProviderStateCommon.ItemHighlight; // Create and place an image column inside a docker so it appears on the left side _imageColumn = new ViewDrawMenuImageColumn(items, provider.ProviderStateCommon.ItemImageColumn); ViewLayoutDocker imageDocker = new() { { _imageColumn, ViewDockStyle.Left } }; // Only show the image column when in a standard collection of items imageDocker.Visible = imageColumn; // Create a vertical stack that contains each individual menu item ItemStack = new ViewLayoutStack(false) { FillLastChild = false }; // Use a docker with the item stack as the fill ViewLayoutDocker stackDocker = new() { { ItemStack, ViewDockStyle.Fill } }; // Grab the padding for around the item stack Padding itemsPadding = _paletteItemHighlight.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.ContextMenuItemsCollection); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Left), ViewDockStyle.Left); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Right), ViewDockStyle.Right); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Top), ViewDockStyle.Top); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Bottom), ViewDockStyle.Bottom); // The background of the pile is the image column Add(imageDocker); // The foreground of the pile is the stack of menu items Add(stackDocker); }
/// <summary> /// Returns a view appropriate for this item based on the object it is inside. /// </summary> /// <param name="provider">Provider of context menu information.</param> /// <param name="parent">Owning object reference.</param> /// <param name="columns">Containing columns.</param> /// <param name="standardStyle">Draw items with standard or alternate style.</param> /// <param name="imageColumn">Draw an image background for the item images.</param> /// <returns>ViewBase that is the root of the view hierarchy being added.</returns> public override ViewBase GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) { if (Horizontal && (parent is KryptonContextMenuItemCollection)) { // Create a stack of horizontal items inside the item ViewLayoutDocker docker = new(); // Take up same space as the image column, so separator starts close to actual text ViewDrawContent imageContent = new(provider.ProviderStateCommon.ItemImage.Content, new FixedContentValue(null, null, null, Color.Empty), VisualOrientation.Top); ViewDrawMenuImageCanvas imageCanvas = new(provider.ProviderStateCommon.ItemImage.Back, provider.ProviderStateCommon.ItemImage.Border, 0, true) { imageContent }; docker.Add(new ViewLayoutCenter(imageCanvas), ViewDockStyle.Left); docker.Add(new ViewLayoutSeparator(1, 0), ViewDockStyle.Left); // Gap that matches left padding of text/extra text docker.Add(new ViewLayoutMenuSepGap(provider.ProviderStateCommon, standardStyle), ViewDockStyle.Left); // Separator Display ViewLayoutStack separatorStack = new(false) { new ViewLayoutSeparator(1, 1), new ViewDrawMenuSeparator(this, provider.ProviderStateCommon.Separator), new ViewLayoutSeparator(1, 1) }; docker.Add(separatorStack, ViewDockStyle.Fill); return(docker); } else { return(new ViewDrawMenuSeparator(this, provider.ProviderStateCommon.Separator)); } }
/// <summary> /// Initialize a new instance of the ContextMenuProvider class. /// </summary> /// <param name="provider">Original provider.</param> /// <param name="needPaintDelegate">Delegate for requesting paint changes.</param> /// <param name="viewManager">Reference to view manager.</param> /// <param name="viewColumns">Columns view element.</param> public ContextMenuProvider(IContextMenuProvider provider, ViewContextMenuManager viewManager, ViewLayoutStack viewColumns, NeedPaintHandler needPaintDelegate) { _parent = provider; ProviderEnabled = provider.ProviderEnabled; ProviderCanCloseMenu = provider.ProviderCanCloseMenu; ProviderViewManager = viewManager; ProviderViewColumns = viewColumns; ProviderStateCommon = provider.ProviderStateCommon; ProviderStateDisabled = provider.ProviderStateDisabled; ProviderStateNormal = provider.ProviderStateNormal; ProviderStateHighlight = provider.ProviderStateHighlight; ProviderStateChecked = provider.ProviderStateChecked; ProviderImages = provider.ProviderImages; ProviderPalette = provider.ProviderPalette; ProviderPaletteMode = provider.ProviderPaletteMode; ProviderRedirector = provider.ProviderRedirector; ProviderNeedPaintDelegate = needPaintDelegate; ProviderShowHorz = provider.ProviderShowHorz; ProviderShowVert = provider.ProviderShowVert; }
/// <summary> /// Initialize a new instance of the VisualContextMenu class. /// </summary> /// <param name="provider">Original source of provider details</param> /// <param name="items">Enabled state of the context menu.</param> /// <param name="keyboardActivated">Was the context menu activate by a keyboard action.</param> public VisualContextMenu(IContextMenuProvider provider, KryptonContextMenuCollection items, bool keyboardActivated) : base(true) { Redirector = provider.ProviderRedirector; // Create the view manager instance with root element ViewManager = new ViewContextMenuManager(this, new ViewLayoutNull()); // Set the initial resolved palette to the appropriate setting SetPalette(provider.ProviderPalette ?? KryptonManager.GetPaletteForMode(provider.ProviderPaletteMode)); // Set of context menu columns _viewColumns = new ViewLayoutStack(true); // Create provider instance _provider = new ContextMenuProvider(provider, (ViewContextMenuManager)ViewManager, _viewColumns, NeedPaintDelegate); _provider.Closing += OnProviderClosing; _provider.Close += OnProviderClose; _provider.Dispose += OnProviderClose; Construct(items, keyboardActivated); }
/// <summary> /// Returns a view appropriate for this item based on the object it is inside. /// </summary> /// <param name="provider">Provider of context menu information.</param> /// <param name="parent">Owning object reference.</param> /// <param name="columns">Containing columns.</param> /// <param name="standardStyle">Draw items with standard or alternate style.</param> /// <param name="imageColumn">Draw an image background for the item images.</param> /// <returns>ViewBase that is the root of the view hierarchy being added.</returns> public override ViewBase GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) => new ViewDrawMenuLinkLabel(provider, this);
/// <summary> /// Returns a view appropriate for this item based on the object it is inside. /// </summary> /// <param name="provider">Provider of context menu information.</param> /// <param name="parent">Owning object reference.</param> /// <param name="columns">Containing columns.</param> /// <param name="standardStyle">Draw items with standard or alternate style.</param> /// <param name="imageColumn">Draw an image background for the item images.</param> /// <returns>ViewBase that is the root of the view hierarchy being added.</returns> public override ViewBase GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) => new ViewDrawMenuHeading(this, provider.ProviderStateCommon.Heading);
public override ViewBase GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) { throw new NotImplementedException(); }
/// <summary> /// Returns a view appropriate for this item based on the object it is inside. /// </summary> /// <param name="provider">Provider of context menu information.</param> /// <param name="parent">Owning object reference.</param> /// <param name="columns">Containing columns.</param> /// <param name="standardStyle">Draw items with standard or alternate style.</param> /// <param name="imageColumn">Draw an image background for the item images.</param> /// <returns>ViewBase that is the root of the view hierarchy being added.</returns> public override ViewBase GenerateView(IContextMenuProvider provider, object parent, ViewLayoutStack columns, bool standardStyle, bool imageColumn) => new ViewLayoutMenuItemSelect(this, provider);
/// <summary> /// Initialize a new instance of the ViewDrawMonth class. /// </summary> /// <param name="calendar">Reference to calendar provider.</param> /// <param name="months">Reference to months instance.</param> /// <param name="redirector">Redirector for getting values.</param> /// <param name="needPaintDelegate">Delegate for requesting paint changes.</param> public ViewDrawMonth(IKryptonMonthCalendar calendar, ViewLayoutMonths months, PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) : base(false) { _calendar = calendar; _months = months; // Add a header for showing the month/year value _drawContent = new ViewDrawContent(_calendar.StateNormal.Header.Content, this, VisualOrientation.Top); _borderForced = new PaletteBorderInheritForced(_calendar.StateNormal.Header.Border); _borderForced.ForceBorderEdges(PaletteDrawBorders.None); _drawHeader = new ViewDrawDocker(_calendar.StateNormal.Header.Back, _borderForced, null) { { _drawContent, ViewDockStyle.Fill } }; Add(_drawHeader); // Create the left/right arrows for moving the months _arrowPrev = new ButtonSpecCalendar(this, PaletteButtonSpecStyle.Previous, RelativeEdgeAlign.Near); _arrowNext = new ButtonSpecCalendar(this, PaletteButtonSpecStyle.Next, RelativeEdgeAlign.Far); _arrowPrev.Click += OnPrevMonth; _arrowNext.Click += OnNextMonth; _buttonSpecs = new CalendarButtonSpecCollection(this) { _arrowPrev, _arrowNext }; // Using a button spec manager to add the buttons to the header _buttonManager = new ButtonSpecManagerDraw(_calendar.CalendarControl, redirector, null, _buttonSpecs, new[] { _drawHeader }, new IPaletteMetric[] { _calendar.StateCommon }, new[] { PaletteMetricInt.HeaderButtonEdgeInsetCalendar }, new[] { PaletteMetricPadding.None }, _calendar.GetToolStripDelegate, needPaintDelegate); // Create stacks for holding display items ViewLayoutStack namesStack = new(true); ViewLayoutStack weeksStack = new(true); ViewLayoutStack daysStack = new(false); _numberStack = new ViewLayoutStack(false); weeksStack.Add(_numberStack); weeksStack.Add(daysStack); // Add day names _drawMonthDayNames = new ViewDrawMonthDayNames(_calendar, _months); _drawWeekCorner = new ViewLayoutWeekCorner(_calendar, _months, _calendar.StateNormal.Header.Border); namesStack.Add(_drawWeekCorner); namesStack.Add(_drawMonthDayNames); Add(namesStack); Add(weeksStack); // Add border between week numbers and days area _borderEdgeRedirect = new PaletteBorderEdgeRedirect(_calendar.StateNormal.Header.Border, null); _borderEdge = new PaletteBorderEdge(_borderEdgeRedirect, null); _drawBorderEdge = new ViewDrawBorderEdge(_borderEdge, Orientation.Vertical); _drawWeekNumbers = new ViewDrawWeekNumbers(_calendar, _months); ViewLayoutDocker borderLeftDock = new() { { _drawWeekNumbers, ViewDockStyle.Left }, { new ViewLayoutSeparator(0, 4), ViewDockStyle.Top },
public KryptonListView() { SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor // Cannot get thi sto work (Code removed)!! | ControlStyles.EnableNotifyMessage , true); base.OwnerDraw = true; // We need to repaint entire control whenever resized SetStyle(ControlStyles.ResizeRedraw, true); // Yes, we want to be drawn double buffered by default DoubleBuffered = true; // Default fields _alwaysActive = true; _style = ButtonStyle.ListItem; Padding = new Padding(1); base.BorderStyle = System.Windows.Forms.BorderStyle.None; // We need to create and cache a device context compatible with the display _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); // Set the palette and renderer to the defaults as specified by the manager Redirector = new PaletteRedirect(null); CacheNewPalette(KryptonManager.CurrentGlobalPalette); KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; NeedPaintDelegate = OnNeedPaint; // Create the palette storage Images = new CheckBoxImages(NeedPaintDelegate); _paletteCheckBoxImages = new PaletteRedirectCheckBox(Redirector, Images); StateCommon = new PaletteListStateRedirect(Redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, NeedPaintDelegate); OverrideFocus = new PaletteListItemTripleRedirect(Redirector, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaintDelegate); StateDisabled = new PaletteListState(StateCommon, NeedPaintDelegate); StateActive = new PaletteDouble(StateCommon, NeedPaintDelegate); StateNormal = new PaletteListState(StateCommon, NeedPaintDelegate); StateTracking = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StatePressed = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StateCheckedNormal = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StateCheckedTracking = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StateCheckedPressed = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); // Create manager and view for drawing the background ViewDrawPanel = new ViewDrawPanel(StateNormal.Back); // Create the override handling classes _overrideNormal = new PaletteTripleOverride(OverrideFocus.Item, StateNormal.Item, PaletteState.FocusOverride); _overrideTracking = new PaletteTripleOverride(OverrideFocus.Item, StateTracking.Item, PaletteState.FocusOverride); _overridePressed = new PaletteTripleOverride(OverrideFocus.Item, StatePressed.Item, PaletteState.FocusOverride); _overrideCheckedNormal = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedNormal.Item, PaletteState.FocusOverride); _overrideCheckedTracking = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedTracking.Item, PaletteState.FocusOverride); _overrideCheckedPressed = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedPressed.Item, PaletteState.FocusOverride); // Create the check box image drawer and place inside element so it is always centered _drawCheckBox = new ViewDrawCheckBox(_paletteCheckBoxImages); _layoutCheckBox = new ViewLayoutCenter { _drawCheckBox }; _layoutCheckBoxAfter = new ViewLayoutSeparator(3, 0); _layoutCheckBoxStack = new ViewLayoutStack(true) { _layoutCheckBox, _layoutCheckBoxAfter }; // Stack used to layout the location of the node image _layoutImage = new ViewLayoutSeparator(0, 0); _layoutImageAfter = new ViewLayoutSeparator(3, 0); _layoutImageCenter = new ViewLayoutCenter(_layoutImage); _layoutImageStack = new ViewLayoutStack(true) { _layoutImageCenter, _layoutImageAfter }; _layoutImageState = new ViewLayoutSeparator(16, 16); _layoutImageCenterState = new ViewLayoutCenter(_layoutImageState); // Create the draw element for owner drawing individual items _contentValues = new ShortTextValue(); _drawButton = new ViewDrawButton(StateDisabled.Item, _overrideNormal, _overrideTracking, _overridePressed, _overrideCheckedNormal, _overrideCheckedTracking, _overrideCheckedPressed, new PaletteMetricRedirect(Redirector), _contentValues, VisualOrientation.Top, false); // Place check box on the left and the label in the remainder _layoutDockerTile = new ViewLayoutDocker { { _layoutImageStack, ViewDockStyle.Left }, { _layoutImageCenterState, ViewDockStyle.Left }, { _layoutCheckBoxStack, ViewDockStyle.Left }, { _drawButton, ViewDockStyle.Fill } }; _layoutDockerSmall = new ViewLayoutDocker { { _drawButton, ViewDockStyle.Left }, { _layoutImageStack, ViewDockStyle.Left }, { _layoutImageCenterState, ViewDockStyle.Left }, { _layoutCheckBoxStack, ViewDockStyle.Left } }; // Place check box on the left and the text to match the width _layoutDockerCheckLarge = new ViewLayoutDocker { { _layoutImageStack, ViewDockStyle.Left }, { _layoutImageCenterState, ViewDockStyle.Left }, { _layoutCheckBoxStack, ViewDockStyle.Left }, { _drawButton, ViewDockStyle.Bottom } }; // Create the element that fills the remainder space and remembers fill rectangle _layoutFill = new ViewLayoutFill(this) { DisplayPadding = new Padding(1) }; // Create inner view for placing inside the drawing docker _drawDockerInner = new ViewLayoutDocker { { _layoutFill, ViewDockStyle.Fill } }; // Create view for the control border and background _drawDockerOuter = new ViewDrawDocker(StateNormal.Back, StateNormal.Border) { { _drawDockerInner, ViewDockStyle.Fill } }; // Create the view manager instance ViewManager = new ViewManager(this, _drawDockerOuter); // We need to create and cache a device context compatible with the display _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); StateCommon.Item.Content.ShortText.MultiLine = InheritBool.True; StateCommon.Item.Content.ShortText.MultiLineH = PaletteRelativeAlign.Center; StateCommon.Item.Content.ShortText.TextH = PaletteRelativeAlign.Center; }