Пример #1
0
        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();
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
        }
Пример #7
0
        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
        }