Browse Source

Edit pin control v0.2

pull/11/head
eusebiu 15 years ago
parent
commit
5d86261df7
  1. 54
      src/Main/Base/Project/Src/Bookmarks/BookmarkConverter.cs
  2. 3
      src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerPopup.cs
  3. 5
      src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerTooltipControl.xaml
  4. 106
      src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerTooltipControl.xaml.cs
  5. 13
      src/Main/Base/Project/Src/Services/Debugger/Tooltips/PinBookmark.cs
  6. 49
      src/Main/Base/Project/Src/Services/Debugger/Tooltips/PinCloseControl.xaml.cs

54
src/Main/Base/Project/Src/Bookmarks/BookmarkConverter.cs

@ -31,33 +31,36 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
FileName fileName = FileName.Create(v[1]); FileName fileName = FileName.Create(v[1]);
int lineNumber = int.Parse(v[2], culture); int lineNumber = int.Parse(v[2], culture);
int columnNumber = int.Parse(v[3], culture); int columnNumber = int.Parse(v[3], culture);
Debugging.BreakpointAction action = Debugging.BreakpointAction.Break;
string scriptLanguage = "";
string script = "";
if (v[0] == "Breakpoint") {
action = (Debugging.BreakpointAction)Enum.Parse(typeof(Debugging.BreakpointAction), v[5]);
scriptLanguage = v[6];
script = v[7];
}
if (lineNumber < 0) if (lineNumber < 0)
return null; return null;
if (columnNumber < 0) if (columnNumber < 0)
return null; return null;
SDBookmark bookmark; SDBookmark bookmark;
switch (v[0]) { switch (v[0]) {
case "Breakpoint": case "Breakpoint":
Debugging.BreakpointAction action = Debugging.BreakpointAction.Break;
string scriptLanguage = "";
string script = "";
action = (Debugging.BreakpointAction)Enum.Parse(typeof(Debugging.BreakpointAction), v[5]);
scriptLanguage = v[6];
script = v[7];
var bbm = new Debugging.BreakpointBookmark(fileName, new Location(columnNumber, lineNumber), action, scriptLanguage, script); var bbm = new Debugging.BreakpointBookmark(fileName, new Location(columnNumber, lineNumber), action, scriptLanguage, script);
bbm.IsEnabled = bool.Parse(v[4]); bbm.IsEnabled = bool.Parse(v[4]);
bookmark = bbm; bookmark = bbm;
bbm.Action = action;
bbm.ScriptLanguage = scriptLanguage;
bbm.Condition = script;
break; break;
case "PinBookmark": // case "PinBookmark":
var pin = new PinBookmark(fileName, new Location(columnNumber, lineNumber)); // var pin = new PinBookmark(fileName, new Location(columnNumber, lineNumber));
for (int i = 4; i < v.Length; i+=2) { // pin.Comment = v[3];
pin.SavedNodes.Add(new Tuple<string, string>(v[i], v[i+1])); // for (int i = 4; i < v.Length; i+=2) {
} // pin.SavedNodes.Add(new Tuple<string, string>(v[i], v[i+1]));
// }
bookmark = pin; //
break; // bookmark = pin;
// break;
default: default:
bookmark = new SDBookmark(fileName, new Location(columnNumber, lineNumber)); bookmark = new SDBookmark(fileName, new Location(columnNumber, lineNumber));
break; break;
@ -100,15 +103,16 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
b.Append(bbm.Condition); b.Append(bbm.Condition);
} }
if (bookmark is PinBookmark) { // if (bookmark is PinBookmark) {
var pin = (PinBookmark)bookmark; // var pin = (PinBookmark)bookmark;
b.Append(pin.Comment); // b.Append(pin.Comment ?? string.Empty);
foreach(var node in pin.Nodes) { // foreach(var node in pin.Nodes) {
b.Append(node.Name); // b.Append('|');
b.Append('|'); // b.Append(node.Name);
b.Append(node.Text); // b.Append('|');
} // b.Append(node.Text);
} // }
// }
return b.ToString(); return b.ToString();
} else { } else {
return base.ConvertTo(context, culture, value, destinationType); return base.ConvertTo(context, culture, value, destinationType);

3
src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerPopup.cs

@ -9,6 +9,7 @@ using System.Windows.Input;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using Services.Debugger.Tooltips;
namespace ICSharpCode.SharpDevelop.Debugging namespace ICSharpCode.SharpDevelop.Debugging
{ {
@ -33,6 +34,8 @@ namespace ICSharpCode.SharpDevelop.Debugging
this.AllowsTransparency = true; this.AllowsTransparency = true;
//this.PopupAnimation = PopupAnimation.Slide; //this.PopupAnimation = PopupAnimation.Slide;
} }
public PinBookmark Mark { get; set; }
// attempt to propagate shortcuts to main windows when Popup is focusable (needed for keyboard scrolling + editing) // attempt to propagate shortcuts to main windows when Popup is focusable (needed for keyboard scrolling + editing)
/*void DebuggerPopup_KeyDown(object sender, KeyEventArgs e) /*void DebuggerPopup_KeyDown(object sender, KeyEventArgs e)

5
src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerTooltipControl.xaml

@ -230,9 +230,8 @@
Style="{StaticResource TextStyle}" Style="{StaticResource TextStyle}"
IsEnabled="{Binding CanSetText}" IsEnabled="{Binding CanSetText}"
KeyUp="TextBox_KeyUp" KeyUp="TextBox_KeyUp"
LostFocus="TextBox_LostFocus"
Margin="4 0" Margin="4 0"
Text="{Binding Path=Text, Mode=OneWay}"/> Text="{Binding Path=Text}"/>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
@ -263,7 +262,7 @@
<!-- commentTextbox --> <!-- commentTextbox -->
<Border Name="BorderComment" Background="White" BorderThickness="1,0,1,1" BorderBrush="Black" Height="0" MaxHeight="50"> <Border Name="BorderComment" Background="White" BorderThickness="1,0,1,1" BorderBrush="Black" Height="0" MaxHeight="50">
<TextBox Name="CommentTextBox" Margin="3" Height="34"/> <TextBox Name="CommentTextBox" Margin="3" Height="34" TextChanged="CommentTextBox_TextChanged"/>
</Border> </Border>
</StackPanel> </StackPanel>
<Canvas MinWidth="25" Background="Transparent" Grid.Column="1" Name="PinControlCanvas" Visibility="Collapsed"> <Canvas MinWidth="25" Background="Transparent" Grid.Column="1" Name="PinControlCanvas" Visibility="Collapsed">

106
src/Main/Base/Project/Src/Services/Debugger/Tooltips/DebuggerTooltipControl.xaml.cs

@ -110,11 +110,6 @@ namespace ICSharpCode.SharpDevelop.Debugging
} }
} }
public string Comment {
get { return CommentTextBox.Text; }
set { CommentTextBox.Text = value; }
}
/// <summary> /// <summary>
/// Position within the document /// Position within the document
/// </summary> /// </summary>
@ -201,6 +196,7 @@ namespace ICSharpCode.SharpDevelop.Debugging
if (this.containingPopup != null) { if (this.containingPopup != null) {
this.containingPopup.IsLeaf = false; this.containingPopup.IsLeaf = false;
} }
this.childPopup.contentControl.LogicalPosition = LogicalPosition;
this.childPopup.IsLeaf = true; this.childPopup.IsLeaf = true;
this.childPopup.HorizontalOffset = buttonPos.X + ChildPopupOpenXOffet; this.childPopup.HorizontalOffset = buttonPos.X + ChildPopupOpenXOffet;
this.childPopup.VerticalOffset = buttonPos.Y + ChildPopupOpenYOffet; this.childPopup.VerticalOffset = buttonPos.Y + ChildPopupOpenYOffet;
@ -244,17 +240,9 @@ namespace ICSharpCode.SharpDevelop.Debugging
} }
} }
void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
// set new value
var textBox = (TextBox)sender;
var node = ((FrameworkElement)sender).DataContext as ITreeNode;
SaveNewValue(node, textBox.Text);
}
void SaveNewValue(ITreeNode node, string newValue) void SaveNewValue(ITreeNode node, string newValue)
{ {
if(node != null && node.SetText(newValue)) { if(node != null && node.SetText(newValue)) {
// show adorner // show adorner
var adornerLayer = AdornerLayer.GetAdornerLayer(dataGrid); var adornerLayer = AdornerLayer.GetAdornerLayer(dataGrid);
var adorners = adornerLayer.GetAdorners(dataGrid); var adorners = adornerLayer.GetAdorners(dataGrid);
@ -268,57 +256,77 @@ namespace ICSharpCode.SharpDevelop.Debugging
void PinButton_Checked(object sender, RoutedEventArgs e) void PinButton_Checked(object sender, RoutedEventArgs e)
{ {
ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider; ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider;
ToggleButton button = (ToggleButton)sender; ToggleButton button = (ToggleButton)e.OriginalSource;
if (provider != null) { if (provider != null) {
ITextEditor editor = provider.TextEditor; ITextEditor editor = provider.TextEditor;
if (!string.IsNullOrEmpty(editor.FileName)) { if (!string.IsNullOrEmpty(editor.FileName)) {
var location = LogicalPosition;
var pin = new PinBookmark(editor.FileName, LogicalPosition); var pin = BookmarkManager.Bookmarks.Find(b => b is PinBookmark &&
if (!BookmarkManager.Bookmarks.Contains(pin)) { b.FileName == editor.FileName &&
b.Location.Line == location.Line) as PinBookmark;
bool found = false;
if (pin == null) {
pin = new PinBookmark(editor.FileName, location);
}
else {
found = true;
}
var popup = pin.Popup;
if (!found) {
// TODO set the pin inside the code editor pinning surface
// show pinned DebuggerPopup // show pinned DebuggerPopup
if (pin.Popup == null) { if (popup == null) {
pin.Popup = new DebuggerPopup(this, true); popup = new DebuggerPopup(null, true);
pin.Popup.Placement = PlacementMode.Absolute;
Rect rect = new Rect(this.DesiredSize);
var point = this.PointToScreen(rect.TopRight);
pin.Popup.HorizontalOffset = point.X + 150;
pin.Popup.VerticalOffset = point.Y - 20;
pin.Popup.Open();
} }
pin.Nodes.Add(button.DataContext as ITreeNode); popup.Mark = pin;
popup.Placement = PlacementMode.Absolute;
Rect rect = new Rect(this.DesiredSize);
var point = this.PointToScreen(rect.TopRight);
popup.HorizontalOffset = 650;
popup.StaysOpen = true;
popup.VerticalOffset = point.Y - 50;
pin.Popup = popup;
pin.Nodes.Add((ITreeNode)button.DataContext);
BookmarkManager.ToggleBookmark( BookmarkManager.ToggleBookmark(
editor, editor,
LogicalPosition.Line, location.Line,
b => b.CanToggle && b is PinBookmark, b => b is PinBookmark,
location => pin); l => pin);
popup.Open();
} }
else else
{ {
pin.Nodes.Add(button.DataContext as ITreeNode); popup = pin.Popup;
pin.Nodes.Add((ITreeNode)button.DataContext);
} }
popup.ItemsSource = pin.Nodes;
} }
} }
} }
void PinButton_Unchecked(object sender, RoutedEventArgs e) void PinButton_Unchecked(object sender, RoutedEventArgs e)
{ {
if (!showPinControl) // remove from pinned DebuggerPopup
return; ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider;
ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider;
if (provider != null) { if (provider != null) {
ITextEditor editor = provider.TextEditor; ITextEditor editor = provider.TextEditor;
if (!string.IsNullOrEmpty(editor.FileName)) { if (!string.IsNullOrEmpty(editor.FileName)) {
// remove from pinned DebuggerPopup var pin = BookmarkManager.Bookmarks.Find(b => b is PinBookmark &&
var pin = new PinBookmark(editor.FileName, LogicalPosition); b.FileName == editor.FileName &&
if (!BookmarkManager.Bookmarks.Contains(pin)) b.Location.Line == LogicalPosition.Line) as PinBookmark;
return;
ToggleButton button = (ToggleButton)sender; ToggleButton button = (ToggleButton)e.OriginalSource;
pin.Nodes.Remove(button.DataContext as ITreeNode); pin.Nodes.Remove((ITreeNode)button.DataContext);
pin.Popup.ItemsSource = pin.Nodes;
} }
} }
} }
public void ShowComment(bool show) public void ShowComment(bool show)
@ -341,6 +349,20 @@ namespace ICSharpCode.SharpDevelop.Debugging
board.Begin(this); board.Begin(this);
} }
public string Comment {
get { return CommentTextBox.Text; }
set { CommentTextBox.Text = value; }
}
public event EventHandler CommentChanged;
void CommentTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var handler = CommentChanged;
if(handler != null)
handler(this, EventArgs.Empty);
}
class SavedAdorner : Adorner class SavedAdorner : Adorner
{ {
public SavedAdorner(UIElement adornedElement) : base(adornedElement) public SavedAdorner(UIElement adornedElement) : base(adornedElement)

13
src/Main/Base/Project/Src/Services/Debugger/Tooltips/PinBookmark.cs

@ -11,7 +11,6 @@ using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Editor;
namespace Services.Debugger.Tooltips namespace Services.Debugger.Tooltips
{ {
@ -19,22 +18,26 @@ namespace Services.Debugger.Tooltips
{ {
string tooltip; string tooltip;
public DebuggerPopup Popup { get; set; } public event NotifyCollectionChangedEventHandler CollectionChanged;
public static readonly IImage PinImage = new ResourceServiceImage("Bookmarks.Pin"); public static readonly IImage PinImage = new ResourceServiceImage("Bookmarks.Pin");
public PinBookmark(FileName fileName, Location location) : base(fileName, location) public PinBookmark(FileName fileName, Location location) : base(fileName, location)
{ {
Nodes = new ObservableCollection<ITreeNode>(); Nodes = new ObservableCollection<ITreeNode>();
SavedNodes = new List<Tuple<string, string>>();
Nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(Nodes_CollectionChanged); Nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(Nodes_CollectionChanged);
IsVisibleInBookmarkPad = false; IsVisibleInBookmarkPad = false;
} }
//TODO this should not be here but onto pinning surface of the code editor
public DebuggerPopup Popup { get; set; }
void Nodes_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) void Nodes_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{ {
if (e.Action == NotifyCollectionChangedAction.Add || var handler = CollectionChanged;
e.Action == NotifyCollectionChangedAction.Remove) if (handler != null)
Popup.contentControl.ItemsSource = Nodes; handler.Invoke(this, e);
} }
public ObservableCollection<ITreeNode> Nodes { get; set; } public ObservableCollection<ITreeNode> Nodes { get; set; }

49
src/Main/Base/Project/Src/Services/Debugger/Tooltips/PinCloseControl.xaml.cs

@ -2,15 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic; using System.Collections.Specialized;
using System.Text;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Debugging;
@ -19,48 +13,43 @@ using ICSharpCode.SharpDevelop.Gui;
namespace Services.Debugger.Tooltips namespace Services.Debugger.Tooltips
{ {
/// <summary>
/// Interaction logic for PinCloseControl.xaml
/// </summary>
public partial class PinCloseControl : UserControl public partial class PinCloseControl : UserControl
{ {
readonly DebuggerTooltipControl toolTipControl; readonly DebuggerTooltipControl control;
public PinCloseControl(DebuggerTooltipControl parent) public PinCloseControl(DebuggerTooltipControl control)
{ {
Margin = new Thickness(5, 0, 0, 0); Margin = new Thickness(5, 0, 0, 0);
InitializeComponent(); InitializeComponent();
this.toolTipControl = parent; this.control = control;
this.control.CommentChanged += delegate { Mark.Comment = control.Comment; };
}
private PinBookmark Mark {
get { return this.control.containingPopup.Mark; }
} }
void Unpin() void Unpin()
{ {
ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveContent as ITextEditorProvider; BookmarkManager.RemoveMark(Mark);
if (provider != null) {
ITextEditor editor = provider.TextEditor;
if (!string.IsNullOrEmpty(editor.FileName)) {
var pin = new PinBookmark(editor.FileName, toolTipControl.LogicalPosition);
BookmarkManager.RemoveMark(pin);
}
}
} }
void CloseButton_Click(object sender, RoutedEventArgs e) void CloseButton_Click(object sender, RoutedEventArgs e)
{ {
Unpin(); Unpin();
toolTipControl.containingPopup.CloseSelfAndChildren();
this.control.containingPopup.CloseSelfAndChildren();
} }
void CommentButton_Checked(object sender, RoutedEventArgs e) void CommentButton_Checked(object sender, RoutedEventArgs e)
{ {
toolTipControl.ShowComment(true); this.control.ShowComment(true);
} }
void CommentButton_Unchecked(object sender, RoutedEventArgs e) void CommentButton_Unchecked(object sender, RoutedEventArgs e)
{ {
toolTipControl.ShowComment(false); this.control.ShowComment(false);
} }
void UnpinButton_Checked(object sender, RoutedEventArgs e) void UnpinButton_Checked(object sender, RoutedEventArgs e)
@ -75,13 +64,11 @@ namespace Services.Debugger.Tooltips
ITextEditor editor = provider.TextEditor; ITextEditor editor = provider.TextEditor;
if (!string.IsNullOrEmpty(editor.FileName)) { if (!string.IsNullOrEmpty(editor.FileName)) {
var pin = new PinBookmark(editor.FileName, toolTipControl.LogicalPosition);
BookmarkManager.ToggleBookmark( BookmarkManager.ToggleBookmark(
editor, editor,
toolTipControl.LogicalPosition.Line, Mark.Location.Line,
b => b.CanToggle && b is PinBookmark, b => b.CanToggle && b is PinBookmark,
location => pin); location => Mark);
} }
} }
} }

Loading…
Cancel
Save