protected ReflectionConsoleCommandBase(string name, Console console, IConsoleCommandHost commandHost)
     : base(commandHost.Name + "." + name)
 {
     Console = console;
     CommandHost = commandHost;
     Execute = x => InvokeCommand(x.Skip(1).ToArray());
     CommandHostType = CommandHost.GetType();
 }
        public void HookInto(IConsoleCommandHost commandHost)
        {
            if (AlreadyHookedIntoCommandHost(commandHost))
                return;

            AddHost(commandHost);
            AddHostCommands(commandHost);
            AddReflectionCommands(commandHost);
        }
 private void AddReflectionCommands(IConsoleCommandHost commandHost)
 {
     Console.Interpreter.Commands.Add(new CallCommand(Console, commandHost));
     Console.Interpreter.Commands.Add(new PropertySetCommand(Console, commandHost));
     Console.Interpreter.Commands.Add(new PropertyGetCommand(Console, commandHost));
     Console.Interpreter.Commands.Add(new DumpCommand(Console, commandHost));
     Console.Interpreter.Commands.Add(new ToStringCommand(Console,commandHost));
     Console.Interpreter.Commands.Add(new GetTypeCommand(Console,commandHost));
     Console.Interpreter.Commands.Add(new SliderCommand(Console, commandHost));
     Console.Interpreter.Commands.Add(new MethodButtonCommand(Console, commandHost));
 }
        public ConsoleToolWindow(IConsoleCommandHost host, string methodOrPropertyName)
        {
            Height = 70;
            CanResize = true;
            Title = host.Name + "." + methodOrPropertyName;
            StackPanel = new StackPanel
                             {
                                 HorizontalAlignment = HorizontalAlignment.Stretch,
                                 VerticalAlignment = VerticalAlignment.Stretch
                             };

            Content = StackPanel;
        }
 private void AddHostCommand(IConsoleCommandHost commandHost, ConsoleCommand command)
 {
     ConsoleCommand localCommand = command;
     ConsoleCommand cmd = CreateScopedCommand(commandHost, command, localCommand);
     Console.Interpreter.Commands.Add(cmd);
 }
 private void AddHost(IConsoleCommandHost commandHost)
 {
     Hosts.Add(commandHost);
     AttachEventHandlerToRemoveCommands(commandHost);
     Console.WriteLine("Hooked into " + commandHost.Name);
 }
 private ConsoleCommand CreateScopedCommand(IConsoleCommandHost commandHost, ConsoleCommand command,
                                                   ConsoleCommand localCommand)
 {
     return new ConsoleCommand(commandHost.Name + "." + command.Name, command.Description,
                               x => localCommand.Execute(x));
 }
 public ToStringCommand(Console console, IConsoleCommandHost commandHost)
     : base("ToString", console, commandHost)
 {
     Description = "Writes out the objects ToString method";
 }
 public PropertySetCommand(Console console, IConsoleCommandHost commandHost)
     : base("Set", console, commandHost)
 {
     Description = "Sets a Property [name, value]";
 }
 private bool AlreadyHookedIntoCommandHost(IConsoleCommandHost commandHost)
 {
     return Hosts.Any(x => x == commandHost);
 }
 public DumpCommand(Console console, IConsoleCommandHost commandHost)
     : base("Dump", console, commandHost)
 {
     Description = "Dumps all the objects properties to the console";
 }
 public CallCommand(Console console, IConsoleCommandHost commandHost)
     : this("Call", console, commandHost)
 {
 }
 public CallCommand(string name, Console console, IConsoleCommandHost commandHost)
     : base(name, console, commandHost)
 {
     Description = "Calls a method on the object [method,(args*)]";
 }
 public SliderCommand(Console console, IConsoleCommandHost commandHost)
     : base("Slider", console, commandHost)
 {
     Description = "Creates a Slider To Set The Property [property,(min),(max),(autocall)]";
 }
            public SliderParams(IConsoleCommandHost commandHost, string[] arguments)
            {
                string propertyName = arguments[0];
                PropertyToControl = commandHost.GetType().GetProperty(propertyName);
                if (PropertyToControl == null)
                {
                    throw new ArgumentException("Property not found");
                }

                if (arguments.Length > 2)
                {
                    try
                    {
                        Minimum = float.Parse(arguments[1]);
                        Maximum = float.Parse(arguments[2]);
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException("Minimum or Maximum not a valid float", ex);
                    }
                }

                if (arguments.Length > 3)
                {
                    AutoCall = commandHost.GetType().GetMethod(arguments[3]);

                    if (AutoCall == null)
                    {
                        throw new ArgumentException("AutoCall Method not found");
                    }
                }
            }
 private void AddHostCommands(IConsoleCommandHost commandHost)
 {
     foreach (ConsoleCommand command in commandHost.Commands)
         AddHostCommand(commandHost, command);
 }
 public MethodButtonCommand(Console console, IConsoleCommandHost commandHost)
     : base("Button", console, commandHost)
 {
     Description = "Creates a Button To Call A Method [methods,(args*)]";
 }
 protected ReflectionUiCommandBase(string name, Console console, IConsoleCommandHost commandHost)
     : base(name, console, commandHost)
 {
 }
 private void AttachEventHandlerToRemoveCommands(IConsoleCommandHost commandHost)
 {
     commandHost.RemoveCommands += (sender, e) => RemoveAllCommands(commandHost.Commands);
 }
 public GetTypeCommand(Console console, IConsoleCommandHost commandHost)
     : base("GetType", console, commandHost)
 {
     Description = "Writes out the objects type";
 }