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;
                }
            }
        }
Beispiel #2
0
        private void hypothesisButton_Click(object sender, RoutedEventArgs e)
        {
            if (_hypothesisMenuView == null)
            {
                _hypothesisMenuViewModel = new MenuViewModel
                {
                    AttachmentOrientation = AttachmentOrientation.Left,
                    NrColumns             = 5,
                    NrRows     = 4,
                    MoveOnHide = true
                };

                var sliderItem = new MenuItemViewModel
                {
                    MenuViewModel         = _hypothesisMenuViewModel,
                    Row                   = 0,
                    ColumnSpan            = 1,
                    RowSpan               = 1,
                    Column                = 0,
                    Position              = new Pt(menuHypothesisGrid.ActualWidth, 0),
                    Size                  = new Vec(100, 50),
                    TargetSize            = new Vec(100, 50),
                    IsAlwaysDisplayed     = false,
                    IsWidthBoundToParent  = false,
                    IsHeightBoundToParent = false
                };

                var attr1 = new SliderMenuItemComponentViewModel
                {
                    Label     = "alpha",
                    Value     = 500,
                    MinValue  = 1,
                    MaxValue  = 1000,
                    Formatter = d => { return(Math.Round(d / 100.0, 1).ToString("F2") + "%"); }
                };
                attr1.PropertyChanged += (sender2, args) =>
                {
                    var model = sender2 as SliderMenuItemComponentViewModel;
                    if (args.PropertyName == model.GetPropertyName(() => model.FinalValue))
                    {
                        var tt = Math.Round(model.FinalValue / 100.0, 1) * 100.0;
                        //exampleOperationViewModel.ExampleOperationModel.DummyValue = model.FinalValue;
                    }
                };

                sliderItem.MenuItemComponentViewModel = attr1;
                _hypothesisMenuViewModel.MenuItemViewModels.Add(sliderItem);


                // FDR
                var toggles = new List <ToggleMenuItemComponentViewModel>();
                var items   = new List <MenuItemViewModel>();

                var count = 0;
                var col   = 1;
                foreach (var riskCtrlType in new[]
                {
                    RiskControlType.PCER,
                    RiskControlType.Bonferroni, RiskControlType.AdaBonferroni, RiskControlType.HolmBonferroni,
                    RiskControlType.BHFDR, RiskControlType.SeqFDR, RiskControlType.AlphaFDR, RiskControlType.BestFootForward,
                    RiskControlType.BetaFarsighted, RiskControlType.GammaFixed, RiskControlType.DeltaHopeful, RiskControlType.EpsilonHybrid, RiskControlType.PsiSupport
                })
                {
                    var toggleMenuItem = new MenuItemViewModel
                    {
                        MenuViewModel = _hypothesisMenuViewModel,
                        Row           = count % 4,
                        RowSpan       = 0,
                        Position      = new Pt(menuHypothesisGrid.ActualWidth, 0),
                        Column        = col,
                        Size          = new Vec(75, 50),
                        TargetSize    = new Vec(75, 50)
                    };
                    //toggleMenuItem.Position = attachmentItemViewModel.Position;
                    var toggle = new ToggleMenuItemComponentViewModel
                    {
                        Label     = riskCtrlType.ToString(),
                        IsChecked = HypothesesViewController.Instance.RiskOperationModel.RiskControlType == riskCtrlType
                    };
                    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)
                            {
                                HypothesesViewController.Instance.RiskOperationModel.RiskControlType = riskCtrlType;
                                foreach (var tg in model.OtherToggles)
                                {
                                    tg.IsChecked = false;
                                }
                            }
                        }
                    };
                    _hypothesisMenuViewModel.MenuItemViewModels.Add(toggleMenuItem);
                    items.Add(toggleMenuItem);
                    count++;
                    if (count % 4 == 0)
                    {
                        col += 1;
                    }
                }

                foreach (var mi in items)
                {
                    (mi.MenuItemComponentViewModel as ToggleMenuItemComponentViewModel).OtherToggles.AddRange(toggles.Where(ti => ti != mi.MenuItemComponentViewModel));
                }

                if (_hypothesisMenuView != null)
                {
                    menuHypothesisGrid.Children.Remove(_hypothesisMenuView);
                }

                _hypothesisMenuView = new MenuView
                {
                    DataContext = _hypothesisMenuViewModel
                };
                _hypothesisMenuViewModel.AnkerPosition = new Pt(menuHypothesisGrid.ActualWidth, -((_hypothesisMenuViewModel.NrRows - 1) * 50 + (_hypothesisMenuViewModel.NrRows - 1) * 4));
                _hypothesisMenuViewModel.HidePosition  = new Pt(menuHypothesisGrid.ActualWidth, 54);
                menuHypothesisGrid.Children.Add(_hypothesisMenuView);
            }

            _hypothesisMenuViewModel.IsDisplayed = !_hypothesisMenuViewModel.IsDisplayed;
        }
