725 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			725 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Data;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using System.Collections;
 | |
| using DevComponents.DotNetBar.Controls;
 | |
| using DevComponents.DotNetBar.Metro;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Ribbon
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Represents the Quick Access Toolbar customization panel which can be used on the custom QAT customization dialogs
 | |
|     /// so customization of Quick Access Toolbar can be reused.
 | |
|     /// </summary>
 | |
|     public class QatCustomizePanel : UserControl
 | |
|     {
 | |
|         #region Private/Public variables
 | |
|         /// <summary>
 | |
|         /// Gets reference to the internal ItemPanel control that displays the commands for selected category.
 | |
|         /// </summary>
 | |
|         public ItemPanel itemPanelCommands;
 | |
|         /// <summary>
 | |
|         /// Gets reference to the ItemPanel control that displays the Quick Access Toolbar Items.
 | |
|         /// </summary>
 | |
|         public ItemPanel itemPanelQat;
 | |
|         /// <summary>
 | |
|         /// Gets reference to the button that perform addition of commands to the Quick Access Toolbar.
 | |
|         /// </summary>
 | |
|         public ButtonX buttonAddToQat;
 | |
|         /// <summary>
 | |
|         /// Gets reference to the button that perform removal of commands from the Quick Access Toolbar.
 | |
|         /// </summary>
 | |
|         public ButtonX buttonRemoveFromQat;
 | |
|         /// <summary>
 | |
|         /// Gets reference to the combo box control that holds all categories.
 | |
|         /// </summary>
 | |
|         public ComboBoxEx comboCategories;
 | |
|         /// <summary>
 | |
|         /// Gets reference to the combo box categories label control.
 | |
|         /// </summary>
 | |
|         public Label labelCategories;
 | |
|         /// <summary>
 | |
|         /// Gets reference to the check box that changes the placement of the Quick Access Toolbar.
 | |
|         /// </summary>
 | |
|         public Controls.CheckBoxX checkQatBelowRibbon;
 | |
| 
 | |
|         private Hashtable m_Categories = new Hashtable();
 | |
|         private bool m_DataChanged = false;
 | |
|         /// <summary> 
 | |
|         /// Required designer variable.
 | |
|         /// </summary>
 | |
|         private System.ComponentModel.IContainer components = null;
 | |
|         #endregion
 | |
| 
 | |
|         #region Constructor
 | |
| 
 | |
|         public QatCustomizePanel()
 | |
|         {
 | |
|             this.SetStyle(ControlStyles.UserPaint, true);
 | |
|             this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 | |
|             this.SetStyle(ControlStyles.Opaque, true);
 | |
|             this.SetStyle(ControlStyles.ResizeRedraw, true);
 | |
|             this.SetStyle(DisplayHelp.DoubleBufferFlag, true);
 | |
|             this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 | |
| 
 | |
|             InitializeComponent();
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Component Designer generated code
 | |
| 
 | |
|         /// <summary> 
 | |
|         /// Required method for Designer support - do not modify 
 | |
|         /// the contents of this method with the code editor.
 | |
|         /// </summary>
 | |
|         private void InitializeComponent()
 | |
|         {
 | |
|             this.itemPanelCommands = new DevComponents.DotNetBar.ItemPanel();
 | |
|             this.itemPanelQat = new DevComponents.DotNetBar.ItemPanel();
 | |
|             this.buttonAddToQat = new DevComponents.DotNetBar.ButtonX();
 | |
|             this.buttonRemoveFromQat = new DevComponents.DotNetBar.ButtonX();
 | |
|             this.comboCategories = new Controls.ComboBoxEx();
 | |
|             this.labelCategories = new System.Windows.Forms.Label();
 | |
|             this.checkQatBelowRibbon = new Controls.CheckBoxX();
 | |
|             this.SuspendLayout();
 | |
|             // 
 | |
|             // itemPanelCommands
 | |
|             // 
 | |
|             this.itemPanelCommands.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
 | |
|                         | System.Windows.Forms.AnchorStyles.Left)
 | |
|                         | System.Windows.Forms.AnchorStyles.Right)));
 | |
