Browse Source

Refactored Breakpoints Pad and Bookmarks Pad

newNRvisualizers
David Srbecký 13 years ago
parent
commit
b8747a1476
  1. 4
      src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj
  2. 45
      src/AddIns/Debugger/Debugger.AddIn/Pads/BreakPointsPad.cs
  3. 31
      src/AddIns/Debugger/Debugger.AddIn/Pads/Common/CommonResources.xaml
  4. 22
      src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml
  5. 196
      src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml.cs
  6. 4
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  7. 8
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  8. 8
      src/Main/Base/Project/Src/Bookmarks/BookmarkBase.cs
  9. 153
      src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPad.cs
  10. 31
      src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadContent.xaml
  11. 105
      src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadToolbarCommands.cs
  12. 41
      src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml
  13. 241
      src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml.cs
  14. 127
      src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkFolderNode.cs
  15. 146
      src/Main/Base/Project/Src/Bookmarks/Pad/Nodes/BookmarkNode.cs
  16. 5
      src/Main/Base/Project/Src/Bookmarks/SDBookmark.cs
  17. 26
      src/Main/Base/Project/Src/Commands/DebugCommands.cs
  18. 12
      src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs

4
src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.csproj

@ -112,9 +112,6 @@ @@ -112,9 +112,6 @@
<Compile Include="Pads\Commands\SelectLanguageCommand.cs" />
<Compile Include="Pads\Commands\WatchPadCommands.cs" />
<Compile Include="Pads\Common\AutoCompleteTextBox.cs" />
<Compile Include="Pads\Common\ConditionCell.xaml.cs">
<DependentUpon>ConditionCell.xaml</DependentUpon>
</Compile>
<Compile Include="Pads\MemoryPad.cs" />
<Compile Include="Pads\ParallelPad\DrawSurface.xaml.cs">
<DependentUpon>DrawSurface.xaml</DependentUpon>
@ -343,7 +340,6 @@ @@ -343,7 +340,6 @@
<Page Include="Options\DebuggingOptionsPanel.xaml" />
<Page Include="Pads\CallStackPad.xaml" />
<Page Include="Pads\Common\CommonResources.xaml" />
<Page Include="Pads\Common\ConditionCell.xaml" />
<Page Include="Pads\ParallelPad\DrawSurface.xaml" />
<Page Include="Pads\ParallelPad\ThreadStack.xaml" />
<Page Include="Service\EditBreakpointScriptWindow.xaml" />

45
src/AddIns/Debugger/Debugger.AddIn/Pads/BreakPointsPad.cs

@ -19,26 +19,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -19,26 +19,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public BreakPointsPad()
{
myPanel.Children.Add(CreateToolBar());
var res = new CommonResources();
res.InitializeComponent();
CreateColumns();
}
Grid grid = (Grid)this.Control;
ToolBar toolbar = ToolBarService.CreateToolBar(grid, this, "/SharpDevelop/Pads/BreakpointPad/Toolbar");
grid.Children.Add(toolbar);
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}");
// 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 @@ -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);
}
}
}

31
src/AddIns/Debugger/Debugger.AddIn/Pads/Common/CommonResources.xaml

@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:tv="http://icsharpcode.net/sharpdevelop/treeview"
>
<!-- Local Variables Pad and Watch Pad -->
<tv:SharpGridView x:Key="variableGridView">
<GridView.Columns>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.NameColumn}" Width="400">
@ -34,4 +36,33 @@ @@ -34,4 +36,33 @@
</GridViewColumn>
</GridView.Columns>
</tv:SharpGridView>
<!-- Breakpoints Pad -->
<GridView x:Key="breakpointsGridView">
<GridViewColumn Header="" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsEnabled, Mode=TwoWay}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{core:Localize MainWindow.Windows.BookmarkPad.LocationText}" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageSource}" Margin="1, 1, 5, 1" />
<TextBlock Text="{Binding FileNameAndLineNumber}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.Conditional.Breakpoints.ConditionalColumnHeader}" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:AutoCompleteTextBox Text="{Binding Condition}" MinWidth="100" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ResourceDictionary>

22
src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml

@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
<UserControl x:Class="Debugger.AddIn.Pads.Controls.ConditionCell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:SDGui="clr-namespace:ICSharpCode.SharpDevelop.Gui;assembly=ICSharpCode.SharpDevelop"
xmlns:local="clr-namespace:Debugger.AddIn.Pads.Controls">
<UserControl.Resources>
<DataTemplate x:Key="ConditionCellTemplate">
<Grid HorizontalAlignment="Stretch">
<local:ConditionCell
CommandText="{Binding Path=Condition, UpdateSourceTrigger=LostFocus}"
Tag="{Binding Path=Tag, Mode=TwoWay}"/>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="200"/>
</Grid.ColumnDefinitions>
<ContentPresenter
Name="ConsolePanel" />
</Grid>
</UserControl>

