diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 98ce6cd888..7ec69291bb 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1590,21 +1590,21 @@ label = "${res:XML.MainMenu.SearchMenu.ToggleBookmark}" shortcut = "Control|F2" icon = "Bookmarks.ToggleMark" - class = "Bookmarks.ToggleBookmark"/> + class = "ICSharpCode.SharpDevelop.Bookmarks.ToggleBookmark"/> + class = "ICSharpCode.SharpDevelop.Bookmarks.PrevBookmark"/> + class = "ICSharpCode.SharpDevelop.Bookmarks.NextBookmark"/> + class = "ICSharpCode.SharpDevelop.Bookmarks.EnableDisableAll"/> predicate = null; + + public GotoPrevBookmark(Predicate predicate) + { + this.predicate = predicate; + } + public override void Execute(TextArea textArea) { - Bookmark mark = textArea.Document.BookmarkManager.GetPrevMark(textArea.Caret.Line); + Bookmark mark = textArea.Document.BookmarkManager.GetPrevMark(textArea.Caret.Line, predicate); if (mark != null) { textArea.Caret.Line = mark.LineNumber; textArea.SelectionManager.ClearSelection(); @@ -38,9 +45,16 @@ namespace ICSharpCode.TextEditor.Actions public class GotoNextBookmark : AbstractEditAction { + Predicate predicate = null; + + public GotoNextBookmark(Predicate predicate) + { + this.predicate = predicate; + } + public override void Execute(TextArea textArea) { - Bookmark mark = textArea.Document.BookmarkManager.GetNextMark(textArea.Caret.Line); + Bookmark mark = textArea.Document.BookmarkManager.GetNextMark(textArea.Caret.Line, predicate); if (mark != null) { textArea.Caret.Line = mark.LineNumber; textArea.SelectionManager.ClearSelection(); @@ -50,9 +64,16 @@ namespace ICSharpCode.TextEditor.Actions public class ClearAllBookmarks : AbstractEditAction { + Predicate predicate = null; + + public ClearAllBookmarks(Predicate predicate) + { + this.predicate = predicate; + } + public override void Execute(TextArea textArea) { - textArea.Document.BookmarkManager.Clear(); + textArea.Document.BookmarkManager.RemoveMarks(predicate); textArea.Document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea)); textArea.Document.CommitUpdate(); } diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs index 73264f5f75..ee5719cb37 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/BookmarkManager/BookmarkManager.cs @@ -162,37 +162,43 @@ namespace ICSharpCode.TextEditor.Document /// /// The lowest mark, if no marks exists it returns -1 /// - public Bookmark FirstMark { - get { - if (bookmark.Count < 1) { - return null; - } - Bookmark first = null; - for (int i = 0; i < bookmark.Count; ++i) { - if (bookmark[i].IsEnabled && (first == null || bookmark[i].LineNumber < first.LineNumber)) { - first = bookmark[i]; - } + public Bookmark GetFirstMark(Predicate predicate) + { + if (bookmark.Count < 1) { + return null; + } + Bookmark first = null; + for (int i = 0; i < bookmark.Count; ++i) { + if (predicate(bookmark[i]) && bookmark[i].IsEnabled && (first == null || bookmark[i].LineNumber < first.LineNumber)) { + first = bookmark[i]; } - return first; } + return first; } /// /// The highest mark, if no marks exists it returns -1 /// - public Bookmark LastMark { - get { - if (bookmark.Count < 1) { - return null; - } - Bookmark last = null; - for (int i = 0; i < bookmark.Count; ++i) { - if (bookmark[i].IsEnabled && (last == null || bookmark[i].LineNumber > last.LineNumber)) { - last = bookmark[i]; - } + public Bookmark GetLastMark(Predicate predicate) + { + if (bookmark.Count < 1) { + return null; + } + Bookmark last = null; + for (int i = 0; i < bookmark.Count; ++i) { + if (predicate(bookmark[i]) && bookmark[i].IsEnabled && (last == null || bookmark[i].LineNumber > last.LineNumber)) { + last = bookmark[i]; } - return last; } + return last; + } + bool AcceptAnyMarkPredicate(Bookmark mark) + { + return true; + } + public Bookmark GetNextMark(int curLineNr) + { + return GetNextMark(curLineNr, AcceptAnyMarkPredicate); } /// @@ -201,15 +207,15 @@ namespace ICSharpCode.TextEditor.Document /// /// returns the next mark > cur, if it not exists it returns FirstMark() /// - public Bookmark GetNextMark(int curLineNr) + public Bookmark GetNextMark(int curLineNr, Predicate predicate) { if (bookmark.Count == 0) { return null; } - Bookmark next = FirstMark; + Bookmark next = GetFirstMark(predicate); foreach (Bookmark mark in bookmark) { - if (mark.IsEnabled && mark.LineNumber > curLineNr) { + if (predicate(mark) && mark.IsEnabled && mark.LineNumber > curLineNr) { if (mark.LineNumber < next.LineNumber || next.LineNumber <= curLineNr) { next = mark; } @@ -218,22 +224,26 @@ namespace ICSharpCode.TextEditor.Document return next; } + public Bookmark GetPrevMark(int curLineNr) + { + return GetPrevMark(curLineNr, AcceptAnyMarkPredicate); + } /// /// returns first mark lower than lineNr /// /// /// returns the next mark lower than cur, if it not exists it returns LastMark() /// - public Bookmark GetPrevMark(int curLineNr) + public Bookmark GetPrevMark(int curLineNr, Predicate predicate) { if (bookmark.Count == 0) { return null; } - Bookmark prev = LastMark; + Bookmark prev = GetLastMark(predicate); foreach (Bookmark mark in bookmark) { - if (mark.IsEnabled && mark.LineNumber < curLineNr) { + if (predicate(mark) && mark.IsEnabled && mark.LineNumber < curLineNr) { if (mark.LineNumber > prev.LineNumber || prev.LineNumber >= curLineNr) { prev = mark; } diff --git a/src/Main/Base/Project/Src/Commands/EditCommands.cs b/src/Main/Base/Project/Src/Commands/EditCommands.cs index 565ea454c6..294f1ea066 100644 --- a/src/Main/Base/Project/Src/Commands/EditCommands.cs +++ b/src/Main/Base/Project/Src/Commands/EditCommands.cs @@ -66,7 +66,6 @@ namespace ICSharpCode.SharpDevelop.Commands { public override bool IsEnabled { get { - Console.WriteLine("IsEnabled2>" + WorkbenchSingleton.Workbench.ActiveContent); IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; if (editable != null) { return editable.EnableCut; diff --git a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Commands/MenuCommands.cs b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Commands/MenuCommands.cs index d2b86d7d61..cad725eb58 100644 --- a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Commands/MenuCommands.cs +++ b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Commands/MenuCommands.cs @@ -38,9 +38,14 @@ namespace ICSharpCode.SharpDevelop.Bookmarks public class PrevBookmark : AbstractEditActionMenuCommand { + + public static bool AcceptOnlyStandardBookmarks(Bookmark mark) + { + return (mark is SDBookmark); + } public override IEditAction EditAction { get { - return new ICSharpCode.TextEditor.Actions.GotoPrevBookmark(); + return new ICSharpCode.TextEditor.Actions.GotoPrevBookmark(PrevBookmark.AcceptOnlyStandardBookmarks); } } } @@ -49,7 +54,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks { public override IEditAction EditAction { get { - return new ICSharpCode.TextEditor.Actions.GotoNextBookmark(); + return new ICSharpCode.TextEditor.Actions.GotoNextBookmark(PrevBookmark.AcceptOnlyStandardBookmarks); } } } @@ -58,7 +63,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks { public override IEditAction EditAction { get { - return new ICSharpCode.TextEditor.Actions.ClearAllBookmarks(); + return new ICSharpCode.TextEditor.Actions.ClearAllBookmarks(PrevBookmark.AcceptOnlyStandardBookmarks); } } }