예제 #1
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            //TODO: Make it so no casting is needed
            DictionaryKeyValueObserver <string, ValueContainer> repeatVariables = ((Environment.ValueEnvironment)env).GetRange(Name);
            ValueContainer value = new ValueContainer(0);

            Action onValueChanged = () =>
            {
                double sum = 0;

                foreach (ValueContainer item in repeatVariables.Where(v => !v.Inactive))
                {
                    sum += Convert.ToDouble(item.Value);
                }

                value.Value = sum;
            };

            Action onCollectionChange = () =>
            {
                foreach (ValueContainer item in repeatVariables)
                {
                    item.ValueChanged += onValueChanged;
                }

                onValueChanged();
            };

            repeatVariables.FilterResultChanged += onCollectionChange;
            onCollectionChange();

            return(value);
        }
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            //TODO: Make it so no casting is needed
            DictionaryKeyValueObserver<string, ValueContainer> repeatVariables = ((Environment.ValueEnvironment)env).GetRange(Name);
            ValueContainer value = new ValueContainer(0);

            Action onValueChanged = () =>
            {
                int count = 0;
                double sum = 0;

                foreach (ValueContainer item in repeatVariables.Where(v => !v.Inactive))
                {
                    count++;
                    sum += Convert.ToDouble(item.Value);
                }

                value.Value = count > 0 ? sum / count : 0;
            };

            Action onCollectionChange = () =>
            {
                foreach (ValueContainer item in repeatVariables)
                {
                    item.ValueChanged += onValueChanged;
                }

                onValueChanged();
            };
            repeatVariables.FilterResultChanged += onCollectionChange;
            onCollectionChange();

            return value;
        }
예제 #3
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            StackPanel sp = new StackPanel();

            sp.Children.Add(Statement1.BuildForm(vEnv, tEnv));
            sp.Children.Add(Statement2.BuildForm(vEnv, tEnv));

            return(sp);
        }
예제 #4
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            ValueContainer a     = Expr1.Evaluate(env);
            ValueContainer value = new ValueContainer(!Convert.ToBoolean(a.Value));

            Action onValueChanged = () => value.Value = !Convert.ToBoolean(a.Value);

            a.ValueChanged += onValueChanged;

            return(value);
        }
예제 #5
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            ValueContainer a     = Expr2.Evaluate(env);
            ValueContainer b     = Expr3.Evaluate(env);
            ValueContainer value = new ValueContainer(Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value);

            Action onValueChanged = () => value.Value = Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value;

            a.ValueChanged += onValueChanged;
            b.ValueChanged += onValueChanged;

            return(value);
        }
예제 #6
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            ValueContainer a     = Expr1.Evaluate(env);
            ValueContainer b     = Expr2.Evaluate(env);
            ValueContainer value = new ValueContainer(Evaluate(a, b));

            Action onValueChanged = () => value.Value = Evaluate(a, b);

            a.ValueChanged += onValueChanged;
            b.ValueChanged += onValueChanged;

            return(value);
        }
예제 #7
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            StackPanel sp = new StackPanel();

            sp.Orientation = Orientation.Horizontal;
            sp.Children.Add(new Label()
            {
                Width = 200, Content = Text.Trim('\"')
            });
            sp.Children.Add(Expression.BuildForm(tEnv).BuildElement(Expression.Evaluate(vEnv), true));

            return(sp);
        }
예제 #8
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            vEnv.Clear();
            tEnv.Clear();

            StackPanel sPanel = new StackPanel();

            sPanel.CanVerticallyScroll   = true;
            sPanel.CanHorizontallyScroll = false;
            sPanel.Children.Add(Body.BuildForm(vEnv, tEnv));

            return(new ScrollViewer()
            {
                Content = sPanel
            });
        }
예제 #9
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            ValueContainer value = CheckExpression.Evaluate(vEnv);

            StackPanel sp             = new StackPanel();
            Action     onValueChanged = () =>
            {
                sp.Visibility = Convert.ToBoolean(value.Value) ? Visibility.Visible : Visibility.Collapsed;
            };

            value.ValueChanged += onValueChanged;
            onValueChanged();

            sp.Children.Add(IfTrueBody.BuildForm(vEnv, tEnv));

            return(sp);
        }