196
src/AddIns/Debugger/Debugger.AddIn/Pads/Common/ConditionCell.xaml.cs

@ -1,196 +0,0 @@ @@ -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#");
}
}
/// <summary>
/// Gets/sets the command text displayed at the command prompt.
/// </summary>
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();
}
}
}

4
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -1108,12 +1108,12 @@ @@ -1108,12 +1108,12 @@
<ToolbarItem id = "DeleteMark"
icon = "Icons.16x16.DeleteIcon"
tooltip = "${res:MainWindow.Windows.BookmarkPad.DeleteMark.ToolTip}"
class = "ICSharpCode.SharpDevelop.Project.Commands.DeleteBreakpointCommand"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.DeleteMark"/>
<ToolbarItem id = "EnableDisableSeparator" type = "Separator" />
<ToolbarItem id = "DeleteAllBreakpoints"
icon = "Bookmarks.DeleteAllBreakpoints"
tooltip = "${res:XML.MainMenu.DebugMenu.RemoveAllBreakpoints}"
class = "ICSharpCode.SharpDevelop.Project.Commands.RemoveAllBreakpointsCommand"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.DeleteAllMarks"/>
</Path>
<!-- end toolbars -->

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

@ -96,9 +96,6 @@ @@ -96,9 +96,6 @@
<Compile Include="..\..\ICSharpCode.SharpDevelop.BuildWorker\ExtendedBinaryReader.cs">
<Link>Src\Project\MSBuildEngine\ExtendedBinaryReader.cs</Link>
</Compile>
<Compile Include="Src\Bookmarks\Pad\Controls\ListViewPad.xaml.cs">
<DependentUpon>ListViewPad.xaml</DependentUpon>
</Compile>
<Compile Include="Src\Commands\SharpDevelopRoutedCommands.cs" />
<Compile Include="Src\Editor\AddInHighlightingResource.cs" />
<Compile Include="Src\Editor\AvalonEdit\AvalonEditDocumentAdapter.cs" />
@ -700,8 +697,6 @@ @@ -700,8 +697,6 @@
<Compile Include="Src\Bookmarks\BookmarkBase.cs" />
<Compile Include="Src\Bookmarks\Commands\MenuCommands.cs" />
<Compile Include="Src\Bookmarks\IBookmarkMargin.cs" />
<Compile Include="Src\Bookmarks\Pad\Nodes\BookmarkFolderNode.cs" />
<Compile Include="Src\Bookmarks\Pad\Nodes\BookmarkNode.cs" />
<Compile Include="Src\Bookmarks\Pad\BookmarkPad.cs" />
<Compile Include="Src\Bookmarks\Pad\BookmarkPadToolbarCommands.cs" />
<Compile Include="Src\Bookmarks\SDBookmark.cs" />
@ -871,7 +866,7 @@ @@ -871,7 +866,7 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Page Include="Src\Bookmarks\Pad\Controls\ListViewPad.xaml" />
<Page Include="Src\Bookmarks\Pad\BookmarkPadContent.xaml" />
<Page Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\TaskListOptionsl.xaml" />
<Page Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\BuildEvents.xaml" />
<Page Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\DebugOptions.xaml" />
@ -911,7 +906,6 @@ @@ -911,7 +906,6 @@
<Folder Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference" />
<Folder Include="Src\Project\Behaviors" />
<Folder Include="themes" />
<Folder Include="Src\Bookmarks\Pad\Controls" />
<Folder Include="Src\Editor\AvalonEdit" />
<Folder Include="Src\Editor\CodeCompletion" />
<Folder Include="Src\Editor\Commands" />

8
src/Main/Base/Project/Src/Bookmarks/BookmarkBase.cs

@ -1,11 +1,13 @@ @@ -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 @@ -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)
{
}

153
src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPad.cs

@ -3,12 +3,11 @@ @@ -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 @@ -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<ListViewPadItemModel> 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 @@ -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 virtual bool ShowBookmarkInThisPad(SDBookmark mark)
{
return mark.IsVisibleInBookmarkPad && !(mark is BreakpointBookmark);
}
protected abstract bool ShowBookmarkInThisPad(SDBookmark mark);
protected virtual void OnItemActivated(object sender, EventArgs e)
protected virtual void OnItemActivated(SDBookmark bm)
{
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);
}
}
}

