906 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			906 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Text;
 | |
| using System.ComponentModel;
 | |
| using System.Drawing;
 | |
| using System.Collections;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.DotNetBar
 | |
| {
 | |
|     #region ICommand
 | |
|     /// <summary>
 | |
|     /// Defines an interface that represents the Command associated with an BaseItem instance.
 | |
|     /// </summary>
 | |
|     public interface ICommand
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Executes the command without specifying the source of the command.
 | |
|         /// </summary>
 | |
|         void Execute();
 | |
|         /// <summary>
 | |
|         /// Executes the command and specifies the source of the command.
 | |
|         /// </summary>
 | |
|         void Execute(ICommandSource commandSource);
 | |
|         /// <summary>
 | |
|         /// Executes the code associated with the command.
 | |
|         /// </summary>
 | |
|         event EventHandler Executed;
 | |
|         /// <summary>
 | |
|         /// Provides the opportunity to cancel the execution of the command. This event occurs before the Executed event.
 | |
|         /// </summary>
 | |
|         event CancelEventHandler PreviewExecuted;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the text associated with the items that are using command.
 | |
|         /// </summary>
 | |
|         string Text { get; set; }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value of Checked property if item associated with the command support it.
 | |
|         /// </summary>
 | |
|         bool Checked { get; set; }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value of Visible property if item associated with the command support it.
 | |
|         /// </summary>
 | |
|         bool Visible { get; set; }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value of Image property if item associated with the command support it.
 | |
|         /// </summary>
 | |
|         Image Image { get; set; }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value of small image (ImageSmall) property if item associated with the command support it.
 | |
|         /// </summary>
 | |
|         Image ImageSmall { get; set; }
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value of Enabled property for items associated with the command.
 | |
|         /// </summary>
 | |
|         bool Enabled { get; set; }
 | |
|         /// <summary>
 | |
|         /// Called when CommandSource is registered for the command.
 | |
|         /// </summary>
 | |
|         /// <param name="source">CommandSource registered.</param>
 | |
|         void CommandSourceRegistered(ICommandSource source);
 | |
|         /// <summary>
 | |
|         /// Called when CommandSource is unregistered for the command.
 | |
|         /// </summary>
 | |
|         /// <param name="source">CommandSource unregistered.</param>
 | |
|         void CommandSourceUnregistered(ICommandSource source);
 | |
|         /// <summary>
 | |
|         /// Sets an property value on the subscribers through the reflection. If subscriber does not have
 | |
|         /// specified property with value type its value is not set.
 | |
|         /// </summary>
 | |
|         /// <param name="propertyName">Property name to set.</param>
 | |
|         /// <param name="value">Property value.</param>
 | |
|         void SetValue(string propertyName, object value);
 | |
|     }
 | |
|     #endregion
 | |
| 
 | |
|     #region ICommandSource
 | |
|     /// <summary>
 | |
|     /// Defines an interface for the object that knows how to invoke a command.
 | |
|     /// </summary>
 | |
|     public interface ICommandSource
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// Gets or sets the command that will be executed when the command source is invoked.
 | |
|         /// </summary>
 | |
|         ICommand Command { get;set;}
 | |
|         /// <summary>
 | |
|         /// Gets or sets user defined data value that can be passed to the command when it is executed.
 | |
|         /// </summary>
 | |
|         object CommandParameter { get;set;}
 | |
|     }
 | |
|     #endregion
 | |
| 
 | |
|     #region Command
 | |
|     /// <summary>
 | |
|     /// Defines an command that is associated with an instance of BaseItem
 | |
|     /// </summary>
 | |
|     [ToolboxItem(true), DesignTimeVisible(true), ToolboxBitmap(typeof(Command), "Command.ico"), DefaultEvent("Executed")]
 | |
|     public class Command : Component, ICommand
 | |
|     {
 | |
|         #region ICommand Members
 | |
|         /// <summary>
 | |
|         /// Initializes a new instance of the Command class with the specified container.
 | |
|         /// </summary>
 | |
|         /// <param name="container">An IContainer that represents the container for the command.</param>
 | |
|         public Command(IContainer container)
 | |
|             : this()
 | |
|         {
 | |
|             container.Add(this);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Initializes a new instance of the Command class with the specified container.
 | |
|         /// </summary>
 | |
|         /// <param name="container">An IContainer that represents the container for the command.</param>
 | |
|         public Command(IContainer container, EventHandler commandExecutedEventHandler)
 | |
|             : this()
 | |
|         {
 | |
|             container.Add(this);
 | |
|             Executed += commandExecutedEventHandler;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Initializes a new instance of the Command class with the specified execute event handler.
 | |
|         /// </summary>
 | |
|         public Command(EventHandler commandExecutedEventHandler)
 | |
|             : this()
 | |
|         {
 | |
|             Executed += commandExecutedEventHandler;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Initializes a new instance of the Command class.
 | |
|         /// </summary>
 | |
|         public Command()
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Executes the command.
 | |
|         /// </summary>
 | |
|         public virtual void Execute()
 | |
|         {
 | |
|             Execute(null);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Executes the command.
 | |
|         /// </summary>
 | |
|         public virtual void Execute(ICommandSource commandSource)
 | |
|         {
 | |
|             CancelEventArgs e = new CancelEventArgs();
 | |
|             OnPreviewExecuted(commandSource, e);
 | |
|             if (e.Cancel) return;
 | |
| 
 | |
|             OnExecuted(commandSource, new EventArgs());
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Executes the code associated with the command when an instance of BaseItem is clicked.
 | |
|         /// </summary>
 | |
|         public event EventHandler Executed;
 | |
|         /// <summary>
 | |
|         /// Raises the Execute event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event data.</param>
 | |
|         protected virtual void OnExecuted(ICommandSource commandSource, EventArgs e)
 | |
|         {
 | |
|             EventHandler eh = Executed;
 | |
|             if (eh != null)
 | |
|                 eh(commandSource, e);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Occurs before the Executed event and allows you to cancel the firing of Executed event.
 | |
|         /// </summary>
 | |
|         public event CancelEventHandler PreviewExecuted;
 | |
|         /// <summary>
 | |
|         /// Raises the PreviewExecuted event.
 | |
|         /// </summary>
 | |
|         /// <param name="e">Provides event data.</param>
 | |
|         protected virtual void OnPreviewExecuted(ICommandSource commandSource, CancelEventArgs e)
 | |
|         {
 | |
|             CancelEventHandler eh = PreviewExecuted;
 | |
|             if (eh != null)
 | |
|                 eh(commandSource, e);
 | |
|         }
 | |
| 
 | |
|         private string _Text = null;
 | |
|         private bool _TextSet = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the Text that is assigned to all command sources that are using this command and have Text property.
 | |
|         /// </summary>
 | |
|         [Localizable(true), Description("Indicates Text that is assigned to all command sources that are using this command and have Text property.")]
 | |
|         [Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
 | |
|         public string Text
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _Text;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _Text = value;
 | |
|                 _TextSet = true;
 | |
|                 OnTextChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called when Text property is set.
 | |
|         /// </summary>
 | |
|         protected virtual void OnTextChanged()
 | |
|         {
 | |
|             SetTextProperty();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets the Text property on all subscribers to the command Text.
 | |
|         /// </summary>
 | |
|         protected virtual void SetTextProperty()
 | |
|         {
 | |
|             IsSyncingCommand = true;
 | |
|             try
 | |
|             {
 | |
|                 ArrayList list = GetSubscribers();
 | |
|                 ArrayList removeList = new ArrayList(list.Count);
 | |
|                 string text = _Text;
 | |
|                 if (this.GetDesignMode())
 | |
|                 {
 | |
|                     foreach (object item in list)
 | |
|                     {
 | |
|                         if (IsTextPropertyChanged(item, text))
 | |
|                             SetPropertyValue(item, "Text", text);
 | |
|                         else
 | |
|                             removeList.Add(item);
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     foreach (object item in list)
 | |
|                     {
 | |
|                         if (IsTextPropertyChanged(item, text))
 | |
|                             SetTextProperty(item, text);
 | |
|                         else
 | |
|                             removeList.Add(item);
 | |
|                     }
 | |
|                 }
 | |
|                 foreach (object item in removeList)
 | |
|                     list.Remove(item);
 | |
|                 RecalcLayout(list);
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 IsSyncingCommand = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool IsTextPropertyChanged(object item, string text)
 | |
|         {
 | |
|             if (item is ComboBoxItem)
 | |
|             {
 | |
|                 ComboBoxItem cb = item as ComboBoxItem;
 | |
|                 if (cb.DropDownStyle == ComboBoxStyle.DropDownList)
 | |
|                 {
 | |
|                     if (cb.SelectedItem is ComboBoxItem)
 | |
|                         return ((ComboBoxItem)cb.SelectedItem).Text != text;
 | |
|                     else if (cb.SelectedItem != null)
 | |
|                         return cb.SelectedItem.ToString() != text;
 | |
|                     return cb.ComboBoxEx.Text != text;
 | |
|                 }
 | |
|                 else
 | |
|                     return cb.Text != text;
 | |
|             }
 | |
|             else if (item is BaseItem)
 | |
|                 return ((BaseItem)item).Text != text;
 | |
|             else if (item is TabItem)
 | |
|                 return ((TabItem)item).Text != text;
 | |
|             else if (item is Control)
 | |
|                 return ((Control)item).Text != text;
 | |
|             else
 | |
|                 return GetPropertyValue(item, "Text") != text;
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetTextProperty(object item, string text)
 | |
|         {
 | |
|             if (item is ComboBoxItem)
 | |
|             {
 | |
|                 ComboBoxItem cb = item as ComboBoxItem;
 | |
|                 if (cb.DropDownStyle == ComboBoxStyle.DropDownList)
 | |
|                 {
 | |
|                     if (cb.ComboBoxEx.Text != text)
 | |
|                     {
 | |
|                         if (text == "" || text == null)
 | |
|                             cb.SelectedIndex = -1;
 | |
|                         else
 | |
|                             cb.SelectedIndex = cb.ComboBoxEx.FindString(text);
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                     cb.Text = text;
 | |
|             }
 | |
|             else if (item is BaseItem)
 | |
|                 ((BaseItem)item).Text = text;
 | |
|             else if (item is TabItem)
 | |
|                 ((TabItem)item).Text = text;
 | |
|             else if (item is Control)
 | |
|                 ((Control)item).Text = text;
 | |
|             else
 | |
|                 SetPropertyValue(item, "Text", text);
 | |
|         }
 | |
| 
 | |
|         private void RecalcLayout(ArrayList list)
 | |
|         {
 | |
|             if (!CommandManager.AutoUpdateLayout)
 | |
|                 return;
 | |
|             ArrayList processedControls = new ArrayList(list.Count);
 | |
|             foreach (object item in list)
 | |
|             {
 | |
|                 if (item is BaseItem)
 | |
|                 {
 | |
|                     Control c = ((BaseItem)item).ContainerControl as Control;
 | |
|                     if (BarFunctions.IsHandleValid(c) && !processedControls.Contains(c))
 | |
|                     {
 | |
|                         InvokeRecalcLayout(c);
 | |
|                         processedControls.Add(c);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void InvokeRecalcLayout(Control control)
 | |
|         {
 | |
|             if (control is Bar)
 | |
|                 ((Bar)control).RecalcLayout();
 | |
|             else if (control is RibbonBar && ((RibbonBar)control).Parent is RibbonPanel && !((RibbonPanel)((RibbonBar)control).Parent).DefaultLayout)
 | |
|             {
 | |
|                 ((RibbonBar)control).RecalcLayout();
 | |
|                 ((RibbonPanel)((RibbonBar)control).Parent).PerformLayout();
 | |
|             }
 | |
|             else if (control is ItemControl)
 | |
|                 ((ItemControl)control).RecalcLayout();
 | |
|             else if (control is BaseItemControl)
 | |
|                 ((BaseItemControl)control).RecalcLayout();
 | |
|             else if (control is MenuPanel)
 | |
|                 ((MenuPanel)control).RecalcLayout();
 | |
|             else if (control is ExplorerBar)
 | |
|                 ((ExplorerBar)control).RecalcLayout();
 | |
|             else if (control is SideBar)
 | |
|                 ((SideBar)control).RecalcLayout();
 | |
|         }
 | |
| 
 | |
|         private bool GetDesignMode()
 | |
|         {
 | |
|             if (this.Site != null) return this.Site.DesignMode;
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetPropertyValue(object item, string propertyName, object value)
 | |
|         {
 | |
|             if (!CommandManager.UseReflection) return;
 | |
| 
 | |
|             PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(item);
 | |
|             PropertyDescriptor prop = properties.Find(propertyName, false);
 | |
|             if (prop != null) prop.SetValue(item, value);
 | |
|         }
 | |
| 
 | |
|         protected virtual object GetPropertyValue(object item, string propertyName)
 | |
|         {
 | |
|             if (!CommandManager.UseReflection) return null;
 | |
| 
 | |
|             PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(item);
 | |
|             PropertyDescriptor prop = properties.Find(propertyName, false);
 | |
|             if (prop != null) return prop.GetValue(item);
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Sets an property value on the subscribers through the reflection. If subscriber does not have
 | |
|         /// specified property with value type its value is not set.
 | |
|         /// </summary>
 | |
|         /// <param name="propertyName">Property name to set.</param>
 | |
|         /// <param name="value">Property value.</param>
 | |
|         public void SetValue(string propertyName, object value)
 | |
|         {
 | |
|             IsSyncingCommand = true;
 | |
| 
 | |
|             try
 | |
|             {
 | |
|                 ArrayList list = GetSubscribers();
 | |
|                 Type valueType = null;
 | |
|                 if (value != null)
 | |
|                     valueType = value.GetType();
 | |
|                 ArrayList processedControls = new ArrayList(list.Count);
 | |
| 
 | |
|                 foreach (object item in list)
 | |
|                 {
 | |
|                     PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(item);
 | |
|                     PropertyDescriptor prop = properties.Find(propertyName, false);
 | |
|                     if (prop != null && (valueType == null || prop.PropertyType == valueType))
 | |
|                     {
 | |
|                         prop.SetValue(item, value);
 | |
|                         processedControls.Add(item);
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 RecalcLayout(processedControls);
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 IsSyncingCommand = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private ArrayList GetSubscribers()
 | |
|         {
 | |
|             return CommandManager.GetSubscribers(this);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets whether property is set and whether it will be applied to items associated with the command.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool ShouldSerializeText()
 | |
|         {
 | |
|             return _TextSet;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Resets the property to its default value and disables its propagation to items that are associated with command.
 | |
|         /// </summary>
 | |
|         public void ResetText()
 | |
|         {
 | |
|             _TextSet = false;
 | |
|             _Text = null;
 | |
|         }
 | |
| 
 | |
|         private bool _Checked = false;
 | |
|         private bool _CheckedSet = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value for the Checked property that is assigned to the command subscribers using this command and have Checked property.
 | |
|         /// </summary>
 | |
|         [Description("Indicates value for the Checked property that is assigned to the command subscribers using this command and have Checked property.")]
 | |
|         public bool Checked
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _Checked;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _Checked = value;
 | |
|                 _CheckedSet = true;
 | |
|                 OnCheckedChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnCheckedChanged()
 | |
|         {
 | |
|             SetCheckedProperty();
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetCheckedProperty()
 | |
|         {
 | |
|             IsSyncingCommand = true;
 | |
|             try
 | |
|             {
 | |
|                 ArrayList list = GetSubscribers();
 | |
|                 bool check = _Checked;
 | |
|                 foreach (object item in list)
 | |
|                 {
 | |
|                     SetCheckedProperty(item, check);
 | |
|                 }
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 IsSyncingCommand = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool _IsSyncingCommand = false;
 | |
|         /// <summary>
 | |
|         /// Gets whether the command is in process of syncing its state to all subscribers.
 | |
|         /// </summary>
 | |
|         [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | |
|         public bool IsSyncingCommand
 | |
|         {
 | |
|             get { return _IsSyncingCommand; }
 | |
|             private set
 | |
|             {
 | |
|                 _IsSyncingCommand = value;
 | |
|             }
 | |
|         }
 | |
|         
 | |
| 
 | |
|         protected virtual void SetCheckedProperty(object item, bool check)
 | |
|         {
 | |
|             if (item is ButtonItem)
 | |
|                 ((ButtonItem)item).Checked = check;
 | |
|             else if (item is ButtonX)
 | |
|                 ((ButtonX)item).Checked = check;
 | |
|             else if (item is CheckBoxItem)
 | |
|                 ((CheckBoxItem)item).Checked = check;
 | |
|             else if (item is SwitchButtonItem)
 | |
|                 ((SwitchButtonItem)item).Value = check;
 | |
|             else
 | |
|                 SetPropertyValue(item, "Checked", check);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets whether property is set and whether it will be applied to items associated with the command.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool ShouldSerializeChecked()
 | |
|         {
 | |
|             return _CheckedSet;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Resets the property to its default value and disables its propagation to items that are associated with command.
 | |
|         /// </summary>
 | |
|         public void ResetChecked()
 | |
|         {
 | |
|             _CheckedSet = false;
 | |
|             _Checked = false;
 | |
|         }
 | |
| 
 | |
|         private bool _Visible = false;
 | |
|         private bool _VisibleSet = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value for the Visible property that is assigned to the command subscribers using this command and have Visible property.
 | |
|         /// </summary>
 | |
|         [Description("Indicates value for the Visible property that is assigned to the command subscribers using this command and have Visible property.")]
 | |
|         public bool Visible
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _Visible;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _Visible = value;
 | |
|                 _VisibleSet = true;
 | |
|                 OnVisibleChanged();
 | |
|             }
 | |
|         }
 | |
|         protected virtual void OnVisibleChanged()
 | |
|         {
 | |
|             SetVisibleProperty();
 | |
|         }
 | |
|         protected virtual void SetVisibleProperty()
 | |
|         {
 | |
|             ArrayList list = GetSubscribers();
 | |
|             bool visible = _Visible;
 | |
|             foreach (object item in list)
 | |
|             {
 | |
|                 SetVisibleProperty(item, visible);
 | |
|             }
 | |
|         }
 | |
|         protected virtual void SetVisibleProperty(object item, bool visible)
 | |
|         {
 | |
|             ArrayList list = GetSubscribers();
 | |
|             if (this.DesignMode)
 | |
|                 SetPropertyValue(item, "Visible", visible);
 | |
|             else
 | |
|             {
 | |
|                 if (item is BaseItem)
 | |
|                     ((BaseItem)item).Visible = visible;
 | |
|                 else if (item is Control)
 | |
|                     ((Control)item).Visible = visible;
 | |
|                 else
 | |
|                     SetPropertyValue(item, "Visible", visible);
 | |
|             }
 | |
|             RecalcLayout(list);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets whether property is set and whether it will be applied to items associated with the command.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool ShouldSerializeVisible()
 | |
|         {
 | |
|             return _VisibleSet;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Resets the property to its default value and disables its propagation to items that are associated with command.
 | |
|         /// </summary>
 | |
|         public void ResetVisible()
 | |
|         {
 | |
|             _VisibleSet = false;
 | |
|             _Visible = false;
 | |
|         }
 | |
| 
 | |
|         private Image _Image = null;
 | |
|         private bool _ImageSet = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the image that is assigned to the command subscribers using this command and have Image property.
 | |
|         /// </summary>
 | |
|         [Description("Indicates image that is assigned to the command subscribers using this command and have Image property."), Localizable(true)]
 | |
|         public Image Image
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _Image;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _Image = value;
 | |
|                 _ImageSet = true;
 | |
|                 OnImageChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnImageChanged()
 | |
|         {
 | |
|             SetImageProperty();
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetImageProperty()
 | |
|         {
 | |
|             IsSyncingCommand = true;
 | |
| 
 | |
|             try
 | |
|             {
 | |
|                 ArrayList list = GetSubscribers();
 | |
|                 Image image = _Image;
 | |
| 
 | |
|                 if (this.GetDesignMode())
 | |
|                 {
 | |
|                     foreach (object item in list)
 | |
|                     {
 | |
|                         if (item is ButtonItem)
 | |
|                         {
 | |
|                             ButtonItem button = item as ButtonItem;
 | |
|                             bool qatButton = false;
 | |
|                             if (button.ContainerControl is RibbonStrip)
 | |
|                             {
 | |
|                                 RibbonStrip rs = button.ContainerControl as RibbonStrip;
 | |
|                                 if (rs.Parent is RibbonControl && ((RibbonControl)rs.Parent).QuickToolbarItems.Contains(button))
 | |
|                                     qatButton = true;
 | |
|                             }
 | |
|                             else if (button.ContainerControl is Ribbon.QatToolbar)
 | |
|                                 qatButton = true;
 | |
|                             if (qatButton && image != null && (image.Width > 16 || image.Height > 16))
 | |
|                             {
 | |
|                                 button.UseSmallImage = true;
 | |
|                                 if (button.ImageSmall == null)
 | |
|                                     TypeDescriptor.GetProperties(button)["ImageFixedSize"].SetValue(button, new Size(16, 16));
 | |
|                             }
 | |
|                         }
 | |
| 
 | |
|                         SetPropertyValue(item, "Image", image);
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     foreach (object item in list)
 | |
|                     {
 | |
|                         SetImageProperty(item, image);
 | |
|                     }
 | |
|                 }
 | |
|                 RecalcLayout(list);
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 IsSyncingCommand = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetImageProperty(object item, Image image)
 | |
|         {
 | |
|             if (item is ButtonItem)
 | |
|                 ((ButtonItem)item).Image = image;
 | |
|             else if (item is ExplorerBarGroupItem)
 | |
|                 ((ExplorerBarGroupItem)item).Image = image;
 | |
|             else if (item is LabelItem)
 | |
|                 ((LabelItem)item).Image = image;
 | |
|             else if (item is SideBarPanelItem)
 | |
|                 ((SideBarPanelItem)item).Image = image;
 | |
|             else if (item is TabItem)
 | |
|                 ((TabItem)item).Image = image;
 | |
|             else if (item is ButtonX)
 | |
|                 ((ButtonX)item).Image = image;
 | |
|             else if (item is LabelX)
 | |
|                 ((LabelX)item).Image = image;
 | |
|             else if (item is DevComponents.DotNetBar.Controls.ReflectionImage)
 | |
|                 ((DevComponents.DotNetBar.Controls.ReflectionImage)item).Image = image;
 | |
|             else if (item is BubbleButton)
 | |
|                 ((BubbleButton)item).Image = image;
 | |
|             else
 | |
|                 SetPropertyValue(item, "Image", image);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets whether property is set and whether it will be applied to items associated with the command.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool ShouldSerializeImage()
 | |
|         {
 | |
|             return _ImageSet;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Resets the property to its default value and disables its propagation to items that are associated with command.
 | |
|         /// </summary>
 | |
|         public void ResetImage()
 | |
|         {
 | |
|             _ImageSet = false;
 | |
|             _Image = null;
 | |
|         }
 | |
| 
 | |
|         private Image _ImageSmall = null;
 | |
|         private bool _ImageSmallSet = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the small image that is assigned to the command subscribers using this command and have ImageSmall property.
 | |
|         /// </summary>
 | |
|         [Description("Indicates small image that is assigned to the command subscribers using this command and have ImageSmall property."), Localizable(true)]
 | |
|         public Image ImageSmall
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _ImageSmall;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _ImageSmall = value;
 | |
|                 _ImageSmallSet = true;
 | |
|                 OnImageSmallChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnImageSmallChanged()
 | |
|         {
 | |
|             SetImageSmallProperty();
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetImageSmallProperty()
 | |
|         {
 | |
|             IsSyncingCommand = true;
 | |
|             try
 | |
|             {
 | |
|                 ArrayList list = GetSubscribers();
 | |
|                 Image image = _ImageSmall;
 | |
|                 foreach (object item in list)
 | |
|                 {
 | |
|                     SetImageSmallProperty(item, image);
 | |
|                 }
 | |
|                 RecalcLayout(list);
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 IsSyncingCommand = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetImageSmallProperty(object item, Image image)
 | |
|         {
 | |
|             if (item is ButtonItem)
 | |
|                 ((ButtonItem)item).ImageSmall = image;
 | |
|             else
 | |
|                 SetPropertyValue(item, "ImageSmall", image);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets whether property is set and whether it will be applied to items associated with the command.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool ShouldSerializeImageSmall()
 | |
|         {
 | |
|             return _ImageSmallSet;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Resets the property to its default value and disables its propagation to items that are associated with command.
 | |
|         /// </summary>
 | |
|         public void ResetImageSmall()
 | |
|         {
 | |
|             _ImageSmallSet = false;
 | |
|             _ImageSmall = null;
 | |
|         }
 | |
| 
 | |
|         private bool _Enabled = true;
 | |
|         private bool _EnabledSet = false;
 | |
|         /// <summary>
 | |
|         /// Gets or sets the value for Enabled property assigned to the command subscribers using this command and have Enabled property.
 | |
|         /// </summary>
 | |
|         [Description("Indicates value for Enabled property assigned to the command subscribers using this command and have Enabled property.")]
 | |
|         public bool Enabled
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _Enabled;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _Enabled = value;
 | |
|                 _EnabledSet = true;
 | |
|                 OnEnabledChanged();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void OnEnabledChanged()
 | |
|         {
 | |
|             SetEnabledProperty();
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetEnabledProperty()
 | |
|         {
 | |
|             IsSyncingCommand = true;
 | |
|             try
 | |
|             {
 | |
|                 ArrayList list = GetSubscribers();
 | |
|                 bool enabled = _Enabled;
 | |
|                 foreach (object item in list)
 | |
|                 {
 | |
|                     SetEnabledProperty(item, enabled);
 | |
|                 }
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 IsSyncingCommand = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void SetEnabledProperty(object item, bool enabled)
 | |
|         {
 | |
|             if (item is BaseItem)
 | |
|                 ((BaseItem)item).Enabled = enabled;
 | |
|             else if (item is Control)
 | |
|                 ((Control)item).Enabled = enabled;
 | |
|             else
 | |
|                 SetPropertyValue(item, "Enabled", enabled);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Gets whether property is set and whether it will be applied to items associated with the command.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool ShouldSerializeEnabled()
 | |
|         {
 | |
|             return _EnabledSet;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Resets the property to its default value and disables its propagation to items that are associated with command.
 | |
|         /// </summary>
 | |
|         public void ResetEnabled()
 | |
|         {
 | |
|             _EnabledSet = false;
 | |
|             _Enabled = false;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called when CommandSource is registered for the command.
 | |
|         /// </summary>
 | |
|         /// <param name="source">CommandSource registered.</param>
 | |
|         public virtual void CommandSourceRegistered(ICommandSource source)
 | |
|         {
 | |
|             if (source == null || this.GetDesignMode()) return;
 | |
| 
 | |
|             if (_EnabledSet)
 | |
|                 SetEnabledProperty(source, _Enabled);
 | |
|             if (_CheckedSet)
 | |
|                 SetCheckedProperty(source, _Checked);
 | |
|             if(_ImageSet)
 | |
|                 SetImageProperty(source, _Image);
 | |
|             if(_ImageSmallSet)
 | |
|                 SetImageSmallProperty(source, _ImageSmall);
 | |
|             if(_TextSet)
 | |
|                 SetTextProperty(source, _Text);
 | |
|             if (_VisibleSet)
 | |
|                 SetVisibleProperty(source, _Visible);
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called when CommandSource is unregistered for the command.
 | |
|         /// </summary>
 | |
|         /// <param name="source">CommandSource unregistered.</param>
 | |
|         public virtual void CommandSourceUnregistered(ICommandSource source)
 | |
|         {
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region Component Implementation
 | |
|         protected override void Dispose(bool disposing)
 | |
|         {
 | |
|             if(disposing)
 | |
|                 CommandManager.UnRegisterCommand(this);
 | |
|             base.Dispose(disposing);
 | |
|         }
 | |
| 
 | |
|         private string _Name = "";
 | |
|         /// <summary>
 | |
|         /// Returns name of the node that can be used to identify it from the code.
 | |
|         /// </summary>
 | |
|         [Browsable(false), Category("Design"), Description("Indicates the name used to identify node.")]
 | |
|         public string Name
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (this.Site != null)
 | |
|                     _Name = this.Site.Name;
 | |
|                 return _Name;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 if (this.Site != null)
 | |
|                     this.Site.Name = value;
 | |
|                 if (value == null)
 | |
|                     _Name = "";
 | |
|                 else
 | |
|                     _Name = value;
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
|     #endregion
 | |
| }
 |