Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@xamarin.com>2013-08-22 19:12:24 +0400
committerLluis Sanchez <lluis@xamarin.com>2013-08-22 19:15:59 +0400
commitf3c24797b1d6a5be2270b72223b8522b0e7115a1 (patch)
tree19bf49d0843cc6ae4a7747b53436084b692a2b7a /main/src
parent5a366906d6b730e80e2c6c0223bcb470227ce8dc (diff)
[Debugger] Add support for "default" visualizers
Diffstat (limited to 'main/src')
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/CStringVisualizer.cs18
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/IValueVisualizer.cs44
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/PixbufVisualizer.cs23
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/TextVisualizer.cs17
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizer.cs133
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizerDialog.cs19
-rw-r--r--main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs25
7 files changed, 230 insertions, 49 deletions
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/CStringVisualizer.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/CStringVisualizer.cs
index 48c210687c..0286f4c8cb 100644
--- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/CStringVisualizer.cs
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/CStringVisualizer.cs
@@ -34,7 +34,7 @@ using MonoDevelop.Core;
namespace MonoDevelop.Debugger.Visualizer
{
- public class CStringVisualizer : IValueVisualizer
+ public class CStringVisualizer : ValueVisualizer
{
TextView textView;
@@ -42,11 +42,11 @@ namespace MonoDevelop.Debugger.Visualizer
{
}
- public string Name {
+ public override string Name {
get { return GettextCatalog.GetString ("C String"); }
}
- public bool CanVisualize (ObjectValue val)
+ public override bool CanVisualize (ObjectValue val)
{
switch (val.TypeName) {
case "sbyte[]": return true;
@@ -116,7 +116,7 @@ namespace MonoDevelop.Debugger.Visualizer
textView.Buffer.Insert (ref iter, text);
}
- public Widget GetVisualizerWidget (ObjectValue val)
+ public override Widget GetVisualizerWidget (ObjectValue val)
{
textView = new TextView () { WrapMode = WrapMode.Char };
@@ -145,15 +145,5 @@ namespace MonoDevelop.Debugger.Visualizer
return box;
}
-
- public bool StoreValue (ObjectValue val)
- {
- return false;
- }
-
- public bool CanEdit (ObjectValue val)
- {
- return false;
- }
}
}
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/IValueVisualizer.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/IValueVisualizer.cs
index 8c5f827978..a83810bf4e 100644
--- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/IValueVisualizer.cs
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/IValueVisualizer.cs
@@ -29,6 +29,7 @@ using Mono.Debugging.Client;
namespace MonoDevelop.Debugger
{
+ [Obsolete ("Please use the ValueVisualizer class")]
public interface IValueVisualizer
{
/// <summary>
@@ -106,5 +107,48 @@ namespace MonoDevelop.Debugger
/// </remarks>
bool CanEdit (ObjectValue val);
}
+
+ class ValueVisualizerWrapper: ValueVisualizer
+ {
+#pragma warning disable 618
+ IValueVisualizer wrapped;
+
+ public ValueVisualizerWrapper (IValueVisualizer wrapped)
+ {
+ this.wrapped = wrapped;
+ }
+#pragma warning restore 618
+
+ public override bool CanVisualize (ObjectValue val)
+ {
+ return wrapped.CanVisualize (val);
+ }
+
+ public override Gtk.Widget GetVisualizerWidget (ObjectValue val)
+ {
+ return wrapped.GetVisualizerWidget (val);
+ }
+
+ public override string Name {
+ get {
+ return wrapped.Name;
+ }
+ }
+
+ public override bool CanEdit (ObjectValue val)
+ {
+ return wrapped.CanEdit (val);
+ }
+
+ public override bool IsDefaultVisualizer (ObjectValue val)
+ {
+ return false;
+ }
+
+ public override bool StoreValue (ObjectValue val)
+ {
+ return wrapped.StoreValue (val);
+ }
+ }
}
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/PixbufVisualizer.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/PixbufVisualizer.cs
index d637512ba8..1937ffc3e1 100644
--- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/PixbufVisualizer.cs
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/PixbufVisualizer.cs
@@ -30,20 +30,20 @@ using Mono.Debugging.Client;
namespace MonoDevelop.Debugger.Visualizer
{
- public class PixbufVisualizer: IValueVisualizer
+ public class PixbufVisualizer: ValueVisualizer
{
#region IValueVisualizer implementation
- public bool CanVisualize (ObjectValue val)
+ public override bool CanVisualize (ObjectValue val)
{
return val.TypeName == "Gdk.Pixbuf";
}
-
- public bool CanEdit (ObjectValue val)
+
+ public override bool IsDefaultVisualizer (ObjectValue val)
{
- return false;
+ return true;
}
- public Gtk.Widget GetVisualizerWidget (ObjectValue val)
+ public override Gtk.Widget GetVisualizerWidget (ObjectValue val)
{
Gdk.Pixbuf pixbuf;
string file = Path.GetTempFileName ();
@@ -63,15 +63,8 @@ namespace MonoDevelop.Debugger.Visualizer
sc.ShowAll ();
return sc;
}
-
-
- public bool StoreValue (ObjectValue val)
- {
- return true;
- }
-
-
- public string Name {
+
+ public override string Name {
get {
return "Pixbuf";
}
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/TextVisualizer.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/TextVisualizer.cs
index 8b7fb31388..0159eb4db8 100644
--- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/TextVisualizer.cs
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/TextVisualizer.cs
@@ -35,7 +35,7 @@ using MonoDevelop.Core;
namespace MonoDevelop.Debugger.Visualizer
{
- public class TextVisualizer: IValueVisualizer
+ public class TextVisualizer: ValueVisualizer
{
const int CHUNK_SIZE = 1024;
@@ -50,11 +50,11 @@ namespace MonoDevelop.Debugger.Visualizer
{
}
- public string Name {
+ public override string Name {
get { return GettextCatalog.GetString ("Text"); }
}
- public bool CanVisualize (ObjectValue val)
+ public override bool CanVisualize (ObjectValue val)
{
switch (val.TypeName) {
case "char[]": return true;
@@ -62,6 +62,11 @@ namespace MonoDevelop.Debugger.Visualizer
default: return false;
}
}
+
+ public override bool IsDefaultVisualizer (ObjectValue val)
+ {
+ return true;
+ }
bool GetNextStringChunk ()
{
@@ -118,7 +123,7 @@ namespace MonoDevelop.Debugger.Visualizer
}
}
- public Widget GetVisualizerWidget (ObjectValue val)
+ public override Widget GetVisualizerWidget (ObjectValue val)
{
textView = new TextView () { WrapMode = WrapMode.Char };
@@ -150,7 +155,7 @@ namespace MonoDevelop.Debugger.Visualizer
return box;
}
- public bool StoreValue (ObjectValue val)
+ public override bool StoreValue (ObjectValue val)
{
switch (val.TypeName) {
case "char[]":
@@ -164,7 +169,7 @@ namespace MonoDevelop.Debugger.Visualizer
}
}
- public bool CanEdit (ObjectValue val)
+ public override bool CanEdit (ObjectValue val)
{
switch (val.TypeName) {
case "char[]": return true;
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizer.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizer.cs
new file mode 100644
index 0000000000..d8eb850f96
--- /dev/null
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizer.cs
@@ -0,0 +1,133 @@
+//
+// ValueVisualizer.cs
+//
+// Author:
+// Lluis Sanchez <lluis@xamarin.com>
+//
+// Copyright (c) 2013 Xamarin Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using Mono.Debugging.Client;
+
+namespace MonoDevelop.Debugger
+{
+ public abstract class ValueVisualizer
+ {
+ /// <summary>
+ /// Display name of the visualizer
+ /// </summary>
+ /// <remarks>
+ /// This name is shown in a combo box at the top of the visualizer dialog when
+ /// there is more than one visualizer available for a value
+ /// </remarks>
+ public abstract string Name { get; }
+
+ /// <summary>
+ /// Determines whether this instance can visualize the specified value
+ /// </summary>
+ /// <returns>
+ /// <c>true</c> if this instance can visualize the specified value; otherwise, <c>false</c>.
+ /// </returns>
+ /// <param name='val'>
+ /// The value
+ /// </param>
+ /// <remarks>
+ /// This method must check the value and return <c>true</c> if it is able to display that value.
+ /// Typically, this method will check the TypeName of the value.
+ /// </remarks>
+ public abstract bool CanVisualize (ObjectValue val);
+
+ /// <summary>
+ /// Determines whether this instance is the default visualizer for the specified value
+ /// </summary>
+ /// <returns>
+ /// <c>true</c> if this instance is the default visualizer for the specified value; otherwise, <c>false</c>.
+ /// </returns>
+ /// <param name='val'>
+ /// The value
+ /// </param>
+ /// <remarks>
+ /// The default visualizer will be selected by default in the visualizer dialog
+ /// </remarks>
+ public virtual bool IsDefaultVisualizer (ObjectValue val)
+ {
+ return false;
+ }
+
+ /// <summary>
+ /// Gets a visualizer widget for a value
+ /// </summary>
+ /// <returns>
+ /// The visualizer widget.
+ /// </returns>
+ /// <param name='val'>
+ /// A value
+ /// </param>
+ /// <remarks>
+ /// This method is called to get a widget for displaying the specified value.
+ /// The method should create the widget and load the required information from
+ /// the value. Notice that the ObjectValue.Value property returns a string
+ /// representation of the value. If the visualizer needs to get values from
+ /// the object properties, it can use the ObjectValue.GetRawValue method.
+ /// </remarks>
+ public abstract Gtk.Widget GetVisualizerWidget (ObjectValue val);
+
+ /// <summary>
+ /// Saves changes done in the visualizer
+ /// </summary>
+ /// <returns>
+ /// <c>true</c> if the changes could be saved
+ /// </returns>
+ /// <param name='val'>
+ /// The value on which to store changes
+ /// </param>
+ /// <remarks>
+ /// This method is called to save changes done in the visualizer.
+ /// The implementation should use ObjectValue.SetRawValue to store the changes.
+ /// This method is only called if CanEdit returns <c>true</c>.
+ /// </remarks>
+ public virtual bool StoreValue (ObjectValue val)
+ {
+ return false;
+ }
+
+ /// <summary>
+ /// Determines whether this instance supports editing the specified value
+ /// </summary>
+ /// <returns>
+ /// <c>true</c> if this instance can edit the specified value; otherwise, <c>false</c>.
+ /// </returns>
+ /// <param name='val'>
+ /// The value
+ /// </param>
+ /// <remarks>
+ /// This method is called to determine if this visualizer supports value editing,
+ /// in addition to visualization.
+ /// The method is called only if CanVisualize returns <c>true</c> for the value, and
+ /// if the value doesn't have the ReadOnly flag.
+ /// Editing support is optional. The default implementation returns <c>false</c>.
+ /// </remarks>
+ public virtual bool CanEdit (ObjectValue val)
+ {
+ return false;
+ }
+ }
+}
+
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizerDialog.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizerDialog.cs
index 0b8b2bc933..ab85147757 100644
--- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizerDialog.cs
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger.Visualizer/ValueVisualizerDialog.cs
@@ -33,9 +33,9 @@ namespace MonoDevelop.Debugger.Viewers
{
public partial class ValueVisualizerDialog : Gtk.Dialog
{
- List<IValueVisualizer> visualizers;
+ List<ValueVisualizer> visualizers;
Gtk.Widget currentWidget;
- IValueVisualizer currentVisualizer;
+ ValueVisualizer currentVisualizer;
ObjectValue value;
public ValueVisualizerDialog ()
@@ -46,13 +46,20 @@ namespace MonoDevelop.Debugger.Viewers
public void Show (ObjectValue val)
{
value = val;
- visualizers = new List<IValueVisualizer> (DebuggingService.GetValueVisualizers (val));
- visualizers.Sort (delegate (IValueVisualizer v1, IValueVisualizer v2) {
+ visualizers = new List<ValueVisualizer> (DebuggingService.GetValueVisualizers (val));
+ visualizers.Sort (delegate (ValueVisualizer v1, ValueVisualizer v2) {
return v1.Name.CompareTo (v2.Name);
});
- foreach (IValueVisualizer vis in visualizers)
+
+ int defaultVis = 0;
+ int n = 0;
+ foreach (ValueVisualizer vis in visualizers) {
comboVisualizers.AppendText (vis.Name);
- comboVisualizers.Active = 0;
+ if (vis.IsDefaultVisualizer (val))
+ defaultVis = n;
+ n++;
+ }
+ comboVisualizers.Active = defaultVis;
if (val.IsReadOnly || !visualizers.Where (v => v.CanEdit (val)).Any ()) {
buttonCancel.Hide ();
buttonOk.Label = Gtk.Stock.Close;
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs
index 1de15dbfdd..7d7f330baf 100644
--- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs
+++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/DebuggingService.cs
@@ -46,6 +46,7 @@ using ICSharpCode.NRefactory.Semantics;
* exceptions, now we error out silently, this needs a real solution.
*/
using MonoDevelop.Ide.TextEditing;
+using System.Linq;
namespace MonoDevelop.Debugger
{
@@ -184,19 +185,27 @@ namespace MonoDevelop.Debugger
}
}
- internal static IEnumerable<IValueVisualizer> GetValueVisualizers (ObjectValue val)
+ internal static IEnumerable<ValueVisualizer> GetValueVisualizers (ObjectValue val)
{
- foreach (IValueVisualizer v in AddinManager.GetExtensionObjects ("/MonoDevelop/Debugging/ValueVisualizers", false))
- if (v.CanVisualize (val))
- yield return v;
+ foreach (object v in AddinManager.GetExtensionObjects ("/MonoDevelop/Debugging/ValueVisualizers", false)) {
+ if (v is ValueVisualizer) {
+ var vv = (ValueVisualizer)v;
+ if (vv.CanVisualize (val))
+ yield return vv;
+ }
+#pragma warning disable 618
+ if (v is IValueVisualizer) {
+ var vv = (IValueVisualizer)v;
+ if (vv.CanVisualize (val))
+ yield return new ValueVisualizerWrapper (vv);
+ }
+#pragma warning restore 618
+ }
}
internal static bool HasValueVisualizers (ObjectValue val)
{
- foreach (IValueVisualizer v in AddinManager.GetExtensionObjects ("/MonoDevelop/Debugging/ValueVisualizers", false))
- if (v.CanVisualize (val))
- return true;
- return false;
+ return GetValueVisualizers (val).Any ();
}
public static void ShowValueVisualizer (ObjectValue val)