467 lines
17 KiB
C#
467 lines
17 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
using DevComponents.DotNetBar.Ribbon;
|
|
using DevComponents.DotNetBar.Rendering;
|
|
using DevComponents.DotNetBar.Metro;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Represents the item that provides Quick Access Toolbar customization.
|
|
/// </summary>
|
|
public class QatCustomizeItem : CustomizeItem
|
|
{
|
|
#region Private Variables
|
|
//private bool m_SetupComplete = false;
|
|
private const string DefaultTooltipText = "Customize Quick Access Toolbar";
|
|
private const int FIXED_SIZE = 14;
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
/// <summary>
|
|
/// Creates new instance of CustomizeItem object.
|
|
/// </summary>
|
|
public QatCustomizeItem():base()
|
|
{
|
|
this.Tooltip = DefaultTooltipText;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns copy of CustomizeItem item
|
|
/// </summary>
|
|
public override BaseItem Copy()
|
|
{
|
|
QatCustomizeItem objCopy = new QatCustomizeItem();
|
|
this.CopyToItem(objCopy);
|
|
return objCopy;
|
|
}
|
|
|
|
public override void Paint(ItemPaintArgs p)
|
|
{
|
|
Rendering.BaseRenderer renderer = p.Renderer;
|
|
if (renderer != null)
|
|
{
|
|
renderer.DrawQatCustomizeItem(new QatCustomizeItemRendererEventArgs(this, p.Graphics));
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
Rendering.QatCustomizeItemPainter painter = PainterFactory.CreateQatCustomizeItemPainter(this);
|
|
if (painter != null)
|
|
{
|
|
painter.Paint(new QatCustomizeItemRendererEventArgs(this, p.Graphics));
|
|
return;
|
|
}
|
|
}
|
|
|
|
base.Paint(p);
|
|
}
|
|
|
|
private bool QatContainsItem(RibbonControl rc, string itemName)
|
|
{
|
|
if (rc.QuickToolbarItems.Contains(itemName))
|
|
return true;
|
|
|
|
if(this.Parent is QatOverflowItem && this.Parent.SubItems.Contains(itemName))
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
private bool QatContainsItem(MetroShell tab, string itemName)
|
|
{
|
|
if (tab.QuickToolbarItems.Contains(itemName))
|
|
return true;
|
|
|
|
if (this.Parent is QatOverflowItem && this.Parent.SubItems.Contains(itemName))
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
protected override void SetupCustomizeItem()
|
|
{
|
|
if (this.GetRibbonControl() != null)
|
|
SetupRibbonCustomizeItem();
|
|
else if (this.GetMetroTab() != null)
|
|
SetupMetroTabCustomizeItem();
|
|
}
|
|
|
|
private void SetupMetroTabCustomizeItem()
|
|
{
|
|
this.SubItems.Clear();
|
|
|
|
// Add customize items...
|
|
string qatCustomize = "&Customize Quick Access Toolbar...";
|
|
|
|
MetroShell tab = GetMetroTab();
|
|
|
|
if (tab != null)
|
|
{
|
|
qatCustomize = tab.SystemText.QatCustomizeText;
|
|
this.PopupFont = tab.Font;
|
|
}
|
|
|
|
SubItemsCollection qatFrequentCommands = tab.QatFrequentCommands;
|
|
|
|
string s = "<b>Customize Quick Access Toolbar</b>";
|
|
if (tab != null)
|
|
s = tab.SystemText.QatCustomizeMenuLabel;
|
|
LabelItem label = new LabelItem(RibbonControl.SysQatCustomizeLabelName, s);
|
|
label.PaddingBottom = 2;
|
|
label.PaddingTop = 2;
|
|
label.PaddingLeft = 12;
|
|
label.BorderSide = eBorderSide.Bottom;
|
|
label.BorderType = eBorderType.SingleLine;
|
|
label.CanCustomize = false;
|
|
if (GlobalManager.Renderer is Office2007Renderer)
|
|
{
|
|
label.BackColor = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.QuickAccessToolbar.QatCustomizeMenuLabelBackground;
|
|
label.ForeColor = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.QuickAccessToolbar.QatCustomizeMenuLabelText;
|
|
}
|
|
this.SubItems.Add(label);
|
|
|
|
bool beginGroup = false;
|
|
|
|
if (qatFrequentCommands.Count > 0)
|
|
{
|
|
beginGroup = true;
|
|
foreach (BaseItem qatFC in qatFrequentCommands)
|
|
{
|
|
if (qatFC.Text.Length > 0)
|
|
{
|
|
ButtonItem bf = new ButtonItem(RibbonControl.SysFrequentlyQatNamePart + qatFC.Name, qatFC.Text);
|
|
if (QatContainsItem(tab, qatFC.Name))
|
|
bf.Checked = true;
|
|
bf.CanCustomize = false;
|
|
this.SubItems.Add(bf);
|
|
bf.Click += new EventHandler(AddFrequentCommandToQat);
|
|
bf.Tag = qatFC.Name;
|
|
}
|
|
}
|
|
}
|
|
|
|
ButtonItem item = new ButtonItem(RibbonControl.SysQatCustomizeItemName, qatCustomize);
|
|
item.BeginGroup = beginGroup;
|
|
item.CanCustomize = false;
|
|
this.SubItems.Add(item);
|
|
item.Click += new EventHandler(QatCustomizeItemClick);
|
|
|
|
//if (tab != null && tab.EnableQatPlacement)
|
|
//{
|
|
// ButtonItem b = new ButtonItem(RibbonControl.SysQatPlaceItemName);
|
|
// b.CanCustomize = false;
|
|
// //if (tab.QatPositionedBelowRibbon)
|
|
// // b.Text = tab.SystemText.QatPlaceAboveRibbonText;
|
|
// //else
|
|
// b.Text = tab.SystemText.QatPlaceBelowRibbonText;
|
|
// b.Click += new EventHandler(QuickAccessToolbarChangePlacement);
|
|
// this.SubItems.Add(b);
|
|
//}
|
|
|
|
//if (tab != null)
|
|
//{
|
|
// ButtonItem b = null;
|
|
// if (tab.Expanded)
|
|
// b = new ButtonItem(RibbonControl.SysMinimizeRibbon, tab.SystemText.MinimizeRibbonText);
|
|
// else
|
|
// b = new ButtonItem(RibbonControl.SysMaximizeRibbon, tab.SystemText.MaximizeRibbonText);
|
|
// b.CanCustomize = false;
|
|
// b.BeginGroup = true;
|
|
// b.Click += new EventHandler(ToggleRibbonExpand);
|
|
// this.SubItems.Add(b);
|
|
//}
|
|
}
|
|
private MetroShell GetMetroTab()
|
|
{
|
|
MetroTabStrip strip = this.ContainerControl as MetroTabStrip;
|
|
if (strip == null)
|
|
{
|
|
BaseItem parent = this;
|
|
while (parent != null && strip == null)
|
|
{
|
|
parent = parent.Parent;
|
|
if (parent != null)
|
|
{
|
|
strip = parent.ContainerControl as MetroTabStrip;
|
|
}
|
|
}
|
|
}
|
|
MetroShell tab = null;
|
|
if (strip != null) tab = strip.Parent as MetroShell;
|
|
return tab;
|
|
}
|
|
private void SetupRibbonCustomizeItem()
|
|
{
|
|
this.SubItems.Clear();
|
|
|
|
// Add customize items...
|
|
string qatCustomize = "&Customize Quick Access Toolbar...";
|
|
|
|
RibbonControl rc = GetRibbonControl();
|
|
|
|
if (rc != null)
|
|
qatCustomize = rc.SystemText.QatCustomizeText;
|
|
|
|
SubItemsCollection qatFrequentCommands = rc.QatFrequentCommands;
|
|
|
|
string s = "<b>Customize Quick Access Toolbar</b>";
|
|
if (rc != null)
|
|
s = rc.SystemText.QatCustomizeMenuLabel;
|
|
LabelItem label = new LabelItem(RibbonControl.SysQatCustomizeLabelName, s);
|
|
label.PaddingBottom = 2;
|
|
label.PaddingTop = 2;
|
|
label.PaddingLeft = 12;
|
|
label.BorderSide = eBorderSide.Bottom;
|
|
label.BorderType = eBorderType.SingleLine;
|
|
label.CanCustomize = false;
|
|
if (GlobalManager.Renderer is Office2007Renderer)
|
|
{
|
|
label.BackColor = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.QuickAccessToolbar.QatCustomizeMenuLabelBackground;
|
|
label.ForeColor = ((Office2007Renderer)GlobalManager.Renderer).ColorTable.QuickAccessToolbar.QatCustomizeMenuLabelText;
|
|
}
|
|
this.SubItems.Add(label);
|
|
|
|
bool beginGroup = false;
|
|
|
|
if (qatFrequentCommands.Count > 0)
|
|
{
|
|
beginGroup = true;
|
|
foreach (BaseItem qatFC in qatFrequentCommands)
|
|
{
|
|
if (qatFC.Text.Length > 0)
|
|
{
|
|
ButtonItem bf = new ButtonItem(RibbonControl.SysFrequentlyQatNamePart + qatFC.Name, qatFC.Text);
|
|
if (QatContainsItem(rc, qatFC.Name))
|
|
bf.Checked = true;
|
|
bf.CanCustomize = false;
|
|
this.SubItems.Add(bf);
|
|
bf.Click += new EventHandler(AddFrequentCommandToQat);
|
|
bf.Tag = qatFC.Name;
|
|
}
|
|
}
|
|
}
|
|
|
|
ButtonItem item = new ButtonItem(RibbonControl.SysQatCustomizeItemName, qatCustomize);
|
|
item.BeginGroup = beginGroup;
|
|
item.CanCustomize = false;
|
|
this.SubItems.Add(item);
|
|
item.Click += new EventHandler(QatCustomizeItemClick);
|
|
|
|
if (rc != null && rc.EnableQatPlacement)
|
|
{
|
|
ButtonItem b = new ButtonItem(RibbonControl.SysQatPlaceItemName);
|
|
b.CanCustomize = false;
|
|
if (rc.QatPositionedBelowRibbon)
|
|
b.Text = rc.SystemText.QatPlaceAboveRibbonText;
|
|
else
|
|
b.Text = rc.SystemText.QatPlaceBelowRibbonText;
|
|
b.Click += new EventHandler(QuickAccessToolbarChangePlacement);
|
|
this.SubItems.Add(b);
|
|
}
|
|
|
|
if (rc != null)
|
|
{
|
|
ButtonItem b = null;
|
|
if (rc.Expanded)
|
|
b = new ButtonItem(RibbonControl.SysMinimizeRibbon, rc.SystemText.MinimizeRibbonText);
|
|
else
|
|
b = new ButtonItem(RibbonControl.SysMaximizeRibbon, rc.SystemText.MaximizeRibbonText);
|
|
b.CanCustomize = false;
|
|
b.BeginGroup = true;
|
|
b.Click += new EventHandler(ToggleRibbonExpand);
|
|
this.SubItems.Add(b);
|
|
}
|
|
}
|
|
private void AddFrequentCommandToQat(object sender, EventArgs e)
|
|
{
|
|
RibbonControl rc = GetRibbonControl();
|
|
if (rc==null) return;
|
|
CollapseAll(this);
|
|
rc.RibbonStrip.ClosePopups();
|
|
ButtonItem b = sender as ButtonItem;
|
|
if (b != null && b.Tag is string && b.Tag.ToString().Length > 0)
|
|
{
|
|
if (b.Checked)
|
|
{
|
|
// Remove from QAT
|
|
rc.RemoveItemFromQuickAccessToolbar(rc.QuickToolbarItems[b.Tag.ToString()]);
|
|
}
|
|
else
|
|
{
|
|
// Add to QAT
|
|
rc.AddItemToQuickAccessToolbar(rc.QatFrequentCommands[b.Tag.ToString()]);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ToggleRibbonExpand(object sender, EventArgs e)
|
|
{
|
|
CollapseAll(this);
|
|
ButtonItem b = sender as ButtonItem;
|
|
if(b==null) return;
|
|
RibbonControl rc = GetRibbonControl();
|
|
if (rc == null) return;
|
|
rc.RibbonStrip.ClosePopups();
|
|
if (b.Name == RibbonControl.SysMinimizeRibbon)
|
|
rc.Expanded = false;
|
|
else if (b.Name == RibbonControl.SysMaximizeRibbon)
|
|
rc.Expanded = true;
|
|
}
|
|
|
|
private void QuickAccessToolbarChangePlacement(object sender, EventArgs e)
|
|
{
|
|
CollapseAll(this);
|
|
RibbonControl rc = GetRibbonControl();
|
|
if (rc != null)
|
|
{
|
|
rc.RibbonStrip.ClosePopups();
|
|
rc.QuickAccessToolbarChangePlacement();
|
|
}
|
|
}
|
|
|
|
private void QatCustomizeItemClick(object sender, EventArgs e)
|
|
{
|
|
if (GetRibbonControl() != null)
|
|
QatCustomizeItemClickRibbon();
|
|
else if (GetMetroTab() != null)
|
|
QatCustomizeItemClickMetroTab();
|
|
}
|
|
|
|
private void QatCustomizeItemClickMetroTab()
|
|
{
|
|
MetroShell tab = GetMetroTab();
|
|
CollapseAll(this);
|
|
if (tab != null)
|
|
{
|
|
tab.MetroTabStrip.ClosePopups();
|
|
tab.ShowQatCustomizeDialog();
|
|
}
|
|
}
|
|
private void QatCustomizeItemClickRibbon()
|
|
{
|
|
RibbonControl rc = GetRibbonControl();
|
|
CollapseAll(this);
|
|
if (rc != null)
|
|
{
|
|
rc.RibbonStrip.ClosePopups();
|
|
rc.ShowQatCustomizeDialog();
|
|
}
|
|
}
|
|
private RibbonControl GetRibbonControl()
|
|
{
|
|
RibbonStrip strip = this.ContainerControl as RibbonStrip;
|
|
if (strip == null)
|
|
{
|
|
BaseItem parent = this;
|
|
while (parent != null && strip == null)
|
|
{
|
|
parent = parent.Parent;
|
|
if (parent != null)
|
|
{
|
|
if (parent.ContainerControl is QatToolbar)
|
|
{
|
|
QatToolbar qat = parent.ContainerControl as QatToolbar;
|
|
if (qat.Parent is RibbonControl)
|
|
{
|
|
strip = ((RibbonControl)qat.Parent).RibbonStrip;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
strip = parent.ContainerControl as RibbonStrip;
|
|
}
|
|
}
|
|
}
|
|
RibbonControl rc = null;
|
|
if (strip != null) rc = strip.Parent as RibbonControl;
|
|
|
|
Ribbon.QatToolbar qatToolbar = this.ContainerControl as Ribbon.QatToolbar;
|
|
if (qatToolbar != null && qatToolbar.Parent is RibbonControl)
|
|
return qatToolbar.Parent as RibbonControl;
|
|
|
|
return rc;
|
|
}
|
|
|
|
protected override void ClearCustomizeItem()
|
|
{
|
|
// Nothing to do leave all items as they are
|
|
}
|
|
|
|
protected override void LoadResources() {}
|
|
|
|
//protected override void SetCustomTooltip(string text) {}
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether Customize menu item is visible.
|
|
/// </summary>
|
|
[Browsable(false), DevCoBrowsable(false), Category("Behavior"), Description("Indicates whether Customize menu item is visible."), DefaultValue(true), EditorBrowsable(EditorBrowsableState.Never)]
|
|
public override bool CustomizeItemVisible
|
|
{
|
|
get { return base.CustomizeItemVisible; }
|
|
set { base.CustomizeItemVisible = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets/Sets informational text (tooltip) for the item.
|
|
/// </summary>
|
|
[Browsable(true), DevCoBrowsable(true), DefaultValue(QatCustomizeItem.DefaultTooltipText), System.ComponentModel.Category("Appearance"), System.ComponentModel.Description("Indicates the text that is displayed when mouse hovers over the item."), Localizable(true)]
|
|
public override string Tooltip
|
|
{
|
|
get { return base.Tooltip; }
|
|
set { base.Tooltip = value; }
|
|
}
|
|
|
|
protected internal override void OnExpandChange()
|
|
{
|
|
this.PopupSide = ePopupSide.Bottom;
|
|
base.OnExpandChange();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Overridden. Recalculates the size of the item.
|
|
/// </summary>
|
|
public override void RecalcSize()
|
|
{
|
|
if (this.SuspendLayout)
|
|
return;
|
|
|
|
if (m_Orientation == eOrientation.Vertical)
|
|
{
|
|
// Take suggested width
|
|
m_Rect.Height = Dpi.Height(FIXED_SIZE);
|
|
m_Rect.Width = Dpi.Width22;
|
|
}
|
|
else
|
|
{
|
|
// Take suggested height
|
|
m_Rect.Width = Dpi.Width(FIXED_SIZE);
|
|
m_Rect.Height = Dpi.Height22;
|
|
}
|
|
|
|
SetCustomTooltip(GetTooltipText());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets localized tooltip text for this instance of the item.
|
|
/// </summary>
|
|
/// <returns>Tooltip text.</returns>
|
|
protected override string GetTooltipText()
|
|
{
|
|
string s = "";
|
|
using (LocalizationManager lm = new LocalizationManager(this.GetOwner() as IOwnerLocalize))
|
|
s = lm.GetLocalizedString(LocalizationKeys.QatCustomizeTooltip);
|
|
if (s == "") s = this.Tooltip;
|
|
return s;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called when mouse hovers over the customize item.
|
|
/// </summary>
|
|
protected override void MouseHoverCustomize()
|
|
{
|
|
}
|
|
#endregion
|
|
}
|
|
}
|