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