Beispiel #3
0
        private static void createLeftExampleMenu(ExampleOperationViewModel exampleOperationViewModel)
        {
            var attachmentViewModel =
                exampleOperationViewModel.AttachementViewModels.First(
                    avm => avm.AttachmentOrientation == AttachmentOrientation.Left);

            var menuViewModel = new MenuViewModel
            {
                AttachmentOrientation = attachmentViewModel.AttachmentOrientation,
                NrColumns             = 1,
                NrRows = 3
            };

            attachmentViewModel.MenuViewModel = menuViewModel;

            var toggles = new List <ToggleMenuItemComponentViewModel>();
            var items   = new List <MenuItemViewModel>();

            var count = 0;

            foreach (var exampleOperationType in new[] { ExampleOperationType.A, ExampleOperationType.B, ExampleOperationType.C })
            {
                var toggleMenuItem = new MenuItemViewModel
                {
                    MenuViewModel = menuViewModel,
                    Row           = count,
                    RowSpan       = 0,
                    Column        = 0,
                    Position      = exampleOperationViewModel.Position,
                    Size          = new Vec(50, 32),
                    TargetSize    = new Vec(50, 32)
                };

                var toggle = new ToggleMenuItemComponentViewModel
                {
                    Label     = exampleOperationType.ToString().ToLower(),
                    IsChecked = exampleOperationViewModel.ExampleOperationModel.ExampleOperationType == exampleOperationType
                };
                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)
                        {
                            attachmentViewModel.ActiveStopwatch.Restart();
                            exampleOperationViewModel.ExampleOperationModel.ExampleOperationType = exampleOperationType;
                            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));
            }
        }
Beispiel #4
0
        private static void createRightHistogramMenu(HistogramOperationViewModel histogramOperationViewModel)
        {
            var attachmentViewModel = histogramOperationViewModel.AttachementViewModels.First(avm => avm.AttachmentOrientation == AttachmentOrientation.Right);
            var menuViewModel       = new MenuViewModel
            {
                AttachmentOrientation = attachmentViewModel.AttachmentOrientation,
                NrColumns             = 2,
                NrRows = 2
            };

            histogramOperationViewModel.HistogramOperationModel.PropertyChanged += (sender, args) =>
            {
                var model = histogramOperationViewModel.HistogramOperationModel;
                if (args.PropertyName == model.GetPropertyName(() => model.StatisticalComparisonOperationModel))
                {
                    if (model.StatisticalComparisonOperationModel == null)
                    {
                        foreach (var mvm in menuViewModel.MenuItemViewModels.ToArray())
                        {
                            menuViewModel.MenuItemViewModels.Remove(mvm);
                        }
                    }
                    else
                    {
                        var menuItem = new MenuItemViewModel
                        {
                            MenuViewModel     = menuViewModel,
                            Row               = 0,
                            ColumnSpan        = 1,
                            RowSpan           = 2,
                            Column            = 0,
                            Size              = new Vec(54, 54),
                            Position          = histogramOperationViewModel.Position,
                            TargetSize        = new Vec(54, 54),
                            IsAlwaysDisplayed = true
                        };
                        var attr1 = new StatisticalComparisonMenuItemViewModel
                        {
                            StatisticalComparisonOperationModel = model.StatisticalComparisonOperationModel
                        };

                        menuItem.MenuItemComponentViewModel = attr1;
                        menuViewModel.MenuItemViewModels.Add(menuItem);

                        var        toggles = new List <ToggleMenuItemComponentViewModel>();
                        var        items   = new List <MenuItemViewModel>();
                        TestType[] types   = new TestType[] { TestType.chi2, TestType.ttest };
                        int        count   = 0;
                        foreach (var type in types)
                        {
                            var toggleMenuItem = new MenuItemViewModel
                            {
                                MenuViewModel     = menuViewModel,
                                Row               = count,
                                RowSpan           = 0,
                                Position          = histogramOperationViewModel.Position,
                                Column            = 1,
                                Size              = new Vec(54, 25),
                                TargetSize        = new Vec(54, 25),
                                IsAlwaysDisplayed = true
                            };
                            //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 toogleModel = sender2 as ToggleMenuItemComponentViewModel;
                                if (args2.PropertyName == model.GetPropertyName(() => toogleModel.IsChecked))
                                {
                                    if (toogleModel.IsChecked)
                                    {
                                        model.StatisticalComparisonOperationModel.TestType = type;
                                        model.StatisticalComparisonOperationModel.FireOperationModelUpdated(new OperationModelUpdatedEventArgs());
                                        foreach (var tg in toogleModel.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));
                        }
                    }
                }
            };

            attachmentViewModel.MenuViewModel = menuViewModel;
        }
Beispiel #5
0
        private static void createAxisMenu(HistogramOperationViewModel histogramOperationViewModel, AttachmentOrientation attachmentOrientation,
                                           AttributeUsage axis, Vec size, double textAngle, bool isWidthBoundToParent, bool isHeightBoundToParent)
        {
            var attachmentViewModel =
                histogramOperationViewModel.AttachementViewModels.First(
                    avm => avm.AttachmentOrientation == attachmentOrientation);

            var menuViewModel = new MenuViewModel
            {
                AttachmentOrientation = attachmentViewModel.AttachmentOrientation,
                NrColumns             = attachmentOrientation == AttachmentOrientation.Bottom ? 5 : 2,
                NrRows = attachmentOrientation == AttachmentOrientation.Bottom ? 2 : 5
            };

            var menuItem = new MenuItemViewModel
            {
                MenuViewModel         = menuViewModel,
                Row                   = 0,
                ColumnSpan            = attachmentOrientation == AttachmentOrientation.Bottom ? 5 : 1,
                RowSpan               = attachmentOrientation == AttachmentOrientation.Bottom ? 1 : 5,
                Column                = attachmentOrientation == AttachmentOrientation.Bottom ? 0 : 1,
                Size                  = size,
                Position              = histogramOperationViewModel.Position,
                TargetSize            = size,
                IsAlwaysDisplayed     = true,
                IsWidthBoundToParent  = isWidthBoundToParent,
                IsHeightBoundToParent = isHeightBoundToParent
            };
            var attr1 = new AttributeTransformationMenuItemViewModel
            {
                TextAngle = textAngle,
                TextBrush = new SolidColorBrush(Helpers.GetColorFromString("#29aad5"))
            };

            histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(axis).CollectionChanged += (sender, args) =>
            {
                var coll = sender as ObservableCollection <AttributeTransformationModel>;
                var attributeTransformationModel = coll.FirstOrDefault();
                attr1.Label = attributeTransformationModel == null ? "" : attributeTransformationModel.GetLabel();
                attr1.AttributeTransformationViewModel = new AttributeTransformationViewModel(histogramOperationViewModel, coll.FirstOrDefault());

                if (attributeTransformationModel != null)
                {
                    attributeTransformationModel.PropertyChanged += (sender2, args2) =>
                    {
                        attr1.Label = (sender2 as AttributeTransformationModel).GetLabel();
                    };
                }

                // remove old ones first
                foreach (var mvm in menuViewModel.MenuItemViewModels.Where(mvm => mvm.MenuItemComponentViewModel is ToggleMenuItemComponentViewModel).ToArray())
                {
                    menuViewModel.MenuItemViewModels.Remove(mvm);
                }

                var aom = attr1.AttributeTransformationViewModel.AttributeTransformationModel;
                var aggregateFunctions = new[] { AggregateFunction.None, AggregateFunction.Count }.ToList();
                if (aom != null)
                {
                    if (((AttributeFieldModel)aom.AttributeModel).InputDataType == InputDataTypeConstants.INT ||
                        (((AttributeFieldModel)aom.AttributeModel).InputDataType == InputDataTypeConstants.FLOAT))
                    {
                        aggregateFunctions.Add(AggregateFunction.Avg);
                        aggregateFunctions.Add(AggregateFunction.Sum);
                        if (MainViewController.Instance.MainModel.IsUnknownUnknownEnabled)
                        {
                            aggregateFunctions.Add(AggregateFunction.SumE);
                        }
                    }

                    var toggles = new List <ToggleMenuItemComponentViewModel>();
                    var items   = new List <MenuItemViewModel>();

                    var count = 0;
                    foreach (var aggregationFunction in aggregateFunctions)
                    {
                        var toggleMenuItem = new MenuItemViewModel
                        {
                            MenuViewModel = menuViewModel,
                            Row           = attachmentOrientation == AttachmentOrientation.Bottom ? 1 : count,
                            RowSpan       = 0,
                            Position      = histogramOperationViewModel.Position,
                            Column        = attachmentOrientation == AttachmentOrientation.Bottom ? count : 0,
                            Size          = new Vec(32, 32),
                            TargetSize    = new Vec(32, 32)
                        };
                        //toggleMenuItem.Position = attachmentItemViewModel.Position;
                        var toggle = new ToggleMenuItemComponentViewModel
                        {
                            Label     = aggregationFunction.ToString(),
                            IsChecked = aom.AggregateFunction == aggregationFunction
                        };
                        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)
                                {
                                    aom.AggregateFunction = aggregationFunction;
                                    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));
                    }
                }
            };
            attr1.TappedTriggered  = () => { attachmentViewModel.ActiveStopwatch.Restart(); };
            attr1.DroppedTriggered = attributeTransformationModel =>
            {
                var otherAxis     = axis == AttributeUsage.X ? AttributeUsage.Y : AttributeUsage.X;
                var existingModel = histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(axis).Any() ?
                                    histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(axis).First() : null;
                var existingOtherModel = histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(otherAxis).Any() ?
                                         histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(otherAxis).First() : null;
                var swapAxes = existingModel != null && existingOtherModel.AttributeModel == attributeTransformationModel.AttributeModel &&
                               existingOtherModel.AggregateFunction == attributeTransformationModel.AggregateFunction;

                if (existingModel != null)
                {
                    histogramOperationViewModel.HistogramOperationModel.RemoveAttributeUsageTransformationModel(axis, existingModel);
                }
                if (!histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(AttributeUsage.DefaultValue).Any())
                {
                    var value = new AttributeTransformationModel(attributeTransformationModel.AttributeModel);
                    value.AggregateFunction = AggregateFunction.Count;
                    histogramOperationViewModel.HistogramOperationModel.AddAttributeUsageTransformationModel(AttributeUsage.DefaultValue, value);
                }
                histogramOperationViewModel.HistogramOperationModel.AddAttributeUsageTransformationModel(axis, attributeTransformationModel);
                attachmentViewModel.ActiveStopwatch.Restart();
                if (swapAxes)
                {
                    histogramOperationViewModel.HistogramOperationModel.RemoveAttributeUsageTransformationModel(otherAxis, existingOtherModel);
                    if (!histogramOperationViewModel.HistogramOperationModel.GetAttributeUsageTransformationModel(AttributeUsage.DefaultValue).Any())
                    {
                        var value = new AttributeTransformationModel(attributeTransformationModel.AttributeModel);
                        value.AggregateFunction = AggregateFunction.Count;
                        histogramOperationViewModel.HistogramOperationModel.AddAttributeUsageTransformationModel(AttributeUsage.DefaultValue, value);
                    }
                    histogramOperationViewModel.HistogramOperationModel.AddAttributeUsageTransformationModel(otherAxis, existingModel);
                }
            };

            menuItem.MenuItemComponentViewModel = attr1;
            menuViewModel.MenuItemViewModels.Add(menuItem);
            attachmentViewModel.MenuViewModel = menuViewModel;
        }