コード例 #1
0
        private void FunctionValuesValuesChanged(object sender, MultiDimensionalArrayChangingEventArgs args)
        {
            var e = args;

            IVariable variable = null; //lazy initialize

            //performance tweak
            if (!doNotCheckForDependentVariableResize)
            {
                //handle internal consistency:
                variable = GetVariableForArray((MultiDimensionalArray)sender);
                if (variable.IsIndependent)
                {
                    ResizeDependendFunctionValuesForArgument(variable, e.Action, args.Index, args.OldIndex, e.Shape[0]);
                }
            }

            if (!FireEvents || FunctionValuesChanged == null) // don't send up
            {
                return;
            }

            //raise event to the outside world if the store is consistent.
            variable = variable ?? GetVariableForArray((MultiDimensionalArray)sender);
            var newArgs = GetValuesChangedEventArgs(e, variable);

            FunctionValuesChanged(this, newArgs);
        }
コード例 #2
0
        // TODO: make it ValuesChanged
        private void FunctionValuesValuesChanged(object sender, MultiDimensionalArrayChangingEventArgs args)
        {
            var e = args;

            //update dependend arrays
            var array = (MultiDimensionalArray)sender;
            //it this OK?
            IVariable variable = GetVariableForArray(array);

            if (variable.IsIndependent)
            {
                ResizeDependendFunctionValuesForArgument(variable, e.Action, args.Index, args.OldIndex, e.Shape[0]);
            }

            if (!FireEvents) // don't send up
            {
                return;
            }

            //raise event to the outside world if the store is consistent.
            if (FunctionValuesChanged != null)
            {
                FunctionValuesChangingEventArgs valuesChangedEventArgs = GetValuesChangedEventArgs(e, variable);

                FunctionValuesChanged(this, valuesChangedEventArgs);
            }
        }
コード例 #3
0
        private void FireCollectionChanged(NotifyCollectionChangeAction action, IList values, int index1d, int oldIndex1d, int[] shape)
        {
            if (CollectionChanged == null)
            {
                return;
            }

            var eventArgs = new MultiDimensionalArrayChangingEventArgs(action, values, index1d, oldIndex1d, stride, shape);

            CollectionChanged(this, eventArgs);
        }
コード例 #4
0
        private MultiDimensionalArrayChangingEventArgs FireCollectionChanging(NotifyCollectionChangeAction action, IList values, int index1d, int[] itemsShape)
        {
            if (CollectionChanging == null)
            {
                return(null);
            }

            var eventArgs = new MultiDimensionalArrayChangingEventArgs(action, values, index1d, -1, stride, itemsShape);

            CollectionChanging(this, eventArgs);
            return(eventArgs);
        }
コード例 #5
0
 private static FunctionValuesChangingEventArgs GetValuesChangedEventArgs(MultiDimensionalArrayChangingEventArgs e, IVariable variable)
 {
     return(new FunctionValuesChangingEventArgs
     {
         Action = e.Action,
         Items = e.Items,
         Index = e.Index,
         OldIndex = -1,
         Stride = e.Stride,
         Shape = e.Shape,
         Function = variable
     });
 }
コード例 #6
0
        // TODO: make it ValuesChanging
        private void FunctionValuesValuesChanging(object sender, MultiDimensionalArrayChangingEventArgs args)
        {
            if (!FireEvents || FunctionValuesChanging == null) // don't send up
            {
                return;
            }

            var e        = args;
            var array    = (MultiDimensionalArray)sender;
            var variable = GetVariableForArray(array);

            //todo handle/bubble event the complex
            var valuesChangedEventArgs = GetValuesChangedEventArgs(e, variable);

            FunctionValuesChanging(this, valuesChangedEventArgs);

            args.Items  = valuesChangedEventArgs.Items;
            args.Index  = valuesChangedEventArgs.Index;
            args.Cancel = valuesChangedEventArgs.Cancel;
        }