Browse Source

Breakpoints are now a special kind of bookmarks.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@143 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
96160bb80d
  1. 35
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs
  2. 54
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/Bookmark.cs
  3. 59
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs
  4. 43
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/FoldingStrategy/IndentFoldingStrategy.cs
  5. 44
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/IconBarMargin.cs
  6. 10
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextView.cs
  7. 33
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  8. 2
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs
  9. 57
      src/Main/Base/Project/Src/Services/Debugger/DebugClasses.cs
  10. 96
      src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs
  11. 64
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Bookmark.cs
  12. 8
      src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkEventHandler.cs
  13. 34
      src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkManager.cs
  14. 2
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Commands/MenuCommands.cs
  15. 10
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPad.cs
  16. 2
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPadToolbarCommands.cs
  17. 12
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkFolderNode.cs
  18. 8
      src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs
  19. 44
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs
  20. 6
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs

35
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/BreakPointsPad.cs

@ -68,8 +68,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
name.Text = "Name"; name.Text = "Name";
path.Text = "Path"; path.Text = "Path";
FillList(); FillList();
} }
void BreakpointsListItemCheck(object sender, ItemCheckEventArgs e) void BreakpointsListItemCheck(object sender, ItemCheckEventArgs e)
@ -89,31 +89,46 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breakpointsList.BeginUpdate(); breakpointsList.BeginUpdate();
breakpointsList.Items.Clear(); breakpointsList.Items.Clear();
foreach(DebuggerLibrary.Breakpoint b in NDebugger.Instance.Breakpoints) { foreach(DebuggerLibrary.Breakpoint b in NDebugger.Instance.Breakpoints) {
AddBreakpoint(this, new BreakpointEventArgs(b)); AddBreakpoint(new BreakpointEventArgs(b));
} }
breakpointsList.EndUpdate(); breakpointsList.EndUpdate();
breakpointsList.ItemCheck += new ItemCheckEventHandler(BreakpointsListItemCheck); breakpointsList.ItemCheck += new ItemCheckEventHandler(BreakpointsListItemCheck);
} }
void AddBreakpoint(object sender, BreakpointEventArgs e) void AddBreakpoint(object sender, BreakpointEventArgs e)
{
breakpointsList.ItemCheck -= new ItemCheckEventHandler(BreakpointsListItemCheck);
AddBreakpoint(e);
breakpointsList.ItemCheck += new ItemCheckEventHandler(BreakpointsListItemCheck);
}
void AddBreakpoint(BreakpointEventArgs e)
{ {
ListViewItem item = new ListViewItem(); ListViewItem item = new ListViewItem();
item.Tag = e.Breakpoint; item.Tag = e.Breakpoint;
breakpointsList.Items.Add(item); breakpointsList.Items.Add(item);
RefreshBreakpoint(this, e); RefreshBreakpoint(item, e);
} }
void RefreshBreakpoint(object sender, BreakpointEventArgs e) void RefreshBreakpoint(object sender, BreakpointEventArgs e)
{ {
breakpointsList.ItemCheck -= new ItemCheckEventHandler(BreakpointsListItemCheck);
foreach (ListViewItem item in breakpointsList.Items) { foreach (ListViewItem item in breakpointsList.Items) {
if (e.Breakpoint == item.Tag) { if (e.Breakpoint == item.Tag) {
item.SubItems.Clear(); RefreshBreakpoint(item, e);
item.Checked = e.Breakpoint.Enabled; break;
item.Text = Path.GetFileName(e.Breakpoint.SourcecodeSegment.SourceFullFilename) + ", Line = " + e.Breakpoint.SourcecodeSegment.StartLine.ToString();
item.ForeColor = e.Breakpoint.HadBeenSet ? Color.Black : Color.Gray;
item.SubItems.AddRange(new string[] {Path.GetDirectoryName(e.Breakpoint.SourcecodeSegment.SourceFullFilename)});
} }
} }
breakpointsList.ItemCheck += new ItemCheckEventHandler(BreakpointsListItemCheck);
}
void RefreshBreakpoint(ListViewItem item, BreakpointEventArgs e)
{
item.SubItems.Clear();
item.Checked = e.Breakpoint.Enabled;
item.Text = Path.GetFileName(e.Breakpoint.SourcecodeSegment.SourceFullFilename) + ", Line = " + e.Breakpoint.SourcecodeSegment.StartLine.ToString();
item.ForeColor = e.Breakpoint.HadBeenSet ? Color.Black : Color.Gray;
item.SubItems.AddRange(new string[] { Path.GetDirectoryName(e.Breakpoint.SourcecodeSegment.SourceFullFilename) });
} }
void RemoveBreakpoint(object sender, BreakpointEventArgs e) void RemoveBreakpoint(object sender, BreakpointEventArgs e)

54
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/Bookmark.cs

