/// <summary> /// Appends the marble and create new diagrams tab per keyword /// </summary> public void AppendMarble(MarbleItemViewModel value) { #region Pause Switching if (PauseState == RESUME_TEXT) { // route the traffic to a replay subject during the pause stage _pauseSubject.OnNext(value); return; } #endregion Pause Switching #region TabTemplateSelectorPlugins foreach (ITabPlugin tab in MarbleController.TabTemplateSelectorPlugins) { try { tab.TabModel.AppendMarble(value); } #region Exception Handling catch (Exception ex) { TraceSourceMonitorHelper.Error("TabTemplateSelectorPlugin filed: {0}", ex); } #endregion Exception Handling } #endregion TabTemplateSelectorPlugins foreach (var keyword in value.Item.Keywords) { #region Add MarbleDiagramsViewModel if not exists var diagrams = _diagramsByKeywords.GetOrAdd(keyword, key => { var dgm = new MarbleDiagramsViewModel(keyword, this); Tabs.AddAsync(dgm); return(dgm); }); #endregion Add MarbleDiagramsViewModel if not exists diagrams.AppendMarble(value); } #region InterceptionPlugins foreach (var plugin in MarbleController.InterceptionPlugins) { try { plugin.AppendMarble(value.Item); } #region Exception Handling catch (Exception ex) { TraceSourceMonitorHelper.Error("InterceptionPlugin filed: {0}", ex); } #endregion Exception Handling } #endregion InterceptionPlugins }