Beispiel #1
0
        private void operationViewModelUpdated(OperationViewModel current)
        {
            if (current.OperationModel is IStatisticallyComparableOperationModel)
            {
                // update last moved time
                _lastMoved[current] = DateTime.Now;

                var allComparableOperationViewModels = MainViewController.Instance.OperationViewModels.Where(c => c.OperationModel is IStatisticallyComparableOperationModel);
                // check if we need to create new inputvisualization views
                foreach (var other in allComparableOperationViewModels)
                {
                    var diff = current.Position - other.Position;

                    var areLinked = FilterLinkViewController.Instance.AreOperationViewModelsLinked(current, other);
                    if (!areLinked)
                    {
                        if ((Math.Abs(diff.Y) < 300) &&
                            (boundHorizontalDistance(current.Bounds, other.Bounds) < 200) &&
                            _lastMoved.ContainsKey(other) &&
                            (other != current) &&
                            (Math.Abs((_lastMoved[other] - _lastMoved[current]).TotalMilliseconds) < 400))
                        {
                            if (!StatisticalComparisonViews.Keys.Any(sov => sov.OperationViewModels.Contains(current) && sov.OperationViewModels.Contains(other)))
                            {
                                var comparisonOperationViewModel = new StatisticalComparisonOperationViewModel(
                                    new StatisticalComparisonOperationModel(current.OperationModel.SchemaModel));

                                comparisonOperationViewModel.OperationViewModels.Add(other);
                                comparisonOperationViewModel.OperationViewModels.Add(current);

                                var a1 = (other.OperationModel as HistogramOperationModel)
                                         .GetAttributeUsageTransformationModel(AttributeUsage.X).FirstOrDefault();
                                var a2 = (current.OperationModel as HistogramOperationModel)
                                         .GetAttributeUsageTransformationModel(AttributeUsage.X).FirstOrDefault();

                                comparisonOperationViewModel.StatisticalComparisonOperationModel.TestType = TestType.chi2;
                                if (a1.AttributeModel.RawName != a2.AttributeModel.RawName)
                                {
                                    comparisonOperationViewModel.StatisticalComparisonOperationModel.TestType = TestType.corr;
                                }
                                else if ((a1.AttributeModel as AttributeFieldModel).InputDataType == InputDataTypeConstants.FLOAT ||
                                         (a1.AttributeModel as AttributeFieldModel).InputDataType == InputDataTypeConstants.INT)
                                {
                                    comparisonOperationViewModel.StatisticalComparisonOperationModel.TestType = TestType.ttest;
                                }


                                comparisonOperationViewModel.Position =
                                    (comparisonOperationViewModel.OperationViewModels.Aggregate(new Vec(), (a, b) => a + b.Bounds.Center.GetVec()) / 2.0 - comparisonOperationViewModel.Size / 2.0)
                                    .GetWindowsPoint();

                                comparisonOperationViewModel.ComparisonViewModelState = ComparisonViewModelState.Opening;
                                comparisonOperationViewModel.DwellStartPosition       = current.Position;
                                comparisonOperationViewModel.TicksSinceDwellStart     = DateTime.Now.Ticks;

                                var view = new ComparisonView();
                                view.DataContext = comparisonOperationViewModel;
                                MainViewController.Instance.InkableScene.Children.Add(view);
                                StatisticalComparisonViews.Add(comparisonOperationViewModel, view);
                            }
                        }
                    }
                }
            }
        }
        void ComparisonViewModel_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
        {
            if (_model != null)
            {
                _model.PropertyChanged -= _model_PropertyChanged;
                _model.StatisticalComparisonOperationModel.PropertyChanged -= StatisticalComparisonOperationModel_PropertyChanged;
                foreach (var vis in _model.OperationViewModels)
                {
                    vis.PropertyChanged -= VisModel_PropertyChanged;
                }
            }
            if (args.NewValue != null)
            {
                _model = (StatisticalComparisonOperationViewModel)args.NewValue;
                _model.PropertyChanged += _model_PropertyChanged;
                _model.StatisticalComparisonOperationModel.PropertyChanged += StatisticalComparisonOperationModel_PropertyChanged;
                foreach (var vis in _model.OperationViewModels)
                {
                    vis.PropertyChanged += VisModel_PropertyChanged;
                }
                updateRendering();

                if (_menuView == null)
                {
                    _menuViewModel = new MenuViewModel
                    {
                        AttachmentOrientation = AttachmentOrientation.Right,
                        NrColumns             = 1,
                        NrRows = 3
                    };
                    var        toggles = new List <ToggleMenuItemComponentViewModel>();
                    var        items   = new List <MenuItemViewModel>();
                    TestType[] types   = new TestType[] { TestType.chi2, TestType.ttest, TestType.corr };
                    int        count   = 0;
                    foreach (var type in types)
                    {
                        var toggleMenuItem = new MenuItemViewModel
                        {
                            MenuViewModel = _menuViewModel,
                            Row           = count,
                            RowSpan       = 0,
                            Position      = new Pt(0, 0),
                            Column        = 0,
                            Size          = new Vec(50, 22.333),
                            TargetSize    = new Vec(50, 22.333),
                        };
                        //toggleMenuItem.Position = attachmentItemViewModel.Position;
                        var toggle = new ToggleMenuItemComponentViewModel
                        {
                            Label     = type.ToString(),
                            IsChecked = _model.StatisticalComparisonOperationModel.TestType == type
                        };
                        toggles.Add(toggle);
                        toggleMenuItem.MenuItemComponentViewModel = toggle;
                        toggleMenuItem.MenuItemComponentViewModel.PropertyChanged += (sender2, args2) =>
                        {
                            var model = sender2 as ToggleMenuItemComponentViewModel;
                            if (args2.PropertyName == model.GetPropertyName(() => model.IsChecked))
                            {
                                if (model.IsChecked)
                                {
                                    _model.StatisticalComparisonOperationModel.TestType = type;
                                    _model.StatisticalComparisonOperationModel.FireOperationModelUpdated(new OperationModelUpdatedEventArgs());
                                    foreach (var tg in model.OtherToggles)
                                    {
                                        tg.IsChecked = false;
                                    }
                                }
                            }
                        };
                        _menuViewModel.MenuItemViewModels.Add(toggleMenuItem);
                        items.Add(toggleMenuItem);
                        count++;
                    }
                    foreach (var mi in items)
                    {
                        (mi.MenuItemComponentViewModel as ToggleMenuItemComponentViewModel).OtherToggles.AddRange(toggles.Where(ti => ti != mi.MenuItemComponentViewModel));
                    }

                    _menuView = new MenuView()
                    {
                        DataContext = _menuViewModel
                    };
                    menuCanvas.Children.Add(_menuView);
                    _menuViewModel.IsDisplayed = true;
                }
            }
        }