@ -1,13 +1,13 @@
/* // <file>
* Created by SharpDevelop. // <copyright see="prj:///doc/copyright.txt"/>
* User: Omnibrain // <license see="prj:///doc/license.txt"/>
* Date: 26.12.2004 // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
* Time: 19:25 // <version value="$version"/>
* // </file>
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System; using System;
using System.Drawing;
using SWF = System.Windows.Forms;
namespace ICSharpCode.TextEditor.Document namespace ICSharpCode.TextEditor.Document
{ {
@ -24,6 +24,9 @@ namespace ICSharpCode.TextEditor.Document
get { get {
return document; return document;
} }
set {
document = value;
}
} }
public bool IsEnabled { public bool IsEnabled {
@ -42,7 +45,28 @@ namespace ICSharpCode.TextEditor.Document
return lineNumber; return lineNumber;
} }
set { set {
lineNumber = value; if (lineNumber != value) {
lineNumber = value;
OnLineNumberChanged(EventArgs.Empty);
}
}
}
public event EventHandler LineNumberChanged;
protected virtual void OnLineNumberChanged(EventArgs e)
{
if (LineNumberChanged != null) {
LineNumberChanged(this, e);
}
}
/// <summary>
/// Gets if the bookmark can be toggled off using the 'set/unset bookmark' command.
/// </summary>
public virtual bool CanToggle {
get {
return true;
} }
} }
@ -56,5 +80,17 @@ namespace ICSharpCode.TextEditor.Document
this.lineNumber = lineNumber; this.lineNumber = lineNumber;
this.isEnabled = isEnabled; this.isEnabled = isEnabled;
} }
public virtual void Click(SWF.MouseButtons mouseButtons)
{
if (mouseButtons == SWF.MouseButtons.Left) {
document.BookmarkManager.RemoveMark(this);
}
}
public virtual void Draw(IconBarMargin margin, Graphics g, Point p)
{
margin.DrawBookmark(g, p.Y, isEnabled);
}
} }
} }

59
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs

@ -10,6 +10,11 @@ using System.Collections.Generic;
namespace ICSharpCode.TextEditor.Document namespace ICSharpCode.TextEditor.Document
{ {
public interface IBookmarkFactory
{
Bookmark CreateBookmark(IDocument document, int lineNumber);
}
/// <summary> /// <summary>
/// This class handles the bookmarks for a buffer /// This class handles the bookmarks for a buffer
/// </summary> /// </summary>
@ -26,7 +31,13 @@ namespace ICSharpCode.TextEditor.Document
return bookmark; return bookmark;
} }
} }
public IDocument Document {
get {
return document;
}
}
/// <summary> /// <summary>
/// Creates a new instance of <see cref="BookmarkManager"/> /// Creates a new instance of <see cref="BookmarkManager"/>
/// </summary> /// </summary>
@ -36,27 +47,56 @@ namespace ICSharpCode.TextEditor.Document
lineTracker.LineCountChanged += new LineManagerEventHandler(MoveIndices); lineTracker.LineCountChanged += new LineManagerEventHandler(MoveIndices);
} }
/// <remarks> IBookmarkFactory factory;
public IBookmarkFactory Factory {
get {
return factory;
}
set {
factory = value;
}
}
/// <summary>
/// Sets the mark at the line <code>lineNr</code> if it is not set, if the /// Sets the mark at the line <code>lineNr</code> if it is not set, if the
/// line is already marked the mark is cleared. /// line is already marked the mark is cleared.
/// </remarks> /// </summary>
public void ToggleMarkAt(int lineNr) public void ToggleMarkAt(int lineNr)
{ {
for (int i = 0; i < bookmark.Count; ++i) { for (int i = 0; i < bookmark.Count; ++i) {
if (bookmark[i].LineNumber == lineNr) { Bookmark mark = bookmark[i];
Bookmark mark = bookmark[i]; if (mark.LineNumber == lineNr && mark.CanToggle) {
bookmark.RemoveAt(i); bookmark.RemoveAt(i);
OnRemoved(new BookmarkEventArgs(mark)); OnRemoved(new BookmarkEventArgs(mark));
OnChanged(EventArgs.Empty); OnChanged(EventArgs.Empty);
return; return;
} }
} }
Bookmark newMark = new Bookmark(document, lineNr); Bookmark newMark;
if (factory != null)
newMark = factory.CreateBookmark(document, lineNr);
else
newMark = new Bookmark(document, lineNr);
bookmark.Add(newMark); bookmark.Add(newMark);
OnAdded(new BookmarkEventArgs(newMark)); OnAdded(new BookmarkEventArgs(newMark));
OnChanged(EventArgs.Empty); OnChanged(EventArgs.Empty);
} }
public void AddMark(Bookmark mark)
{
bookmark.Add(mark);
OnAdded(new BookmarkEventArgs(mark));
OnChanged(EventArgs.Empty);
}
public void RemoveMark(Bookmark mark)
{
bookmark.Remove(mark);
OnRemoved(new BookmarkEventArgs(mark));
OnChanged(EventArgs.Empty);
}
/// <returns> /// <returns>
/// true, if a mark at mark exists, otherwise false /// true, if a mark at mark exists, otherwise false
/// </returns> /// </returns>
@ -81,6 +121,7 @@ namespace ICSharpCode.TextEditor.Document
Bookmark mark = bookmark[i]; Bookmark mark = bookmark[i];
if (e.LinesMoved < 0 && mark.LineNumber == e.LineStart) { if (e.LinesMoved < 0 && mark.LineNumber == e.LineStart) {
bookmark.RemoveAt(i); bookmark.RemoveAt(i);
OnRemoved(new BookmarkEventArgs(mark));
--i; --i;
changed = true; changed = true;
} else if (mark.LineNumber > e.LineStart + 1 || (e.LinesMoved < 0 && mark.LineNumber > e.LineStart)) { } else if (mark.LineNumber > e.LineStart + 1 || (e.LinesMoved < 0 && mark.LineNumber > e.LineStart)) {
@ -189,7 +230,7 @@ namespace ICSharpCode.TextEditor.Document
return prev; return prev;
} }
protected virtual void OnChanged(EventArgs e) protected virtual void OnChanged(EventArgs e)
{ {
if (Changed != null) { if (Changed != null) {
Changed(this, e); Changed(this, e);
@ -197,7 +238,7 @@ namespace ICSharpCode.TextEditor.Document
} }
protected virtual void OnRemoved(BookmarkEventArgs e) protected virtual void OnRemoved(BookmarkEventArgs e)
{ {
if (Removed != null) { if (Removed != null) {
Removed(this, e); Removed(this, e);
@ -205,7 +246,7 @@ namespace ICSharpCode.TextEditor.Document
} }
protected virtual void OnAdded(BookmarkEventArgs e) protected virtual void OnAdded(BookmarkEventArgs e)
{ {
if (Added != null) { if (Added != null) {
Added(this, e); Added(this, e);

43
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/FoldingStrategy/IndentFoldingStrategy.cs

@ -1,36 +1,47 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt"/> // <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/> // <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/> // <version value="$version"/>
// </file> // </file>
using System; using System;
using System.Drawing; using System.Collections.Generic;
using System.Collections;
namespace ICSharpCode.TextEditor.Document namespace ICSharpCode.TextEditor.Document
{ {
/*
/// <summary> /// <summary>
/// A simple folding strategy which calculates the folding level /// A simple folding strategy which calculates the folding level
/// using the indent level of the line. /// using the indent level of the line.
/// </summary> /// </summary>
public class IndentFoldingStrategy : IFoldingStrategy public class IndentFoldingStrategy : IFoldingStrategy
{ {
/// <remarks> public List<FoldMarker> GenerateFoldMarkers(IDocument document, string fileName, object parseInformation)
/// Calculates the fold level of a specific line.
/// </remarks>
public int CalculateFoldLevel(IDocument document, int lineNumber)
{ {
LineSegment line = document.GetLineSegment(lineNumber); List<FoldMarker> l = new List<FoldMarker>();
int foldLevel = 0; Stack<int> offsetStack = new Stack<int>();
Stack<string> textStack = new Stack<string>();
while (document.GetCharAt(line.Offset + foldLevel) == '\t' && foldLevel + 1 < line.TotalLength) { //int level = 0;
++foldLevel; //foreach (LineSegment segment in document.LineSegmentCollection) {
//
//}
return l;
}
int GetLevel(IDocument document, int offset)
{
int level = 0;
int spaces = 0;
for (int i = offset; i < document.TextLength; ++i) {
char c = document.GetCharAt(i);
if (c == '\t' || (c == ' ' && ++spaces == 4)) {
spaces = 0;
++level;
} else {
break;
}
} }
return level;
return foldLevel;
} }
}*/ }
} }

44
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/IconBarMargin.cs

