using System.ComponentModel;
using System.Drawing;
using System;
using System.Windows.Forms;
namespace DevComponents.DotNetBar
{
///
/// Represents Rendering Tab used on RibbonControl.
///
[ToolboxItem(false), DesignTimeVisible(false), Designer("DevComponents.DotNetBar.Design.RibbonTabItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")]
public class RibbonTabItem:ButtonItem
{
#region Private Variables & Constructor
private RibbonPanel m_Panel=null;
private RibbonTabItemGroup m_Group=null;
private eRibbonTabColor m_ColorTable = eRibbonTabColor.Default; private string m_CashedColorTableName = "Default";
private bool m_ReducedSize = false;
private int m_PaddingHorizontal = 0;
#endregion
#region Internal Implementation
private bool _RenderTabState = true;
///
/// Gets or sets whether tab renders its state. Used internally by DotNetBar. Do not set.
///
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
internal bool RenderTabState
{
get { return _RenderTabState; }
set
{
_RenderTabState = value;
if (this.ContainerControl is System.Windows.Forms.Control)
((System.Windows.Forms.Control)this.ContainerControl).Invalidate();
else
this.Refresh();
}
}
protected override bool IsFadeEnabled
{
get
{
if ((this.EffectiveStyle == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(this.EffectiveStyle)) && WinApi.IsGlassEnabled)
return false;
return base.IsFadeEnabled;
}
}
///
/// Gets or sets the additional padding added around the tab item in pixels. Default value is 0.
///
[Browsable(true), DefaultValue(0), Category("Layout"), Description("Indicates additional padding added around the tab item in pixels.")]
public int PaddingHorizontal
{
get { return m_PaddingHorizontal; }
set
{
m_PaddingHorizontal = value;
UpdateTabAppearance();
}
}
///
/// Selects the tab.
///
public void Select()
{
this.Checked = true;
}
///
/// Gets or sets whether size of the tab has been reduced below the default calculated size.
///
internal bool ReducedSize
{
get { return m_ReducedSize; }
set { m_ReducedSize = value; }
}
/////
///// 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.RibbonTabItemColors collection. See documentation for Office2007ColorTable.RibbonTabItemColors 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.
///// Applies to items with Office 2007 style only.
/////
//[Browsable(true), DefaultValue(""), Category("Appearance"), Description("Indicates custom color table name for the item when Office 12 style is used.")]
//public string CustomColorName
//{
// get { return m_CustomColorName; }
// set
// {
// m_CustomColorName = value;
// this.Refresh();
// }
//}
///
/// Gets or sets the predefined color of item. Color specified here applies to items with Office 2007 style only. It does not have
/// any effect on other styles. Default value is eRibbonTabColor.Default
///
[Browsable(true), DefaultValue(eRibbonTabColor.Default), Category("Appearance"), Description("Indicates predefined color of item when Office 2007 style is used.")]
public new eRibbonTabColor ColorTable
{
get { return m_ColorTable; }
set
{
if (m_ColorTable != value)
{
m_ColorTable = value;
m_CashedColorTableName = Enum.GetName(typeof(eRibbonTabColor), m_ColorTable);
this.Refresh();
}
}
}
internal override string GetColorTableName()
{
return this.CustomColorName != "" ? this.CustomColorName : m_CashedColorTableName;
}
///
/// Gets or sets the group this tab belongs to. Groups are optional classification that is used to
/// visually group tabs that belong to same functions. These tabs should be positioned next to each other.
///
[Editor("DevComponents.DotNetBar.Design.RibbonTabItemGroupTypeEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor)), Browsable(true), DefaultValue(null), DevCoBrowsable(true), Category("Tab Group"), Description("Indicates the group tab belongs to.")]
public RibbonTabItemGroup Group
{
get {return m_Group;}
set
{
m_Group=value;
if(this.DesignMode)
{
ItemControl c=this.ContainerControl as ItemControl;
if(c!=null)
c.RecalcLayout();
}
}
}
///
/// Resets Group property to default value null.
///
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetGroup()
{
TypeDescriptor.GetProperties(this)["Group"].SetValue(this,null);
}
///
/// Gets or sets the panel assigned to this ribbon tab item.
///
[Browsable(false),DefaultValue(null)]
public RibbonPanel Panel
{
get {return m_Panel;}
set
{
if (m_Panel != null)
m_Panel.RibbonTabItem = null;
m_Panel=value;
if (m_Panel != null)
m_Panel.RibbonTabItem = this;
OnPanelChanged();
}
}
private void OnPanelChanged()
{
ChangePanelVisibility();
}
///
/// Called after Checked property has changed.
///
protected override void OnCheckedChanged()
{
if(this.Checked && this.Parent!=null)
{
ChangePanelVisibility();
foreach(BaseItem item in this.Parent.SubItems)
{
if(item==this)
continue;
RibbonTabItem b=item as RibbonTabItem;
if (b != null && b.Checked)
{
if (this.DesignMode)
TypeDescriptor.GetProperties(b)["Checked"].SetValue(b, false);
else
b.Checked = false;
}
}
}
m_LastAutoExpandTime = DateTime.MinValue;
if (BarFunctions.IsOffice2007Style(this.EffectiveStyle) && this.ContainerControl is System.Windows.Forms.Control)
((System.Windows.Forms.Control)this.ContainerControl).Invalidate();
if(!this.Checked)
ChangePanelVisibility();
InvokeCheckedChanged();
}
private void ChangePanelVisibility()
{
if(this.Checked && m_Panel!=null)
{
if (this.DesignMode)
{
if (!m_Panel.Visible) m_Panel.Visible = true;
TypeDescriptor.GetProperties(m_Panel)["Visible"].SetValue(m_Panel, true);
m_Panel.BringToFront();
}
else
{
if (!m_Panel.IsDisposed)
{
m_Panel.SuspendLayout();
m_Panel.Visible = true;
m_Panel.ResumeLayout(true);
m_Panel.BringToFront();
}
}
}
else if(!this.Checked && m_Panel!=null && !m_Panel.IsPopupMode) // Panels in popup mode will be taken care of by Ribbon
{
if (this.DesignMode)
TypeDescriptor.GetProperties(m_Panel)["Visible"].SetValue(m_Panel, false);
else
m_Panel.Visible = false;
}
}
///
/// Occurs just before Click event is fired.
///
protected override void OnClick()
{
base.OnClick();
if (!this.Checked)
{
if (this.DesignMode)
TypeDescriptor.GetProperties(this)["Checked"].SetValue(this, true);
else
this.Checked = true;
}
System.Windows.Forms.Control c = this.ContainerControl as System.Windows.Forms.Control;
if (c is RibbonStrip && ((RibbonStrip)c).AutoExpand && c.Parent is RibbonControl)
{
RibbonControl rc = (RibbonControl)c.Parent;
if (!rc.Expanded)
{
TimeSpan span = DateTime.Now.Subtract(m_LastAutoExpandTime);
if (m_LastAutoExpandTime == DateTime.MinValue ||
Math.Abs(span.TotalMilliseconds) > System.Windows.Forms.SystemInformation.DoubleClickTime)
{
rc.RibbonTabItemClick(this);
m_LastAutoExpandTime = DateTime.MinValue;
}
}
}
}
private DateTime m_LastAutoExpandTime = DateTime.MinValue;
///
/// Occurs when the item is clicked. This is used by internal implementation only.
///
//[System.ComponentModel.Browsable(false), System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
//public override void InternalClick(System.Windows.Forms.MouseButtons mb, System.Drawing.Point mpos)
//{
// base.InternalClick(mb, mpos);
//}
protected override void InvokeDoubleClick()
{
System.Windows.Forms.Control c = this.ContainerControl as System.Windows.Forms.Control;
if (c is RibbonStrip && ((RibbonStrip)c).AutoExpand && c.Parent is RibbonControl)
{
//if (m_LastAutoExpandTime == DateTime.Now || m_LastAutoExpandTime == DateTime.MinValue ||
// m_LastAutoExpandTime != DateTime.Now && Math.Abs(DateTime.Now.Subtract(m_LastAutoExpandTime).Milliseconds) > System.Windows.Forms.SystemInformation.DoubleClickTime)
//{
((RibbonControl)c.Parent).RibbonTabItemDoubleClick(this);
m_LastAutoExpandTime = DateTime.Now; // DateTime.MinValue;
//}
}
base.InvokeDoubleClick();
}
///
/// Called when Visibility of the items has changed.
///
/// New Visible state.
protected internal override void OnVisibleChanged(bool bVisible)
{
base.OnVisibleChanged(bVisible);
if(!bVisible && this.Checked)
{
TypeDescriptor.GetProperties(this)["Checked"].SetValue(this,false);
// Try to check first item in the group
if(this.Parent!=null)
{
foreach(BaseItem item in this.Parent.SubItems)
{
if (item == this || !item.GetEnabled() || !item.Visible)
continue;
RibbonTabItem b=item as RibbonTabItem;
if(b!=null)
{
TypeDescriptor.GetProperties(b)["Checked"].SetValue(this,true);
break;
}
}
}
}
}
///
/// Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property.
///
[Browsable(false),DevCoBrowsable(false),DefaultValue(""),EditorBrowsable(EditorBrowsableState.Never)]
public override string OptionGroup
{
get {return base.OptionGroup;}
set {base.OptionGroup=value;}
}
///
/// Occurs after item visual style has changed.
///
protected override void OnStyleChanged()
{
base.OnStyleChanged();
UpdateTabAppearance();
}
private void UpdateTabAppearance()
{
eDotNetBarStyle effectiveStyle = this.EffectiveStyle;
if (effectiveStyle == eDotNetBarStyle.Office2007)
{
this.VerticalPadding = 0;
this.HorizontalPadding = 12 + m_PaddingHorizontal;
}
else if (effectiveStyle == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(effectiveStyle))
{
this.VerticalPadding = 1;
this.HorizontalPadding = 16 + m_PaddingHorizontal;
}
else if (effectiveStyle == eDotNetBarStyle.Windows7)
{
this.VerticalPadding = 0;
this.HorizontalPadding = 16 + m_PaddingHorizontal;
}
else if (effectiveStyle == eDotNetBarStyle.Office2003)
{
this.VerticalPadding = -1;
this.HorizontalPadding = 2 + m_PaddingHorizontal;
}
else
{
this.VerticalPadding = 0;
this.HorizontalPadding = 0 + m_PaddingHorizontal;
}
this.NeedRecalcSize = true;
this.OnAppearanceChanged();
}
protected override void ScaleItem(SizeF factor)
{
UpdateTabAppearance();
base.ScaleItem(factor);
}
///
/// Returns the collection of sub items.
///
[Browsable(false),DevCoBrowsable(false),DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Content)]
public override SubItemsCollection SubItems
{
get {return base.SubItems;}
}
internal override void DoAccesibleDefaultAction()
{
this.Checked = true;
}
protected override void Invalidate(System.Windows.Forms.Control containerControl)
{
Rectangle r = m_Rect;
r.Width++;
r.Height++;
if (containerControl.InvokeRequired)
containerControl.BeginInvoke(new MethodInvoker(delegate { containerControl.Invalidate(r, true); }));
else
containerControl.Invalidate(r, true);
}
#endregion
#region Hidden Properties
///
/// Indicates whether the item will auto-collapse (fold) when clicked.
/// When item is on popup menu and this property is set to false, menu will not
/// close when item is clicked.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Behavior"), DefaultValue(true), Description("Indicates whether the item will auto-collapse (fold) when clicked.")]
public override bool AutoCollapseOnClick
{
get
{
return base.AutoCollapseOnClick;
}
set
{
base.AutoCollapseOnClick=value;
}
}
///
/// Indicates whether the item will auto-expand when clicked.
/// When item is on top level bar and not on menu and contains sub-items, sub-items will be shown only if user
/// click the expand part of the button. Setting this propert to true will expand the button and show sub-items when user
/// clicks anywhere inside of the button. Default value is false which indicates that button is expanded only
/// if its expand part is clicked.
///
[DefaultValue(false), Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DevCoBrowsable(false), Category("Behavior"), Description("Indicates whether the item will auto-collapse (fold) when clicked.")]
public override bool AutoExpandOnClick
{
get
{
return base.AutoExpandOnClick;
}
set
{
base.AutoExpandOnClick=value;
}
}
///
/// Gets or sets whether item can be customized by end user.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), DefaultValue(true), System.ComponentModel.Category("Behavior"), System.ComponentModel.Description("Indicates whether item can be customized by user.")]
public override bool CanCustomize
{
get
{
return base.CanCustomize;
}
set
{
base.CanCustomize=value;
}
}
///
/// Gets or set a value indicating whether the button is in the checked state.
///
[Browsable(false),DevCoBrowsable(false),Category("Appearance"),Description("Indicates whether item is checked or not."),DefaultValue(false)]
public override bool Checked
{
get
{
return base.Checked;
}
set
{
base.Checked=value;
}
}
///
/// Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), DefaultValue(false), Category("Behavior"), Description("Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item.")]
public override bool ClickAutoRepeat
{
get
{
return base.ClickAutoRepeat;
}
set
{
base.ClickAutoRepeat=value;
}
}
///
/// Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), DefaultValue(600), Category("Behavior"), Description("Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item.")]
public override int ClickRepeatInterval
{
get
{
return base.ClickRepeatInterval;
}
set
{
base.ClickRepeatInterval=value;
}
}
///
/// Gets or sets a value indicating whether the item is enabled.
///
[Browsable(false),DevCoBrowsable(false),DefaultValue(true),Category("Behavior"),Description("Indicates whether is item enabled.")]
public override bool Enabled
{
get
{
return base.Enabled;
}
set
{
base.Enabled=value;
}
}
///
/// Indicates item's visiblity when on pop-up menu.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Appearance"), Description("Indicates item's visiblity when on pop-up menu."), DefaultValue(eMenuVisibility.VisibleAlways)]
public override eMenuVisibility MenuVisibility
{
get
{
return base.MenuVisibility;
}
set
{
base.MenuVisibility=value;
}
}
///
/// Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true.
///
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DevCoBrowsable(false), Category("Appearance"), Description("Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true."), DefaultValue(ePersonalizedMenus.Disabled)]
public override ePersonalizedMenus PersonalizedMenus
{
get
{
return base.PersonalizedMenus;
}
set
{
base.PersonalizedMenus=value;
}
}
///
/// Indicates Animation type for Popups.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Behavior"), Description("Indicates Animation type for Popups."), DefaultValue(ePopupAnimation.ManagerControlled)]
public override ePopupAnimation PopupAnimation
{
get
{
return base.PopupAnimation;
}
set
{
base.PopupAnimation=value;
}
}
///
/// Indicates the font that will be used on the popup window.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Appearance"), Description("Indicates the font that will be used on the popup window."), DefaultValue(null)]
public override System.Drawing.Font PopupFont
{
get
{
return base.PopupFont;
}
set
{
base.PopupFont=value;
}
}
///
/// Indicates whether sub-items are shown on popup Bar or popup menu.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Appearance"), Description("Indicates whether sub-items are shown on popup Bar or popup menu."), DefaultValue(ePopupType.Menu)]
public override ePopupType PopupType
{
get
{
return base.PopupType;
}
set
{
base.PopupType=value;
}
}
///
/// Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Layout"), Description("Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only."), DefaultValue(200)]
public override int PopupWidth
{
get
{
return base.PopupWidth;
}
set
{
base.PopupWidth=value;
}
}
///
/// Gets or sets whether item will display sub items.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), DefaultValue(true), Category("Behavior"), Description("Determines whether sub-items are displayed.")]
public override bool ShowSubItems
{
get
{
return base.ShowSubItems;
}
set
{
base.ShowSubItems=value;
}
}
///
/// Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), DefaultValue(false), Category("Appearance"), Description("Indicates whether item will stretch to consume empty space. Items on stretchable, no-wrap Bars only.")]
public override bool Stretch
{
get
{
return base.Stretch;
}
set
{
base.Stretch=value;
}
}
///
/// Gets or sets the width of the expand part of the button item.
///
[Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), Category("Behavior"), Description("Indicates the width of the expand part of the button item."), DefaultValue(12)]
public override int SubItemsExpandWidth
{
get {return base.SubItemsExpandWidth;}
set
{
base.SubItemsExpandWidth=value;
}
}
///
/// Gets or set the alternative shortcut text.
///
[System.ComponentModel.Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DevCoBrowsable(false), System.ComponentModel.Category("Design"), System.ComponentModel.Description("Gets or set the alternative Shortcut Text. This text appears next to the Text instead of any shortcuts"), System.ComponentModel.DefaultValue("")]
public override string AlternateShortCutText
{
get
{
return base.AlternateShortCutText;
}
set
{
base.AlternateShortCutText = value;
}
}
///
/// Gets or sets whether item separator is shown before this item.
///
[System.ComponentModel.Browsable(false), DevCoBrowsable(false), System.ComponentModel.DefaultValue(false), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("Indicates whether this item is beginning of the group.")]
public override bool BeginGroup
{
get
{
return base.BeginGroup;
}
set
{
base.BeginGroup = value;
}
}
///
/// Returns category for this item. If item cannot be customzied using the
/// customize dialog category is empty string.
///
[System.ComponentModel.Browsable(false), DevCoBrowsable(false), System.ComponentModel.DefaultValue(""), System.ComponentModel.Category("Design"), System.ComponentModel.Description("Indicates item category used to group similar items at design-time."), EditorBrowsable(EditorBrowsableState.Never)]
public override string Category
{
get
{
return base.Category;
}
set
{
base.Category = value;
}
}
///
/// Gets or sets the text color of the button when mouse is over the item.
///
[System.ComponentModel.Browsable(false), DevCoBrowsable(false), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("The foreground color used to display text when mouse is over the item."), EditorBrowsable(EditorBrowsableState.Never)]
public override Color HotForeColor
{
get
{
return base.HotForeColor;
}
set
{
base.HotForeColor = value;
}
}
///
/// Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item.
///
[System.ComponentModel.Browsable(false), DevCoBrowsable(false), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item."), System.ComponentModel.DefaultValue(eHotTrackingStyle.Default), EditorBrowsable(EditorBrowsableState.Never)]
public override eHotTrackingStyle HotTrackingStyle
{
get { return base.HotTrackingStyle; }
set
{
base.HotTrackingStyle = value;
}
}
///
/// Gets or sets the text color of the button.
///
[System.ComponentModel.Browsable(false), DevCoBrowsable(false), EditorBrowsable(EditorBrowsableState.Never), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("The foreground color used to display text.")]
public override Color ForeColor
{
get
{
return base.ForeColor;
}
set
{
base.ForeColor = value;
}
}
#endregion
}
}