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
}
}