/// <summary> /// Generates the Click event. /// </summary> /// <param name="e">An EventArgs containing the event data.</param> protected void GenerateClick(EventArgs e) { Click?.Invoke(this, e); // If we have an attached command then execute it KryptonCommand?.PerformExecute(); }
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case "Text": case "ExtraText": case "Image": case "ImageTransparentColor": case "Enabled": case "Checked": // Update to show new state _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(true)); break; case "KryptonCommand": // Unhook from any existing command if (_cachedCommand != null) { _cachedCommand.PropertyChanged -= OnCommandPropertyChanged; } // Hook into the new command _cachedCommand = KryptonContextMenuCheckButton.KryptonCommand; if (_cachedCommand != null) { _cachedCommand.PropertyChanged += OnCommandPropertyChanged; } // Update to show new state _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(true)); break; } }
/// <summary> /// Raises the LinkClicked event. /// </summary> /// <param name="e">An EventArgs containing the event data.</param> protected virtual void OnLinkClicked(LinkClickedEventArgs e) { LinkClicked?.Invoke(this, e); // If we have an attached command then execute it KryptonCommand?.PerformExecute(); }
/// <summary> /// Initialize a new instance of the ViewDrawMenuLinkLabel class. /// </summary> /// <param name="provider">Reference to provider.</param> /// <param name="linkLabel">Reference to owning link label entry.</param> public ViewDrawMenuLinkLabel(IContextMenuProvider provider, KryptonContextMenuLinkLabel linkLabel) { _provider = provider; _linkLabel = linkLabel; // Create fixed storage of the content values _contentValues = new FixedContentValue(linkLabel.Text, linkLabel.ExtraText, linkLabel.Image, linkLabel.ImageTransparentColor); // Decide on the enabled state of the display _itemEnabled = provider.ProviderEnabled; // Give the heading object the redirector to use when inheriting values linkLabel.SetPaletteRedirect(provider.ProviderRedirector); // Create the content for the actual heading text/image _drawContent = new ViewDrawContent(linkLabel.OverrideFocusNotVisited, _contentValues, VisualOrientation.Top); _drawContent.UseMnemonic = true; _drawContent.Enabled = _itemEnabled; // Place label link in the center of the area but inside some separator to add spacing _innerDocker = new ViewLayoutDocker(); _innerDocker.Add(_drawContent, ViewDockStyle.Fill); _innerDocker.Add(new ViewLayoutSeparator(1), ViewDockStyle.Right); _innerDocker.Add(new ViewLayoutSeparator(1), 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 link label controller MenuLinkLabelController mllc = new MenuLinkLabelController(provider.ProviderViewManager, _drawContent, this, provider.ProviderNeedPaintDelegate); mllc.Click += new EventHandler(OnClick); _drawContent.MouseController = mllc; _drawContent.KeyController = mllc; // Add docker as the composite content Add(_outerDocker); // Want to know when a property changes whilst displayed _linkLabel.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChanged); // We need to know if a property of the command changes if (_linkLabel.KryptonCommand != null) { _cachedCommand = _linkLabel.KryptonCommand; _linkLabel.KryptonCommand.PropertyChanged += new PropertyChangedEventHandler(OnCommandPropertyChanged); } }
/// <summary> /// Raises the Click event. /// </summary> /// <param name="e">An EventArgs containing the event data.</param> protected virtual void OnClick(EventArgs e) { // Only if associated view is enabled do we perform the click if (GetViewEnabled()) { Click?.Invoke(this, e); // If we have an attached command then execute it KryptonCommand?.PerformExecute(); } }
/// <summary> /// Raises the LinkClicked event. /// </summary> /// <param name="e">An EventArgs containing the event data.</param> protected virtual void OnLinkClicked(LinkClickedEventArgs e) { if (LinkClicked != null) { LinkClicked(this, e); } // If we have an attached command then execute it if (KryptonCommand != null) { KryptonCommand.PerformExecute(); } }
/// <summary> /// Generates the Click event. /// </summary> /// <param name="e">An EventArgs containing the event data.</param> protected void GenerateClick(EventArgs e) { if (Click != null) { Click(this, e); } // If we have an attached command then execute it if (KryptonCommand != null) { KryptonCommand.PerformExecute(); } }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing) { // Unhook from events KryptonContextMenuCheckButton.PropertyChanged -= OnPropertyChanged; if (_cachedCommand != null) { _cachedCommand.PropertyChanged -= OnCommandPropertyChanged; _cachedCommand = null; } } base.Dispose(disposing); }
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing) { // Unhook from events _checkButton.PropertyChanged -= new PropertyChangedEventHandler(OnPropertyChanged); if (_cachedCommand != null) { _cachedCommand.PropertyChanged -= new PropertyChangedEventHandler(OnCommandPropertyChanged); _cachedCommand = null; } } base.Dispose(disposing); }
/// <summary> /// Raises the Click event. /// </summary> /// <param name="e">An EventArgs containing the event data.</param> protected virtual void OnClick(EventArgs e) { // Only if associated view is enabled do we perform the click if (GetViewEnabled()) { if (Click != null) { Click(this, e); } // If we have an attached command then execute it if (KryptonCommand != null) { KryptonCommand.PerformExecute(); } } }
/// <summary> /// Raises the Click event. /// </summary> /// <param name="e">An EventArgs that contains the event data.</param> protected override void OnClick(EventArgs e) { // Find the form this button is on Form owner = FindForm(); // If we find a valid owner if (owner != null) { // Update owner with our dialog result setting owner.DialogResult = DialogResult; } // Let base class fire standard event base.OnClick(e); // If we have an attached command then execute it KryptonCommand?.PerformExecute(); }
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case "Text": case "ExtraText": case "Enabled": case "Image": case "ImageTransparentColor": case "Checked": case "CheckState": case "ShortcutKeys": case "ShowShortcutKeys": case "LargeKryptonCommandImage": // Update to show new state _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(true)); break; case "KryptonCommand": // Unhook from any existing command if (_cachedCommand != null) { _cachedCommand.PropertyChanged -= new PropertyChangedEventHandler(OnCommandPropertyChanged); } // Hook into the new command _cachedCommand = _menuItem.KryptonCommand; if (_cachedCommand != null) { _cachedCommand.PropertyChanged += new PropertyChangedEventHandler(OnCommandPropertyChanged); } // Update to show new state _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(true)); break; } }
/// <summary> /// Initialize a new instance of the KryptonCommandActionList class. /// </summary> /// <param name="owner">Designer that owns this action list instance.</param> public KryptonCommandActionList(KryptonCommandDesigner owner) : base(owner.Component) { // Remember the panel instance _command = owner.Component as KryptonCommand; }
/// <summary> /// Initialize a new instance of the ViewDrawMenuCheckButton class. /// </summary> /// <param name="provider">Reference to provider.</param> /// <param name="checkButton">Reference to owning check button entry.</param> public ViewDrawMenuCheckButton(IContextMenuProvider provider, KryptonContextMenuCheckButton checkButton) { _provider = provider; KryptonContextMenuCheckButton = checkButton; // 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 KryptonContextMenuCheckButton.SetPaletteRedirect(provider.ProviderRedirector); // Create the view button instance ViewDrawButton = new ViewDrawButton(checkButton.OverrideDisabled, checkButton.OverrideNormal, checkButton.OverrideTracking, checkButton.OverridePressed, new PaletteMetricRedirect(provider.ProviderRedirector), _contentValues, VisualOrientation.Top, true); // Add the checked specific palettes to the existing view button ViewDrawButton.SetCheckedPalettes(checkButton.OverrideCheckedNormal, checkButton.OverrideCheckedTracking, checkButton.OverrideCheckedPressed); ViewDrawButton.Enabled = ItemEnabled; ViewDrawButton.Checked = ResolveChecked; // Place the check box on the left of the available space but inside separators _innerDocker = new ViewLayoutDocker { { ViewDrawButton, ViewDockStyle.Fill }, { new ViewLayoutSeparator(1), ViewDockStyle.Right }, { new ViewLayoutSeparator(1), 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 MenuCheckButtonController mcbc = new MenuCheckButtonController(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 KryptonContextMenuCheckButton.PropertyChanged += OnPropertyChanged; // We need to know if a property of the command changes if (KryptonContextMenuCheckButton.KryptonCommand != null) { _cachedCommand = KryptonContextMenuCheckButton.KryptonCommand; KryptonContextMenuCheckButton.KryptonCommand.PropertyChanged += OnCommandPropertyChanged; } }
/// <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; } }
/// <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; KryptonContextMenuItem = menuItem; _imageColumn = imageColumn; _standardStyle = standardStyle; // Give the item object the redirector to use when inheriting values KryptonContextMenuItem.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 ? KryptonContextMenuItem.StateNormal : KryptonContextMenuItem.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 ? KryptonContextMenuItem.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) { _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 (KryptonContextMenuItem.ShowShortcutKeys) { string shortcutString = KryptonContextMenuItem.ShortcutKeyDisplayString; if (string.IsNullOrEmpty(shortcutString)) { shortcutString = (KryptonContextMenuItem.ShortcutKeys != Keys.None) ? new KeysConverter().ConvertToString(KryptonContextMenuItem.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 = (KryptonContextMenuItem.Items.Count > 0) && KryptonContextMenuItem.SplitSubMenu; // SubMenu Indicator HasSubMenu = (KryptonContextMenuItem.Items.Count > 0); _subMenuContent = new ViewDrawMenuItemContent(menuItemState.ItemImage.Content, new FixedContentValue(null, null, (!HasSubMenu ? _empty16x16 : provider.ProviderImages.GetContextMenuSubMenuImage()), (KryptonContextMenuItem.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 KryptonContextMenuItem.PropertyChanged += OnPropertyChanged; // We need to know if a property of the command changes if (KryptonContextMenuItem.KryptonCommand != null) { _cachedCommand = KryptonContextMenuItem.KryptonCommand; KryptonContextMenuItem.KryptonCommand.PropertyChanged += OnCommandPropertyChanged; } }