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); }