private void HandleCallHierarchyTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { TemplateCallHierarchyViewModel selected = CallHierarchyTreeView.SelectedItem as TemplateCallHierarchyViewModel; if (selected != null && _currentFrame != selected.Frame) { _currentEvent = selected.Event; _currentFrame = selected.Frame; UpdateCurrentTemplate(); } }
private void UpdateCurrentTemplate() { var viewModel = ViewModel; if (viewModel == null) { return; } UpdateStack(); UpdateAttributes(); viewModel.Bytecode = currentTemplate.impl.Disassemble(); viewModel.Ast = currentTemplate.impl.ast; SetSelectionPath(viewModel.TemplateCallHierarchy[0], currentTemplate.GetEnclosingInstanceStack(true)); TemplateTextBox.Document = new FlowDocument(new Paragraph(new Run(currentTemplate.impl.template) { FontFamily = new FontFamily("Consolas") })); Interval r = currentTemplate.impl.TemplateRange; if (currentTemplate.EnclosingInstance != null) { int i = GetIndexOfChild((DebugTemplate)currentTemplate.EnclosingInstance, currentTemplate); if (i == -1) { Highlight(OutputTextBox.Document, null); Highlight(TemplateTextBox.Document, r); } else { InterpEvent e = ViewModel.Visualizer.Interpreter.GetEvents(currentTemplate.EnclosingInstance)[i]; if (e is EvalTemplateEvent) { if (currentTemplate.IsAnonymousSubtemplate) { Highlight(TemplateTextBox.Document, r); } Highlight(OutputTextBox.Document, e.OutputInterval); } } } else { Highlight(OutputTextBox.Document, null); Highlight(TemplateTextBox.Document, r); } }
private void HandleOutputTextBoxSelectionChanged(object sender, RoutedEventArgs e) { InterpEvent de = FindEventAtOutputLocation(ViewModel.AllEvents, OutputTextBox.Document.GetCharOffsetToPosition(OutputTextBox.CaretPosition)); if (de == null) { currentTemplate = ViewModel.Visualizer.RootTemplate; } else { currentTemplate = de.Template; } UpdateCurrentTemplate(); }
private void HandleErrorsListBoxSelectionChanged(object sender, SelectionChangedEventArgs e) { int minIndex = ErrorsListBox.SelectedIndex; TemplateMessage message = ErrorsListBox.SelectedItem as TemplateMessage; TemplateRuntimeMessage runtimeMessage = message as TemplateRuntimeMessage; if (runtimeMessage != null) { Interval interval = runtimeMessage.SourceInterval; _currentEvent = null; _currentFrame = runtimeMessage.Frame; UpdateCurrentTemplate(); Highlight(TemplateTextBox.Document, interval); } }
private void HandleOutputTextBoxSelectionChanged(object sender, RoutedEventArgs e) { _currentEvent = FindEventAtOutputLocation(ViewModel.AllEvents, OutputTextBox.Document.GetCharOffsetToPosition(OutputTextBox.CaretPosition)); if (_currentEvent == null) { _currentFrame = ViewModel.Visualizer.RootTemplate; } else { _currentFrame = _currentEvent.Frame; } SetSelectionPath(ViewModel.TemplateCallHierarchy[0], _currentFrame.GetEvalTemplateEventStack(true)); UpdateCurrentTemplate(); }
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) { if (e.Property == DataContextProperty) { var viewModel = ViewModel; if (viewModel == null) { return; } _currentEvent = null; _currentFrame = viewModel.Visualizer.RootTemplate; OutputTextBox.Document = new FlowDocument(new Paragraph(new Run(viewModel.Output) { FontFamily = new FontFamily("Consolas") })); UpdateCurrentTemplate(); } base.OnPropertyChanged(e); }
private void UpdateCurrentTemplate() { var viewModel = ViewModel; if (viewModel == null) { return; } // update all views according to current template UpdateStack(); UpdateAttributes(); viewModel.Bytecode = _currentFrame.Template.impl.Disassemble(); TemplateTextBox.Document = new FlowDocument(new Paragraph(new Run(_currentFrame.Template.impl.Template) { FontFamily = new FontFamily("Consolas") })); viewModel.Ast = _currentFrame.Template.impl.Ast; #region new stuff // update tree view of template hierarchy and select assoc. text substring // compute path from root to currentST, create TreePath for tree widget // List<ST> pathST = currentST.getEnclosingInstanceStack(true); //// System.out.println("path="+pathST); // Object[] path = new Object[pathST.size()]; // int j = 0; // for (ST s : pathST) path[j++] = new JTreeSTModel.Node(s, interp.getDebugState(s)); // m.tree.setSelectionPath(new TreePath(path)); // highlight output text and, if {...} subtemplate, region in ST src // get last event for currentST; it's the event that captures ST eval EvalExprEvent exprEvent = _currentEvent as EvalExprEvent; if (exprEvent != null) { Highlight(OutputTextBox.Document, exprEvent.OutputInterval); Highlight(TemplateTextBox.Document, exprEvent.SourceInterval); } else { EvalTemplateEvent templateEvent = _currentEvent as EvalTemplateEvent; if (templateEvent == null) { List <InterpEvent> events = _currentFrame.GetDebugState().Events; templateEvent = events[events.Count - 1] as EvalTemplateEvent; } //m.output.moveCaretPosition(e.outputStartChar); if (templateEvent != null) { TextPointer position = Highlight(OutputTextBox.Document, templateEvent.OutputInterval); if (position != null) { Rect rect = position.GetCharacterRect(LogicalDirection.Forward); //OutputTextBox.ScrollToVerticalOffset(rect.Top); } } if (_currentFrame.Template.IsAnonymousSubtemplate) { Interval r = _currentFrame.Template.impl.TemplateRange; // System.out.println("currentST src range="+r); //m.template.moveCaretPosition(r.a); //TemplateTextBox.CaretPosition. Highlight(TemplateTextBox.Document, r); } } #endregion #if false // update tree view of template hierarchy and select assoc. text substring viewModel.Ast = currentTemplate.impl.ast; SetSelectionPath(viewModel.TemplateCallHierarchy[0], currentTemplate.GetEnclosingInstanceStack(true)); Interval r = currentTemplate.impl.TemplateRange; if (currentTemplate.EnclosingInstance != null) { int i = GetIndexOfChild(currentTemplate.EnclosingInstance, currentTemplate); if (i == -1) { Highlight(OutputTextBox.Document, null); Highlight(TemplateTextBox.Document, r); } else { InterpEvent e = ViewModel.Visualizer.Interpreter.GetEvents(currentTemplate.EnclosingInstance)[i]; if (e is EvalTemplateEvent) { if (currentTemplate.IsAnonymousSubtemplate) { Highlight(TemplateTextBox.Document, r); } Highlight(OutputTextBox.Document, e.OutputInterval); } } } else { Highlight(OutputTextBox.Document, null); Highlight(TemplateTextBox.Document, r); } #endif }