31
src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadContent.xaml

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Grid
x:Class="ICSharpCode.SharpDevelop.Bookmarks.BookmarkPadContent"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ListView
Grid.Row="1"
Name="listView"
x:FieldModifier="public">
<ListView.View>
<GridView>
<GridViewColumn Header="{core:Localize MainWindow.Windows.BookmarkPad.LocationText}" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageSource}" Margin="1, 1, 5, 1" />
<TextBlock Text="{Binding FileNameAndLineNumber}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>

105
src/Main/Base/Project/Src/Bookmarks/Pad/BookmarkPadToolbarCommands.cs

@ -7,116 +7,65 @@ using System.Linq; @@ -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);
}
}
}
/// <summary>
/// Deletes all <see cref="BookmarkNode" />s in the BookMarkPad.
/// </summary>
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<SDBookmark>().ToList()) {
BookmarkManager.RemoveMark(bm);
}
}
}
/// <summary>
/// Deletes the currently selected <see cref="BookmarkNode" /> or <see cref="BookmarkFolderNode" />
/// </summary>
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<BreakpointBookmark>().Any(bp => bp.IsEnabled);
foreach (var bp in pad.Items.OfType<BreakpointBookmark>()) {
bp.IsEnabled = !anyEnabled;
}
}
}
}

41
src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml

@ -1,41 +0,0 @@ @@ -1,41 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls.ListViewPad" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ICSharpCode.SharpDevelop.Bookmarks.Pad.Controls" xmlns:core="http://icsharpcode.net/sharpdevelop/core"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.Resources>
<DataTemplate
x:Key="CheckBoxTemplate">
<CheckBox
IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" />
</DataTemplate>
<DataTemplate
x:Key="InformationTemplate">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Path=Image, UpdateSourceTrigger=PropertyChanged}" Margin="1, 1, 5, 1" />
<TextBlock Text="{Binding Path=Location}" />
</StackPanel>
</DataTemplate>
</Grid.Resources>
<ListView
Name="MyListView"
ItemsSource="{Binding ItemCollection}">
<ListView.View>
<GridView>
<GridViewColumn
Header=""
Width="Auto"
CellTemplate="{StaticResource CheckBoxTemplate}" />
<GridViewColumn
Header="{core:Localize MainWindow.Windows.BookmarkPad.LocationText}"
Width="Auto"
CellTemplate="{StaticResource InformationTemplate}" />
<GridViewColumn
Header="{core:Localize MainWindow.Windows.Debug.CallStack.Language}"
Width="Auto"
DisplayMemberBinding="{Binding Path=Language, UpdateSourceTrigger=PropertyChanged}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</UserControl>

241
src/Main/Base/Project/Src/Bookmarks/Pad/Controls/ListViewPad.xaml.cs

@ -1,241 +0,0 @@ @@ -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
{
/// <summary>
/// ListViewPad inside WPF pads.
/// </summary>
public sealed partial class ListViewPad : UserControl
{
ObservableCollection<ListViewPadItemModel> itemCollection = new ObservableCollection<ListViewPadItemModel>();
public ObservableCollection<ListViewPadItemModel> 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);
}
/// <summary>
/// Indexes from end to start.
/// </summary>
/// <param name="columnIndex"></param>
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));
}
}
}
}

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

@ -1,127 +0,0 @@ @@ -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
{
/// <summary>
/// Description of SearchFolderNode.
/// </summary>
public class BookmarkFolderNode : ExtFolderNode
{
List<SDBookmark> marks = new List<SDBookmark>();
string fileName;
string fileNameText;
string occurences;
Image icon;
public List<SDBookmark> 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);
}
}
}
}
}

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

@ -1,146 +0,0 @@ @@ -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
{
/// <summary>
/// ExtTreeNode representing a bookmark.
/// </summary>
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)
// );
}
}*/
}
}

5
src/Main/Base/Project/Src/Bookmarks/SDBookmark.cs

@ -3,6 +3,7 @@ @@ -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 @@ -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)

26
src/Main/Base/Project/Src/Commands/DebugCommands.cs

@ -8,7 +8,6 @@ using System.Windows.Forms; @@ -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 @@ -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()

12
src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs

@ -27,6 +27,8 @@ namespace ICSharpCode.SharpDevelop.Debugging @@ -27,6 +27,8 @@ namespace ICSharpCode.SharpDevelop.Debugging
string condition;
string scriptLanguage;
public event EventHandler<EventArgs> ConditionChanged;
public string ScriptLanguage {
get { return scriptLanguage; }
set { scriptLanguage = value; }
@ -34,7 +36,15 @@ namespace ICSharpCode.SharpDevelop.Debugging @@ -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 {

Loading…
Cancel
Save