diff --git a/Documents/Help/Changelog.md b/Documents/Help/Changelog.md index acd41bbf16..7c22f80c02 100644 --- a/Documents/Help/Changelog.md +++ b/Documents/Help/Changelog.md @@ -1,6 +1,8 @@ # Standard Toolkit - Changelog ## 2022-01-05 - Build 2201 - January 2022 +* Fixed [#511](https://github.com/Krypton-Suite/Standard-Toolkit/issues/511), KryptonRibbonGroupComboBox does not have tooltips +* Fixed [#382](https://github.com/Krypton-Suite/Standard-Toolkit/issues/382), RibbonGroupNumericUpDown does not have tooltips * Fixed [#453](https://github.com/Krypton-Suite/Standard-Toolkit/issues/453), KryptonDataGridView's cell cannot display multiple lines when DefaultCellStyle.WrapMode set true * Fixed [#499](https://github.com/Krypton-Suite/Standard-Toolkit/issues/499), `KDataGridView` Cell Borders * Fixed [#502](https://github.com/Krypton-Suite/Standard-Toolkit/issues/502),KNumericUpDowner, when told to display 1 decimal place, does not display a 0 when needed diff --git a/README.md b/README.md index ff4966209b..9b50e3c579 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,14 @@ Follow the links to see the different objects and layouts that this framework al +## Breaking Changes +There are list of changes that have occurred during the development of the V6.## version + +### Ribbon Tooltips +- https://github.com/Krypton-Suite/Standard-Toolkit/issues/382 +- https://github.com/Krypton-Suite/Standard-Toolkit/issues/511 +![][image_ref_tnqwpvc0]### Ribbon Tooltips + ======= ## Introduction @@ -133,3 +141,6 @@ The Krypton Workspace allows a document area to be created that the user can cus ### Krypton Docking The Krypton Docking set of components allow the user to drag and drop docking pages into new locations in order to customise the organisation of the application content. It allows this in a way similar to that of Visual Studio 2008/2010. Each docking area uses an instance of the Krypton Workspace allowing a wide range of options for organising and displaying pages. It integrates with the Krypton Toolkit architecture to ensure a consistent look and feel. + + +[image_ref_tnqwpvc0]: data:image/jpeg;base64,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 diff --git a/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs b/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs index f3ac1a1920..8ab7ebb9f6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs @@ -158,6 +158,12 @@ public interface IRibbonGroupItem /// Delegate for notifying changes in display. /// ViewBase derived instance. ViewBase CreateView(KryptonRibbon ribbon, NeedPaintHandler needPaint); + + ToolTipValues ToolTipValues + { + // Return base objects tooltip + get; + } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs index 645bb6450b..cf9decc72d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs @@ -101,10 +101,6 @@ public KryptonRibbonGroupButton() _itemSizeMax = GroupItemSize.Large; _itemSizeMin = GroupItemSize.Small; _itemSizeCurrent = GroupItemSize.Large; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; } #endregion @@ -353,55 +349,11 @@ public void ResetShortcutKeys() ShortcutKeys = Keys.None; } - /// - /// Gets and sets the tooltip label style for group button. - /// - [Category("Appearance")] - [Description("Tooltip style for the group button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. + /// Gets access to the Wrapped Controls Tooltips. /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; /// /// Gets and sets the context strip for showing when the button is pressed. @@ -541,8 +493,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupButton(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupButton(ribbon, this, needPaint); + } /// /// Generates a Click event for a button. @@ -839,17 +794,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs index 89c4a58012..64bfe3a93d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs @@ -99,10 +99,6 @@ public KryptonRibbonGroupCheckBox() _itemSizeMax = GroupItemSize.Large; _itemSizeMin = GroupItemSize.Small; _itemSizeCurrent = GroupItemSize.Large; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; } #endregion @@ -360,55 +356,11 @@ public void ResetShortcutKeys() ShortcutKeys = Keys.None; } + /// - /// Gets and sets the tooltip label style for group check box. + /// Gets access to the Wrapped Controls Tooltips. /// - [Category("Appearance")] - [Description("Tooltip style for the group check box.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; /// /// Gets and sets the associated KryptonCommand. @@ -508,8 +460,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupCheckBox(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupCheckBox(ribbon, this, needPaint); + } /// /// Generates a Click event for a check box. @@ -690,16 +645,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs index f6941664d9..3c3cc6e268 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs @@ -276,6 +276,11 @@ public override GroupItemSize ItemSizeCurrent // We always want 3 pixels space between previous item and us 3; + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => _toolTipValues; + /// /// Creates an appropriate view element for this item. /// @@ -284,8 +289,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewLayoutRibbonGroupCluster(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewLayoutRibbonGroupCluster(ribbon, this, needPaint); + } /// /// Gets the collection of ribbon group button cluster items. diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs index 5ace3bcb3e..1ed96146ab 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs @@ -97,10 +97,6 @@ public KryptonRibbonGroupClusterButton() _buttonType = GroupButtonType.Push; _contextMenuStrip = null; _kryptonContextMenu = null; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; } #endregion @@ -296,55 +292,11 @@ public void ResetShortcutKeys() ShortcutKeys = Keys.None; } + /// - /// Gets and sets the tooltip label style for group cluster button. + /// Gets access to the Wrapped Controls Tooltips. /// - [Category("Appearance")] - [Description("Tooltip style for the group cluster button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; /// /// Gets and sets the context strip for showing when the button is pressed. @@ -512,8 +464,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupClusterButton(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupClusterButton(ribbon, this, needPaint); + } /// /// Generates a Click event for a button. @@ -807,16 +762,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs index c53439a198..d6e4fdaf0e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs @@ -155,10 +155,6 @@ public KryptonRibbonGroupClusterColorButton() _itemSizeCurrent = GroupItemSize.Medium; _imageSmall = _defaultButtonImageSmall; _buttonType = GroupButtonType.Split; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; _maxRecentColors = 10; _recentColors = new List(); @@ -280,9 +276,9 @@ public string TextLine /// [Bindable(true)] [Localizable(true)] - [Category("Appearance")] - [Description("Ribbon group cluster color button key tip.")] - [DefaultValue("B")] + [Category(@"Appearance")] + [Description(@"Ribbon group cluster color button key tip.")] + [DefaultValue(@"B")] public string KeyTip { get => _keyTip; @@ -291,7 +287,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "B"; + value = @"B"; } _keyTip = value.ToUpper(); @@ -624,54 +620,9 @@ public void ResetShortcutKeys() } /// - /// Gets and sets the tooltip label style for group color cluster button. - /// - [Category("Appearance")] - [Description("Tooltip style for the group color cluster button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. + /// Gets access to the Wrapped Controls Tooltips. /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; /// /// Gets and sets the set of recent colors. @@ -824,8 +775,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupClusterColorButton(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupClusterColorButton(ribbon, this, needPaint); + } /// /// Generates a Click event for a button. @@ -1117,16 +1071,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs index 445f2d2357..12d153e5c0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs @@ -162,10 +162,6 @@ public KryptonRibbonGroupColorButton() _itemSizeMax = GroupItemSize.Large; _itemSizeMin = GroupItemSize.Small; _itemSizeCurrent = GroupItemSize.Large; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; _maxRecentColors = 10; _recentColors = new List(); @@ -696,54 +692,9 @@ public void ResetShortcutKeys() } /// - /// Gets and sets the tooltip label style for group color button. + /// Gets access to the Wrapped Controls Tooltips. /// - [Category("Appearance")] - [Description("Tooltip style for the group color button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; /// /// Gets and sets the set of recent colors. @@ -872,8 +823,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupColorButton(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupColorButton(ribbon, this, needPaint); + } /// /// Generates a Click event for a button. @@ -1173,16 +1127,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs index 616bf46f99..d89a268c22 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs @@ -584,6 +584,12 @@ public bool Sorted set => ComboBox.Sorted = value; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => ComboBox.ToolTipValues; + + /// /// Gets or sets the items in the KryptonComboBox. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs index 4281169c16..509616873d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs @@ -35,6 +35,7 @@ public KryptonRibbonGroupContainer() #endregion #region Public + /// /// Gets access to the parent group instance. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs index 19277800b4..83c6ff3079 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs @@ -121,13 +121,29 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "X"; + value = @"X"; } _keyTip = value.ToUpper(); } } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues + { + get + { + // TODO: This will not be here when the designer is performing it's actions ?? + if (CustomControl is VisualControlBase vcb) + return vcb.ToolTipValues; + // TODO: Should really pass these values into the `CustomControl` after it has been created ! + return _toolTipValues; + } + } + + /// /// Gets and sets the custom control for display inside ribbon element. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs index aebc596b11..0b0696f166 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs @@ -368,6 +368,11 @@ public KryptonContextMenu KryptonContextMenu set => DateTimePicker.KryptonContextMenu = value; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => DateTimePicker.ToolTipValues; + /// /// Gets and sets a value indicating if tooltips should be displayed for button specs. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs index 7e3a1f10d3..b03ea8ee6f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs @@ -469,6 +469,12 @@ public KryptonContextMenu KryptonContextMenu set => DomainUpDown.KryptonContextMenu = value; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => DomainUpDown.ToolTipValues; + + /// /// Gets and sets a value indicating if tooltips should be displayed for button specs. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs index cb77155600..b4c411b76e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs @@ -124,10 +124,6 @@ public KryptonRibbonGroupGallery() _imageLarge = _defaultButtonImageLarge; _textLine1 = "Gallery"; _textLine2 = string.Empty; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; // Create the actual text box control and set initial settings Gallery = new KryptonGallery @@ -462,56 +458,11 @@ public string TextLine2 } } } - - /// - /// Gets and sets the tooltip label style for group button. - /// - [Category("Appearance")] - [Description("Tooltip style for the group button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - /// - /// Gets and sets the image for the item ToolTip. + /// Gets access to the Wrapped Controls Tooltips. /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } /// /// Gets and sets the visible state of the group gallery. @@ -682,8 +633,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupGallery(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupGallery(ribbon, this, needPaint); + } /// /// Gets and sets the associated designer. @@ -717,16 +671,6 @@ internal void OnDesignTimeContextMenu(MouseEventArgs e) internal int InternalItemCount { get; set; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - internal override bool ProcessCmdKey(ref Message msg, Keys keyData) => false; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs index b68339f596..fdc9a828a7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs @@ -1,4 +1,5 @@ -#region BSD License + +#region BSD License /* * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) @@ -25,6 +26,7 @@ public abstract class KryptonRibbonGroupItem : Component, { #region Instance Fields private object _tag; + protected ToolTipValues _toolTipValues; #endregion @@ -32,11 +34,13 @@ public abstract class KryptonRibbonGroupItem : Component, /// /// Initialise a new instance of the KryptonRibbonGroupItem class. /// - public KryptonRibbonGroupItem() + protected KryptonRibbonGroupItem() { + // Do the Tooltip Magic + _toolTipValues = new ToolTipValues(null/*NeedPaintDelegate*/); // Must be replaced by appropriate call } - #endregion - + #endregion Identity + #region Public /// /// Gets access to the owning ribbon control. @@ -104,7 +108,6 @@ public KryptonRibbonGroupItem() // If the previous item is a group button cluster then we want 3 pixels previousItem is KryptonRibbonGroupCluster ? 3 : 1; - // By default we just want a single pixel gap /// /// Creates an appropriate view element for this item. /// @@ -140,7 +143,27 @@ private void ResetTag() { Tag = null; } - #endregion + + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + [Category("ToolTip")] + [Description("Control ToolTip Text")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public abstract ToolTipValues ToolTipValues + { + // Return base objects tooltip + get; + } + + private bool ShouldSerializeToolTipValues() => !ToolTipValues.IsDefault; + + /// + /// Resets the ToolTipValues property to its default value. + /// + public void ResetToolTipValues() => ToolTipValues.Reset(); + + #endregion#endregion #region Protected /// @@ -173,16 +196,6 @@ protected bool ChainVisible #region Internal internal abstract bool ProcessCmdKey(ref Message msg, Keys keyData); - internal virtual Image InternalToolTipImage => null; - - internal virtual LabelStyle InternalToolTipStyle => LabelStyle.SuperTip; - - internal virtual Color InternalToolTipImageTransparentColor => Color.Empty; - - internal virtual string InternalToolTipTitle => string.Empty; - - internal virtual string InternalToolTipBody => string.Empty; - #endregion #region IBindableComponent Members diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs index 55016e6c14..52770e462b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs @@ -71,10 +71,6 @@ public KryptonRibbonGroupLabel() _textLine1 = "Label"; _textLine2 = string.Empty; _itemSizeCurrent = GroupItemSize.Medium; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; // Create delegate fired by a change to one of the state palettes _needPaintDelegate = OnPaletteNeedPaint; @@ -269,54 +265,10 @@ public bool Enabled private bool ShouldSerializeStateDisabled() => !_stateDisabled.IsDefault; /// - /// Gets and sets the tooltip label style for group label. + /// Gets access to the Wrapped Controls Tooltips. /// - [Category("Appearance")] - [Description("Tooltip style for the group label.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor,", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } /// /// Gets and sets the associated KryptonCommand. @@ -400,8 +352,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupLabel(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupLabel(ribbon, this, needPaint); + } /// /// Internal design time property. @@ -463,16 +418,6 @@ internal void OnDesignTimeContextMenu(MouseEventArgs e) // A label never has any command keys to process false; - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs index ce0b29ffff..ef78f3afcc 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs @@ -423,6 +423,11 @@ public override GroupItemSize ItemSizeCurrent } } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => _toolTipValues; + /// /// Creates an appropriate view element for this item. /// @@ -431,8 +436,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewLayoutRibbonGroupLines(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewLayoutRibbonGroupLines(ribbon, this, needPaint); + } /// /// Gets the collection of ribbon group line items. diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs index b3cf6dc0a3..1add94b50f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs @@ -794,6 +794,11 @@ public KryptonContextMenu KryptonContextMenu set => MaskedTextBox.KryptonContextMenu = value; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => MaskedTextBox.ToolTipValues; + /// /// Gets and sets a value indicating if tooltips should be displayed for button specs. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs index 6dc866e867..3bf135cf4a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs @@ -122,14 +122,6 @@ public KryptonRibbonGroupNumericUpDown() TabStop = false }; - ToolTipImageTransparentColor = Color.Empty; - - ToolTipTitle = string.Empty; - - ToolTipBody = string.Empty; - - ToolTipStyle = LabelStyle.SuperTip; - // Hook into events to expose via this container NumericUpDown.ValueChanged += OnNumericUpDownValueChanged; NumericUpDown.GotFocus += OnNumericUpDownGotFocus; @@ -164,6 +156,12 @@ protected override void Dispose(bool disposing) #endregion #region Public + + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => NumericUpDown.ToolTipValues; + /// /// Gets access to the owning ribbon control. /// @@ -204,56 +202,6 @@ public void ResetShortcutKeys() ShortcutKeys = Keys.None; } - /// - /// Gets and sets the tooltip label style for group numeric up down button. - /// - [Category("Appearance")] - [Description("Tooltip style for the group numeric up down button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the numeric up down to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } - /// /// Access to the actual embedded KryptonNumericUpDown instance. /// @@ -761,15 +709,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs index 39fc9adcf1..48dea4807c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs @@ -88,10 +88,6 @@ public KryptonRibbonGroupRadioButton() _itemSizeMax = GroupItemSize.Large; _itemSizeMin = GroupItemSize.Small; _itemSizeCurrent = GroupItemSize.Large; - ToolTipImageTransparentColor = Color.Empty; - ToolTipTitle = string.Empty; - ToolTipBody = string.Empty; - ToolTipStyle = LabelStyle.SuperTip; } #endregion @@ -155,7 +151,7 @@ public string TextLine2 [Localizable(true)] [Category("Appearance")] [Description("Ribbon group radio button key tip.")] - [DefaultValue("R")] + [DefaultValue(@"R")] public string KeyTip { get => _keyTip; @@ -164,7 +160,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "R"; + value = @"R"; } _keyTip = value.ToUpper(); @@ -304,54 +300,9 @@ public void ResetShortcutKeys() } /// - /// Gets and sets the tooltip label style for group radio button. + /// Gets access to the Wrapped Controls Tooltips. /// - [Category("Appearance")] - [Description("Tooltip style for the group radio button.")] - [DefaultValue(typeof(LabelStyle), "SuperTip")] - public LabelStyle ToolTipStyle { get; set; } - - /// - /// Gets and sets the image for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Display image associated ToolTip.")] - [DefaultValue(null)] - [Localizable(true)] - public Image ToolTipImage { get; set; } - - /// - /// Gets and sets the color to draw as transparent in the ToolTipImage. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] - [Localizable(true)] - public Color ToolTipImageTransparentColor { get; set; } - - /// - /// Gets and sets the title text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Title text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipTitle { get; set; } - - /// - /// Gets and sets the body text for the item ToolTip. - /// - [Bindable(true)] - [Category("Appearance")] - [Description("Body text for use in associated ToolTip.")] - [Editor("System.ComponentModel.Design.MultilineStringEditor", typeof(UITypeEditor))] - [DefaultValue("")] - [Localizable(true)] - public string ToolTipBody { get; set; } + public override ToolTipValues ToolTipValues => _toolTipValues; /// /// Gets and sets the maximum allowed size of the item. @@ -421,8 +372,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupRadioButton(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupRadioButton(ribbon, this, needPaint); + } /// /// Generates a Click event for a check box. @@ -542,16 +496,6 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) return false; } - internal override LabelStyle InternalToolTipStyle => ToolTipStyle; - - internal override Image InternalToolTipImage => ToolTipImage; - - internal override Color InternalToolTipImageTransparentColor => ToolTipImageTransparentColor; - - internal override string InternalToolTipTitle => ToolTipTitle; - - internal override string InternalToolTipBody => ToolTipBody; - #endregion #region Implementation diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs index 612a73f082..688b7bae02 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs @@ -642,6 +642,11 @@ public bool ShortcutsEnabled set => RichTextBox.ShortcutsEnabled = value; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => RichTextBox.ToolTipValues; + /// /// Gets and sets a value indicating if tooltips should be displayed for button specs. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs index 38c99ce881..166133a7b9 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs @@ -134,6 +134,11 @@ public override GroupItemSize ItemSizeCurrent set { } } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => _toolTipValues; + /// /// Creates an appropriate view element for this item. /// @@ -142,8 +147,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewDrawRibbonGroupSeparator(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewDrawRibbonGroupSeparator(ribbon, this, needPaint); + } /// /// Internal design time properties. diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs index 08262fd01a..6a022a8741 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs @@ -619,6 +619,11 @@ public AutoCompleteSource AutoCompleteSource set => TextBox.AutoCompleteSource = value; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => TextBox.ToolTipValues; + /// /// Gets and sets a value indicating if tooltips should be displayed for button specs. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs index f8b03c42b6..b10e6e026f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs @@ -158,6 +158,11 @@ public override KryptonRibbon Ribbon [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public KryptonTrackBar TrackBar { get; private set; } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => TrackBar.ToolTipValues; + /// /// Gets and sets the key tip for the ribbon group track bar. /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs index 294f359f40..7998bb3bfa 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs @@ -441,6 +441,11 @@ public override GroupItemSize ItemSizeCurrent } } + /// + /// Gets access to the Wrapped Controls Tooltips. + /// + public override ToolTipValues ToolTipValues => _toolTipValues; + /// /// Creates an appropriate view element for this item. /// @@ -449,8 +454,11 @@ public override GroupItemSize ItemSizeCurrent /// ViewBase derived instance. [EditorBrowsable(EditorBrowsableState.Never)] public override ViewBase CreateView(KryptonRibbon ribbon, - NeedPaintHandler needPaint) => - new ViewLayoutRibbonGroupTriple(ribbon, this, needPaint); + NeedPaintHandler needPaint) + { + _toolTipValues.NeedPaint = needPaint; + return new ViewLayoutRibbonGroupTriple(ribbon, this, needPaint); + } /// /// Gets the collection of ribbon group triple items. diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/GroupItemToolTipToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/GroupItemToolTipToContent.cs deleted file mode 100644 index db4ed1c9c4..0000000000 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/GroupItemToolTipToContent.cs +++ /dev/null @@ -1,76 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2022. All rights reserved. - * - */ -#endregion - - -namespace Krypton.Ribbon -{ - /// - /// Map group item tooltip values to content values. - /// - internal class GroupItemToolTipToContent : IContentValues - { - #region Instance Fields - private readonly KryptonRibbonGroupItem _groupItem; - #endregion - - #region Identity - /// - /// Initialize a new instance of the GroupItemToolTipToContent class. - /// - /// Source ribbon group item. - public GroupItemToolTipToContent(KryptonRibbonGroupItem groupItem) - { - Debug.Assert(groupItem != null); - _groupItem = groupItem; - } - #endregion - - #region HasContent - /// - /// Gets a value indicating if the mapping produces any content. - /// - public bool HasContent => (GetImage(PaletteState.Normal) != null) || - !string.IsNullOrEmpty(GetShortText()) || - !string.IsNullOrEmpty(GetLongText()); - - #endregion - - #region IContentValues - /// - /// Gets the content image. - /// - /// The state for which the image is needed. - /// Image value. - public Image GetImage(PaletteState state) => _groupItem.InternalToolTipImage; - - /// - /// Gets the image color that should be transparent. - /// - /// The state for which the image is needed. - /// Color value. - public Color GetImageTransparentColor(PaletteState state) => _groupItem.InternalToolTipImageTransparentColor; - - /// - /// Gets the content short text. - /// - /// String value. - public string GetShortText() => _groupItem.InternalToolTipTitle; - - /// - /// Gets the content long text. - /// - /// String value. - public string GetLongText() => _groupItem.InternalToolTipBody; - - #endregion - } -} diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs index 488cb7378f..8eae59588c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs @@ -833,136 +833,57 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } break; default: - if (e.Target.Parent is ViewDrawRibbonGroupLabel viewElement2) { - // Cast to correct type + // Find the button spec associated with the tooltip request + ButtonSpec buttonSpec = ButtonSpecManager.ButtonSpecFromView(e.Target); - // Create a content that recovers values from a KryptonRibbonGroupItem - GroupItemToolTipToContent groupItemContent = new(viewElement2.GroupLabel); - - // Is there actually anything to show for the tooltip - if (groupItemContent.HasContent) + // If the tooltip is for a button spec + if (buttonSpec != null) { - sourceContent = groupItemContent; + // Are we allowed to show page related tooltips + if (_ribbon.AllowButtonSpecToolTips) + { + // Create a helper object to provide tooltip values + ButtonSpecToContent buttonSpecMapping = new(_ribbon.GetRedirector(), buttonSpec); + + // Is there actually anything to show for the tooltip + if (buttonSpecMapping.HasContent) + { + sourceContent = buttonSpecMapping; - // Grab the style from the group label settings - toolTipStyle = viewElement2.GroupLabel.ToolTipStyle; + // Grab the style from the button spec settings + toolTipStyle = buttonSpec.ToolTipStyle; - // Display below the bottom of the ribbon control - Rectangle ribbonScreenRect = _ribbon.ToolTipScreenRectangle; - screenRect.Y = ribbonScreenRect.Y; - screenRect.Height = ribbonScreenRect.Height; - screenRect.X = ribbonScreenRect.X + viewElement2.ClientLocation.X; - screenRect.Width = viewElement2.ClientWidth; + // Display below the mouse cursor + screenRect.Height += SystemInformation.CursorSize.Height / 3 * 2; + } + } } - } - else - { - switch (e.Target) + else { - case ViewDrawRibbonGroupButtonBackBorder viewElement3: - { - // Is the target is a button or cluster button - // Cast to correct type - - // Create a content that recovers values from a KryptonRibbonGroupItem - GroupItemToolTipToContent groupItemContent = new(viewElement3.GroupItem); - - // Is there actually anything to show for the tooltip - if (groupItemContent.HasContent) - { - sourceContent = groupItemContent; - - // Grab the style from the group button/group cluster button settings - toolTipStyle = viewElement3.GroupItem.InternalToolTipStyle; - - // Display below the bottom of the ribbon control - Rectangle ribbonScreenRect = _ribbon.ToolTipScreenRectangle; - screenRect.Y = ribbonScreenRect.Y; - screenRect.Height = ribbonScreenRect.Height; - screenRect.X = ribbonScreenRect.X + viewElement3.ClientLocation.X; - screenRect.Width = viewElement3.ClientWidth; - } - break; - } - case ViewLayoutRibbonCheckBox _: - { - // Cast to correct type - ViewDrawRibbonGroupCheckBox viewElement = (ViewDrawRibbonGroupCheckBox)e.Target.Parent; - - // Create a content that recovers values from a KryptonRibbonGroupItem - GroupItemToolTipToContent groupItemContent = new(viewElement.GroupCheckBox); - - // Is there actually anything to show for the tooltip - if (groupItemContent.HasContent) - { - sourceContent = groupItemContent; - - // Grab the style from the group check box cluster button settings - toolTipStyle = viewElement.GroupCheckBox.InternalToolTipStyle; - - // Display below the bottom of the ribbon control - Rectangle ribbonScreenRect = _ribbon.ToolTipScreenRectangle; - screenRect.Y = ribbonScreenRect.Y; - screenRect.Height = ribbonScreenRect.Height; - screenRect.X = ribbonScreenRect.X + viewElement.ClientLocation.X; - screenRect.Width = viewElement.ClientWidth; - } - break; - } - case ViewLayoutRibbonRadioButton _: - { - // Cast to correct type - ViewDrawRibbonGroupRadioButton viewElement = (ViewDrawRibbonGroupRadioButton)e.Target.Parent; - - // Create a content that recovers values from a KryptonRibbonGroupItem - GroupItemToolTipToContent groupItemContent = new(viewElement.GroupRadioButton); - - // Is there actually anything to show for the tooltip - if (groupItemContent.HasContent) - { - sourceContent = groupItemContent; - - // Grab the style from the group radio button button settings - toolTipStyle = viewElement.GroupRadioButton.InternalToolTipStyle; - - // Display below the bottom of the ribbon control - Rectangle ribbonScreenRect = _ribbon.ToolTipScreenRectangle; - screenRect.Y = ribbonScreenRect.Y; - screenRect.Height = ribbonScreenRect.Height; - screenRect.X = ribbonScreenRect.X + viewElement.ClientLocation.X; - screenRect.Width = viewElement.ClientWidth; - } - break; - } - default: - // Find the button spec associated with the tooltip request - ButtonSpec buttonSpec = ButtonSpecManager.ButtonSpecFromView(e.Target); + // Cast to correct type + if (e.Target.Parent is { Component: IRibbonGroupItem groupItem }) + { - // If the tooltip is for a button spec - if (buttonSpec != null) + // Is there actually anything to show for the tooltip + if (groupItem.ToolTipValues.EnableToolTips) { - // Are we allowed to show page related tooltips - if (_ribbon.AllowButtonSpecToolTips) - { - // Create a helper object to provide tooltip values - ButtonSpecToContent buttonSpecMapping = new(_ribbon.GetRedirector(), buttonSpec); - - // Is there actually anything to show for the tooltip - if (buttonSpecMapping.HasContent) - { - sourceContent = buttonSpecMapping; - - // Grab the style from the button spec settings - toolTipStyle = buttonSpec.ToolTipStyle; - - // Display below the mouse cursor - screenRect.Height += SystemInformation.CursorSize.Height / 3 * 2; - } - } + sourceContent = groupItem.ToolTipValues; + + // Grab the style from the group radio button button settings + toolTipStyle = groupItem.ToolTipValues.ToolTipStyle; + + // Display below the bottom of the ribbon control + Rectangle ribbonScreenRect = _ribbon.ToolTipScreenRectangle; + screenRect.Y = ribbonScreenRect.Y; + screenRect.Height = ribbonScreenRect.Height; + screenRect.X = ribbonScreenRect.X + e.Target.Parent.ClientLocation.X; + screenRect.Width = e.Target.Parent.ClientWidth; } - break; + + } } + } break; }