Example #1
0
        private void ASTTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            if (e.NewValue != null)
            {
                var selectedTreeItem = ((TreeViewItem)e.NewValue);

                TreeProperties.Items.Clear();

                if (selectedTreeItem.Tag is RedNode)
                {
                    var redNode = selectedTreeItem.Tag as RedNode;
                    foreach (var property in redNode.GetType().GetProperties())
                    {
                        TreeProperties.Items.Add(new { Name = property.Name, Value = property.GetValue(redNode, null) });
                    }

                    TypeProperty.Text = redNode.GetType().Name;
                    KindProperty.Text = redNode.Kind.ToString();

                    var textRange = SourceCode.Selection;
                    var startPos  = SourceCode.GetTextPointerAtOffset(redNode.Span.Start);
                    var endPos    = SourceCode.GetTextPointerAtOffset(redNode.Span.Start + redNode.Span.Length);
                    SourceCode.Selection.Select(startPos, endPos);
                }

                if (selectedTreeItem.Tag is SyntaxToken)
                {
                    var token = selectedTreeItem.Tag as SyntaxToken;

                    TypeProperty.Text = token.GetType().Name; // + " " + token.Value.GetType().Name;
                    KindProperty.Text = token.Kind.ToString();

                    foreach (var property in token.GetType().GetProperties())
                    {
                        TreeProperties.Items.Add(new { Name = property.Name, Value = property.GetValue(token, null) });
                    }

                    var textRange = SourceCode.Selection;
                    var startPos  = SourceCode.GetTextPointerAtOffset(token.Span.Start);
                    var endPos    = SourceCode.GetTextPointerAtOffset(token.Span.Start + token.Span.Length);
                    SourceCode.Selection.Select(startPos, endPos);
                }
            }
        }