@ -1,13 +1,13 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt"/> // <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/> // <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/> // <version value="$version"/>
// </file> // </file>
using System; using System;
using System.Windows.Forms; using System.Windows.Forms;
using System.Collections; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
@ -53,20 +53,40 @@ namespace ICSharpCode.TextEditor
int lineNumber = textArea.Document.GetVisibleLine(mark.LineNumber); int lineNumber = textArea.Document.GetVisibleLine(mark.LineNumber);
int yPos = (int)(lineNumber * textArea.TextView.FontHeight) - textArea.VirtualTop.Y; int yPos = (int)(lineNumber * textArea.TextView.FontHeight) - textArea.VirtualTop.Y;
if (yPos >= rect.Y && yPos <= rect.Bottom) { if (yPos >= rect.Y && yPos <= rect.Bottom) {
DrawBookmark(g, yPos, mark.IsEnabled); //DrawBookmark(g, yPos, mark.IsEnabled);
mark.Draw(this, g, new Point(0, yPos));
} }
} }
base.Paint(g, rect); base.Paint(g, rect);
} }
#region Drawing functions public override void HandleMouseDown(Point mousePos, MouseButtons mouseButtons)
{
List<Bookmark> marks = textArea.Document.BookmarkManager.Marks;
int oldCount = marks.Count;
foreach (Bookmark mark in marks) {
int lineNumber = textArea.Document.GetVisibleLine(mark.LineNumber);
int fontHeight = textArea.TextView.FontHeight;
int yPos = lineNumber * fontHeight - textArea.VirtualTop.Y;
if (mousePos.Y > yPos && mousePos.Y < yPos + fontHeight) {
mark.Click(mouseButtons);
if (oldCount != marks.Count) {
textArea.UpdateLine(lineNumber);
}
return;
}
}
base.HandleMouseDown(mousePos, mouseButtons);
}
#region Drawing functions
public void DrawBreakpoint(Graphics g, int y, bool isEnabled) public void DrawBreakpoint(Graphics g, int y, bool isEnabled)
{ {
int delta = 1; int delta = 1;
int radius = Math.Min(Size.Width, textArea.TextView.FontHeight); int radius = Math.Min(Size.Width, textArea.TextView.FontHeight);
Rectangle rect = new Rectangle(delta, Rectangle rect = new Rectangle(delta,
y, y,
radius, radius,
radius); radius);
@ -96,7 +116,7 @@ namespace ICSharpCode.TextEditor
Rectangle rect = new Rectangle(1, y + delta, base.drawingPosition.Width - 4, textArea.TextView.FontHeight - delta * 2); Rectangle rect = new Rectangle(1, y + delta, base.drawingPosition.Width - 4, textArea.TextView.FontHeight - delta * 2);
if (isEnabled) { if (isEnabled) {
using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top), using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top),
new Point(rect.Right, rect.Bottom), new Point(rect.Right, rect.Bottom),
Color.SkyBlue, Color.SkyBlue,
Color.White)) { Color.White)) {
@ -105,7 +125,7 @@ namespace ICSharpCode.TextEditor
} else { } else {
FillRoundRect(g, Brushes.White, rect); FillRoundRect(g, Brushes.White, rect);
} }
using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top), using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top),
new Point(rect.Right, rect.Bottom), new Point(rect.Right, rect.Bottom),
Color.SkyBlue, Color.SkyBlue,
Color.Blue)) { Color.Blue)) {
@ -119,19 +139,19 @@ namespace ICSharpCode.TextEditor
{ {
int delta = textArea.TextView.FontHeight / 8; int delta = textArea.TextView.FontHeight / 8;
Rectangle rect = new Rectangle(1, y + delta, base.drawingPosition.Width - 4, textArea.TextView.FontHeight - delta * 2); Rectangle rect = new Rectangle(1, y + delta, base.drawingPosition.Width - 4, textArea.TextView.FontHeight - delta * 2);
using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top), using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top),
new Point(rect.Right, rect.Bottom), new Point(rect.Right, rect.Bottom),
Color.LightYellow, Color.LightYellow,
Color.Yellow)) { Color.Yellow)) {
FillArrow(g, brush, rect); FillArrow(g, brush, rect);
} }
using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top), using (Brush brush = new LinearGradientBrush(new Point(rect.Left, rect.Top),
new Point(rect.Right, rect.Bottom), new Point(rect.Right, rect.Bottom),
Color.Yellow, Color.Yellow,
Color.Brown)) { Color.Brown)) {
using (Pen pen = new Pen(brush)) { using (Pen pen = new Pen(brush)) {
DrawArrow(g, pen, rect); DrawArrow(g, pen, rect);
} }
} }
} }
@ -141,7 +161,7 @@ namespace ICSharpCode.TextEditor
GraphicsPath gp = new GraphicsPath(); GraphicsPath gp = new GraphicsPath();
int halfX = r.Width / 2; int halfX = r.Width / 2;
int halfY = r.Height/ 2; int halfY = r.Height/ 2;
gp.AddLine(r.X, r.Y + halfY/2, r.X + halfX, r.Y + halfY/2); gp.AddLine(r.X, r.Y + halfY/2, r.X + halfX, r.Y + halfY/2);
gp.AddLine(r.X + halfX, r.Y + halfY/2, r.X + halfX, r.Y); gp.AddLine(r.X + halfX, r.Y + halfY/2, r.X + halfX, r.Y);
gp.AddLine(r.X + halfX, r.Y, r.Right, r.Y + halfY); gp.AddLine(r.X + halfX, r.Y, r.Right, r.Y + halfY);
gp.AddLine(r.Right, r.Y + halfY, r.X + halfX, r.Bottom); gp.AddLine(r.Right, r.Y + halfY, r.X + halfX, r.Bottom);
@ -200,6 +220,6 @@ namespace ICSharpCode.TextEditor
} }
} }
#endregion #endregion
} }
} }

10
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextView.cs