|             // 
 | |
|             // 
 | |
|             // 
 | |
|             this.itemPanelCommands.AutoScroll = true;
 | |
|             this.itemPanelCommands.BackgroundStyle.Class = DevComponents.DotNetBar.Rendering.ElementStyleClassKeys.ItemPanelKey;
 | |
|             this.itemPanelCommands.Style = eDotNetBarStyle.StyleManagerControlled;
 | |
|             this.itemPanelCommands.FadeEffect = false;
 | |
|             this.itemPanelCommands.LayoutOrientation = DevComponents.DotNetBar.eOrientation.Vertical;
 | |
| #if!TRIAL
 | |
|             this.itemPanelCommands.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
 | |
| #endif
 | |
|             this.itemPanelCommands.Location = new System.Drawing.Point(9, 46);
 | |
|             this.itemPanelCommands.Name = "itemPanelCommands";
 | |
|             this.itemPanelCommands.Size = new System.Drawing.Size(173, 257);
 | |
|             this.itemPanelCommands.TabIndex = 2;
 | |
|             this.itemPanelCommands.Text = "itemPanelCommands";
 | |
|             this.itemPanelCommands.KeyUp += new KeyEventHandler(ItemPanelKeyUp);
 | |
|             this.itemPanelCommands.ItemDoubleClick += new MouseEventHandler(ItemPanelCommandsDoubleClick);
 | |
|             // 
 | |
|             // itemPanelQat
 | |
|             // 
 | |
|             this.itemPanelQat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
 | |
|                         | System.Windows.Forms.AnchorStyles.Right)));
 | |
|             // 
 | |
|             // 
 | |
|             // 
 | |
|             this.itemPanelQat.AutoScroll = true;
 | |
|             this.itemPanelQat.BackgroundStyle.Class = DevComponents.DotNetBar.Rendering.ElementStyleClassKeys.ItemPanelKey;
 | |
|             this.itemPanelQat.Style = eDotNetBarStyle.StyleManagerControlled;
 | |
|             this.itemPanelQat.EnableDragDrop = true;
 | |
|             this.itemPanelQat.FadeEffect = false;
 | |
|             this.itemPanelQat.LayoutOrientation = DevComponents.DotNetBar.eOrientation.Vertical;
 | |
|             #if!TRIAL
 | |
|             this.itemPanelQat.LicenseKey = "F962CEC7-CD8F-4911-A9E9-CAB39962FC1F";
 | |
|             #endif
 | |
|             this.itemPanelQat.Location = new System.Drawing.Point(266, 46);
 | |
|             this.itemPanelQat.Name = "itemPanelQat";
 | |
|             this.itemPanelQat.Size = new System.Drawing.Size(173, 257);
 | |
|             this.itemPanelQat.TabIndex = 5;
 | |
|             this.itemPanelQat.Text = "itemPanelCommands";
 | |
|             this.itemPanelQat.DragDrop += new System.Windows.Forms.DragEventHandler(this.itemPanelQat_DragDrop);
 | |
|             this.itemPanelQat.UserCustomize += new EventHandler(this.itemPanelQat_UserCustomize);
 | |
|             this.itemPanelQat.KeyUp += new KeyEventHandler(ItemPanelKeyUp);
 | |
|             this.itemPanelQat.ItemDoubleClick += new MouseEventHandler(ItemPanelQatDoubleClick);
 | |
|             // 
 | |
|             // buttonAddToQat
 | |
|             // 
 | |
|             this.buttonAddToQat.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
 | |
|             this.buttonAddToQat.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
 | |
|             this.buttonAddToQat.Location = new System.Drawing.Point(188, 126);
 | |
|             this.buttonAddToQat.Name = "buttonAddToQat";
 | |
|             this.buttonAddToQat.Size = new System.Drawing.Size(73, 21);
 | |
|             this.buttonAddToQat.TabIndex = 3;
 | |
|             this.buttonAddToQat.Text = "&Add >>";
 | |
|             this.buttonAddToQat.Click += new System.EventHandler(this.buttonAddToQat_Click);
 | |
|             // 
 | |
|             // buttonRemoveFromQat
 | |
