Browse Source

Added Xml visualizer with highlighting using AvalonEdit, no indentation and folding yet.

Text visualizer uses AvalonEdit.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4841 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Martin Koníček 17 years ago
parent
commit
f5cb2b34ba
  1. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  2. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/ExpressionVisualizerCommand.cs
  3. 4
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/GridVisualizerCommand.cs
  4. 2
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/ObjectGraphVisualizerCommand.cs
  5. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/TextVisualizerCommand.cs
  6. 5
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/VisualizerDescriptors.cs
  7. 62
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/XmlVisualizerCommand.cs
  8. 15
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/TextVisualizer/TextVisualizerMode.cs
  9. 15
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/TextVisualizer/TextVisualizerWindow.xaml
  10. 30
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/TextVisualizer/TextVisualizerWindow.xaml.cs

4
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj

@ -133,7 +133,7 @@
</Compile> </Compile>
<Compile Include="Src\TreeModel\DebuggerResourceService.cs" /> <Compile Include="Src\TreeModel\DebuggerResourceService.cs" />
<Compile Include="Src\TreeModel\IEnumerableNode.cs" /> <Compile Include="Src\TreeModel\IEnumerableNode.cs" />
<Compile Include="Src\Visualizers\Commands\ExpressionNodeVisualizerCommand.cs" /> <Compile Include="Src\Visualizers\Commands\ExpressionVisualizerCommand.cs" />
<Compile Include="Src\Visualizers\Commands\GridVisualizerCommand.cs" /> <Compile Include="Src\Visualizers\Commands\GridVisualizerCommand.cs" />
<Compile Include="Src\Visualizers\Commands\IVisualizerCommandDescriptor.cs" /> <Compile Include="Src\Visualizers\Commands\IVisualizerCommandDescriptor.cs" />
<Compile Include="Src\Visualizers\Commands\ObjectGraphVisualizerCommand.cs" /> <Compile Include="Src\Visualizers\Commands\ObjectGraphVisualizerCommand.cs" />
@ -141,6 +141,7 @@
<Compile Include="Src\Visualizers\Commands\ObjectGraphVisualizerMenuCommand.cs" /> <Compile Include="Src\Visualizers\Commands\ObjectGraphVisualizerMenuCommand.cs" />
<Compile Include="Src\Visualizers\Commands\TextVisualizerCommand.cs" /> <Compile Include="Src\Visualizers\Commands\TextVisualizerCommand.cs" />
<Compile Include="Src\Visualizers\Commands\VisualizerDescriptors.cs" /> <Compile Include="Src\Visualizers\Commands\VisualizerDescriptors.cs" />
<Compile Include="Src\Visualizers\Commands\XmlVisualizerCommand.cs" />
<Compile Include="Src\Visualizers\Common\DebuggerVisualizerException.cs" /> <Compile Include="Src\Visualizers\Common\DebuggerVisualizerException.cs" />
<Compile Include="Src\Visualizers\Common\IEvaluate.cs" /> <Compile Include="Src\Visualizers\Common\IEvaluate.cs" />
<Compile Include="Src\Visualizers\Common\IListValuesProvider.cs" /> <Compile Include="Src\Visualizers\Common\IListValuesProvider.cs" />
@ -175,6 +176,7 @@
<Compile Include="Src\Visualizers\PresentationBindings\GridViewHideableColumn.cs" /> <Compile Include="Src\Visualizers\PresentationBindings\GridViewHideableColumn.cs" />
<Compile Include="Src\Visualizers\PresentationBindings\ScrollUtils.cs" /> <Compile Include="Src\Visualizers\PresentationBindings\ScrollUtils.cs" />
<Compile Include="Src\Visualizers\PresentationBindings\TooltipVisibilityConverter.cs" /> <Compile Include="Src\Visualizers\PresentationBindings\TooltipVisibilityConverter.cs" />
<Compile Include="Src\Visualizers\TextVisualizer\TextVisualizerMode.cs" />
<Compile Include="Src\Visualizers\TextVisualizer\TextVisualizerWindow.xaml.cs"> <Compile Include="Src\Visualizers\TextVisualizer\TextVisualizerWindow.xaml.cs">
<DependentUpon>TextVisualizerWindow.xaml</DependentUpon> <DependentUpon>TextVisualizerWindow.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>

4
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/ExpressionNodeVisualizerCommand.cs → src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/ExpressionVisualizerCommand.cs

