321 lines
14 KiB
C#
321 lines
14 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Represents the container for RibbonBar objects that will be merged into the MDI parent ribbon control.
|
|
/// </summary>
|
|
[ToolboxBitmap(typeof(RibbonBarMergeContainer), "Ribbon.RibbonControl.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.RibbonBarMergeContainerDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf"), System.Runtime.InteropServices.ComVisible(false)]
|
|
public class RibbonBarMergeContainer : RibbonPanel
|
|
{
|
|
#region Private variables
|
|
private bool m_AutoActivateTab = true;
|
|
private string m_RibbonTabText = "";
|
|
private string m_MergeIntoRibbonTabItemName = "";
|
|
private ArrayList m_MergedRibbonBarsList = new ArrayList();
|
|
private bool m_RibbonTabItemCreated = false;
|
|
private bool m_PreMergedVisibleState = false;
|
|
private bool m_AllowMerge = true;
|
|
private string m_MergeRibbonGroupName = "";
|
|
private int m_MergeRibbonTabItemIndex = -1;
|
|
private eRibbonTabColor m_RibbonTabColorTable = eRibbonTabColor.Default;
|
|
#endregion
|
|
|
|
#region Events
|
|
/// <summary>
|
|
/// Occurs before the RibbonBar objects from container are merged into the Ribbon control.
|
|
/// </summary>
|
|
public event EventHandler BeforeRibbonMerge;
|
|
/// <summary>
|
|
/// Occurs after the RibbonBar objects are merged into the Ribbon control.
|
|
/// </summary>
|
|
public event EventHandler AfterRibbonMerge;
|
|
|
|
/// <summary>
|
|
/// Occurs after the RibbonBar objects are removed from the Ribbon control.
|
|
/// </summary>
|
|
public event EventHandler BeforeRibbonUnmerge;
|
|
|
|
/// Occurs before the RibbonBar objects are removed from the Ribbon control.
|
|
/// </summary>
|
|
public event EventHandler AfterRibbonUnmerge;
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
/// <summary>
|
|
/// Gets whether RibbonBar controls are merged into the RibbonControl.
|
|
/// </summary>
|
|
public bool IsMerged
|
|
{
|
|
get
|
|
{
|
|
return m_MergedRibbonBarsList.Count > 0;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Removes any RibbonBar objects that were merged into the Ribbon control.
|
|
/// </summary>
|
|
/// <param name="ribbon">Reference to ribbon control to remove RibbonBar objects from.</param>
|
|
public virtual void RemoveMergedRibbonBars(RibbonControl ribbon)
|
|
{
|
|
OnBeforeRibbonUnmerge(new EventArgs());
|
|
Control parent = null;
|
|
foreach (RibbonBar c in m_MergedRibbonBarsList)
|
|
{
|
|
if (c.Parent != null)
|
|
{
|
|
if (parent == null)
|
|
{
|
|
parent = c.Parent;
|
|
parent.SuspendLayout();
|
|
}
|
|
c.Parent.Controls.Remove(c);
|
|
}
|
|
this.Controls.Add(c);
|
|
c.Enabled = false; // Disable shortcuts
|
|
}
|
|
|
|
m_MergedRibbonBarsList.Clear();
|
|
|
|
if (parent != null)
|
|
parent.ResumeLayout();
|
|
|
|
if (m_RibbonTabItemCreated)
|
|
{
|
|
this.RibbonTabItem.Parent.SubItems.Remove(this.RibbonTabItem);
|
|
if (this.RibbonTabItem.Panel != null && this.RibbonTabItem.Panel.Parent!=null)
|
|
{
|
|
this.RibbonTabItem.Panel.Parent.Controls.Remove(this.RibbonTabItem.Panel);
|
|
}
|
|
this.RibbonTabItem.Panel.Dispose();
|
|
this.RibbonTabItem.Panel = null;
|
|
m_RibbonTabItemCreated = false;
|
|
}
|
|
|
|
this.RibbonTabItem = null;
|
|
if (this.Visible != m_PreMergedVisibleState)
|
|
this.Visible = m_PreMergedVisibleState;
|
|
|
|
OnAfterRibbonUnmerge(new EventArgs());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Merges RibbonBar objects from this container into the Ribbon control.
|
|
/// </summary>
|
|
/// <param name="ribbon">Reference to ribbon control to remove RibbonBar objects from.</param>
|
|
public virtual void MergeRibbonBars(RibbonControl ribbon)
|
|
{
|
|
OnBeforeRibbonMerge(new EventArgs());
|
|
m_PreMergedVisibleState = this.Visible;
|
|
if (this.Visible) this.Visible = false;
|
|
RibbonTabItem tab = GetCreateRibbonTabItem(ribbon);
|
|
Control[] controls = new Control[this.Controls.Count];
|
|
this.Controls.CopyTo(controls, 0);
|
|
int xpos = tab.Panel.Width + 1;
|
|
tab.Panel.SuspendLayout();
|
|
foreach (Control c in controls)
|
|
{
|
|
if (c is RibbonBar)
|
|
{
|
|
this.Controls.Remove(c);
|
|
if (m_MergeIntoRibbonTabItemName.Length > 0 && !tab.Panel.DefaultLayout)
|
|
{
|
|
c.Left = xpos;
|
|
xpos += c.Width;
|
|
}
|
|
tab.Panel.Controls.Add(c);
|
|
c.Enabled = true;
|
|
m_MergedRibbonBarsList.Add(c);
|
|
}
|
|
}
|
|
tab.Panel.ResumeLayout();
|
|
OnAfterRibbonMerge(new EventArgs());
|
|
}
|
|
|
|
private RibbonTabItem GetCreateRibbonTabItem(RibbonControl ribbon)
|
|
{
|
|
if (m_MergeIntoRibbonTabItemName != "")
|
|
{
|
|
if(ribbon.Items.IndexOf(m_MergeIntoRibbonTabItemName)<0)
|
|
throw new NullReferenceException("MergeIntoRibbonTabItemName specified (" + m_MergeIntoRibbonTabItemName + ") cannot be found in RibbonControl.Items collection");
|
|
this.RibbonTabItem = ribbon.Items[m_MergeIntoRibbonTabItemName] as RibbonTabItem;
|
|
|
|
return this.RibbonTabItem;
|
|
}
|
|
|
|
string tabText = m_RibbonTabText;
|
|
if (tabText.Length == 0)
|
|
tabText = this.Name;
|
|
string tabName = (this.Parent != null ? this.Parent.Name + "." : "") + this.Name;
|
|
this.RibbonTabItem = ribbon.CreateRibbonTab(tabText, tabName, m_MergeRibbonTabItemIndex);
|
|
if (!string.IsNullOrEmpty(_RibbonTabKeyTips))
|
|
this.RibbonTabItem.KeyTips = _RibbonTabKeyTips;
|
|
this.RibbonTabItem.ColorTable = m_RibbonTabColorTable;
|
|
m_RibbonTabItemCreated = true;
|
|
|
|
if (m_MergeRibbonGroupName.Length > 0)
|
|
{
|
|
RibbonTabItemGroup group = ribbon.TabGroups[m_MergeRibbonGroupName];
|
|
if (group != null)
|
|
{
|
|
int lastTabGroupIndex = -1;
|
|
for (int i = 0; i < ribbon.Items.Count; i++)
|
|
{
|
|
if (ribbon.Items[i] is RibbonTabItem && ((RibbonTabItem)ribbon.Items[i]).Group == group)
|
|
lastTabGroupIndex = i;
|
|
}
|
|
this.RibbonTabItem.Group = group;
|
|
if (lastTabGroupIndex >= 0)
|
|
{
|
|
ribbon.Items.Remove(this.RibbonTabItem);
|
|
ribbon.Items.Insert(lastTabGroupIndex + 1, this.RibbonTabItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
return this.RibbonTabItem;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether RibbonTab item the RibbonBar controls are added to when merged is automatically activated (selected) after
|
|
/// controls are merged. Default value is true.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(true), Category("Behaviour"), Description("Indicates whether RibbonTab item the RibbonBar controls are added to when merged is automatically activated (selected) after controls are merged.")]
|
|
public bool AutoActivateTab
|
|
{
|
|
get { return m_AutoActivateTab; }
|
|
set { m_AutoActivateTab = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether merge functionality is enabled for the container. Default value is true.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(true), Category("Behaviour"), Description("Indicates whether merge functionality is enabled for the container.")]
|
|
public bool AllowMerge
|
|
{
|
|
get { return m_AllowMerge; }
|
|
set { m_AllowMerge = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Ribbon Tab text for the tab that will be created when ribbon bar objects from this container are merged into the ribbon.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(""), Localizable(true), Category("Data"), Description("Indicates the Ribbon Tab text for the tab that will be created when ribbon bar objects from this container are merged into the ribbon.")]
|
|
public string RibbonTabText
|
|
{
|
|
get { return m_RibbonTabText; }
|
|
set
|
|
{
|
|
m_RibbonTabText = value;
|
|
if (this.IsMerged && this.RibbonTabItem != null)
|
|
this.RibbonTabItem.Text = value;
|
|
}
|
|
}
|
|
|
|
private string _RibbonTabKeyTips = "";
|
|
/// <summary>
|
|
/// Gets or sets the Key Tips access key or keys for the Ribbon Tab. Use KeyTips property
|
|
/// when you want to assign the one or more letters to be used to access an item. For example assigning the FN to KeyTips property
|
|
/// will require the user to press F then N keys to select an item. Pressing the F letter will show only keytips for the items that start with letter F.
|
|
/// </summary>
|
|
[Browsable(true), Category("Appearance"), DefaultValue(""), Description("Indicates the Key Tips access key or keys for the Ribbon Tab.")]
|
|
public virtual string RibbonTabKeyTips
|
|
{
|
|
get { return _RibbonTabKeyTips; }
|
|
set
|
|
{
|
|
if (value == null) value = "";
|
|
_RibbonTabKeyTips = value.ToUpper();
|
|
if (this.IsMerged && this.RibbonTabItem != null)
|
|
this.RibbonTabItem.KeyTips = _RibbonTabKeyTips;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the predefined color for the ribbon tab that is created when ribbon bar controls are merged into the ribbon.
|
|
/// Default value is eRibbonTabColor.Default
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(eRibbonTabColor.Default), Category("Appearance"), Description("Indicates predefined color for the ribbon tab that is created when ribbon bar controls are merged into the ribbon.")]
|
|
public eRibbonTabColor RibbonTabColorTable
|
|
{
|
|
get { return m_RibbonTabColorTable; }
|
|
set { m_RibbonTabColorTable = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the name of RibbonTabItem object that already exists on Ribbon control into which the RibbonBar controls are merged.
|
|
/// If name is not specified new RibbonTabItem is created and RibbonBar controls are added to it.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(""), Category("Data"), Description("Indicates the name of RibbonTabItem object that already exists on Ribbon control into which the RibbonBar controls are merged.")]
|
|
public string MergeIntoRibbonTabItemName
|
|
{
|
|
get { return m_MergeIntoRibbonTabItemName; }
|
|
set { m_MergeIntoRibbonTabItemName = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the name of the RibbonTabItemGroup the new Ribbon Tab Item that is created will be added to. The RibbonTabItemGroup
|
|
/// must be created and added to RibbonControl.TabGroups collection.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(""), Category("Data"), Description("Indicates the name of the RibbonTabItemGroup the new Ribbon Tab Item that is created will be added to.")]
|
|
public string MergeRibbonGroupName
|
|
{
|
|
get { return m_MergeRibbonGroupName; }
|
|
set { m_MergeRibbonGroupName = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the insertion index for the ribbon tab item that is created when ribbon bars are merged into the ribbon control.
|
|
/// Default value is -1 which means that ribbon tab item is appended to the existing ribbon tab items.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(-1), Category("Data"), Description("Indicates the insertion index for the ribbon tab item that is created when ribbon bars are merged into the ribbon control.")]
|
|
public int MergeRibbonTabItemIndex
|
|
{
|
|
get { return m_MergeRibbonTabItemIndex; }
|
|
set { m_MergeRibbonTabItemIndex = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the BeforeRibbonMerge event.
|
|
/// </summary>
|
|
protected virtual void OnBeforeRibbonMerge(EventArgs e)
|
|
{
|
|
if (BeforeRibbonMerge != null)
|
|
BeforeRibbonMerge(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the AfterRibbonMerge event.
|
|
/// </summary>
|
|
protected virtual void OnAfterRibbonMerge(EventArgs e)
|
|
{
|
|
if (AfterRibbonMerge != null)
|
|
AfterRibbonMerge(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the BeforeRibbonUnmerge event.
|
|
/// </summary>
|
|
protected virtual void OnBeforeRibbonUnmerge(EventArgs e)
|
|
{
|
|
if (BeforeRibbonUnmerge != null)
|
|
BeforeRibbonUnmerge(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the AfterRibbonUnmerge event.
|
|
/// </summary>
|
|
protected virtual void OnAfterRibbonUnmerge(EventArgs e)
|
|
{
|
|
if (AfterRibbonUnmerge != null)
|
|
AfterRibbonUnmerge(this, e);
|
|
}
|
|
#endregion
|
|
}
|
|
}
|