|             // 
 | |
|             this.buttonRemoveFromQat.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
 | |
|             this.buttonRemoveFromQat.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
 | |
|             this.buttonRemoveFromQat.Location = new System.Drawing.Point(188, 153);
 | |
|             this.buttonRemoveFromQat.Name = "buttonRemoveFromQat";
 | |
|             this.buttonRemoveFromQat.Size = new System.Drawing.Size(73, 21);
 | |
|             this.buttonRemoveFromQat.TabIndex = 4;
 | |
|             this.buttonRemoveFromQat.Text = "&Remove";
 | |
|             this.buttonRemoveFromQat.Click += new System.EventHandler(this.buttonRemoveFromQat_Click);
 | |
|             // 
 | |
|             // comboCategories
 | |
|             // 
 | |
|             this.comboCategories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 | |
|                         | System.Windows.Forms.AnchorStyles.Right)));
 | |
|             this.comboCategories.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
 | |
|             this.comboCategories.Location = new System.Drawing.Point(9, 19);
 | |
|             this.comboCategories.Name = "comboCategories";
 | |
|             this.comboCategories.Size = new System.Drawing.Size(173, 21);
 | |
|             this.comboCategories.Sorted = true;
 | |
|             this.comboCategories.TabIndex = 1;
 | |
|             this.comboCategories.SelectedIndexChanged += new System.EventHandler(this.comboCategories_SelectedIndexChanged);
 | |
|             this.comboCategories.Style = eDotNetBarStyle.Office2007;
 | |
|             this.comboCategories.DrawMode = DrawMode.OwnerDrawFixed;
 | |
|             this.comboCategories.ThemeAware = false;
 | |
|             // 
 | |
|             // labelCategories
 | |
|             // 
 | |
|             this.labelCategories.AutoSize = true;
 | |
|             this.labelCategories.BackColor = System.Drawing.Color.Transparent;
 | |
|             this.labelCategories.Location = new System.Drawing.Point(6, 3);
 | |
|             this.labelCategories.Name = "labelCategories";
 | |
|             this.labelCategories.Size = new System.Drawing.Size(123, 13);
 | |
|             this.labelCategories.TabIndex = 0;
 | |
|             this.labelCategories.Text = "&Choose commands from:";
 | |
|             // 
 | |
|             // checkQatBelowRibbon
 | |
|             // 
 | |
|             this.checkQatBelowRibbon.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 | |
|             this.checkQatBelowRibbon.BackColor = System.Drawing.Color.Transparent;
 | |
|             this.checkQatBelowRibbon.Location = new System.Drawing.Point(9, 311);
 | |
|             this.checkQatBelowRibbon.Name = "checkQatBelowRibbon";
 | |
|             this.checkQatBelowRibbon.Size = new System.Drawing.Size(420, 17);
 | |
|             this.checkQatBelowRibbon.TabIndex = 6;
 | |
|             this.checkQatBelowRibbon.Text = "&Place Quick Access Toolbar below the Ribbon";
 | |
|             this.checkQatBelowRibbon.CheckedChangedEx += new Controls.CheckBoxXChangeEventHandler(this.checkQatBelowRibbon_CheckedChanged);
 | |
|             // 
 | |
|             // QatCustomizePanel
 | |
|             // 
 | |
|             this.BackColor = System.Drawing.Color.Transparent;
 | |
|             this.Controls.Add(this.comboCategories);
 | |
|             this.Controls.Add(this.checkQatBelowRibbon);
 | |
|             this.Controls.Add(this.labelCategories);
 | |
|             this.Controls.Add(this.buttonRemoveFromQat);
 | |
|             this.Controls.Add(this.buttonAddToQat);
 | |
|             this.Controls.Add(this.itemPanelQat);
 | |
|             this.Controls.Add(this.itemPanelCommands);
 | |
|             this.Name = "QatCustomizePanel";
 | |
|             this.Size = new System.Drawing.Size(444, 334);
 | |
|             this.ResumeLayout(false);
 | |
|             this.PerformLayout();
 | |
| 
 | |
|         }
 | |
| 
 | |
