private bool _canExecute(ScriptRunner runner, GadgetAction action, ScriptParameter param)
        {
            if (runner.CanExecuteScript != action.CanExecute)
            {
                var script = CSharpScript.Create <bool>(action.CanExecute, globalsType: typeof(ScriptParameter));
                runner.CanExecuteRunner = script.CreateDelegate();
                runner.CanExecuteScript = action.CanExecute;
            }

            var execution = runner.CanExecuteRunner(param);

            return(execution.Result);
        }
        private double _targetNewValue(ScriptRunner runner, GadgetAction action, ScriptParameter param)
        {
            if (runner.TargetNewValueScript != action.Execute)
            {
                var script = CSharpScript.Create <double>(action.Execute, globalsType: typeof(ScriptParameter));
                runner.TargetNewValueRunner = script.CreateDelegate();
                runner.TargetNewValueScript = action.Execute;
            }

            var execution = runner.TargetNewValueRunner(param);

            return(execution.Result);
        }
        public ScriptResult Execute(GadgetAction action, ScriptParameter param)
        {
            var returnValue = new ScriptResult();
            var runner      = _getRunner(action.Id);

            returnValue.CanExecute = _canExecute(runner, action, param);

            if (returnValue.CanExecute)
            {
                returnValue.TargetNewValue = _targetNewValue(runner, action, param);
            }
            return(returnValue);
        }
        public GadgetAction BindGadgetActionData(SqliteDataReader reader)
        {
            GadgetAction returnValue = new GadgetAction
            {
                Id           = reader.GetValueAsGuid("Id"),
                Order        = (int)(long)reader.GetValue(reader.GetOrdinal("Order")),
                TargetGadget = reader.GetValueAsGuid("TargetGadget"),
                SourceGadget = reader.GetValueAsGuid("SourceGadget"),
                CanExecute   = reader.GetValue(reader.GetOrdinal("CanExecute")).ToString(),
                Execute      = reader.GetValue(reader.GetOrdinal("Execute")).ToString(),
            };

            return(returnValue);
        }