#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

103 lines
2.5 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.ObjectModel;
using System.Windows;
using ICSharpCode.AvalonEdit;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
namespace Services.Debugger.Tooltips
{
public class PinningBinding : DefaultLanguageBinding
{
ITextEditor _editor;
public PinningBinding()
{}
public override void Attach(ITextEditor editor)
{
if (editor == null)
return;
_editor = editor;
CreatePins(_editor);
base.Attach(editor);
}
public override void Detach()
{
ClosePins(_editor);
base.Detach();
}
public static void CreatePins(ITextEditor editor)
{
// load pins
var pins = BookmarkManager.Bookmarks.FindAll(
b => b is PinBookmark && b.FileName == editor.FileName);
foreach (var bookmark in pins) {
var pin = (PinBookmark)bookmark;
pin.Popup = new DebuggerPopup(null, true);
pin.Popup.HorizontalOffset = pin.SavedPopupPosition.X;
pin.Popup.VerticalOffset = pin.SavedPopupPosition.Y;
pin.Popup.contentControl.pinCloseControl.Mark = pin;
var nodes = new ObservableCollection<ITreeNode>();
foreach (var tuple in pin.SavedNodes) {
var node = new TreeNode();
node.IconImage =
new ResourceServiceImage(
!string.IsNullOrEmpty(tuple.Item1) ? tuple.Item1 : "Icons.16x16.Field");
node.Name = tuple.Item2;
node.Text = tuple.Item3;
nodes.Add(node);
}
pin.SavedNodes.Clear();
pin.Popup.SetItemsSource(nodes);
pin.Nodes = nodes;
pin.Popup.Open();
}
}
public static void ClosePins(ITextEditor editor)
{
// save pins
var pins = BookmarkManager.Bookmarks.FindAll(
b => b is PinBookmark && b.FileName == editor.FileName);
foreach (var bookmark in pins) {
var pin = (PinBookmark)bookmark;
pin.SavedPopupPosition = new Point
{
X = pin.Popup.HorizontalOffset,
Y = pin.Popup.VerticalOffset
};
// nodes
foreach (var node in pin.Nodes) {
pin.SavedNodes.Add(
new Tuple<string, string, string>(
"Icons.16x16.Field",
node.Name,
node.Text));
}
pin.Popup.CloseSelfAndChildren();
}
}
}
}