using System; using System.Collections; using System.ComponentModel; using System.Drawing; namespace DevComponents.DotNetBar { /// /// Represents a group RibbonTabItem objects are assigned to. /// [DesignTimeVisible(false), ToolboxItem(false), TypeConverterAttribute("DevComponents.DotNetBar.Design.RibbonTabItemGroupConverter, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")] public class RibbonTabItemGroup:Component { #region Private Variables & Constructor private ElementStyle m_Style=null; private string m_GroupTitle=""; private RibbonStrip m_ParentRibbonStrip=null; [EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ArrayList DisplayPositions=new ArrayList(); private eRibbonTabGroupColor m_Color = eRibbonTabGroupColor.Default; private string m_Name = ""; private string m_CustomColorName = ""; public RibbonTabItemGroup() { m_Style=new ElementStyle(); m_Style.StyleChanged+=new EventHandler(StyleChanged); } #endregion #region Internal Implementation /// /// Gets or sets the predefined color of the group. Color specified here applies to groups with Office 12 style only. It does not have /// any effect on other styles. Default value is eRibbonTabGroupColor.Default /// [Browsable(true), DefaultValue(eRibbonTabGroupColor.Default), Category("Appearance"), Description("Indicates predefined color of the group when Office 12 style is used.")] public eRibbonTabGroupColor Color { get { return m_Color; } set { if (m_Color != value) { m_Color = value; if (this.ParentRibbonStrip != null) this.ParentRibbonStrip.Invalidate(); } } } /// /// Gets or sets the custom color name. Name specified here must be represented by the coresponding object with the same name that is part /// of the Office2007ColorTable.RibbonTabGroupColors collection. See documentation for Office2007ColorTable.RibbonTabGroupColors for more information. /// If color table with specified name cannot be found default color will be used. Valid settings for this property override any /// setting to the Color property. /// [Browsable(true), DevCoBrowsable(false), DefaultValue(""), Category("Appearance"), Description("Indicates custom color table name for the button when Office 2007 style is used.")] public string CustomColorName { get { return m_CustomColorName; } set { m_CustomColorName = value; if (this.ParentRibbonStrip != null) this.ParentRibbonStrip.Invalidate(); } } /// /// Gets the style for tab group. /// [Browsable(false),Category("Background"),Description("Gets the style for tab group."),DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ElementStyle Style { get {return m_Style;} } /// /// Gets or sets title of the group that will be displayed when group is visually represented. /// [Browsable(true), DevCoBrowsable(true), DefaultValue(""), Localizable(true)] public string GroupTitle { get {return m_GroupTitle;} set { m_GroupTitle=value; if(this.DesignMode && m_ParentRibbonStrip!=null) { m_ParentRibbonStrip.RecalcLayout(); } } } private void StyleChanged(object sender, EventArgs e) { if(m_ParentRibbonStrip!=null) m_ParentRibbonStrip.Refresh(); } /// /// Gets or sets parent ribbon strip for this group. /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),Browsable(false)] internal RibbonStrip ParentRibbonStrip { get {return m_ParentRibbonStrip;} set { m_ParentRibbonStrip=value; if(m_ParentRibbonStrip!=null) m_Style.SetColorScheme(m_ParentRibbonStrip.ColorScheme); } } public override string ToString() { if(m_GroupTitle.Length>0) return m_GroupTitle; return base.ToString (); } /// /// Gets or sets whether RibbonTabItem objects that belong to this group are visible. Setting this property will /// show/hide all RibbonTabItem objects that are assigned to this group through RibbonTabItem.Group property. /// [Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool Visible { get { if(m_ParentRibbonStrip==null) return true; bool visible=false; foreach(BaseItem item in m_ParentRibbonStrip.Items) { if(item is RibbonTabItem) { RibbonTabItem tab=item as RibbonTabItem; if(tab.Group == this && tab.Visible) { visible=true; break; } } } return visible; } set { if(m_ParentRibbonStrip==null) return; foreach(BaseItem item in m_ParentRibbonStrip.Items) { if(item is RibbonTabItem) { RibbonTabItem tab=item as RibbonTabItem; if(tab.Group==this) tab.Visible=value; } } m_ParentRibbonStrip.RecalcLayout(); } } /// /// Gets whether any tab from this tab group is selected. /// [Browsable(false)] public bool IsTabFromGroupSelected { get { if(m_ParentRibbonStrip==null) return false; foreach(BaseItem item in m_ParentRibbonStrip.Items) { if(item is RibbonTabItem) { RibbonTabItem tab=item as RibbonTabItem; if (tab.Group == this && tab.Checked) return true; } } return false; } } /// /// Selected first tab that is part of this group. /// public void SelectFirstTab() { if (m_ParentRibbonStrip == null) return; foreach (BaseItem item in m_ParentRibbonStrip.Items) { if (item is RibbonTabItem) { RibbonTabItem tab = item as RibbonTabItem; if (tab.Group == this && tab.Visible) { tab.Checked = true; break; } } } } /// /// Gets or sets name of the group that can be used to identify item from the code. /// [Browsable(false), Category("Design"), Description("Indicates the name used to identify the group.")] public string Name { get { if (this.Site != null) m_Name = this.Site.Name; return m_Name; } set { if (this.Site != null) this.Site.Name = value; if (value == null) m_Name = ""; else m_Name = value; } } /// /// Gets an array of Rectangle objects that describe the visual position on the ribbon control of the group titles displayed. /// If tabs that belong to a tab group are not next to each other then there will be multiple rectangle returned as part of the array /// for each tab group that is apart. /// [Browsable(false)] public Rectangle[] TitleBounds { get { return (Rectangle[])DisplayPositions.ToArray(typeof(Rectangle)); } } #endregion } }