예제 #10
0
        public ValueContainer Evaluate(IValueEnvironment env)
        {
            if (!env.IsDeclared(Name))
            {
                ValueContainer a     = Value.Evaluate(env);
                ValueContainer value = new ValueContainer(a.Value);

                Action onValueChanged = () => value.Value = a.Value;
                a.ValueChanged += onValueChanged;

                env.Declare(Name, value);

                return(value);
            }

            return(env.GetDeclared(Name));
        }
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            Button b = new Button() { Width = 200, Content = "Next" };

            b.Click += (s, e) =>
            {
                for (FrameworkElement fe = (FrameworkElement)b.Parent; fe != null; fe = (FrameworkElement)fe.Parent)
                {
                    if (fe is Selector)
                    {
                        ((Selector)fe).SelectedIndex++;
                        break;
                    }
                }
            };

            return b;
        }
예제 #12
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            Style s = new Style();

            s.Setters.Add(new Setter(UIElement.VisibilityProperty, Visibility.Collapsed));
            s.Setters.Add(new Setter(FrameworkElement.MarginProperty, new Thickness(0)));

            TabControl t = new TabControl()
            {
                ItemContainerStyle = s
            };

            t.Margin          = new Thickness(0);
            t.Padding         = new Thickness(0);
            t.BorderThickness = new Thickness(0);
            t.Items.Add(Statement1.BuildForm(vEnv, tEnv));
            t.Items.Add(Statement2.BuildForm(vEnv, tEnv));

            return(t);
        }
예제 #13
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            Button b = new Button()
            {
                Width = 200, Content = "Next"
            };

            b.Click += (s, e) =>
            {
                for (FrameworkElement fe = (FrameworkElement)b.Parent; fe != null; fe = (FrameworkElement)fe.Parent)
                {
                    if (fe is Selector)
                    {
                        ((Selector)fe).SelectedIndex++;
                        break;
                    }
                }
            };

            return(b);
        }
예제 #14
0
        public FrameworkElement BuildForm(IValueEnvironment vEnv, ITypeEnvironment tEnv)
        {
            IList <int> baseInstances = null;

            //TODO: Make it so no casting is needed
            Eval.Environment.ValueEnvironment vEnvExt = (Eval.Environment.ValueEnvironment)vEnv;
            Environment.TypeEnvironment       tEnvExt = (Environment.TypeEnvironment)tEnv;

            //Need to execute the body atleast once to bring the variable into existance.
            Action <VarAccessEventArgs> onVarAccess = (args) =>
            {
                baseInstances = args.Instances;
                args.SetVarInstance(0);
            };

            vEnvExt.VarAccess += onVarAccess;
            tEnvExt.VarAccess += onVarAccess;
            Body.BuildForm(vEnv, tEnv);
            vEnvExt.VarAccess -= onVarAccess;
            tEnvExt.VarAccess -= onVarAccess;

            StackPanel sp = new StackPanel();

            ValueContainer value = Expression.Evaluate(vEnv);

            value.ValueChanged += () =>
            {
                Action <VarAccessEventArgs> baseInstancesEvent = (args) => args.SetVarBaseInstances(baseInstances);
                vEnvExt.VarAccess += baseInstancesEvent;
                tEnvExt.VarAccess += baseInstancesEvent;
                FillChildren(sp, Convert.ToInt32(value.Value), vEnvExt, tEnvExt);
                vEnvExt.VarAccess -= baseInstancesEvent;
                tEnvExt.VarAccess -= baseInstancesEvent;
            };
            FillChildren(sp, Convert.ToInt32(value.Value), vEnvExt, tEnvExt);

            return(sp);
        }
예제 #15
0
 public ValueContainer Evaluate(IValueEnvironment env)
 {
     return(evalExpr.Evaluate(env));
 }
예제 #16
0
 public ValueContainer Evaluate(IValueEnvironment env)
 {
     return(env.GetDeclared(Name));
 }
예제 #17
0
 public ValueContainer Evaluate(IValueEnvironment env)
 {
     return(new ValueContainer(Value));
 }
 public ValueContainer Evaluate(IValueEnvironment env)
 {
     return env.GetDeclared(Name);
 }
 public ValueContainer Evaluate(IValueEnvironment env)
 {
     return evalExpr.Evaluate(env);
 }