diff --git a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj index 0500991393..076addcf78 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj +++ b/src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj @@ -112,9 +112,6 @@ - - ConditionCell.xaml - DrawSurface.xaml @@ -343,7 +340,6 @@ - diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/BreakPointsPad.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/BreakPointsPad.cs index b8893cf977..97179860ed 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/BreakPointsPad.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/BreakPointsPad.cs @@ -19,26 +19,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads { public BreakPointsPad() { - myPanel.Children.Add(CreateToolBar()); + var res = new CommonResources(); + res.InitializeComponent(); - CreateColumns(); - } - - protected override ToolBar CreateToolBar() - { - ToolBar toolbar = ToolBarService.CreateToolBar(myPanel, this, "/SharpDevelop/Pads/BreakpointPad/Toolbar"); - toolbar.SetValue(Grid.RowProperty, 0); - return toolbar; - } - - protected override void CreateColumns() - { - string conditionHeader = StringParser.Parse("${res:MainWindow.Windows.Debug.Conditional.Breakpoints.ConditionalColumnHeader}"); + Grid grid = (Grid)this.Control; + ToolBar toolbar = ToolBarService.CreateToolBar(grid, this, "/SharpDevelop/Pads/BreakpointPad/Toolbar"); + grid.Children.Add(toolbar); - // HACK - DataTemplate cellTemplate = new ConditionCell().FindResource("ConditionCellTemplate") as DataTemplate; - - listView.AddColumn(conditionHeader, cellTemplate); + this.control.listView.View = (GridView)res["breakpointsGridView"]; } protected override bool ShowBookmarkInThisPad(SDBookmark mark) @@ -46,27 +34,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads return mark.IsVisibleInBookmarkPad && mark is BreakpointBookmark; } - protected override void OnItemActivated(object sender, EventArgs e) + protected override void OnItemActivated(SDBookmark bookmark) { - var node = CurrentItem; - if (node == null) - return; - SDBookmark mark = node.Mark as SDBookmark; - if (mark == null) - return; - - string fileName = mark.FileName; - if (mark is DecompiledBreakpointBookmark) { + if (bookmark is DecompiledBreakpointBookmark) { // get information from breakpoint and navigate to the decompiled type string assemblyFile, typeName; - if (DecompiledBreakpointBookmark.GetAssemblyAndType(fileName, out assemblyFile, out typeName)) { - NavigationService.NavigateTo(assemblyFile, typeName, string.Empty, mark.LineNumber, false); + if (DecompiledBreakpointBookmark.GetAssemblyAndType(bookmark.FileName, out assemblyFile, out typeName)) { + NavigationService.NavigateTo(assemblyFile, typeName, string.Empty, bookmark.LineNumber, false); } } else { - // jump to normal breakpoint - FileService.JumpToFilePosition(fileName, mark.LineNumber, 1); - - // TODO: if other types of breakpoint bookmarks are available, one should do jumping/navigation here + base.OnItemActivated(bookmark); } } } diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/CommonResources.xaml b/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/CommonResources.xaml index 9d47aa3e6f..38353c814b 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/CommonResources.xaml +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/CommonResources.xaml @@ -6,6 +6,8 @@ xmlns:core="http://icsharpcode.net/sharpdevelop/core" xmlns:tv="http://icsharpcode.net/sharpdevelop/treeview" > + + @@ -34,4 +36,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml b/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml deleted file mode 100644 index 20ab0bae89..0000000000 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml.cs deleted file mode 100644 index eb8e1b2066..0000000000 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml.cs +++ /dev/null @@ -1,196 +0,0 @@ -// 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.IO; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Input; - -using ICSharpCode.AvalonEdit; -using ICSharpCode.Core; -using ICSharpCode.Core.Presentation; -using ICSharpCode.NRefactory; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls; -using ICSharpCode.SharpDevelop.Debugging; -using ICSharpCode.SharpDevelop.Dom; -using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Editor.CodeCompletion; -using ICSharpCode.SharpDevelop.Gui; -using ICSharpCode.SharpDevelop.Project; - -namespace Debugger.AddIn.Pads.Controls -{ - public partial class ConditionCell : UserControl - { - private string language; - - protected ConsoleControl console; - - public static readonly DependencyProperty CommandTextProperty = - DependencyProperty.Register("CommandText", typeof(string), typeof(ConditionCell), - new UIPropertyMetadata(null, new PropertyChangedCallback(OnCommandTextChanged))); - - private NRefactoryResolver resolver; - - public ConditionCell() - { - InitializeComponent(); - - console = new ConsoleControl(); - console.TextAreaTextEntered += new TextCompositionEventHandler(consoleControl_TextAreaTextEntered); - console.TextAreaPreviewKeyDown += new KeyEventHandler(console_TextAreaPreviewKeyDown); - console.LostFocus += new RoutedEventHandler(console_LostFocus); - console.HideScrollBar(); - ConsolePanel.Content = console; - - // get language - if (ProjectService.CurrentProject == null) - language = "C#"; - else - language = ProjectService.CurrentProject.Language; - resolver = new NRefactoryResolver(LanguageProperties.GetLanguage(language)); - - // FIXME set language - if (language == "VB" || language == "VBNet") { - console.SetHighlighting("VBNET"); - } - else { - console.SetHighlighting("C#"); - } - } - - /// - /// Gets/sets the command text displayed at the command prompt. - /// - public string CommandText { - get { return console.CommandText.Trim(); } - set { console.CommandText = value; } - } - - private BreakpointBookmark Breakpoint { - get { - var model = Model; - return model.Mark as BreakpointBookmark; - } - } - - private ListViewPadItemModel Model { - get { return Tag as ListViewPadItemModel; } - } - - private ITextEditor TextEditor { - get { - return console.TextEditor; - } - } - - private void console_TextAreaPreviewKeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Return || e.Key == Key.Escape) { - - if (e.Key == Key.Escape) - CommandText = string.Empty; - else { - if(!CheckSyntax()) - return; - } - - UpdateBreakpoint(); - - e.Handled = true; - } - } - - private void console_LostFocus(object sender, RoutedEventArgs e) - { - if (string.IsNullOrEmpty(CommandText) || !this.CheckSyntax()) - return; - - UpdateBreakpoint(); - } - - private void UpdateBreakpoint() - { - Breakpoint.Condition = CommandText; - Model.Condition = CommandText; - Breakpoint.ScriptLanguage = language; - Model.Language = language; - - if (!string.IsNullOrEmpty(console.CommandText)) { - Breakpoint.Action = BreakpointAction.Condition; - if (Breakpoint.IsEnabled) - Model.Image = BreakpointBookmark.BreakpointConditionalImage.ImageSource; - } - else { - Breakpoint.Action = BreakpointAction.Break; - if (Breakpoint.IsEnabled) - Model.Image = BreakpointBookmark.BreakpointImage.ImageSource; - } - } - - private bool CheckSyntax() - { - string command = CommandText; - if (string.IsNullOrEmpty(command)) - return true; - - // FIXME workaround the NRefactory issue that needs a ; at the end - if (language == "C#") { - if(!command.EndsWith(";")) - command += ";"; - // FIXME only one string should be available; highlighting expects C#, supproted language, CSharp - language = "CSharp"; - } - - SupportedLanguage supportedLanguage = (SupportedLanguage)Enum.Parse(typeof(SupportedLanguage), language.ToString(), true); - using (var parser = ParserFactory.CreateParser(supportedLanguage, new StringReader(TextEditor.Document.Text))) { - parser.ParseExpression(); - if (parser.Errors.Count > 0) { - MessageService.ShowError(parser.Errors.ErrorOutput); - return false; - } - } - - return true; - } - - private void consoleControl_TextAreaTextEntered(object sender, TextCompositionEventArgs e) - { - foreach (char ch in e.Text) { - if (ch == '.') { - ShowDotCompletion(console.CommandText); - } - } - } - - private void ShowDotCompletion(string currentText) - { - var seg = Breakpoint; - - var expressionFinder = ParserService.GetExpressionFinder(seg.FileName.ToString()); - var info = ParserService.GetParseInformation(seg.FileName.ToString()); - - string text = ParserService.GetParseableFileContent(seg.FileName.ToString()).Text; - - int currentOffset = TextEditor.Caret.Offset - console.CommandOffset - 1; - - var expr = expressionFinder.FindExpression(currentText, currentOffset); - - expr.Region = new DomRegion(seg.LineNumber, seg.ColumnNumber, seg.LineNumber, seg.ColumnNumber); - - var rr = resolver.Resolve(expr, info, text); - - if (rr != null) { - TextEditor.ShowCompletionWindow(new DotCodeCompletionItemProvider().GenerateCompletionListForResolveResult(rr, expr.Context)); - } - } - - private static void OnCommandTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { - var cell = d as ConditionCell; - cell.CommandText = e.NewValue.ToString(); - } - } -} \ No newline at end of file diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin index 499f25d7f0..a361ad7884 100755 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin @@ -1108,12 +1108,12 @@ + class = "ICSharpCode.SharpDevelop.Bookmarks.DeleteMark"/> + class = "ICSharpCode.SharpDevelop.Bookmarks.DeleteAllMarks"/> diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 081c6f38e3..9249721a30 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -96,9 +96,6 @@ Src\Project\MSBuildEngine\ExtendedBinaryReader.cs - - ListViewPad.xaml - @@ -700,8 +697,6 @@ - - @@ -871,7 +866,7 @@ - + @@ -911,7 +906,6 @@ - diff --git a/src/Main/Base/Project/Src/Bookmarks/BookmarkBase.cs b/src/Main/Base/Project/Src/Bookmarks/BookmarkBase.cs index 457787f117..1cc17ec403 100644 --- a/src/Main/Base/Project/Src/Bookmarks/BookmarkBase.cs +++ b/src/Main/Base/Project/Src/Bookmarks/BookmarkBase.cs @@ -1,11 +1,13 @@ // 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 ICSharpCode.SharpDevelop.Editor; using System; using System.Windows.Input; +using System.Windows.Media; + using ICSharpCode.NRefactory; using ICSharpCode.SharpDevelop.Dom.Refactoring; +using ICSharpCode.SharpDevelop.Editor; namespace ICSharpCode.SharpDevelop.Bookmarks { @@ -152,6 +154,10 @@ namespace ICSharpCode.SharpDevelop.Bookmarks get { return DefaultBookmarkImage; } } + public ImageSource ImageSource { + get { return this.Image != null ? this.Image.ImageSource : null; } + } + public virtual void MouseDown(MouseButtonEventArgs e) { } diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPad.cs b/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPad.cs index 333b05a8d9..491cb932f2 100644 --- a/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPad.cs +++ b/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPad.cs @@ -3,12 +3,11 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Windows; using System.Windows.Controls; - using ICSharpCode.Core; using ICSharpCode.Core.Presentation; -using ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls; using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Gui; @@ -16,108 +15,57 @@ namespace ICSharpCode.SharpDevelop.Bookmarks { public sealed class BookmarkPad : BookmarkPadBase { - static BookmarkPad instance; - - public static BookmarkPad Instance { - get { - if (instance == null) { - WorkbenchSingleton.Workbench.GetPad(typeof(BookmarkPad)).CreatePad(); - } - return instance; - } - } - - protected override ToolBar CreateToolBar() + public BookmarkPad() { - ToolBar toolbar = ToolBarService.CreateToolBar(myPanel, this, "/SharpDevelop/Pads/BookmarkPad/Toolbar"); - toolbar.SetValue(Grid.RowProperty, 0); - return toolbar; + ToolBar toolbar = ToolBarService.CreateToolBar((UIElement)this.Control, this, "/SharpDevelop/Pads/BookmarkPad/Toolbar"); + this.control.Children.Add(toolbar); } - protected override void CreateColumns() { } - - public BookmarkPad() + protected override bool ShowBookmarkInThisPad(SDBookmark bookmark) { - instance = this; - myPanel.Children.Add(CreateToolBar()); - listView.HideColumns(2, 0); + return bookmark.IsVisibleInBookmarkPad && !(bookmark is BreakpointBookmark); } } public abstract class BookmarkPadBase : AbstractPadContent { - protected Grid myPanel = new Grid(); - protected ListViewPad listView = new ListViewPad(); + protected BookmarkPadContent control; public override object Control { - get { - return myPanel; - } + get { return this.control; } } - public ListViewPadItemModel CurrentItem { - get { - return listView.CurrentItem; - } + public ListView ListView { + get { return this.control.listView; } } - protected abstract ToolBar CreateToolBar(); + public ItemCollection Items { + get { return this.control.listView.Items; } + } - protected abstract void CreateColumns(); + public SDBookmark SelectedItem { + get { return (SDBookmark)this.control.listView.SelectedItem; } + } protected BookmarkPadBase() { - myPanel.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); - myPanel.RowDefinitions.Add(new RowDefinition()); - listView.SetValue(Grid.RowProperty, 1); - myPanel.Children.Add(listView); + this.control = new BookmarkPadContent(); + this.control.InitializeComponent(); BookmarkManager.Added += BookmarkManagerAdded; BookmarkManager.Removed += BookmarkManagerRemoved; - foreach (SDBookmark mark in BookmarkManager.Bookmarks) { - AddMark(mark); - } - - listView.ItemActivated += new EventHandler(OnItemActivated); - } - - public IEnumerable AllItems { - get { - foreach (var item in listView.ItemCollection) { - yield return item; + foreach (SDBookmark bookmark in BookmarkManager.Bookmarks) { + if (ShowBookmarkInThisPad(bookmark)) { + this.Items.Add(bookmark); } } - } - - public ListViewPadItemModel NextItem { - get { - return this.listView.NextItem; - } - } - - public ListViewPadItemModel PreviousItem { - get { - return this.listView.PreviousItem; - } - } - - public void EnableDisableAll() - { - bool isOneChecked = false; - foreach (var node in AllItems) { - if (node.IsChecked) { - isOneChecked = true; - break; - } - } - foreach (var node in AllItems) - node.IsChecked = !isOneChecked; - } - - public void SelectItem(ListViewPadItemModel model) - { - listView.CurrentItem = model; + + this.control.listView.MouseDoubleClick += delegate { + SDBookmark bm = this.control.listView.SelectedItem as SDBookmark; + if (bm != null) + OnItemActivated(bm); + }; } public override void Dispose() @@ -126,60 +74,23 @@ namespace ICSharpCode.SharpDevelop.Bookmarks BookmarkManager.Removed -= BookmarkManagerRemoved; } - void AddMark(SDBookmark mark) - { - if (!ShowBookmarkInThisPad(mark)) - return; - - var model = new ListViewPadItemModel(mark); - model.PropertyChanged += OnModelPropertyChanged; - listView.Add(model); - } + protected abstract bool ShowBookmarkInThisPad(SDBookmark mark); - protected virtual bool ShowBookmarkInThisPad(SDBookmark mark) + protected virtual void OnItemActivated(SDBookmark bm) { - return mark.IsVisibleInBookmarkPad && !(mark is BreakpointBookmark); - } - - protected virtual void OnItemActivated(object sender, EventArgs e) - { - var node = CurrentItem; - if (node != null) { - SDBookmark mark = node.Mark as SDBookmark; - if (mark != null) { - FileService.JumpToFilePosition(mark.FileName, mark.LineNumber, 1); - } - } + FileService.JumpToFilePosition(bm.FileName, bm.LineNumber, 1); } void BookmarkManagerAdded(object sender, BookmarkEventArgs e) - { - AddMark(e.Bookmark); - } - - void BookmarkManagerRemoved(object sender, BookmarkEventArgs e) { if (ShowBookmarkInThisPad(e.Bookmark)) { - var model = listView.Remove(e.Bookmark); - if (model != null) - model.PropertyChanged -= OnModelPropertyChanged; + this.Items.Add(e.Bookmark); } } - void OnModelPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + void BookmarkManagerRemoved(object sender, BookmarkEventArgs e) { - var model = sender as ListViewPadItemModel; - if (e.PropertyName == "IsChecked") { - if (model.Mark is BreakpointBookmark) { - var bpm = model.Mark as BreakpointBookmark; - bpm.IsEnabled = model.IsChecked; - if (model.IsChecked) { - model.Image = string.IsNullOrEmpty(model.Condition) ? BreakpointBookmark.BreakpointImage.ImageSource : BreakpointBookmark.BreakpointConditionalImage.ImageSource; - } else { - model.Image = BreakpointBookmark.DisabledBreakpointImage.ImageSource; - } - } - } + this.Items.Remove(e.Bookmark); } } } \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadContent.xaml b/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadContent.xaml new file mode 100644 index 0000000000..b29cd843b6 --- /dev/null +++ b/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadContent.xaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadToolbarCommands.cs b/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadToolbarCommands.cs index 7da3eac63a..6b00672959 100644 --- a/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadToolbarCommands.cs +++ b/src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadToolbarCommands.cs @@ -7,116 +7,65 @@ using System.Linq; using System.Windows.Forms; using ICSharpCode.Core; -using ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls; using ICSharpCode.SharpDevelop.Debugging; namespace ICSharpCode.SharpDevelop.Bookmarks { - #region Goto Commands - public abstract class NextPrevBookmarkPadCommand : AbstractMenuCommand - { - public void Run(ListViewPadItemModel item) - { - var bookmarkBase = (BookmarkPadBase)Owner; - - if (item == null) return; - - // get current mark - var mark = item.Mark as SDBookmark; - int line = mark.LineNumber; - var fileName = new FileName(mark.FileName); - - SDBookmark bookmark; - if (item.Mark is BreakpointBookmark) { - var bookmarks = DebuggerService.Breakpoints; - bookmark = bookmarks.FirstOrDefault(b => b.LineNumber == line && b.FileName == fileName); - if (bookmark == null && bookmarks.Count > 0) { - bookmark = bookmarks[0]; // jump around to first bookmark - } - } - else { - var bookmarks = BookmarkManager.Bookmarks; - bookmark = bookmarks.FirstOrDefault(b => b.LineNumber == line && b.FileName == fileName); - if (bookmark == null && bookmarks.Count > 0) { - bookmark = bookmarks[0]; // jump around to first bookmark - } - } - - if (bookmark != null) { - FileService.JumpToFilePosition(bookmark.FileName, bookmark.LineNumber, bookmark.ColumnNumber); - } - - // select in tree - bookmarkBase.SelectItem(item); - } - } - - public sealed class NextBookmarkPadCommand : NextPrevBookmarkPadCommand + public sealed class NextBookmarkPadCommand : AbstractMenuCommand { public override void Run() { - var bookmarkBase = (BookmarkPadBase)Owner; - var nextItem = bookmarkBase.NextItem; - - Run(nextItem); + BookmarkPadBase pad = (BookmarkPadBase)this.Owner; + if (pad.ListView.Items.Count > 0) { + pad.ListView.SelectedIndex = (pad.ListView.SelectedIndex + 1) % pad.ListView.Items.Count; + FileService.JumpToFilePosition(pad.SelectedItem.FileName, pad.SelectedItem.LineNumber, pad.SelectedItem.ColumnNumber); + } } } - public sealed class PrevBookmarkPadCommand : NextPrevBookmarkPadCommand + public sealed class PrevBookmarkPadCommand : AbstractMenuCommand { public override void Run() { - var bookmarkBase = (BookmarkPadBase)Owner; - var prevItem = bookmarkBase.PreviousItem; - - Run(prevItem); - } - } - #endregion Goto Commands - - #region Delete BookMark(s) commands - - public abstract class AbstractDeleteMarkClass : AbstractMenuCommand - { - protected void deleteBookMark (SDBookmark bookmark) { - if (bookmark == null) return; - if (bookmark is BreakpointBookmark) return; - ICSharpCode.SharpDevelop.Bookmarks.BookmarkManager.RemoveMark(bookmark); + BookmarkPadBase pad = (BookmarkPadBase)this.Owner; + if (pad.ListView.Items.Count > 0) { + pad.ListView.SelectedIndex = (pad.ListView.SelectedIndex - 1 + pad.ListView.Items.Count) % pad.ListView.Items.Count; + FileService.JumpToFilePosition(pad.SelectedItem.FileName, pad.SelectedItem.LineNumber, pad.SelectedItem.ColumnNumber); + } } } - /// - /// Deletes all s in the BookMarkPad. - /// - public class DeleteAllMarks : AbstractDeleteMarkClass + public class DeleteAllMarks : AbstractMenuCommand { public override void Run() { - BookmarkManager.RemoveAll(b => !(b is BreakpointBookmark)); + BookmarkPadBase pad = (BookmarkPadBase)this.Owner; + foreach(SDBookmark bm in pad.Items.OfType().ToList()) { + BookmarkManager.RemoveMark(bm); + } } } - /// - /// Deletes the currently selected or - /// - public class DeleteMark : AbstractDeleteMarkClass + public class DeleteMark : AbstractMenuCommand { public override void Run() { - var node = ((BookmarkPadBase)Owner).CurrentItem; - if (node == null) return; - - deleteBookMark(node.Mark as SDBookmark); + BookmarkPadBase pad = (BookmarkPadBase)this.Owner; + if (pad.SelectedItem != null) { + BookmarkManager.RemoveMark(pad.SelectedItem); + } } } - #endregion Delete BookMark(s) commands - public class EnableDisableAll : AbstractMenuCommand { public override void Run() { - ((BookmarkPadBase)Owner).EnableDisableAll(); + BookmarkPadBase pad = (BookmarkPadBase)this.Owner; + bool anyEnabled = pad.Items.OfType().Any(bp => bp.IsEnabled); + foreach (var bp in pad.Items.OfType()) { + bp.IsEnabled = !anyEnabled; + } } } } diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml b/src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml deleted file mode 100644 index dbc714cc73..0000000000 --- a/src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml.cs b/src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml.cs deleted file mode 100644 index 4876bbbf7d..0000000000 --- a/src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml.cs +++ /dev/null @@ -1,241 +0,0 @@ -// 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.ComponentModel; -using System.IO; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Input; -using System.Windows.Media; - -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop.Debugging; - -namespace ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls -{ - /// - /// ListViewPad inside WPF pads. - /// - public sealed partial class ListViewPad : UserControl - { - ObservableCollection itemCollection = new ObservableCollection(); - - public ObservableCollection ItemCollection { - get { return itemCollection; } - } - - public event EventHandler ItemActivated; - - public ListViewPad() - { - InitializeComponent(); - - this.MyListView.PreviewMouseDoubleClick += new MouseButtonEventHandler(ListViewPad_PreviewMouseDoubleClick); - this.MyListView.KeyDown += new KeyEventHandler(ListViewPad_KeyDown); - } - - public ListViewPadItemModel CurrentItem { - get { - if (MyListView.SelectedItem == null && MyListView.Items.Count > 0) - this.MyListView.SelectedItem = MyListView.Items[0]; - - return MyListView.SelectedItem as ListViewPadItemModel; - } - set { - if (value == null) return; - - this.MyListView.SelectedItem = value; - } - } - - public ListViewPadItemModel NextItem { - get { - bool found = false; - foreach (var line in ItemCollection) { - if (found) - return line; - if (line == CurrentItem) - found = true; - } - - return null; - } - } - - public ListViewPadItemModel PreviousItem { - get { - bool found = false; - ListViewPadItemModel prev = null; - foreach (var line in ItemCollection) { - if (found) - return prev; - if (line == CurrentItem) { - found = true; - } - else { - prev = line; - } - } - - return prev; - } - } - - public void Add(ListViewPadItemModel item) - { - if (item == null) return; - ItemCollection.Add(item); - } - - public ListViewPadItemModel Remove(SDBookmark bookmark) - { - if (bookmark is CurrentLineBookmark) - return null; - - foreach (var model in itemCollection) { - SDBookmark currentBookmark = model.Mark as SDBookmark; - - if (bookmark.FileName == currentBookmark.FileName && - bookmark.LineNumber == currentBookmark.LineNumber) { - ItemCollection.Remove(model); - return model; - } - } - - return null; - } - - public void AddColumn(string header, DataTemplate cellTemplate) - { - GridViewColumn column = new GridViewColumn(); - column.Header = header; - column.CellTemplate = cellTemplate; - ((GridView)this.MyListView.View).Columns.Add(column); - } - - /// - /// Indexes from end to start. - /// - /// - public void HideColumns(params int[] columnIndexes) - { - foreach(int i in columnIndexes) - ((GridView)MyListView.View).Columns.RemoveAt(i); - } - - private void ListViewPad_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) - { - var handler = ItemActivated; - - if (handler != null) - ItemActivated(this, EventArgs.Empty); - } - - private void ListViewPad_KeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Escape) { - this.MyListView.UnselectAll(); - e.Handled = true; - } - } - } - - public sealed class ListViewPadItemModel : INotifyPropertyChanged - { - bool isChecked; - object tag; - string language; - string condition; - ImageSource imageSource; - - public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; - - public ListViewPadItemModel(SDBookmark mark) - { - if (mark is BreakpointBookmark) { - isChecked = ((BreakpointBookmark)mark).IsEnabled; - condition = ((BreakpointBookmark)mark).Condition; - language = ((BreakpointBookmark)mark).ScriptLanguage; - } - - imageSource = mark.Image.ImageSource; - - Location = GetLocation(mark); - Mark = mark; - tag = this; - } - - public bool IsChecked { - get { - return isChecked; - } - set { - if (value != isChecked) - { - isChecked = value; - NotifyPropertyChanged("IsChecked"); - } - } - } - - public SDBookmark Mark { - get; set; - } - - public ImageSource Image { - get { return imageSource; } - set { - imageSource = value; - NotifyPropertyChanged("Image"); - } - } - - public string Location { - get; private set; - } - - public string Language { - get { return language; } - set { - language = value; - NotifyPropertyChanged("Language"); - } - } - - public string Condition { - get { return condition; } - set { - condition = value; - NotifyPropertyChanged("Condition"); - } - } - - public object Tag { - get { return tag;} - set { - tag = value; - NotifyPropertyChanged("Tag"); - } - } - - public override string ToString() - { - return Location; - } - - private string GetLocation(SDBookmark bookmark) - { - return string.Format(StringParser.Parse("${res:MainWindow.Windows.BookmarkPad.LineText}"), - Path.GetFileName(bookmark.FileName), bookmark.LineNumber); - } - - private void NotifyPropertyChanged(string property) - { - if (PropertyChanged != null) { - PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(property)); - } - } - } -} \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkFolderNode.cs b/src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkFolderNode.cs deleted file mode 100644 index d30b5ed142..0000000000 --- a/src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkFolderNode.cs +++ /dev/null @@ -1,127 +0,0 @@ -// 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.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -using ICSharpCode.Core; -using ICSharpCode.SharpDevelop.Gui; - -namespace ICSharpCode.SharpDevelop.Bookmarks -{ - /// - /// Description of SearchFolderNode. - /// - public class BookmarkFolderNode : ExtFolderNode - { - List marks = new List(); - string fileName; - string fileNameText; - string occurences; - Image icon; - - public List Marks { - get { - return marks; - } - } - - public BookmarkFolderNode(string fileName) - { - drawDefault = false; - this.fileName = fileName; - fileNameText = Path.GetFileName(fileName) + StringParser.Parse(" ${res:MainWindow.Windows.SearchResultPanel.In} ") + Path.GetDirectoryName(fileName); - icon = IconService.GetBitmap(IconService.GetImageForFile(fileName)); - Nodes.Add(new TreeNode()); - } - - public void SetText() - { - if (marks.Count == 1) { - occurences = " (1 bookmark)"; - } else { - occurences = " (" + marks.Count + " bookmarks)"; - } - this.Text = fileNameText + occurences; - } - - protected override int MeasureItemWidth(DrawTreeNodeEventArgs e) - { - Graphics g = e.Graphics; - int x = MeasureTextWidth(g, fileNameText, RegularBigFont); - x += MeasureTextWidth(g, occurences, ItalicBigFont); - if (icon != null) { - x += icon.Width; - } - return x + 3; - } - protected override void DrawForeground(DrawTreeNodeEventArgs e) - { - Graphics g = e.Graphics; - float x = e.Bounds.X; - if (icon != null) { - g.DrawImage(icon, x, e.Bounds.Y, icon.Width, icon.Height); - x += icon.Width + 2; - } - DrawText(e, fileNameText, SystemBrushes.WindowText, RegularBigFont, ref x); - DrawText(e, occurences, SystemBrushes.GrayText, ItalicBigFont, ref x); - } - - public void AddMark(SDBookmark mark) - { - int index = -1; - for (int i = 0; i < marks.Count; ++i) { - if (mark.LineNumber < marks[i].LineNumber) { - index = i; - break; - } - } - if (index < 0) - marks.Add(mark); - else - marks.Insert(index, mark); - - if (isInitialized) { - BookmarkNode newNode = new BookmarkNode(mark); - if (index < 0) - Nodes.Add(newNode); - else - Nodes.Insert(index, newNode); - newNode.EnsureVisible(); - } - SetText(); - } - - public void RemoveMark(SDBookmark mark) - { - marks.Remove(mark); - if (isInitialized) { - for (int i = 0; i < Nodes.Count; ++i) { - if (((BookmarkNode)Nodes[i]).Bookmark == mark) { - Nodes.RemoveAt(i); - break; - } - } - } - SetText(); - } - - protected override void Initialize() - { - Nodes.Clear(); - if (marks.Count > 0) { -// IDocument document = marks[0].Document; -// if (document != null && document.HighlightingStrategy == null) { -// document.HighlightingStrategy = HighlightingStrategyFactory.CreateHighlightingStrategyForFile(fileName); -// } - foreach (SDBookmark mark in marks) { - TreeNode newResult = new BookmarkNode(mark); - Nodes.Add(newResult); - } - } - } - } -} diff --git a/src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkNode.cs b/src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkNode.cs deleted file mode 100644 index 746a95120f..0000000000 --- a/src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkNode.cs +++ /dev/null @@ -1,146 +0,0 @@ -// 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.Drawing; -using System.Windows.Forms; - -using ICSharpCode.SharpDevelop.Gui; - -namespace ICSharpCode.SharpDevelop.Bookmarks -{ - /// - /// ExtTreeNode representing a bookmark. - /// - public class BookmarkNode : ExtTreeNode - { - SDBookmark bookmark; - //LineSegment line; - - SizeF spaceSize; - static StringFormat sf = (StringFormat)System.Drawing.StringFormat.GenericTypographic.Clone(); - - string positionText; - - public SDBookmark Bookmark { - get { - return bookmark; - } - } - - public BookmarkNode(SDBookmark bookmark) - { - drawDefault = false; - this.bookmark = bookmark; - Tag = bookmark; -// Checked = bookmark.IsEnabled; - positionText = "(" + (bookmark.LineNumber) + ") "; - - bookmark.DocumentChanged += BookmarkDocumentChanged; - bookmark.LineNumberChanged += BookmarkLineNumberChanged; - if (bookmark.Document != null) { - BookmarkDocumentChanged(null, null); - } else { - Text = positionText; - } - } - - public override void CheckedChanged() - { -// bookmark.IsEnabled = Checked; - } - - void BookmarkDocumentChanged(object sender, EventArgs e) - { - if (bookmark.Document != null) { -// line = bookmark.Document.GetLineSegment(Math.Min(bookmark.LineNumber, bookmark.Document.TotalNumberOfLines)); -// Text = positionText + bookmark.Document.GetText(line); - } - } - - void BookmarkLineNumberChanged(object sender, EventArgs e) - { - positionText = "(" + (bookmark.LineNumber) + ") "; - BookmarkDocumentChanged(sender, e); - } - - protected override int MeasureItemWidth(DrawTreeNodeEventArgs e) - { - Graphics g = e.Graphics; - int x = MeasureTextWidth(g, positionText, BoldMonospacedFont); -// if (line != null && !line.IsDeleted) { -// x += MeasureTextWidth(g, bookmark.Document.GetText(line).Replace("\t", " "), BoldMonospacedFont); -// } - return x; - } - - protected override void DrawForeground(DrawTreeNodeEventArgs e) - { - Graphics g = e.Graphics; - float x = e.Bounds.X; - DrawText(e, positionText, SystemBrushes.WindowText, RegularBigFont, ref x); - - spaceSize = g.MeasureString("-", RegularBigFont, new PointF(0, 0), StringFormat.GenericTypographic); - -// if (line != null && !line.IsDeleted) { -// DrawLine(g, line, e.Bounds.Y, x, e.State); -// } - } - - public override void ActivateItem() - { - FileService.JumpToFilePosition(bookmark.FileName, bookmark.LineNumber, 1); - } - - /* - float DrawDocumentWord(Graphics g, string word, PointF position, Font font, Color foreColor) - { - if (word == null || word.Length == 0) { - return 0f; - } - SizeF wordSize = g.MeasureString(word, font, 32768, sf); - - g.DrawString(word, - font, - BrushRegistry.GetBrush(foreColor), - position, - sf); - return wordSize.Width; - } - - void DrawLine(Graphics g, LineSegment line, float yPos, float xPos, TreeNodeStates state) - { - int logicalX = 0; - if (line.Words != null) { - foreach (TextWord word in line.Words) { - switch (word.Type) { - case TextWordType.Space: - xPos += spaceSize.Width; - logicalX++; - break; - case TextWordType.Tab: - xPos += spaceSize.Width * 4; - logicalX++; - break; - case TextWordType.Word: - xPos += DrawDocumentWord(g, - word.Word, - new PointF(xPos, yPos), - word.Bold ? BoldMonospacedFont : RegularMonospacedFont, - GetTextColor(state, word.Color) - ); - logicalX += word.Word.Length; - break; - } - } - } else { -// DrawDocumentWord(g, -// bookmark.Document.GetText(line), -// new PointF(xPos, yPos), -// RegularMonospacedFont, -// GetTextColor(state, Color.Black) -// ); - } - }*/ - } -} diff --git a/src/Main/Base/Project/Src/Bookmarks/SDBookmark.cs b/src/Main/Base/Project/Src/Bookmarks/SDBookmark.cs index abaa76b858..017febfd33 100644 --- a/src/Main/Base/Project/Src/Bookmarks/SDBookmark.cs +++ b/src/Main/Base/Project/Src/Bookmarks/SDBookmark.cs @@ -3,6 +3,7 @@ using System; using System.ComponentModel; +using System.IO; using ICSharpCode.Core; using ICSharpCode.NRefactory; @@ -33,6 +34,10 @@ namespace ICSharpCode.SharpDevelop.Bookmarks } } + public string FileNameAndLineNumber { + get { return string.Format(StringParser.Parse("${res:MainWindow.Windows.BookmarkPad.LineText}"), Path.GetFileName(this.FileName), this.LineNumber); } + } + public event EventHandler FileNameChanged; protected virtual void OnFileNameChanged(EventArgs e) diff --git a/src/Main/Base/Project/Src/Commands/DebugCommands.cs b/src/Main/Base/Project/Src/Commands/DebugCommands.cs index d95c8e2a3e..bedf53f342 100644 --- a/src/Main/Base/Project/Src/Commands/DebugCommands.cs +++ b/src/Main/Base/Project/Src/Commands/DebugCommands.cs @@ -8,7 +8,6 @@ using System.Windows.Forms; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Bookmarks; -using ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls; using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Gui; @@ -140,31 +139,6 @@ namespace ICSharpCode.SharpDevelop.Project.Commands } } - public class RemoveAllBreakpointsCommand : AbstractMenuCommand - { - public override void Run() - { - BookmarkManager.RemoveAll(b => b is BreakpointBookmark); - } - } - - public class DeleteBreakpointCommand : AbstractMenuCommand - { - public override void Run() - { - if (Owner == null || !(Owner is BookmarkPadBase)) return; - - var bookmarkBase = (BookmarkPadBase)Owner; - var item = bookmarkBase.CurrentItem; - - if (item == null) return; - - if (item.Mark is BreakpointBookmark) { - BookmarkManager.RemoveMark(item.Mark); - } - } - } - public class AttachToProcessCommand : AbstractMenuCommand { public override void Run() diff --git a/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs b/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs index a19452939c..dd694b1a25 100644 --- a/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs +++ b/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs @@ -27,6 +27,8 @@ namespace ICSharpCode.SharpDevelop.Debugging string condition; string scriptLanguage; + public event EventHandler ConditionChanged; + public string ScriptLanguage { get { return scriptLanguage; } set { scriptLanguage = value; } @@ -34,7 +36,15 @@ namespace ICSharpCode.SharpDevelop.Debugging public string Condition { get { return condition; } - set { condition = value; } + set { + if (condition != value) { + condition = value; + this.Action = string.IsNullOrEmpty(condition) ? BreakpointAction.Break : BreakpointAction.Condition; + if (ConditionChanged != null) + ConditionChanged(this, EventArgs.Empty); + Redraw(); + } + } } public BreakpointAction Action {