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"); }
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; } }