/// <summary>
        /// Determines whether this factory produces commands
        /// with the specified features.
        /// </summary>
        /// <param name="factory">The command factory.</param>
        /// <param name="features">The features to test.</param>
        /// <returns>
        /// <c>true</c> if the command would have the features; otherwise, <c>false</c>.
        /// </returns>
        public static bool HasFeatures(this ICommandFactory factory, CommandFeatures features)
        {
            if (factory == null) {
                throw new ArgumentNullException("factory");
            }

            return factory.CommandFeatures.HasFlag(features);
        }
        public ICommand this[CommandFeatures features]
        {
            get {
                return Commands[features];
            }

            set {
                Commands[features] = value;
            }
        }
Beispiel #3
0
        public void Register(CommandFeatures features, string name)
        {
            if (this.registeredFeatures.ContainsKey(features)) {
                throw new InvalidOperationException("Features already registered");
            }

            this.registeredFeatures[features] = name;

            if (!this.defaultCommands.ContainsKey(features)) {
                this.defaultCommands[features] = this.commandProvider.GetPreferredCommand(features);
            }
        }
        public CommandProxy GetProxy(CommandFeatures features)
        {
            CommandProxy proxy;

            if (this.proxies.TryGetValue(features, out proxy)) {
                return proxy;
            }

            proxy = new FeaturedCommandProxy(this, features);
            this.proxies[features] = proxy;

            return proxy;
        }
Beispiel #5
0
        /// <summary>
        /// Gets a command marked as preferred for the given features.
        /// </summary>
        /// <param name="commandProvider">The command provider.</param>
        /// <param name="features">The features to test for.</param>
        /// <returns>
        /// An unpopulated instance of the preferred command type, or
        /// null if none such type exists.
        /// </returns>
        public static ICommand GetPreferredCommand(this ICommandProvider commandProvider, CommandFeatures features)
        {
            if (commandProvider == null) {
                throw new ArgumentNullException("commandProvider");
            }

            var factory = GetPreferredCommandFactory(commandProvider.CommandFactories, features);

            if (factory == null) {
                return null;
            }

            return factory.CreateCommand();
        }
        public static Predicate<object> GetFeatureFilterPredicate(CommandFeatures commandFeatures)
        {
            return (obj) => {
                var objAsCommand = obj as ICommand;

                if (objAsCommand != null) {
                    return objAsCommand.HasFeatures(commandFeatures);
                }

                var objAsFactory = obj as ICommandFactory;

                if (objAsFactory != null) {
                    return objAsFactory.HasFeatures(commandFeatures);
                }

                return false;
            };
        }
        public static bool TryGetCommandFeatures(object value, out CommandFeatures commandFeatures)
        {
            if (value is CommandFeatures) {
                commandFeatures = (CommandFeatures) value;

                return true;
            }

            string valueString = value as string;

            if (valueString != null) {
                return Enum.TryParse(valueString, true, out commandFeatures);
            }

            commandFeatures = 0;

            return false;
        }
Beispiel #8
0
        /// <summary>
        /// Gets the command factory marked as preferred for the given features.
        /// </summary>
        /// <param name="commandFactories">The command factories to test.</param>
        /// <param name="features">The features to test for.</param>
        /// <returns>
        /// The preferred command factory for the given features, or
        /// null if none such exists.
        /// </returns>
        public static ICommandFactory GetPreferredCommandFactory(IEnumerable<ICommandFactory> commandFactories, CommandFeatures features)
        {
            if (commandFactories == null) {
                throw new ArgumentNullException("commandFactories");
            }

            // If you have Resharper, try auto-refactoring this into a Linq expression.
            // I dare you.

            foreach (var factory in commandFactories) {
                var attributes = factory.GetType().GetCustomAttributes(typeof(PreferredCommandFactoryAttribute), false);

                foreach (var attribute in attributes.OfType<PreferredCommandFactoryAttribute>()) {
                    if (attribute.CommandFeatures.HasFlag(features)) {
                        return factory;
                    }
                }
            }

            return commandFactories.WithFeatures(features).FirstOrDefault();
        }
 public static IEnumerable<ICommandFactory> WithFeatures(this IEnumerable<ICommandFactory> commands, CommandFeatures features)
 {
     return commands.Where((command) => command.HasFeatures(features));
 }
 public bool ContainsKey(CommandFeatures features)
 {
     return this.commands.ContainsKey(features);
 }
 public static IBindableCollection<ICommandFactory> WithFeatures(this IBindableCollection<ICommandFactory> commands, CommandFeatures features)
 {
     return commands.Where((command) => command.HasFeatures(features));
 }
        private static ICommandFactory GetCommandFactory(Func<ICommand> commandGenerator, string name = "My factory", CommandFeatures features = (CommandFeatures) 0)
        {
            var mockCommandFactory = new Mock<ICommandFactory>(MockBehavior.Strict);
            mockCommandFactory.Setup((factory) => factory.CreateCommand()).Returns(commandGenerator);
            mockCommandFactory.Setup((factory) => factory.Name).Returns(name);
            mockCommandFactory.Setup((factory) => factory.CommandFeatures).Returns(features);
            mockCommandFactory.Setup((factory) => factory.PopulateCommand(It.IsAny<ICommand>(), It.IsAny<ICommandProvider>()));

            return mockCommandFactory.Object;
        }
        private static ICommandFactory GetCommandFactory(string name = "My factory", CommandFeatures features = (CommandFeatures) 0)
        {
            ICommandFactory factory = null;
            factory = GetCommandFactory(() => GetCommand(factory), name, features);

            return factory;
        }
 /// <summary>
 /// Marks the command factory as being preferred for the specified features.
 /// </summary>
 /// <param name="commandFeatures">
 /// The command features for which this class is preferred.
 /// </param>
 public PreferredCommandFactoryAttribute(CommandFeatures commandFeatures)
 {
     this.commandFeatures = commandFeatures;
 }
 public static IEnumerable<ICommand> WithFeatures(this IEnumerable<ICommand> commands, CommandFeatures features)
 {
     return commands.Where((command) => CommandExtensions.HasFeatures(command, features));
 }
 public DefaultCommandItemThing(IFeatureRegistry registry, CommandFeatures features, FeaturedCommandCollection defaults)
 {
     this.registry = registry;
     this.features = features;
     this.defaults = defaults;
 }
 public ICommand GetDefaultCommand(CommandFeatures features)
 {
     return this.programSettings.DefaultCommands.GetProxy(features);
 }
Beispiel #18
0
 public FeaturedCommandProxy(FeaturedCommandCollection commandCollection, CommandFeatures features)
 {
     this.commandCollection = commandCollection;
     this.features = features;
 }
Beispiel #19
0
 public string GetFeaturesName(CommandFeatures features)
 {
     return registeredFeatures[features];
 }