149 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Text;
 | 
						|
using System.Collections;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Provides command related utility methods that register and unregister commands.
 | 
						|
    /// </summary>
 | 
						|
    public class CommandManager
 | 
						|
    {
 | 
						|
        private static Hashtable _CommandBindings = new Hashtable();
 | 
						|
        private static bool _UseReflection = true;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether commands use Reflection to find the property names when applying value to the unknown types. Default value is true.
 | 
						|
        /// Setting this value to false will increase performance if Unknown types are used but it will at same time disable the
 | 
						|
        /// command setting value for these types.
 | 
						|
        /// </summary>
 | 
						|
        public static bool UseReflection
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _UseReflection;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _UseReflection = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private static bool _AutoUpdateLayout = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether layout on the items of type BaseItem is automatically updated when command text or other property changes which requires layout updated. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        public static bool AutoUpdateLayout
 | 
						|
        {
 | 
						|
            get { return _AutoUpdateLayout; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_AutoUpdateLayout != value)
 | 
						|
                {
 | 
						|
                    _AutoUpdateLayout = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Connects the Command Source to the Command.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="commandSource">Command source to connect to the command.</param>
 | 
						|
        /// <param name="command">Reference to the command.</param>
 | 
						|
        public static void RegisterCommand(ICommandSource commandSource, ICommand command)
 | 
						|
        {
 | 
						|
            if (commandSource == null)
 | 
						|
                throw new NullReferenceException("commandSource cannot be null");
 | 
						|
            if (command == null)
 | 
						|
                throw new NullReferenceException("command cannot be null");
 | 
						|
 | 
						|
            ArrayList subscribers = null;
 | 
						|
            if (_CommandBindings.Contains(command))
 | 
						|
            {
 | 
						|
                subscribers = (ArrayList)_CommandBindings[command];
 | 
						|
                if (!subscribers.Contains(commandSource))
 | 
						|
                    subscribers.Add(commandSource);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                subscribers = new ArrayList();
 | 
						|
                subscribers.Add(commandSource);
 | 
						|
                _CommandBindings.Add(command, subscribers);
 | 
						|
            }
 | 
						|
            command.CommandSourceRegistered(commandSource);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Disconnects command source from the command.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="commandSource">Reference to command source.</param>
 | 
						|
        /// <param name="command">Reference to the command.</param>
 | 
						|
        public static void UnRegisterCommandSource(ICommandSource commandSource, ICommand command)
 | 
						|
        {
 | 
						|
            if (commandSource == null)
 | 
						|
                throw new NullReferenceException("commandSource cannot be null");
 | 
						|
            if (command == null)
 | 
						|
                throw new NullReferenceException("command cannot be null");
 | 
						|
            if (_CommandBindings.Contains(command))
 | 
						|
            {
 | 
						|
                ArrayList subscribers = (ArrayList)_CommandBindings[command];
 | 
						|
                if (subscribers.Contains(commandSource))
 | 
						|
                    subscribers.Remove(commandSource);
 | 
						|
            }
 | 
						|
            command.CommandSourceUnregistered(commandSource);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Unregister command from all subscribers. Called when command is disposed.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="command">Command to unregister.</param>
 | 
						|
        public static void UnRegisterCommand(ICommand command)
 | 
						|
        {
 | 
						|
            if (command == null)
 | 
						|
                throw new NullReferenceException("command cannot be null");
 | 
						|
 | 
						|
            if (_CommandBindings.Contains(command))
 | 
						|
                _CommandBindings.Remove(command);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets an array of Command Sources that are connected with the command. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="command">Reference to command</param>
 | 
						|
        /// <returns>An array of command sources.</returns>
 | 
						|
        public static ArrayList GetSubscribers(ICommand command)
 | 
						|
        {
 | 
						|
            if (command == null)
 | 
						|
                throw new NullReferenceException("command cannot be null");
 | 
						|
            ArrayList subscribers = null;
 | 
						|
            if (_CommandBindings.Contains(command))
 | 
						|
                subscribers = (ArrayList)((ArrayList)_CommandBindings[command]).Clone();
 | 
						|
            else
 | 
						|
                subscribers = new ArrayList();
 | 
						|
 | 
						|
            return subscribers;
 | 
						|
        }
 | 
						|
 | 
						|
        internal static void ExecuteCommand(ICommandSource commandSource)
 | 
						|
        {
 | 
						|
            if (commandSource == null)
 | 
						|
                throw new NullReferenceException("commandSource cannot be null");
 | 
						|
            ICommand command=commandSource.Command;
 | 
						|
            if(command == null)
 | 
						|
                throw new NullReferenceException("commandSource.Command cannot be null");
 | 
						|
 | 
						|
            command.Execute(commandSource);
 | 
						|
        }
 | 
						|
 | 
						|
        internal static void ExecuteCommand(ICommandSource commandSource, ICommand command)
 | 
						|
        {
 | 
						|
            if (commandSource == null)
 | 
						|
                throw new NullReferenceException("commandSource cannot be null");
 | 
						|
            if (command == null)
 | 
						|
                throw new NullReferenceException("commandSource.Command cannot be null");
 | 
						|
 | 
						|
            command.Execute(commandSource);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |