コード例 #1
0
        private async void EditorDownRemove(Grid sender)
        {
            FaultTreeNode node = (FaultTreeNode)sender.DataContext;

            if (Config.Instance.ShowWarningWhenRemoval)
            {
                var t = await MessageDialogs.ShowWarningAsync("Are you sure you want to remove this node?");

                if (t != MessageDialogResult.Affirmative)
                {
                    return;
                }
            }

            var parents = this.ViewModel.FaultTree.Traverse()?.Where(n => n.Childs.Contains(node)).ToList();

            parents?.ForEach(parent => parent.Childs.Remove(node));
            parents?.ForEach(parent => parent.Childs.AddRange(node.Childs));
            parents?.ForEach(parent => parent.Childs = parent.Childs.Distinct().ToList());

            if (node is FaultTreeTerminalNode)
            {
                this.ViewModel.FaultTree.MarkovChain.RemoveVertex((FaultTreeTerminalNode)node);
            }

            this.ViewModel.RaisePropertyChanged("FaultTree");
        }
コード例 #2
0
        private async void FaultTreeNodePress(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount >= 2 && ((FrameworkElement)sender).DataContext is FaultTreeTerminalNode)
            {
                var probabilityInput = await MessageDialogs.ShowInputDialogAsync(
                    "Probability",
                    "Specify an initial probability!",
                    new MetroDialogSettings());

                double probabiliy;
                if (double.TryParse(probabilityInput, out probabiliy))
                {
                    if (probabiliy >= 0 && probabiliy <= 1)
                    {
                        this.ViewModel.FaultTree.MarkovChain.InitialDistribution[(FaultTreeTerminalNode)((FrameworkElement)sender).DataContext] = probabiliy;
                        this.ViewModel.RaisePropertyChanged("FaultTree");
                    }
                }
                return;
            }
            switch (this.EditorMode)
            {
            case VisualEditorMode.MODE_ADD_GATE_CONNECTION:
            case VisualEditorMode.MODE_ADD_MARKOV_CHAIN:
                this.EditorDownConnection((Grid)sender, e);
                break;

            case VisualEditorMode.MODE_ADD_AND_GATE:
            case VisualEditorMode.MODE_ADD_OR_GATE:
            case VisualEditorMode.MODE_ADD_BASIC_EVENT:
                this.EditorDownGate((Grid)sender);
                break;

            case VisualEditorMode.MODE_REMOVE_CONTENT:
                this.EditorDownRemove((Grid)sender);
                break;

            case VisualEditorMode.MODE_ANALYZE_CLICK:
                FaultTree faultTree = new FaultTree((FaultTreeNode)(((Grid)sender).DataContext), this.ViewModel.FaultTree.MarkovChain);
                this.AnalyzeFlyout.IsOpen = true;
                this.Analyze.Initialize(faultTree);
                break;
            }
        }