1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.ComponentModel;
6
using System.Globalization;
10
using ICSharpCode.Core;
11
using ICSharpCode.NRefactory;
13
namespace ICSharpCode.SharpDevelop.Bookmarks
15
public sealed class BookmarkConverter : TypeConverter
17
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
19
if (sourceType == typeof(string)) {
22
return base.CanConvertFrom(context, sourceType);
26
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
28
if (value is string) {
29
string[] v = ((string)value).Split('|');
31
FileName fileName = FileName.Create(v[1]);
32
int lineNumber = int.Parse(v[2], culture);
33
int columnNumber = int.Parse(v[3], culture);
41
Debugging.BreakpointAction action = Debugging.BreakpointAction.Break;
42
string scriptLanguage = "";
44
action = (Debugging.BreakpointAction)Enum.Parse(typeof(Debugging.BreakpointAction), v[5]);
45
scriptLanguage = v[6];
48
var bbm = new Debugging.BreakpointBookmark(fileName, new Location(columnNumber, lineNumber), action, scriptLanguage, script);
49
bbm.IsEnabled = bool.Parse(v[4]);
51
bbm.ScriptLanguage = scriptLanguage;
52
bbm.Condition = script;
56
var pin = new PinBookmark(fileName, new Location(columnNumber, lineNumber));
61
X = double.Parse(v[5], culture),
62
Y = double.Parse(v[6], culture)
66
pin.SavedNodes = new System.Collections.Generic.List<Tuple<string, string, string>>();
67
for (int i = 7; i < v.Length; i+=3) {
68
pin.SavedNodes.Add(new Tuple<string, string, string>(v[i], v[i+1], v[i+2]));
74
bookmark = new Bookmark(fileName, new Location(columnNumber, lineNumber));
79
return base.ConvertFrom(context, culture, value);
83
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
85
SDBookmark bookmark = value as SDBookmark;
86
if (destinationType == typeof(string) && bookmark != null) {
87
StringBuilder b = new StringBuilder();
88
if (bookmark is Debugging.BreakpointBookmark) {
89
b.Append("Breakpoint");
91
if (bookmark is PinBookmark)
92
b.Append("PinBookmark");
97
b.Append(bookmark.FileName);
99
b.Append(bookmark.LineNumber);
101
b.Append(bookmark.ColumnNumber);
103
if (bookmark is Debugging.BreakpointBookmark) {
104
Debugging.BreakpointBookmark bbm = (Debugging.BreakpointBookmark)bookmark;
106
b.Append(bbm.IsEnabled.ToString());
108
b.Append(bbm.Action.ToString());
110
b.Append(bbm.ScriptLanguage);
112
b.Append(bbm.Condition);
115
if (bookmark is PinBookmark) {
116
var pin = (PinBookmark)bookmark;
118
b.Append(pin.Comment ?? string.Empty);
122
b.Append(pin.PinPosition.Value.X);
124
b.Append(pin.PinPosition.Value.Y);
127
foreach(var node in pin.Nodes) {
129
b.Append(node.ImageName);
131
b.Append(node.FullName);
138
return base.ConvertTo(context, culture, value, destinationType);