@ -110,9 +110,15 @@ namespace ICSharpCode.TextEditor
OptionsChanged(); OptionsChanged();
} }
static int GetFontHeight(Font font)
{
int h = font.Height;
return (h < 16) ? h + 1 : h;
}
public void OptionsChanged() public void OptionsChanged()
{ {
this.fontHeight = TextEditorProperties.Font.Height; this.fontHeight = GetFontHeight(TextEditorProperties.Font);
if (this.charWitdh != null) { if (this.charWitdh != null) {
this.charWitdh.Clear(); this.charWitdh.Clear();
} }
@ -126,7 +132,7 @@ namespace ICSharpCode.TextEditor
} }
// Just to ensure that fontHeight and char widths are always correct... // Just to ensure that fontHeight and char widths are always correct...
if (fontHeight != TextEditorProperties.Font.Height) { if (fontHeight != GetFontHeight(TextEditorProperties.Font)) {
OptionsChanged(); OptionsChanged();
base.TextArea.Refresh(); base.TextArea.Refresh();
return; return;

33
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -198,7 +198,7 @@
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\TipOfTheDay.cs"> <Compile Include="Src\Gui\Dialogs\TipOfTheDay.cs">
<SubType>Form</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\TreeViewOptions.cs"> <Compile Include="Src\Gui\Dialogs\TreeViewOptions.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
@ -266,7 +266,7 @@
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Pads\FileScout.cs"> <Compile Include="Src\Gui\Pads\FileScout.cs">
<SubType>Component</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Pads\OpenTaskView.cs" /> <Compile Include="Src\Gui\Pads\OpenTaskView.cs" />
<Compile Include="Src\Gui\Pads\PropertyPad\PropertyPad.cs" /> <Compile Include="Src\Gui\Pads\PropertyPad\PropertyPad.cs" />
@ -623,7 +623,9 @@
<Compile Include="Src\TextEditor\Gui\Editor\CodeCompletionBinding.cs" /> <Compile Include="Src\TextEditor\Gui\Editor\CodeCompletionBinding.cs" />
<Compile Include="Src\Gui\Pads\DefinitionViewPad.cs" /> <Compile Include="Src\Gui\Pads\DefinitionViewPad.cs" />
<Compile Include="Src\Project\AdvancedMSBuildProject.cs" /> <Compile Include="Src\Project\AdvancedMSBuildProject.cs" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\ApplicationSettings.cs" /> <Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\ApplicationSettings.cs">
<SubType>UserControl</SubType>
</Compile>
<EmbeddedResource Include="Resources\ProjectOptions\ApplicationSettings.xfrm" /> <EmbeddedResource Include="Resources\ProjectOptions\ApplicationSettings.xfrm" />
<Compile Include="Src\Gui\Pads\PropertyPad\IDEContainer.cs" /> <Compile Include="Src\Gui\Pads\PropertyPad\IDEContainer.cs" />
<Compile Include="Src\Gui\Pads\PropertyPad\PropertyContainer.cs" /> <Compile Include="Src\Gui\Pads\PropertyPad\PropertyContainer.cs" />
@ -632,11 +634,21 @@
<EmbeddedResource Include="Resources\ProjectOptions\Signing.xfrm" /> <EmbeddedResource Include="Resources\ProjectOptions\Signing.xfrm" />
<EmbeddedResource Include="Resources\ProjectOptions\BuildEvents.xfrm" /> <EmbeddedResource Include="Resources\ProjectOptions\BuildEvents.xfrm" />
<EmbeddedResource Include="Resources\ProjectOptions\DebugOptions.xfrm" /> <EmbeddedResource Include="Resources\ProjectOptions\DebugOptions.xfrm" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\Signing.cs" /> <Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\Signing.cs">
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\ReferencePaths.cs" /> <SubType>UserControl</SubType>
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\Publish.cs" /> </Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\DebugOptions.cs" /> <Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\ReferencePaths.cs">
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\BuildEvents.cs" /> <SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\Publish.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\DebugOptions.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\BuildEvents.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Src\Dom\ITypeParameter.cs" /> <Compile Include="Src\Dom\ITypeParameter.cs" />
<Compile Include="Src\Dom\Implementations\DefaultTypeParameter.cs" /> <Compile Include="Src\Dom\Implementations\DefaultTypeParameter.cs" />
<Compile Include="Src\Dom\Implementations\ProxyReturnType.cs" /> <Compile Include="Src\Dom\Implementations\ProxyReturnType.cs" />
@ -647,7 +659,9 @@
<Compile Include="Src\Dom\Implementations\SpecificReturnType.cs" /> <Compile Include="Src\Dom\Implementations\SpecificReturnType.cs" />
<Compile Include="Src\Dom\LanguageProperties.cs" /> <Compile Include="Src\Dom\LanguageProperties.cs" />
<Compile Include="Src\Gui\BrowserDisplayBinding\SchemeExtension.cs" /> <Compile Include="Src\Gui\BrowserDisplayBinding\SchemeExtension.cs" />
<Compile Include="Src\Gui\BrowserDisplayBinding\ExtendedWebBrowser.cs" /> <Compile Include="Src\Gui\BrowserDisplayBinding\ExtendedWebBrowser.cs">
<SubType>Component</SubType>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">
@ -666,7 +680,6 @@
<Project>{35cef10f-2d4c-45f2-9dd1-161e0fec583c}</Project> <Project>{35cef10f-2d4c-45f2-9dd1-161e0fec583c}</Project>
<Name>ICSharpCode.Core</Name> <Name>ICSharpCode.Core</Name>
</ProjectReference> </ProjectReference>
<Folder Include="Resources\ProjectOptions" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project> </Project>

2
src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs

@ -319,6 +319,8 @@ namespace ICSharpCode.SharpDevelop.Gui
public PadContentWrapper(PadDescriptor padDescriptor) public PadContentWrapper(PadDescriptor padDescriptor)
{ {
if (padDescriptor == null)
throw new ArgumentNullException("padDescriptor");
this.padDescriptor = padDescriptor; this.padDescriptor = padDescriptor;
this.DockableAreas = ((((WeifenLuo.WinFormsUI.DockAreas.Float | WeifenLuo.WinFormsUI.DockAreas.DockLeft) | this.DockableAreas = ((((WeifenLuo.WinFormsUI.DockAreas.Float | WeifenLuo.WinFormsUI.DockAreas.DockLeft) |
WeifenLuo.WinFormsUI.DockAreas.DockRight) | WeifenLuo.WinFormsUI.DockAreas.DockRight) |

57
src/Main/Base/Project/Src/Services/Debugger/DebugClasses.cs

@ -1,7 +1,7 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt"/> // <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/> // <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/> // <version value="$version"/>
// </file> // </file>
@ -12,34 +12,43 @@ using System.CodeDom.Compiler;
using System.Collections; using System.Collections;
using System.IO; using System.IO;
using System.Diagnostics; using System.Diagnostics;
using ICSharpCode.SharpDevelop.Bookmarks;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
public class Breakpoint public class Breakpoint
{ {
string fileName; BreakpointBookmark bookmark;
int lineNumber;
object tag; object tag;
bool isEnabled = true; public BreakpointBookmark Bookmark {
get {
return bookmark;
}
}
public string FileName { public string FileName {
get { get {
return fileName; return bookmark.FileName;
} }
set { set {
fileName = value; bookmark.FileName = value;
} }
} }
public int LineNumber { public int LineNumber {
get { get {
return lineNumber; return bookmark.LineNumber + 1;
} }
set { set {
lineNumber = value; bookmark.LineNumber = value - 1;
} }
} }
public event EventHandler LineNumberChanged {
add { bookmark.LineNumberChanged += value; }
remove { bookmark.LineNumberChanged -= value; }
}
public object Tag { public object Tag {
get { get {
@ -52,17 +61,37 @@ namespace ICSharpCode.Core
public bool IsEnabled { public bool IsEnabled {
get { get {
return isEnabled; return bookmark.IsEnabled;
} }
set { set {
isEnabled = value; bookmark.IsEnabled = value;
}
}
public Breakpoint(ICSharpCode.TextEditor.Document.IDocument document, string fileName, int lineNumber)
{
bookmark = new BreakpointBookmark(this, fileName, document, lineNumber - 1);
}
}
public class BreakpointBookmark : SDBookmark
{
Breakpoint breakpoint;
public Breakpoint Breakpoint {
get {
return breakpoint;
} }
} }
public Breakpoint(string fileName, int lineNumber) public BreakpointBookmark(Breakpoint breakpoint, string fileName, ICSharpCode.TextEditor.Document.IDocument document, int lineNumber) : base(fileName, document, lineNumber)
{
this.breakpoint = breakpoint;
}
public override void Draw(ICSharpCode.TextEditor.IconBarMargin margin, Graphics g, Point p)
{ {
this.fileName = fileName; margin.DrawBreakpoint(g, p.Y, IsEnabled);
this.lineNumber = lineNumber;
} }
} }

96
src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs

@ -20,6 +20,7 @@ using ICSharpCode.TextEditor.Document;
using ICSharpCode.TextEditor; using ICSharpCode.TextEditor;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using BM = ICSharpCode.SharpDevelop.Bookmarks;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
@ -344,25 +345,6 @@ namespace ICSharpCode.Core
} }
} }
public static void ToggleBreakpointAt(string fileName, int line, int column)
{
foreach(Breakpoint b in breakpoints) {
if (b.FileName == fileName && b.LineNumber == line) {
breakpoints.Remove(b);
OnBreakPointRemoved(EventArgs.Empty);
return;
}
}
breakpoints.Add(new Breakpoint(fileName, line));
OnBreakPointAdded(EventArgs.Empty);
}
class BreakpointMarker: TextMarker class BreakpointMarker: TextMarker
{ {
public BreakpointMarker(int offset, int length, TextMarkerType textMarkerType, Color color, Color foreColor):base(offset, length, textMarkerType, color, foreColor) public BreakpointMarker(int offset, int length, TextMarkerType textMarkerType, Color color, Color foreColor):base(offset, length, textMarkerType, color, foreColor)
@ -380,6 +362,28 @@ namespace ICSharpCode.Core
public static void InitializeService2() public static void InitializeService2()
{ {
WorkbenchSingleton.WorkbenchCreated += new EventHandler(WorkspaceCreated); WorkbenchSingleton.WorkbenchCreated += new EventHandler(WorkspaceCreated);
BM.BookmarkManager.Added += BookmarkAdded;
BM.BookmarkManager.Removed += BookmarkRemoved;
}
static void BookmarkAdded(object sender, BM.BookmarkEventArgs e)
{
BreakpointBookmark bb = e.Bookmark as BreakpointBookmark;
if (bb != null) {
breakpoints.Add(bb.Breakpoint);
RefreshBreakpointMarkersInDocument(bb.Document);
OnBreakPointAdded(EventArgs.Empty);
}
}
static void BookmarkRemoved(object sender, BM.BookmarkEventArgs e)
{
BreakpointBookmark bb = e.Bookmark as BreakpointBookmark;
if (bb != null) {
breakpoints.Remove(bb.Breakpoint);
RefreshBreakpointMarkersInDocument(bb.Document);
OnBreakPointRemoved(EventArgs.Empty);
}
} }
static void WorkspaceCreated(object sender, EventArgs args) static void WorkspaceCreated(object sender, EventArgs args)
@ -397,7 +401,7 @@ namespace ICSharpCode.Core
textArea.IconBarMargin.Painted += new MarginPaintEventHandler(PaintIconBar); textArea.IconBarMargin.Painted += new MarginPaintEventHandler(PaintIconBar);
textArea.MouseMove += new MouseEventHandler(TextAreaMouseMove); textArea.MouseMove += new MouseEventHandler(TextAreaMouseMove);
RefreshBreakpointMarkersInEditor(textArea.MotherTextEditorControl); RefreshBreakpointMarkersInDocument(textArea.MotherTextEditorControl.Document);
} }
} }
@ -453,25 +457,35 @@ namespace ICSharpCode.Core
} }
} }
static void IconBarMouseDown(AbstractMargin iconBar, Point mousepos, MouseButtons mouseButtons) static void IconBarMouseDown(AbstractMargin iconBar, Point mousepos, MouseButtons mouseButtons)
{ {
Rectangle viewRect = iconBar.TextArea.TextView.DrawingPosition; Rectangle viewRect = iconBar.TextArea.TextView.DrawingPosition;
Point logicPos = iconBar.TextArea.TextView.GetLogicalPosition(0, mousepos.Y - viewRect.Top); Point logicPos = iconBar.TextArea.TextView.GetLogicalPosition(0, mousepos.Y - viewRect.Top);
if (logicPos.Y >= 0 && logicPos.Y < iconBar.TextArea.Document.TotalNumberOfLines) { if (logicPos.Y >= 0 && logicPos.Y < iconBar.TextArea.Document.TotalNumberOfLines) {
ToggleBreakpointAt(iconBar.TextArea.MotherTextEditorControl.FileName , logicPos.Y + 1, 0); ToggleBreakpointAt(iconBar.TextArea.Document, iconBar.TextArea.MotherTextEditorControl.FileName, logicPos.Y + 1);
RefreshBreakpointMarkersInEditor(iconBar.TextArea.MotherTextEditorControl);
iconBar.TextArea.Refresh(iconBar); iconBar.TextArea.Refresh(iconBar);
} }
} }
static void ToggleBreakpointAt(IDocument document, string fileName, int lineNumber)
{
foreach (Bookmark m in document.BookmarkManager.Marks) {
BreakpointBookmark bb = m as BreakpointBookmark;
if (bb != null) {
if (bb.Breakpoint.LineNumber == lineNumber) {
document.BookmarkManager.RemoveMark(m);
return;
}
}
}
document.BookmarkManager.AddMark(new Breakpoint(document, fileName, lineNumber).Bookmark);
}
static void RefreshBreakpointMarkersInEditor(TextEditorControl textEditor) static void RefreshBreakpointMarkersInDocument(IDocument document)
{ {
IDocument document = textEditor.Document; if (document == null) return;
System.Collections.Generic.List<ICSharpCode.TextEditor.Document.TextMarker> markers = textEditor.Document.MarkerStrategy.TextMarker; List<TextMarker> markers = document.MarkerStrategy.TextMarker;
// Remove all breakpoint markers // Remove all breakpoint markers
for (int i = 0; i < markers.Count;) { for (int i = 0; i < markers.Count;) {
if (markers[i] is BreakpointMarker) { if (markers[i] is BreakpointMarker) {
@ -481,10 +495,10 @@ namespace ICSharpCode.Core
} }
} }
// Add breakpoint markers // Add breakpoint markers
foreach (Breakpoint b in Breakpoints) { foreach (Bookmark b in document.BookmarkManager.Marks) {
if (b.FileName.ToLower() == textEditor.FileName.ToLower()) { if (b is BreakpointBookmark) {
LineSegment lineSeg = document.GetLineSegment((int)b.LineNumber - 1); LineSegment lineSeg = document.GetLineSegment(b.LineNumber);
document.MarkerStrategy.TextMarker.Add(new BreakpointMarker(lineSeg.Offset, lineSeg.Length , TextMarkerType.SolidBlock, Color.Red, Color.White)); document.MarkerStrategy.TextMarker.Add(new BreakpointMarker(lineSeg.Offset, lineSeg.Length, TextMarkerType.SolidBlock, Color.Red, Color.White));
} }
} }
// Perform editor update // Perform editor update
@ -497,16 +511,6 @@ namespace ICSharpCode.Core
/// </summary> /// </summary>
static void PaintIconBar(AbstractMargin iconBar, Graphics g, Rectangle rect) static void PaintIconBar(AbstractMargin iconBar, Graphics g, Rectangle rect)
{ {
foreach (Breakpoint breakpoint in Breakpoints) {
if (Path.GetFullPath(breakpoint.FileName) == Path.GetFullPath(iconBar.TextArea.MotherTextEditorControl.FileName)) {
int lineNumber = iconBar.TextArea.Document.GetVisibleLine((int)breakpoint.LineNumber - 1);
int yPos = (int)(lineNumber * iconBar.TextArea.TextView.FontHeight) - iconBar.TextArea.VirtualTop.Y;
if (yPos >= rect.Y && yPos <= rect.Bottom) {
((IconBarMargin)iconBar).DrawBreakpoint(g, yPos, breakpoint.IsEnabled);
}
}
}
foreach (TextMarker textMarker in iconBar.TextArea.Document.MarkerStrategy.TextMarker) { foreach (TextMarker textMarker in iconBar.TextArea.Document.MarkerStrategy.TextMarker) {
CurrentLineMarker currentLineMarker = textMarker as CurrentLineMarker; CurrentLineMarker currentLineMarker = textMarker as CurrentLineMarker;
if (currentLineMarker != null) { if (currentLineMarker != null) {
@ -556,11 +560,12 @@ namespace ICSharpCode.Core
// otherwise textArea will close the tooltip. // otherwise textArea will close the tooltip.
} else { } else {
// Look if it is variable // Look if it is variable
//value = selectedThread.LocalVariables[expresion].Value.ToString();
ResolveResult result = ParserService.Resolve(expression, logicPos.Y + 1, xPosition + 1, textArea.MotherTextEditorControl.FileName, textContent); ResolveResult result = ParserService.Resolve(expression, logicPos.Y + 1, xPosition + 1, textArea.MotherTextEditorControl.FileName, textContent);
string value = GetText(result); string value = GetText(result);
if (value != null) { if (value != null) {
#if DEBUG
value = "expr: >" + expression + "<\n" + value; value = "expr: >" + expression + "<\n" + value;
#endif
textArea.SetToolTip(value); textArea.SetToolTip(value);
} }
oldToolTip = value; oldToolTip = value;
@ -609,10 +614,9 @@ namespace ICSharpCode.Core
} else if (result is TypeResolveResult) { } else if (result is TypeResolveResult) {
return GetText(ambience, ((TypeResolveResult)result).ResolvedClass); return GetText(ambience, ((TypeResolveResult)result).ResolvedClass);
} else { } else {
if (result.ResolvedType == null) // if (result.ResolvedType != null)
return null; // return "expression of type " + ambience.Convert(result.ResolvedType);
else return null;
return "expression of type " + ambience.Convert(result.ResolvedType);
} }
} }

64
src/Main/Base/Project/Src/TextEditor/Bookmarks/Bookmark.cs

@ -8,41 +8,21 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Drawing; using System.Drawing;
using System.CodeDom.Compiler; using System.Text;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui.OptionPanels; using ICSharpCode.TextEditor;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.DefaultEditor.Commands;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
/// <summary> /// <summary>
/// Description of Bookmark. /// Description of Bookmark.
/// </summary> /// </summary>
public class Bookmark public class SDBookmark : Bookmark
{ {
ICSharpCode.TextEditor.Document.Bookmark bookmark;
string fileName; string fileName;
public ICSharpCode.TextEditor.Document.IDocument Document {
get {
return bookmark.Document;
}
}
public ICSharpCode.TextEditor.Document.Bookmark CreateBookmark(ICSharpCode.TextEditor.Document.IDocument document)
{
this.bookmark = new ICSharpCode.TextEditor.Document.Bookmark(document, LineNumber, IsEnabled);
return bookmark;
}
public string FileName { public string FileName {
get { get {
return fileName; return fileName;
@ -52,25 +32,33 @@ namespace Bookmark
} }
} }
public int LineNumber { public SDBookmark(string fileName, IDocument document, int lineNumber) : base(document, lineNumber)
get { {
return bookmark.LineNumber; this.fileName = fileName;
}
} }
}
public class SDBookmarkFactory : IBookmarkFactory
{
string fileName;
ICSharpCode.TextEditor.Document.BookmarkManager manager;
public bool IsEnabled { public SDBookmarkFactory(ICSharpCode.TextEditor.Document.BookmarkManager manager)
get { {
return bookmark.IsEnabled; this.manager = manager;
} }
set {
bookmark.IsEnabled = value; public void ChangeFilename(string newFileName)
{
fileName = newFileName;
foreach (SDBookmark mark in manager.Marks) {
mark.FileName = newFileName;
} }
} }
public Bookmark(string fileName, ICSharpCode.TextEditor.Document.Bookmark bookmark) public Bookmark CreateBookmark(IDocument document, int lineNumber)
{ {
this.fileName = fileName; return new SDBookmark(fileName, document, lineNumber);
this.bookmark = bookmark;
} }
} }
} }

8
src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkEventHandler.cs

@ -9,7 +9,7 @@
using System; using System;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
public delegate void BookmarkEventHandler(object sender, BookmarkEventArgs e); public delegate void BookmarkEventHandler(object sender, BookmarkEventArgs e);
@ -18,15 +18,15 @@ namespace Bookmark
/// </summary> /// </summary>
public class BookmarkEventArgs : EventArgs public class BookmarkEventArgs : EventArgs
{ {
Bookmark bookmark; SDBookmark bookmark;
public Bookmark Bookmark { public SDBookmark Bookmark {
get { get {
return bookmark; return bookmark;
} }
} }
public BookmarkEventArgs(Bookmark bookmark) public BookmarkEventArgs(SDBookmark bookmark)
{ {
this.bookmark = bookmark; this.bookmark = bookmark;
} }

34
src/Main/Base/Project/Src/TextEditor/Bookmarks/BookmarkManager.cs

@ -1,27 +1,29 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.TextEditor.Document;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
/// <summary> /// <summary>
/// Description of BookmarkManager. /// Description of BookmarkManager.
/// </summary> /// </summary>
public static class BookmarkManager public static class BookmarkManager
{ {
static List<Bookmark> bookmarks = new List<Bookmark>(); static List<SDBookmark> bookmarks = new List<SDBookmark>();
public static List<Bookmark> Bookmarks { public static List<SDBookmark> Bookmarks {
get { get {
return bookmarks; return bookmarks;
} }
} }
public static List<Bookmark> GetBookmarks(string fileName) public static List<SDBookmark> GetBookmarks(string fileName)
{ {
List<Bookmark> marks = new List<Bookmark>(); List<SDBookmark> marks = new List<SDBookmark>();
foreach (Bookmark mark in bookmarks) { foreach (SDBookmark mark in bookmarks) {
if (mark.FileName == null) continue;
if (FileUtility.IsEqualFile(mark.FileName, fileName)) { if (FileUtility.IsEqualFile(mark.FileName, fileName)) {
marks.Add(mark); marks.Add(mark);
} }
@ -30,23 +32,17 @@ namespace Bookmark
return marks; return marks;
} }
public static void AddMark(string fileName, ICSharpCode.TextEditor.Document.Bookmark bookmark) public static void AddMark(SDBookmark bookmark)
{ {
Bookmark mark = new Bookmark(fileName, bookmark); if (bookmarks.Contains(bookmark)) return;
bookmarks.Add(mark); bookmarks.Add(bookmark);
OnAdded(new BookmarkEventArgs(mark)); OnAdded(new BookmarkEventArgs(bookmark));
} }
public static void RemoveMark(string fileName, ICSharpCode.TextEditor.Document.Bookmark bookmark) public static void RemoveMark(SDBookmark bookmark)
{ {
for (int i = 0; i < bookmarks.Count; ) { bookmarks.Remove(bookmark);
if (FileUtility.IsEqualFile(bookmarks[i].FileName, fileName) && bookmarks[i].LineNumber == bookmark.LineNumber) { OnRemoved(new BookmarkEventArgs(bookmark));
OnRemoved(new BookmarkEventArgs(bookmarks[i]));
bookmarks.RemoveAt(i);
} else {
++i;
}
}
} }
static void OnRemoved(BookmarkEventArgs e) static void OnRemoved(BookmarkEventArgs e)

2
src/Main/Base/Project/Src/TextEditor/Bookmarks/Commands/MenuCommands.cs

@ -25,7 +25,7 @@ using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Actions; using ICSharpCode.TextEditor.Actions;
using ICSharpCode.SharpDevelop.DefaultEditor.Commands; using ICSharpCode.SharpDevelop.DefaultEditor.Commands;
namespace Bookmarks namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
public class ToggleBookmark : AbstractEditActionMenuCommand public class ToggleBookmark : AbstractEditActionMenuCommand
{ {

10
src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPad.cs

@ -21,7 +21,7 @@ using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.DefaultEditor.Commands; using ICSharpCode.SharpDevelop.DefaultEditor.Commands;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
public class BookmarkPad : AbstractPadContent public class BookmarkPad : AbstractPadContent
{ {
@ -62,12 +62,12 @@ namespace Bookmark
BookmarkManager.Added += new BookmarkEventHandler(BookmarkManagerAdded); BookmarkManager.Added += new BookmarkEventHandler(BookmarkManagerAdded);
BookmarkManager.Removed += new BookmarkEventHandler(BookmarkManagerRemoved); BookmarkManager.Removed += new BookmarkEventHandler(BookmarkManagerRemoved);
foreach (Bookmark mark in BookmarkManager.Bookmarks) { foreach (SDBookmark mark in BookmarkManager.Bookmarks) {
AddMark(mark); AddMark(mark);
} }
} }
void AddMark(Bookmark mark) void AddMark(SDBookmark mark)
{ {
if (!fileNodes.ContainsKey(mark.FileName)) { if (!fileNodes.ContainsKey(mark.FileName)) {
BookmarkFolderNode folderNode = new BookmarkFolderNode(mark.FileName); BookmarkFolderNode folderNode = new BookmarkFolderNode(mark.FileName);
@ -80,7 +80,7 @@ namespace Bookmark
void BookmarkManagerAdded(object sender, BookmarkEventArgs e) void BookmarkManagerAdded(object sender, BookmarkEventArgs e)
{ {
AddMark(e.Bookmark); AddMark((SDBookmark)e.Bookmark);
} }
void BookmarkManagerRemoved(object sender, BookmarkEventArgs e) void BookmarkManagerRemoved(object sender, BookmarkEventArgs e)
@ -98,7 +98,7 @@ namespace Bookmark
{ {
TreeNode node = bookmarkTreeView.SelectedNode; TreeNode node = bookmarkTreeView.SelectedNode;
if (node != null) { if (node != null) {
Bookmark mark = node.Tag as Bookmark; SDBookmark mark = node.Tag as SDBookmark;
if (mark != null) { if (mark != null) {
FileService.JumpToFilePosition(mark.FileName, mark.LineNumber, 0); FileService.JumpToFilePosition(mark.FileName, mark.LineNumber, 0);
} }

2
src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPadToolbarCommands.cs

@ -22,7 +22,7 @@ using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.DefaultEditor.Commands; using ICSharpCode.SharpDevelop.DefaultEditor.Commands;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
public class GotoNext : AbstractMenuCommand public class GotoNext : AbstractMenuCommand
{ {

12
src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkFolderNode.cs

@ -6,19 +6,19 @@ using ICSharpCode.TextEditor.Document;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
/// <summary> /// <summary>
/// Description of SearchFolderNode. /// Description of SearchFolderNode.
/// </summary> /// </summary>
public class BookmarkFolderNode : ExtFolderNode public class BookmarkFolderNode : ExtFolderNode
{ {
List<Bookmark> marks = new List<Bookmark>(); List<SDBookmark> marks = new List<SDBookmark>();
string fileName; string fileName;
string occurences; string occurences;
Image icon; Image icon;
public List<Bookmark> Marks { public List<SDBookmark> Marks {
get { get {
return marks; return marks;
} }
@ -64,7 +64,7 @@ namespace Bookmark
DrawText(g, occurences, Brushes.Gray, ItalicFont, ref x, e.Bounds.Y); DrawText(g, occurences, Brushes.Gray, ItalicFont, ref x, e.Bounds.Y);
} }
public void AddMark(Bookmark mark) public void AddMark(SDBookmark mark)
{ {
marks.Add(mark); marks.Add(mark);
@ -76,7 +76,7 @@ namespace Bookmark
SetText(); SetText();
} }
public void RemoveMark(Bookmark mark) public void RemoveMark(SDBookmark mark)
{ {
marks.Remove(mark); marks.Remove(mark);
if (isInitialized) { if (isInitialized) {
@ -98,7 +98,7 @@ namespace Bookmark
if (document.HighlightingStrategy == null) { if (document.HighlightingStrategy == null) {
document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategyForFile(fileName); document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategyForFile(fileName);
} }
foreach (Bookmark mark in marks) { foreach (SDBookmark mark in marks) {
TreeNode newResult = new BookmarkNode(mark); TreeNode newResult = new BookmarkNode(mark);
Nodes.Add(newResult); Nodes.Add(newResult);
} }

8
src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/Nodes/BookmarkNode.cs

@ -7,14 +7,14 @@ using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document; using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
namespace Bookmark namespace ICSharpCode.SharpDevelop.Bookmarks
{ {
/// <summary> /// <summary>
/// Description of SearchFolderNode. /// Description of SearchFolderNode.
/// </summary> /// </summary>
public class BookmarkNode : ExtTreeNode public class BookmarkNode : ExtTreeNode
{ {
Bookmark bookmark; SDBookmark bookmark;
SizeF spaceSize; SizeF spaceSize;
static StringFormat sf = (StringFormat)System.Drawing.StringFormat.GenericTypographic.Clone(); static StringFormat sf = (StringFormat)System.Drawing.StringFormat.GenericTypographic.Clone();
@ -23,13 +23,13 @@ namespace Bookmark
string positionText; string positionText;
public Bookmark Bookmark { public SDBookmark Bookmark {
get { get {
return bookmark; return bookmark;
} }
} }
public BookmarkNode(Bookmark bookmark) public BookmarkNode(SDBookmark bookmark)
{ {
drawDefault = false; drawDefault = false;
this.bookmark = bookmark; this.bookmark = bookmark;

44
src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs

@ -45,6 +45,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{ {
errorDrawer = new ErrorDrawer(this); errorDrawer = new ErrorDrawer(this);
Document.FoldingManager.FoldingStrategy = new ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ParserFoldingStrategy(); Document.FoldingManager.FoldingStrategy = new ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ParserFoldingStrategy();
Document.BookmarkManager.Factory = new Bookmarks.SDBookmarkFactory(Document.BookmarkManager);
Document.BookmarkManager.Added += new BookmarkEventHandler(BookmarkAdded); Document.BookmarkManager.Added += new BookmarkEventHandler(BookmarkAdded);
Document.BookmarkManager.Removed += new BookmarkEventHandler(BookmarkRemoved); Document.BookmarkManager.Removed += new BookmarkEventHandler(BookmarkRemoved);
GenerateEditActions(); GenerateEditActions();
@ -55,16 +56,12 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
void BookmarkAdded(object sender, BookmarkEventArgs e) void BookmarkAdded(object sender, BookmarkEventArgs e)
{ {
if (FileName != null) { Bookmarks.BookmarkManager.AddMark((Bookmarks.SDBookmark)e.Bookmark);
Bookmark.BookmarkManager.AddMark(FileName, e.Bookmark);
}
} }
void BookmarkRemoved(object sender, BookmarkEventArgs e) void BookmarkRemoved(object sender, BookmarkEventArgs e)
{ {
if (FileName != null) { Bookmarks.BookmarkManager.RemoveMark((Bookmarks.SDBookmark)e.Bookmark);
Bookmark.BookmarkManager.RemoveMark(FileName, e.Bookmark);
}
} }
public virtual ICompletionDataProvider CreateCodeCompletionDataProvider(bool ctrlSpace) public virtual ICompletionDataProvider CreateCodeCompletionDataProvider(bool ctrlSpace)
@ -88,15 +85,17 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
newControl.MouseWheel += new MouseEventHandler(TextAreaMouseWheel); newControl.MouseWheel += new MouseEventHandler(TextAreaMouseWheel);
newControl.DoHandleMousewheel = false; newControl.DoHandleMousewheel = false;
} }
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
base.Dispose(Disposing); base.Dispose(disposing);
if (disposing) { if (disposing) {
errorDrawer.Dispose(); errorDrawer.Dispose();
CloseCodeCompletionWindow(this, EventArgs.Empty); CloseCodeCompletionWindow(this, EventArgs.Empty);
CloseInsightWindow(this, EventArgs.Empty); CloseInsightWindow(this, EventArgs.Empty);
} }
} }
void CloseCodeCompletionWindow(object sender, EventArgs e) void CloseCodeCompletionWindow(object sender, EventArgs e)
{ {
if (codeCompletionWindow != null) { if (codeCompletionWindow != null) {
@ -145,36 +144,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
} }
} }
// void IconBarMouseDown(AbstractMargin iconBar, Point mousepos, MouseButtons mouseButtons)
// {
// int realline = iconBar.TextArea.TextView.GetLogicalLine(mousepos);
// if (realline >= 0 && realline < iconBar.TextArea.Document.TotalNumberOfLines) {
//
// if (DebuggerService.CurrentDebugger.SupportsExecutionControl) {
// DebuggerService.ToggleBreakpointAt(FileName, realline + 1, 0);
// iconBar.TextArea.Refresh(iconBar);
// }
// }
// }
//
// void PaintIconBarBreakPoints(AbstractMargin iconBar, Graphics g, Rectangle rect)
// {
//
// lock (DebuggerService.Breakpoints) {
// foreach (Breakpoint breakpoint in DebuggerService.Breakpoints) {
// try {
// if (Path.GetFullPath(breakpoint.FileName) == Path.GetFullPath(FileName)) {
// int lineNumber = iconBar.TextArea.Document.GetVisibleLine(breakpoint.LineNumber - 1);
// int yPos = (int)(lineNumber * iconBar.TextArea.TextView.FontHeight) - iconBar.TextArea.VirtualTop.Y;
// if (yPos >= rect.Y && yPos <= rect.Bottom) {
// ((IconBarMargin)iconBar).DrawBreakpoint(g, yPos, breakpoint.IsEnabled);
// }
// }
// } catch (Exception) {}
// }
// }
// }
void CaretPositionChanged(object sender, EventArgs e) void CaretPositionChanged(object sender, EventArgs e)
{ {
StatusBarService.SetCaretPosition(ActiveTextAreaControl.TextArea.TextView.GetVisualColumn(ActiveTextAreaControl.Caret.Line, ActiveTextAreaControl.Caret.Column), ActiveTextAreaControl.Caret.Line, ActiveTextAreaControl.Caret.Column); StatusBarService.SetCaretPosition(ActiveTextAreaControl.TextArea.TextView.GetVisualColumn(ActiveTextAreaControl.Caret.Line, ActiveTextAreaControl.Caret.Column), ActiveTextAreaControl.Caret.Line, ActiveTextAreaControl.Caret.Column);
@ -229,6 +198,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
protected override void OnFileNameChanged(EventArgs e) protected override void OnFileNameChanged(EventArgs e)
{ {
base.OnFileNameChanged(e); base.OnFileNameChanged(e);
((Bookmarks.SDBookmarkFactory)Document.BookmarkManager.Factory).ChangeFilename(this.FileName);
ActivateQuickClassBrowserOnDemand(); ActivateQuickClassBrowserOnDemand();
} }

6
src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs

@ -322,10 +322,10 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
TitleName = Path.GetFileName(fileName); TitleName = Path.GetFileName(fileName);
IsDirty = false; IsDirty = false;
SetWatcher(); SetWatcher();
foreach (Bookmark.Bookmark mark in Bookmark.BookmarkManager.GetBookmarks(fileName)) { foreach (Bookmarks.SDBookmark mark in Bookmarks.BookmarkManager.GetBookmarks(fileName)) {
textAreaControl.Document.BookmarkManager.Marks.Add(mark.CreateBookmark(textAreaControl.Document)); mark.Document = textAreaControl.Document;
textAreaControl.Document.BookmarkManager.Marks.Add(mark);
} }
} }
public Properties CreateMemento() public Properties CreateMemento()

Loading…
Cancel
Save