@ -17,11 +17,11 @@ namespace Debugger.AddIn.Visualizers
/// Visualizer command for <see cref="ExpressionNode"/> /// Visualizer command for <see cref="ExpressionNode"/>
/// </summary> /// </summary>
// should we make visualizer command available for Expression, or any TreeNode? // should we make visualizer command available for Expression, or any TreeNode?
public abstract class ExpressionNodeVisualizerCommand : IVisualizerCommand public abstract class ExpressionVisualizerCommand : IVisualizerCommand
{ {
public Expression Expression { get; private set; } public Expression Expression { get; private set; }
public ExpressionNodeVisualizerCommand(Expression expression) public ExpressionVisualizerCommand(Expression expression)
{ {
this.Expression = expression; this.Expression = expression;
} }

4
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/GridVisualizerCommand.cs

@ -21,7 +21,7 @@ namespace Debugger.AddIn.Visualizers
public bool IsVisualizerAvailable(DebugType type) public bool IsVisualizerAvailable(DebugType type)
{ {
DebugType collectionType, itemType; DebugType collectionType, itemType;
// Visualizer available for IEnumerable<T> // Visualizer available for IEnumerable<T> (that means also IList<T>)
return type.ResolveIEnumerableImplementation(out collectionType, out itemType); return type.ResolveIEnumerableImplementation(out collectionType, out itemType);
} }
@ -34,7 +34,7 @@ namespace Debugger.AddIn.Visualizers
/// <summary> /// <summary>
/// Shows grid visualizer for a node. /// Shows grid visualizer for a node.
/// </summary> /// </summary>
public class GridVisualizerCommand : ExpressionNodeVisualizerCommand public class GridVisualizerCommand : ExpressionVisualizerCommand
{ {
public GridVisualizerCommand(Expression expression) public GridVisualizerCommand(Expression expression)
:base(expression) :base(expression)

2
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/ObjectGraphVisualizerCommand.cs

@ -33,7 +33,7 @@ namespace Debugger.AddIn.Visualizers
/// <summary> /// <summary>
/// Shows object graph visualizer for a node. /// Shows object graph visualizer for a node.
/// </summary> /// </summary>
public class ObjectGraphVisualizerCommand : ExpressionNodeVisualizerCommand public class ObjectGraphVisualizerCommand : ExpressionVisualizerCommand
{ {
public ObjectGraphVisualizerCommand(Expression expression) public ObjectGraphVisualizerCommand(Expression expression)
:base(expression) :base(expression)

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/TextVisualizerCommand.cs

@ -32,7 +32,7 @@ namespace Debugger.AddIn.Visualizers
/// <summary> /// <summary>
/// Description of TextVisualizerCommand. /// Description of TextVisualizerCommand.
/// </summary> /// </summary>
public class TextVisualizerCommand : ExpressionNodeVisualizerCommand public class TextVisualizerCommand : ExpressionVisualizerCommand
{ {
public TextVisualizerCommand(Expression expression) public TextVisualizerCommand(Expression expression)
:base(expression) :base(expression)
@ -54,6 +54,7 @@ namespace Debugger.AddIn.Visualizers
{ {
var textVisualizerWindow = new TextVisualizerWindow( var textVisualizerWindow = new TextVisualizerWindow(
this.Expression.PrettyPrint(), this.Expression.Evaluate(WindowsDebugger.CurrentProcess).InvokeToString()); this.Expression.PrettyPrint(), this.Expression.Evaluate(WindowsDebugger.CurrentProcess).InvokeToString());
textVisualizerWindow.Mode = TextVisualizerMode.PlainText;
textVisualizerWindow.ShowDialog(); textVisualizerWindow.ShowDialog();
} }
} }

5
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/VisualizerDescriptors.cs

@ -18,10 +18,11 @@ namespace Debugger.AddIn.Visualizers
{ {
static ReadOnlyCollection<IVisualizerDescriptor> allDescriptors; static ReadOnlyCollection<IVisualizerDescriptor> allDescriptors;
static IEnumerable<IVisualizerDescriptor> createAllDescriptors() static IEnumerable<IVisualizerDescriptor> CreateAllDescriptors()
{ {
// these should be obtained from AddIn tree so that it is possible to write add-in for Debugger.AddIn with new visualizers // these should be obtained from AddIn tree so that it is possible to write add-in for Debugger.AddIn with new visualizers
yield return new TextVisualizerDescriptor(); yield return new TextVisualizerDescriptor();
yield return new XmlVisualizerDescriptor();
yield return new ObjectGraphVisualizerDescriptor(); yield return new ObjectGraphVisualizerDescriptor();
yield return new GridVisualizerDescriptor(); yield return new GridVisualizerDescriptor();
} }
@ -29,7 +30,7 @@ namespace Debugger.AddIn.Visualizers
public static ReadOnlyCollection<IVisualizerDescriptor> GetAllDescriptors() public static ReadOnlyCollection<IVisualizerDescriptor> GetAllDescriptors()
{ {
if (allDescriptors == null) { if (allDescriptors == null) {
allDescriptors = new List<IVisualizerDescriptor>(createAllDescriptors()).AsReadOnly(); allDescriptors = new List<IVisualizerDescriptor>(CreateAllDescriptors()).AsReadOnly();
} }
return allDescriptors; return allDescriptors;
} }

62
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Commands/XmlVisualizerCommand.cs

@ -0,0 +1,62 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using Debugger.MetaData;
using System;
using System.Collections.Generic;
using System.Linq;
using Debugger.AddIn.TreeModel;
using Debugger.AddIn.Visualizers.TextVisualizer;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Services;
namespace Debugger.AddIn.Visualizers
{
public class XmlVisualizerDescriptor : IVisualizerDescriptor
{
public bool IsVisualizerAvailable(DebugType type)
{
return type.IsString;
}
public IVisualizerCommand CreateVisualizerCommand(Expression expression)
{
return new XmlVisualizerCommand(expression);
}
}
/// <summary>
/// Description of TextVisualizerCommand.
/// </summary>
public class XmlVisualizerCommand : ExpressionVisualizerCommand
{
public XmlVisualizerCommand(Expression expression)
:base(expression)
{
}
public override bool CanExecute {
get { return true; }
}
public override string ToString()
{
return "Xml visualizer";
}
public override void Execute()
{
if (this.Expression != null)
{
var textVisualizerWindow = new TextVisualizerWindow(
this.Expression.PrettyPrint(), this.Expression.Evaluate(WindowsDebugger.CurrentProcess).InvokeToString());
textVisualizerWindow.Mode = TextVisualizerMode.Xml;
textVisualizerWindow.ShowDialog();
}
}
}
}

15
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/TextVisualizer/TextVisualizerMode.cs

@ -0,0 +1,15 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version>
// </file>
using System.Collections.Generic;
using System.Linq;
using System;
public enum TextVisualizerMode
{
PlainText,
Xml
}

15
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/TextVisualizer/TextVisualizerWindow.xaml

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Window <Window
x:Class="Debugger.AddIn.Visualizers.TextVisualizer.TextVisualizerWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Debugger.AddIn.Visualizers.TextVisualizer.TextVisualizerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:AvalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
Title="Text visualizer" Title="Text visualizer"
SizeToContent="WidthAndHeight" SizeToContent="WidthAndHeight"
WindowStartupLocation="CenterScreen" WindowStartupLocation="CenterScreen"
@ -36,14 +39,12 @@
<Border <Border
Margin="0" Margin="0"
Padding="2"> Padding="2">
<TextBox <AvalonEdit:TextEditor
x:Name="textEditor"
Background="White" Background="White"
IsReadOnly="True" IsReadOnly="true"
Name="txtText"
Width="Auto"
Height="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"></TextBox> ScrollViewer.VerticalScrollBarVisibility="Auto"></AvalonEdit:TextEditor>
</Border> </Border>
</DockPanel> </DockPanel>
</Window> </Window>

30
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/TextVisualizer/TextVisualizerWindow.xaml.cs

@ -4,9 +4,10 @@
// <owner name="Martin Koníček" email="martin.konicek@gmail.com"/> // <owner name="Martin Koníček" email="martin.konicek@gmail.com"/>
// <version>$Revision$</version> // <version>$Revision$</version>
// </file> // </file>
using System.Linq; using ICSharpCode.AvalonEdit.Highlighting;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@ -25,6 +26,8 @@ namespace Debugger.AddIn.Visualizers.TextVisualizer
public TextVisualizerWindow() public TextVisualizerWindow()
{ {
InitializeComponent(); InitializeComponent();
Mode = TextVisualizerMode.PlainText;
textEditor.IsReadOnly = true;
} }
public TextVisualizerWindow(string title, string text) public TextVisualizerWindow(string title, string text)
@ -37,18 +40,35 @@ namespace Debugger.AddIn.Visualizers.TextVisualizer
public string Text public string Text
{ {
get { return this.txtText.Text; } get { return this.textEditor.Text; }
set { this.txtText.Text = value; } set { this.textEditor.Text = value; }
}
private TextVisualizerMode mode;
public TextVisualizerMode Mode
{
get { return mode; }
set {
mode = value;
switch (mode) {
case TextVisualizerMode.PlainText:
textEditor.SyntaxHighlighting = null;
break;
case TextVisualizerMode.Xml:
textEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinitionByExtension(".xml");
break;
}
}
} }
void CheckBox_CheckedChanged(object sender, RoutedEventArgs e) void CheckBox_CheckedChanged(object sender, RoutedEventArgs e)
{ {
txtText.TextWrapping = chbWrap.IsChecked.GetValueOrDefault(false) ? TextWrapping.Wrap : TextWrapping.NoWrap; textEditor.WordWrap = chbWrap.IsChecked.GetValueOrDefault(false);
} }
void BtnCopy_Click(object sender, RoutedEventArgs e) void BtnCopy_Click(object sender, RoutedEventArgs e)
{ {
Clipboard.SetText(txtText.Text); Clipboard.SetText(textEditor.Text);
} }
void BtnClose_Click(object sender, RoutedEventArgs e) void BtnClose_Click(object sender, RoutedEventArgs e)

Loading…
Cancel
Save