Example #1
0
        protected override void SetupCommands()
        {
            _calc_command = new Command("Calculate", Command.PriorityType.High);
            _calc_command.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
            {
                if (_regex_calc.IsMatch(parameters))
                {
                    bool test1 = !_regex_forbidden_chars.IsMatch(parameters);
                    bool test2 = !_regex_comma_rule.IsMatch(parameters);
                    return(test1 && test2);
                }
                else
                {
                    return(false);
                }
            }));
            _calc_command.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(Eval(parameters));
            }));
            _calc_command.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return("Hit return key to copy to clipboard");
            }));
            _calc_command.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(parameters);
            }));
            _calc_command.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
            {
                return(_icon.ToBitmap());
            }));
            _calc_command.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
            {
                List <string> args             = new List <string>();
                Dictionary <string, bool> comp = new Dictionary <string, bool>();

                return(new CommandUsage(@"Valid math expression. i.e.: 2+3*(3^2)", args, comp));
            }));
            _calc_command.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
            {
                if ((modifiers & Keys.Shift) == Keys.Shift)
                {
                    Clipboard.SetText(parameters + " = " + Eval(parameters));
                }
                else
                {
                    Clipboard.SetText(Eval(parameters));
                }
            }));
            Commands.Add(_calc_command);

            _solve_command = new Command("Solve", Command.PriorityType.Medium);
            _solve_command.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
            {
                return(false);
            }));
            _solve_command.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                MultiLevelData data = UserContext.Instance.GetSelectedContent();
                string calc         = "Invalid expression";
                bool valid_calc     = false;
                if (data != null)
                {
                    if (!string.IsNullOrEmpty(data.Text) && _regex_calc.IsMatch(data.Text))
                    {
                        bool test1 = !_regex_forbidden_chars.IsMatch(data.Text);
                        bool test2 = !_regex_comma_rule.IsMatch(data.Text);
                        valid_calc = test1 && test2;
                        if (valid_calc)
                        {
                            calc = data.Text;
                        }
                    }
                    data.Dispose();
                }
                if (valid_calc)
                {
                    string result = Eval(calc);
                    return("Solve: " + StringUtility.ApplyEllipsis(calc, 14 - result.Length) + " = " + result);
                }
                else
                {
                    return("Solve: " + calc);
                }
            }));
            _solve_command.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return("Hit return key to paste solution");
            }));
            _solve_command.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(parameters);
            }));
            _solve_command.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
            {
                return(_icon.ToBitmap());
            }));
            _solve_command.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
            {
                List <string> args             = new List <string>();
                Dictionary <string, bool> comp = new Dictionary <string, bool>();

                return(new CommandUsage(@"Solves the selected calculation on top window", args, comp));
            }));
            _solve_command.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
            {
                MultiLevelData data = UserContext.Instance.GetSelectedContent();
                bool valid_calc     = false;
                string calc         = string.Empty;
                if (data != null)
                {
                    if (!string.IsNullOrEmpty(data.Text) && _regex_calc.IsMatch(data.Text))
                    {
                        bool test1 = !_regex_forbidden_chars.IsMatch(data.Text);
                        bool test2 = !_regex_comma_rule.IsMatch(data.Text);
                        valid_calc = test1 && test2;
                        calc       = data.Text;
                    }
                    data.Dispose();
                }
                if (valid_calc)
                {
                    string solution;
                    if ((modifiers & Keys.Shift) == Keys.Shift)
                    {
                        solution = calc + " = " + Eval(calc);
                    }
                    else
                    {
                        solution = Eval(calc);
                    }
                    UserContext.Instance.PasteText(solution, true);
                }
            }));
            Commands.Add(_solve_command);

            _convert_base_command = new Command("Convert to Base", Command.PriorityType.High);
            _convert_base_command.SetIsOwnerDelegate(new Command.OwnershipDelegate(delegate(string parameters)
            {
                if (_regex_convert_base.IsMatch(parameters))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }));
            _convert_base_command.SetNameDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(ConvertBase(parameters));
            }));
            _convert_base_command.SetDescriptionDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return("Hit return key to copy to clipboard");
            }));
            _convert_base_command.SetAutoCompleteDelegate(new Command.EvaluationDelegate(delegate(string parameters)
            {
                return(_convert_base_command.Name);
            }));
            _convert_base_command.SetIconDelegate(new Command.IconDelegate(delegate(string parameters)
            {
                return(_icon.ToBitmap());
            }));
            _convert_base_command.SetUsageDelegate(new Command.UsageDelegate(delegate(string parameters)
            {
                List <string> args             = new List <string>();
                Dictionary <string, bool> comp = new Dictionary <string, bool>();

                return(new CommandUsage(@"Converts a value from a base to another. i.e.: 16 dec to hex", args, comp));
            }));
            _convert_base_command.SetExecuteDelegate(new Command.ExecutionDelegate(delegate(string parameters, Keys modifiers)
            {
                if ((modifiers & Keys.Shift) == Keys.Shift)
                {
                    Clipboard.SetText(parameters + " = " + ConvertBase(parameters));
                }
                else
                {
                    Clipboard.SetText(ConvertBase(parameters));
                }
            }));
            Commands.Add(_convert_base_command);
        }