// ********************************* // Message from Original Author: // // 2008 Jose Menendez Poo // Please give me credit if you use this code. It's all I ask. // Contact me for more info: menendezpoo@gmail.com // ********************************* // // Original project from http://ribbon.codeplex.com/ // Continue to support and maintain by http://officeribbon.codeplex.com/ using System.ComponentModel; using System.Drawing; namespace System.Windows.Forms { /// /// Large menu item with a description below the text /// public class RibbonDescriptionMenuItem : RibbonButton { #region Fields #endregion #region Ctor public RibbonDescriptionMenuItem() { DropDownArrowDirection = RibbonArrowDirection.Left; SetDropDownMargin(new Padding(10)); } /// /// Creates a new menu item with description /// /// Text of the menuitem public RibbonDescriptionMenuItem(string text) : this(null, text, null) { } /// /// Creates a new menu item with description /// /// Text of the menuitem /// Descripion of the menuitem public RibbonDescriptionMenuItem(string text, string description) : this(null, text, description) { } /// /// Creates a new menu item with description /// /// Image for the menuitem /// Text for the menuitem /// Description for the menuitem public RibbonDescriptionMenuItem(Image image, string text, string description) { Image = image; Text = text; Description = description; } #endregion #region Props /// /// Gets or sets the bounds of the description /// public Rectangle DescriptionBounds { get; set; } /// /// This property is not relevant for this class /// [Browsable(false)] public override Image LargeImage { get => base.Image; set => base.Image = value; } [DefaultValue(null)] [Browsable(true)] [Category("Appearance")] public override Image Image { get => base.Image; set { base.Image = value; SmallImage = value; } } /// /// This property is not relevant for this class /// [Browsable(false)] public override Image SmallImage { get => base.SmallImage; set => base.SmallImage = value; } /// /// Gets or sets the description of the button /// [DefaultValue(null)] public string Description { get; set; } #endregion #region Methods protected override void OnPaintText(RibbonElementPaintEventArgs e) { if (e.Mode == RibbonElementSizeMode.DropDown) { StringFormat sf = StringFormatFactory.NearCenter(); Owner.Renderer.OnRenderRibbonItemText(new RibbonTextEventArgs( Owner, e.Graphics, e.Clip, this, TextBounds, Text, Color.Empty, FontStyle.Bold, sf)); sf.Alignment = StringAlignment.Near; Owner.Renderer.OnRenderRibbonItemText(new RibbonTextEventArgs( Owner, e.Graphics, e.Clip, this, DescriptionBounds, Description, sf)); } else { base.OnPaintText(e); } } public override Size MeasureSize(object sender, RibbonElementMeasureSizeEventArgs e) { if (!Visible && !Owner.IsDesignMode()) { SetLastMeasuredSize(new Size(0, 0)); return LastMeasuredSize; } Size s = base.MeasureSize(sender, e); s.Height = 52; SetLastMeasuredSize(s); return s; } internal override Rectangle OnGetTextBounds(RibbonElementSizeMode sMode, Rectangle bounds) { Rectangle r = base.OnGetTextBounds(sMode, bounds); DescriptionBounds = r; r.Height = 20; DescriptionBounds = Rectangle.FromLTRB(DescriptionBounds.Left, r.Bottom, DescriptionBounds.Right, DescriptionBounds.Bottom); return r; } #endregion } }