/// <summary> /// Initialize a new instance of the ContextMenuProvider class. /// </summary> /// <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="stateCommon">State used to provide common palette values.</param> /// <param name="stateNormal">State used to provide normal palette values.</param> /// <param name="stateDisabled">State used to provide disabled palette values.</param> /// <param name="stateHighlight">State used to provide highlight palette values.</param> /// <param name="stateChecked">State used to provide checked palette values.</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(ViewContextMenuManager viewManager, ViewLayoutStack viewColumns, IPalette palette, PaletteMode paletteMode, PaletteContextMenuRedirect stateCommon, PaletteContextMenuItemState stateDisabled, PaletteContextMenuItemState stateNormal, PaletteContextMenuItemStateHighlight stateHighlight, PaletteContextMenuItemStateChecked stateChecked, PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, NeedPaintHandler needPaintDelegate, bool enabled) { _showHorz = KryptonContextMenuPositionH.Left; _showVert = KryptonContextMenuPositionV.Below; _enabled = enabled; _viewManager = viewManager; _viewColumns = viewColumns; _stateCommon = stateCommon; _stateDisabled = stateDisabled; _stateNormal = stateNormal; _stateHighlight = stateHighlight; _stateChecked = stateChecked; _redirectorImages = redirectorImages; _palette = palette; _paletteMode = paletteMode; _redirector = redirector; _needPaintDelegate = needPaintDelegate; }
/// <summary> /// Initialize a new instance of the KryptonPaletteContextMenu class. /// </summary> /// <param name="redirect">Redirector to inherit values from.</param> /// <param name="needPaint">Delegate for notifying paint requests.</param> internal KryptonPaletteContextMenu(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects _stateCommon = new PaletteContextMenuRedirect(redirect, needPaint); _stateNormal = new PaletteContextMenuItemState(_stateCommon); _stateDisabled = new PaletteContextMenuItemState(_stateCommon); _stateHighlight = new PaletteContextMenuItemStateHighlight(_stateCommon); _stateChecked = new PaletteContextMenuItemStateChecked(_stateCommon); }
/// <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; _enabled = provider.ProviderEnabled; _canCloseMenu = provider.ProviderCanCloseMenu; _viewManager = viewManager; _viewColumns = viewColumns; _stateCommon = provider.ProviderStateCommon; _stateDisabled = provider.ProviderStateDisabled; _stateNormal = provider.ProviderStateNormal; _stateHighlight = provider.ProviderStateHighlight; _stateChecked = provider.ProviderStateChecked; _redirectorImages = provider.ProviderImages; _palette = provider.ProviderPalette; _paletteMode = provider.ProviderPaletteMode; _redirector = provider.ProviderRedirector; _needPaintDelegate = needPaintDelegate; _showHorz = provider.ProviderShowHorz; _showVert = provider.ProviderShowVert; }
/// <summary> /// Initialize a new instance of the KryptonContextMenu class. /// </summary> public KryptonContextMenu() { // Setup the need paint delegate _needPaintDelegate = new NeedPaintHandler(OnNeedPaint); // Set default settings _localPalette = null; _paletteMode = PaletteMode.Global; _images = new ContextMenuImages(_needPaintDelegate); _redirector = new PaletteRedirect(null); _redirectorImages = new PaletteRedirectContextMenu(_redirector, _images); _enabled = true; // Create the palette storage _stateCommon = new PaletteContextMenuRedirect(_redirector, _needPaintDelegate); _stateNormal = new PaletteContextMenuItemState(_stateCommon); _stateDisabled = new PaletteContextMenuItemState(_stateCommon); _stateHighlight = new PaletteContextMenuItemStateHighlight(_stateCommon); _stateChecked = new PaletteContextMenuItemStateChecked(_stateCommon); // Create the top level collection for menu items _items = new KryptonContextMenuCollection(); }
/// <summary> /// Initialize a new instance of the KryptonContextMenuItem class. /// </summary> /// <param name="initialText">Initial text string.</param> /// <param name="initialImage">Initial image.</param> /// <param name="clickHandler">Click handler.</param> /// <param name="shortcut">Shortcut key combination.</param> public KryptonContextMenuItem(string initialText, Image initialImage, EventHandler clickHandler, Keys shortcut) { // Initial values _text = initialText; _image = initialImage; // Initial click handler if (clickHandler != null) { Click += clickHandler; } // Default fields _enabled = true; _autoClose = true; _splitSubMenu = false; _checkOnClick = false; _showShortcutKeys = true; _largeKryptonCommandImage = false; _extraText = string.Empty; _imageTransparentColor = Color.Empty; _shortcutKeys = shortcut; _shortcutKeyDisplayString = string.Empty; _checkState = CheckState.Unchecked; _items = new KryptonContextMenuCollection(); // Create the common storage for palette override values _stateRedirect = new PaletteContextMenuItemStateRedirect(); _stateNormal = new PaletteContextMenuItemState(_stateRedirect); _stateDisabled = new PaletteContextMenuItemState(_stateRedirect); _stateHighlight = new PaletteContextMenuItemStateHighlight(_stateRedirect); _stateChecked = new PaletteContextMenuItemStateChecked(_stateRedirect); }
/// <summary> /// Initialize a new instance of the ViewDrawMenuItem class. /// </summary> /// <param name="provider">Provider of context menu information.</param> /// <param name="menuItem">Menu item definition.</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> public ViewDrawMenuItem(IContextMenuProvider provider, KryptonContextMenuItem menuItem, ViewLayoutStack columns, bool standardStyle, bool imageColumn) : base(menuItem.StateNormal.ItemHighlight.Back, menuItem.StateNormal.ItemHighlight.Border, menuItem.StateNormal.ItemHighlight, PaletteMetricPadding.ContextMenuItemHighlight, VisualOrientation.Top) { // Remember values _provider = provider; _menuItem = menuItem; _imageColumn = imageColumn; _standardStyle = standardStyle; // Give the item object the redirector to use when inheriting values _menuItem.SetPaletteRedirect(provider); // Create a stack of horizontal items inside the item ViewLayoutDocker docker = new ViewLayoutDocker(); // Decide on the enabled state of the display _itemEnabled = provider.ProviderEnabled && ResolveEnabled; PaletteContextMenuItemState menuItemState = (_itemEnabled ? _menuItem.StateNormal : _menuItem.StateDisabled); // Calculate the image to show inside in the image column Image itemColumnImage = ResolveImage; Color itemImageTransparent = ResolveImageTransparentColor; // If no image found then... if (itemColumnImage != null) { // Ensure we have a fixed size if we are showing an image column if (_imageColumn) { itemColumnImage = _empty16x16; itemImageTransparent = Color.Magenta; } switch (ResolveCheckState) { case CheckState.Checked: itemColumnImage = provider.ProviderImages.GetContextMenuCheckedImage(); itemImageTransparent = Color.Empty; break; case CheckState.Indeterminate: itemColumnImage = provider.ProviderImages.GetContextMenuIndeterminateImage(); itemImageTransparent = Color.Empty; break; } } // Column Image PaletteTripleJustImage justImage = (ResolveChecked ? _menuItem.StateChecked.ItemImage : menuItemState.ItemImage); _fixedImage = new FixedContentValue(null, null, itemColumnImage, itemImageTransparent); _imageContent = new ViewDrawContent(justImage.Content, _fixedImage, VisualOrientation.Top); _imageCanvas = new ViewDrawMenuImageCanvas(justImage.Back, justImage.Border, 0, false); _imageCanvas.Add(_imageContent); docker.Add(new ViewLayoutCenter(_imageCanvas), ViewDockStyle.Left); _imageContent.Enabled = _itemEnabled; // Text/Extra Text PaletteContentJustText menuItemStyle = (standardStyle ? menuItemState.ItemTextStandard : menuItemState.ItemTextAlternate); _fixedTextExtraText = new FixedContentValue(ResolveText, ResolveExtraText, null, Color.Empty); _textContent = new ViewDrawMenuItemContent(menuItemStyle, _fixedTextExtraText, 1); docker.Add(_textContent, ViewDockStyle.Fill); _textContent.Enabled = _itemEnabled; // Shortcut if (_menuItem.ShowShortcutKeys) { string shortcutString = _menuItem.ShortcutKeyDisplayString; if (string.IsNullOrEmpty(shortcutString)) { shortcutString = (_menuItem.ShortcutKeys != Keys.None) ? new KeysConverter().ConvertToString(_menuItem.ShortcutKeys) : string.Empty; } if (shortcutString.Length > 0) { _shortcutContent = new ViewDrawMenuItemContent(menuItemState.ItemShortcutText, new FixedContentValue(shortcutString, null, null, Color.Empty), 2); docker.Add(_shortcutContent, ViewDockStyle.Right); _shortcutContent.Enabled = _itemEnabled; } } // Add split item separator _splitSeparator = new ViewDrawMenuSeparator(menuItemState.ItemSplit); docker.Add(_splitSeparator, ViewDockStyle.Right); _splitSeparator.Enabled = _itemEnabled; _splitSeparator.Draw = (_menuItem.Items.Count > 0) && _menuItem.SplitSubMenu; // SubMenu Indicator _hasSubMenu = (_menuItem.Items.Count > 0); _subMenuContent = new ViewDrawMenuItemContent(menuItemState.ItemImage.Content, new FixedContentValue(null, null, (!_hasSubMenu ? _empty16x16 : provider.ProviderImages.GetContextMenuSubMenuImage()), (_menuItem.Items.Count == 0 ? Color.Magenta : Color.Empty)), 3); docker.Add(new ViewLayoutCenter(_subMenuContent), ViewDockStyle.Right); _subMenuContent.Enabled = _itemEnabled; Add(docker); // Add a controller for handing mouse and keyboard events MenuItemController mic = new MenuItemController(provider.ProviderViewManager, this, provider.ProviderNeedPaintDelegate); MouseController = mic; KeyController = mic; // Want to know when a property changes whilst displayed _menuItem.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChanged); // We need to know if a property of the command changes if (_menuItem.KryptonCommand != null) { _cachedCommand = _menuItem.KryptonCommand; _menuItem.KryptonCommand.PropertyChanged += new PropertyChangedEventHandler(OnCommandPropertyChanged); } }
/// <summary> /// Discover the preferred size of the element. /// </summary> /// <param name="context">Layout context.</param> public override Size GetPreferredSize(ViewLayoutContext context) { Debug.Assert(context != null); // Always update to the latest correct check state if (_imageCanvas != null) { if (ResolveChecked) { _imageCanvas.ElementState = PaletteState.CheckedNormal; _imageCanvas.Enabled = ResolveEnabled; } else { _imageCanvas.ElementState = PaletteState.Normal; _imageCanvas.Enabled = true; } } PaletteDouble splitPalette; // Make sure we are using the correct palette for state switch (State) { default: case PaletteState.Normal: SetPalettes(_menuItem.StateNormal.ItemHighlight.Back, _menuItem.StateNormal.ItemHighlight.Border, _menuItem.StateNormal.ItemHighlight); splitPalette = _menuItem.StateNormal.ItemSplit; break; case PaletteState.Disabled: SetPalettes(_menuItem.StateDisabled.ItemHighlight.Back, _menuItem.StateDisabled.ItemHighlight.Border, _menuItem.StateDisabled.ItemHighlight); splitPalette = _menuItem.StateDisabled.ItemSplit; break; case PaletteState.Tracking: SetPalettes(_menuItem.StateHighlight.ItemHighlight.Back, _menuItem.StateHighlight.ItemHighlight.Border, _menuItem.StateHighlight.ItemHighlight); splitPalette = _menuItem.StateHighlight.ItemSplit; break; } // Validate incoming reference if (context == null) { throw new ArgumentNullException("context"); } // If we have image display if (_fixedImage != null) { Image itemColumnImage = ResolveImage; Color itemImageTransparent = ResolveImageTransparentColor; // If no image found then... if (itemColumnImage == null) { // Ensure we have a fixed size if we are showing an image column if (_imageColumn) { itemColumnImage = _empty16x16; itemImageTransparent = Color.Magenta; } switch (ResolveCheckState) { case CheckState.Checked: itemColumnImage = _provider.ProviderImages.GetContextMenuCheckedImage(); itemImageTransparent = Color.Empty; break; case CheckState.Indeterminate: itemColumnImage = _provider.ProviderImages.GetContextMenuIndeterminateImage(); itemImageTransparent = Color.Empty; break; } } // Decide on the enabled state of the display _itemEnabled = _provider.ProviderEnabled && ResolveEnabled; PaletteContextMenuItemState menuItemState = (_itemEnabled ? _menuItem.StateNormal : _menuItem.StateDisabled); // Update palettes based on Checked state PaletteTripleJustImage justImage = (ResolveChecked ? _menuItem.StateChecked.ItemImage : menuItemState.ItemImage); if (_imageCanvas != null) { _imageCanvas.SetPalettes(justImage.Back, justImage.Border); } // Update the Enabled state _imageContent.SetPalette(justImage.Content); _imageContent.Enabled = _itemEnabled; _textContent.Enabled = _itemEnabled; _splitSeparator.Enabled = _itemEnabled; _subMenuContent.Enabled = _itemEnabled; if (_shortcutContent != null) { _shortcutContent.Enabled = _itemEnabled; } // Update the Text/ExtraText _fixedTextExtraText.ShortText = ResolveText; _fixedTextExtraText.LongText = ResolveExtraText; // Update the Image _fixedImage.Image = itemColumnImage; _fixedImage.ImageTransparentColor = itemImageTransparent; } if (_splitSeparator != null) { _splitSeparator.SetPalettes(splitPalette.Back, splitPalette.Border); } return(base.GetPreferredSize(context)); }