|         private void ItemPanelKeyUp(object sender, KeyEventArgs e)
 | |
|         {
 | |
|             if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
 | |
|             {
 | |
|                 ItemPanel panel = sender as ItemPanel;
 | |
|                 foreach (BaseItem item in panel.Items)
 | |
|                 {
 | |
|                     ButtonItem button = item as ButtonItem;
 | |
|                     if (button != null && button.IsMouseOver && !button.Checked)
 | |
|                     {
 | |
|                         button.Checked = true;
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal Implementation
 | |
|         protected override void OnPaint(PaintEventArgs e)
 | |
|         {
 | |
|             if (this.BackColor== Color.Transparent || this.BackColor.A<255)
 | |
|             {
 | |
|                 base.OnPaintBackground(e);
 | |
|             }
 | |
| 
 | |
|             if (this.BackColor == Color.Transparent)
 | |
|                 return;
 | |
| 
 | |
|             DisplayHelp.FillRectangle(e.Graphics, this.ClientRectangle, this.BackColor);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Loads the items for the customization into the ribbon control. All Ribbon Bars on the ribbon are enumerated and items
 | |
|         /// are added if they have CanCustomize=true.
 | |
|         /// </summary>
 | |
|         /// <param name="rc">Ribbon control to enumerate.</param>
 | |
|         public void LoadItems(RibbonControl rc)
 | |
|         {
 | |
|             m_Categories.Clear();
 | |
|             itemPanelCommands.Items.Clear();
 | |
|             itemPanelQat.Items.Clear();
 | |
| 
 | |
|             LoadQatItems(rc);
 | |
| 
 | |
|             if (rc.CategorizeMode == eCategorizeMode.Categories)
 | |
|                 LoadByCategory(rc);
 | |
|             else
 | |
|                 LoadByRibbonBar(rc);
 | |
| 
 | |
|             LoadCategories();
 | |
| 
 | |
|             checkQatBelowRibbon.Checked = rc.QatPositionedBelowRibbon;
 | |
|             checkQatBelowRibbon.Visible = rc.EnableQatPlacement;
 | |
|             m_DataChanged = false;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Loads the items for the customization from MetroTab registered toolbars. All registered Toolbars are enumerated and items
 | |
|         /// are added if they have CanCustomize=true.
 | |
|         /// </summary>
 | |
|         /// <param name="tab">MetroTab control to enumerate.</param>
 | |
|         public void LoadItems(MetroShell tab)
 | |
|         {
 | |
|             m_Categories.Clear();
 | |
|             itemPanelCommands.Items.Clear();
 | |
|             itemPanelQat.Items.Clear();
 | |
| 
 | |
|             LoadQatItems(tab);
 | |
| 
 | |
|             if (tab.CategorizeMode == eMetroCategorizeMode.Categories)
 | |
|                 LoadByCategory(tab);
 | |
|             else
 | |
|                 LoadByMetroToolbar(tab);
 | |
| 
 | |
|             LoadCategories();
 | |
| 
 | |
|             checkQatBelowRibbon.Visible = false;
 | |
|             m_DataChanged = false;
 | |
|         }
 | |
| 
 | |
|         #region By Category Loading
 | |
|         private void LoadByCategory(RibbonControl rc)
 | |
|         {
 | |
|             // Loop through all RibbonBars and add the items
 | |
|             foreach (Control panel in rc.Controls)
 | |
|             {
 | |
|                 LoadByCategory(panel);
 | |
|             }
 | |
| 
 | |
|             BaseItem startButton = rc.GetApplicationButton();
 | |
|             if (startButton!=null)
 | |
|             {
 | |
|                 LoadByCategory(startButton);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void LoadByCategory(MetroShell tab)
 | |
|         {
 | |
|             // Loop through all RibbonBars and add the items
 | |
|             List<IOwner> toolbars = tab.RegisteredToolbars;
 | |
|             foreach (IOwner toolbar in toolbars)
 | |
|             {
 | |
|                 if (toolbar is MetroToolbar)
 | |
|                     LoadByCategory((MetroToolbar)toolbar);
 | |
|             }
 | |
| 
 | |
|             BaseItem startButton = tab.GetApplicationButton();
 | |
|             if (startButton != null)
 | |
|             {
 | |
|                 LoadByCategory(startButton);
 | |
|             }
 | |
|         }
 | |
|         private void LoadByCategory(MetroToolbar toolbar)
 | |
|         {
 | |
|             foreach (BaseItem item in toolbar.Items)
 | |
|                 LoadByCategory(item);
 | |
|             foreach (BaseItem item in toolbar.ExtraItems)
 | |
|                 LoadByCategory(item);
 | |
|         }
 | |
| 
 | |
|         private void LoadByCategory(Control panel)
 | |
|         {
 | |
|             if (panel is RibbonBar)
 | |
|                 LoadByCategory(panel as RibbonBar);
 | |
|             foreach (Control c in panel.Controls)
 | |
|                 LoadByCategory(c);
 | |
|         }
 | |
| 
 | |
|         private void LoadByCategory(RibbonBar bar)
 | |
|         {
 | |
|             foreach (BaseItem item in bar.Items)
 | |
|                 LoadByCategory(item);
 | |
|         }
 | |
| 
 | |
|         private void LoadByCategory(BaseItem item)
 | |
|         {
 | |
|             if (CanCustomizeItem(item))
 | |
|             {
 | |
|                 string cat = GetCategory(item);
 | |
|                 ArrayList items = m_Categories[cat] as ArrayList;
 | |
|                 if (items == null)
 | |
|                 {
 | |
|                     items = new ArrayList();
 | |
|                     m_Categories.Add(cat, items);
 | |
|                 }
 | |
|                 items.Add(GetCustomizeRepresentation(item));
 | |
|             }
 | |
| 
 | |
|             foreach (BaseItem child in item.SubItems)
 | |
|                 LoadByCategory(child);
 | |
| 
 | |
|             if (item is GalleryContainer)
 | |
|             {
 | |
|                 GalleryContainer gallery = item as GalleryContainer;
 | |
|                 foreach (BaseItem child in gallery.PopupGalleryItems)
 | |
|                     LoadByCategory(child);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private string GetCategory(BaseItem item)
 | |
|         {
 | |
|             if (item.Category != "")
 | |
|                 return item.Category;
 | |
|             return "Unassigned";
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Load by Ribbon or Toolbar
 | |
|         private void LoadByRibbonBar(RibbonControl rc)
 | |
|         {
 | |
|             // Loop through all RibbonBars and add the items
 | |
|             foreach (Control panel in rc.Controls)
 | |
|             {
 | |
|                 LoadByRibbonBar(panel);
 | |
|             }
 | |
| 
 | |
|             BaseItem startButton = rc.GetApplicationButton();
 | |
|             if (startButton!=null)
 | |
|             {
 | |
|                 LoadByRibbonBar(startButton, GetRibbonBarCategory(startButton.Text));
 | |
|             }
 | |
|         }
 | |
|         private void LoadByMetroToolbar(MetroShell rc)
 | |
|         {
 | |
|             // Loop through all RibbonBars and add the items
 | |
|             List<IOwner> toolbars = rc.RegisteredToolbars;
 | |
|             foreach (IOwner owner in toolbars)
 | |
|             {
 | |
|                 if (owner is MetroToolbar)
 | |
|                 {
 | |
|                     LoadByMetroToolbar((MetroToolbar)owner);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             BaseItem startButton = rc.GetApplicationButton();
 | |
|             if (startButton != null)
 | |
|             {
 | |
|                 LoadByRibbonBar(startButton, GetMetroToolbarCategory(startButton.Text));
 | |
|             }
 | |
|         }
 | |
|         private void LoadByMetroToolbar(MetroToolbar bar)
 | |
|         {
 | |
|             foreach (BaseItem item in bar.Items)
 | |
|                 LoadByRibbonBar(item, GetMetroToolbarCategory(bar.Text));
 | |
|             foreach (BaseItem item in bar.ExtraItems)
 | |
|                 LoadByRibbonBar(item, GetMetroToolbarCategory(bar.Text));
 | |
|         }
 | |
| 
 | |
|         private void LoadByRibbonBar(Control panel)
 | |
|         {
 | |
|             if (panel is RibbonBar)
 | |
|                 LoadByRibbonBar(panel as RibbonBar);
 | |
|             foreach (Control c in panel.Controls)
 | |
|                 LoadByRibbonBar(c);
 | |
|         }
 | |
| 
 | |
|         private void LoadByRibbonBar(RibbonBar bar)
 | |
|         {
 | |
|             foreach (BaseItem item in bar.Items)
 | |
|                 LoadByRibbonBar(item, GetRibbonBarCategory(bar.Text));
 | |
|         }
 | |
| 
 | |
|         private string GetRibbonBarCategory(string barText)
 | |
|         {
 | |
|             StringBuilder ret = new StringBuilder(barText.Length);
 | |
|             for (int i = 0; i < barText.Length; i++)
 | |
|             {
 | |
|                 if (barText[i] == '&')
 | |
|                 {
 | |
|                     if (i + 1 < barText.Length && barText[i + 1] == '&')
 | |
|                         ret.Append(barText[i]);
 | |
|                     else
 | |
|                         continue;
 | |
|                 }
 | |
|                 else
 | |
|                     ret.Append(barText[i]);
 | |
|             }
 | |
| 
 | |
|             return ret.ToString();
 | |
|         }
 | |
|         private string GetMetroToolbarCategory(string barText)
 | |
|         {
 | |
|             StringBuilder ret = new StringBuilder(barText.Length);
 | |
|             for (int i = 0; i < barText.Length; i++)
 | |
|             {
 | |
|                 if (barText[i] == '&')
 | |
|                 {
 | |
|                     if (i + 1 < barText.Length && barText[i + 1] == '&')
 | |
|                         ret.Append(barText[i]);
 | |
|                     else
 | |
|                         continue;
 | |
|                 }
 | |
|                 else
 | |
|                     ret.Append(barText[i]);
 | |
|             }
 | |
| 
 | |
|             return ret.ToString();
 | |
|         }
 | |
| 
 | |
|         private void LoadByRibbonBar(BaseItem item, string category)
 | |
|         {
 | |
|             if (CanCustomizeItem(item))
 | |
|             {
 | |
|                 ArrayList items = m_Categories[category] as ArrayList;
 | |
|                 if (items == null)
 | |
|                 {
 | |
|                     items = new ArrayList();
 | |
|                     m_Categories.Add(category, items);
 | |
|                 }
 | |
|                 items.Add(GetCustomizeRepresentation(item));
 | |
|             }
 | |
| 
 | |
|             foreach (BaseItem child in item.SubItems)
 | |
|                 LoadByRibbonBar(child, category);
 | |
| 
 | |
|             if (item is GalleryContainer)
 | |
|             {
 | |
|                 GalleryContainer gallery = item as GalleryContainer;
 | |
|                 foreach (BaseItem child in gallery.PopupGalleryItems)
 | |
|                     LoadByRibbonBar(child, category);
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         private void LoadQatItems(RibbonControl rc)
 | |
|         {
 | |
|             int count = rc.QuickToolbarItems.Count;
 | |
|             int start = 0;
 | |
| 
 | |
|             BaseItem startButton = rc.GetApplicationButton();
 | |
|             if (startButton != null)
 | |
|                 start = rc.QuickToolbarItems.IndexOf(startButton) + 1;
 | |
| 
 | |
|             for (int i = start; i < count; i++)
 | |
|             {
 | |
|                 BaseItem item = rc.QuickToolbarItems[i];
 | |
|                 if (IsSystemItem(item))
 | |
|                     continue;
 | |
|                 BaseItem custItem = GetCustomizeRepresentation(item);
 | |
|                 custItem.Tag = null;
 | |
|                 if (!item.CanCustomize) custItem.Visible = false;
 | |
|                 itemPanelQat.Items.Add(custItem);
 | |
|             }
 | |
|         }
 | |
|         private void LoadQatItems(MetroShell tab)
 | |
|         {
 | |
|             int count = tab.QuickToolbarItems.Count;
 | |
|             int start = 0;
 | |
| 
 | |
|             BaseItem startButton = tab.GetApplicationButton();
 | |
|             if (startButton != null)
 | |
|                 start = tab.QuickToolbarItems.IndexOf(startButton) + 1;
 | |
| 
 | |
|             for (int i = start; i < count; i++)
 | |
|             {
 | |
|                 BaseItem item = tab.QuickToolbarItems[i];
 | |
|                 if (IsSystemItem(item))
 | |
|                     continue;
 | |
|                 BaseItem custItem = GetCustomizeRepresentation(item);
 | |
|                 custItem.Tag = null;
 | |
|                 if (!item.CanCustomize) custItem.Visible = false;
 | |
|                 itemPanelQat.Items.Add(custItem);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool IsSystemItem(BaseItem item)
 | |
|         {
 | |
|             if (item.SystemItem || item is ItemContainer || item is CustomizeItem || item is SystemCaptionItem)
 | |
|                 return true;
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         private ButtonItem GetCustomizeRepresentation(BaseItem item)
 | |
|         {
 | |
|             ButtonItem ret = new ButtonItem(item.Name);
 | |
|             ret.Text = item.Text;
 | |
|             ret.ButtonStyle = eButtonStyle.ImageAndText;
 | |
|             ret.ImagePaddingVertical = 4;
 | |
|             ret.OptionGroup = "sys";
 | |
|             ret.GlobalItem = false;
 | |
|             if (ret.Text == "")
 | |
|                 ret.Text = "Unassigned";
 | |
|             ret.Tag = item;
 | |
| 
 | |
|             if (item is ButtonItem)
 | |
|             {
 | |
|                 ButtonItem b = item as ButtonItem;
 | |
|                 if (b.ImageSmall != null)
 | |
|                 {
 | |
|                     ret.Image = b.ImageSmall;
 | |
|                     if (b.ImageSmall.Width != 16 || b.ImageSmall.Height != 16)
 | |
|                         ret.ImageFixedSize = new Size(16, 16);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     CompositeImage image = b.GetImage(ImageState.Default, Color.Black);
 | |
|                     if (image != null)
 | |
|                     {
 | |
|                         if (image.IsIcon)
 | |
|                             ret.Icon = (Icon)image.Icon.Clone();
 | |
|                         else
 | |
|                             ret.Image = image.Image;
 | |
|                         ret.ImageFixedSize = new Size(16, 16);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             else if (item is ComboBoxItem || item is TextBoxItem || item is ControlContainerItem)
 | |
|             {
 | |
|                 ret.ImagePosition = eImagePosition.Right;
 | |
|                 ret.Image = BarFunctions.LoadBitmap("SystemImages.QatCustomizeItemCombo.png");
 | |
|             }
 | |
| 
 | |
|             return ret;
 | |
|         }
 | |
| 
 | |
|         private bool CanCustomizeItem(BaseItem item)
 | |
|         {
 | |
|             if (item == null)
 | |
|                 return false;
 | |
| 
 | |
|             if (!item.CanCustomize || item.SystemItem || item.Name=="tempColorPickerItem")
 | |
|                 return false;
 | |
| 
 | |
|             if (item is ItemContainer || item is GenericItemContainer)
 | |
|                 return false;
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         private void LoadCategories()
 | |
|         {
 | |
|             comboCategories.Items.Clear();
 | |
|             foreach (string key in m_Categories.Keys)
 | |
|                 comboCategories.Items.Add(key);
 | |
|             if (comboCategories.Items.Count > 0)
 | |
|                 comboCategories.SelectedIndex = 0;
 | |
|         }
 | |
| 
 | |
|         private void comboCategories_SelectedIndexChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             if (comboCategories.SelectedIndex < 0)
 | |
|             {
 | |
|                 itemPanelCommands.Items.Clear();
 | |
|                 itemPanelCommands.RecalcLayout();
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             string key = comboCategories.Items[comboCategories.SelectedIndex].ToString();
 | |
|             ArrayList items = m_Categories[key] as ArrayList;
 | |
| 
 | |
|             itemPanelCommands.Items.Clear();
 | |
|             foreach (BaseItem item in items)
 | |
|                 itemPanelCommands.Items.Add(item);
 | |
|             itemPanelCommands.RecalcLayout();
 | |
|         }
 | |
| 
 | |
|         private void ItemPanelCommandsDoubleClick(object sender, MouseEventArgs e)
 | |
|         {
 | |
|             AddCheckedButtonToQat();
 | |
|         }
 | |
| 
 | |
|         private void AddCheckedButtonToQat()
 | |
|         {
 | |
|             ButtonItem buttonChecked = itemPanelCommands.GetChecked();
 | |
|             if (buttonChecked == null)
 | |
|                 return;
 | |
|             if (itemPanelQat.Items.Contains(buttonChecked.Name))
 | |
|                 return;
 | |
| 
 | |
|             ButtonItem copy = buttonChecked.Copy() as ButtonItem;
 | |
|             copy.Checked = false;
 | |
|             itemPanelQat.Items.Add(copy);
 | |
|             copy.Checked = true;
 | |
|             itemPanelQat.RecalcLayout();
 | |
|             m_DataChanged = true;
 | |
| 
 | |
|             int index = itemPanelCommands.Items.IndexOf(buttonChecked) + 1;
 | |
|             if (index == itemPanelCommands.Items.Count)
 | |
|                 return;
 | |
|             buttonChecked = itemPanelCommands.Items[index] as ButtonItem;
 | |
|             if (buttonChecked != null)
 | |
|             {
 | |
|                 buttonChecked.Checked = true;
 | |
|                 itemPanelCommands.EnsureVisible(buttonChecked);
 | |
|             }
 | |
|         }
 | |
|         private void buttonAddToQat_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             AddCheckedButtonToQat();
 | |
|         }
 | |
| 
 | |
|         private void RemoveCheckedButtonFromQat()
 | |
|         {
 | |
|             ButtonItem buttonChecked = itemPanelQat.GetChecked();
 | |
|             if (buttonChecked == null)
 | |
|                 return;
 | |
|             int index = itemPanelQat.Items.IndexOf(buttonChecked);
 | |
|             itemPanelQat.Items.Remove(buttonChecked);
 | |
|             if (index >= 0 && itemPanelQat.Items.Count > 0)
 | |
|             {
 | |
|                 if (index + 1 >= itemPanelQat.Items.Count)
 | |
|                     index = itemPanelQat.Items.Count - 1;
 | |
|                 buttonChecked = itemPanelQat.Items[index] as ButtonItem;
 | |
|                 if (buttonChecked != null)
 | |
|                 {
 | |
|                     buttonChecked.Checked = true;
 | |
|                     itemPanelQat.EnsureVisible(buttonChecked);
 | |
|                 }
 | |
|             }
 | |
|             itemPanelQat.RecalcLayout();
 | |
|             m_DataChanged = true;
 | |
|         }
 | |
|         private void buttonRemoveFromQat_Click(object sender, EventArgs e)
 | |
|         {
 | |
|             RemoveCheckedButtonFromQat();
 | |
|         }
 | |
|         void ItemPanelQatDoubleClick(object sender, MouseEventArgs e)
 | |
|         {
 | |
|             RemoveCheckedButtonFromQat();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value of data changed flag.
 | |
|         /// </summary>
 | |
|         [DefaultValue(false), Browsable(false)]
 | |
|         public bool DataChanged
 | |
|         {
 | |
|             get { return m_DataChanged; }
 | |
|             set { m_DataChanged = value; }
 | |
|         }
 | |
| 
 | |
|         private void itemPanelQat_DragDrop(object sender, DragEventArgs e)
 | |
|         {
 | |
|             m_DataChanged = true;
 | |
|         }
 | |
| 
 | |
|         private void itemPanelQat_UserCustomize(object sender, EventArgs e)
 | |
|         {
 | |
|             m_DataChanged = true;
 | |
|         }
 | |
| 
 | |
|         private void checkQatBelowRibbon_CheckedChanged(object sender, Controls.CheckBoxXChangeEventArgs e)
 | |
|         {
 | |
|             m_DataChanged = true;
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| }
 |