Browse Source

fix item 5 of #553: there should be a "Copy" menu item in the AvalonEdit's popup menu among the "Toggle Folding" menu items

- add proper file header and correct indentation in FoldingCommands.cs
pull/569/head
Siegfried Pammer 11 years ago
parent
commit
ca1dba0e92
  1. 1
      ILSpy/ILSpy.csproj
  2. 44
      ILSpy/TextView/EditorCommands.cs
  3. 152
      ILSpy/TextView/FoldingCommands.cs

1
ILSpy/ILSpy.csproj

@ -180,6 +180,7 @@
<Compile Include="Commands\SimpleCommand.cs" /> <Compile Include="Commands\SimpleCommand.cs" />
<Compile Include="SearchStrategies.cs" /> <Compile Include="SearchStrategies.cs" />
<Compile Include="TaskHelper.cs" /> <Compile Include="TaskHelper.cs" />
<Compile Include="TextView\EditorCommands.cs" />
<Compile Include="TextView\FoldingCommands.cs" /> <Compile Include="TextView\FoldingCommands.cs" />
<Compile Include="TreeNodes\Analyzer\AnalyzeContextMenuEntry.cs" /> <Compile Include="TreeNodes\Analyzer\AnalyzeContextMenuEntry.cs" />
<Compile Include="TreeNodes\Analyzer\AnalyzedAssemblyTreeNode.cs" /> <Compile Include="TreeNodes\Analyzer\AnalyzedAssemblyTreeNode.cs" />

44
ILSpy/TextView/EditorCommands.cs

@ -0,0 +1,44 @@
// Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ICSharpCode.ILSpy.TextView
{
[ExportContextMenuEntryAttribute(Header = "Copy", Category = "Editor")]
internal sealed class CopyContextMenuEntry : IContextMenuEntry
{
public bool IsVisible(TextViewContext context)
{
return context.TextView != null;
}
public bool IsEnabled(TextViewContext context)
{
return context.TextView != null && context.TextView.textEditor.SelectionLength > 0;
}
public void Execute(TextViewContext context)
{
context.TextView.textEditor.Copy();
}
}
}

152
ILSpy/TextView/FoldingCommands.cs

@ -1,11 +1,21 @@
/* // Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team
* Created by SharpDevelop. //
* User: Ronny Klier // Permission is hereby granted, free of charge, to any person obtaining a copy of this
* Date: 24.05.2012 // software and associated documentation files (the "Software"), to deal in the Software
* Time: 23:44 // without restriction, including without limitation the rights to use, copy, modify, merge,
* // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
* To change this template use Tools | Options | Coding | Edit Standard Headers. // to whom the Software is furnished to do so, subject to the following conditions:
*/ //
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -15,76 +25,76 @@ using ICSharpCode.AvalonEdit.Folding;
namespace ICSharpCode.ILSpy.TextView namespace ICSharpCode.ILSpy.TextView
{ {
[ExportContextMenuEntryAttribute(Header = "Toggle All Folding", Category = "Folding")] [ExportContextMenuEntryAttribute(Header = "Toggle All Folding", Category = "Folding")]
internal sealed class ToggleAllContextMenuEntry : IContextMenuEntry internal sealed class ToggleAllContextMenuEntry : IContextMenuEntry
{ {
public bool IsVisible(TextViewContext context) public bool IsVisible(TextViewContext context)
{ {
return context.TextView != null; return context.TextView != null;
} }
public bool IsEnabled(TextViewContext context) public bool IsEnabled(TextViewContext context)
{ {
return context.TextView != null && context.TextView.FoldingManager != null; return context.TextView != null && context.TextView.FoldingManager != null;
} }
public void Execute(TextViewContext context) public void Execute(TextViewContext context)
{ {
if (null == context.TextView) if (null == context.TextView)
return; return;
FoldingManager foldingManager = context.TextView.FoldingManager; FoldingManager foldingManager = context.TextView.FoldingManager;
if (null == foldingManager) if (null == foldingManager)
return; return;
bool doFold = true; bool doFold = true;
foreach (FoldingSection fm in foldingManager.AllFoldings) { foreach (FoldingSection fm in foldingManager.AllFoldings) {
if (fm.IsFolded) { if (fm.IsFolded) {
doFold = false; doFold = false;
break; break;
} }
} }
foreach (FoldingSection fm in foldingManager.AllFoldings) { foreach (FoldingSection fm in foldingManager.AllFoldings) {
fm.IsFolded = doFold; fm.IsFolded = doFold;
} }
} }
} }
[ExportContextMenuEntryAttribute(Header = "Toggle Folding", Category = "Folding")] [ExportContextMenuEntryAttribute(Header = "Toggle Folding", Category = "Folding")]
internal sealed class ToggleContextMenuEntry : IContextMenuEntry internal sealed class ToggleContextMenuEntry : IContextMenuEntry
{ {
public bool IsVisible(TextViewContext context) public bool IsVisible(TextViewContext context)
{ {
return context.TextView != null; return context.TextView != null;
} }
public bool IsEnabled(TextViewContext context) public bool IsEnabled(TextViewContext context)
{ {
return context.TextView != null && context.TextView.FoldingManager != null; return context.TextView != null && context.TextView.FoldingManager != null;
} }
public void Execute(TextViewContext context) public void Execute(TextViewContext context)
{ {
var textView = context.TextView; var textView = context.TextView;
if (null == textView) if (null == textView)
return; return;
var editor = textView.textEditor; var editor = textView.textEditor;
FoldingManager foldingManager = context.TextView.FoldingManager; FoldingManager foldingManager = context.TextView.FoldingManager;
if (null == foldingManager) if (null == foldingManager)
return; return;
// TODO: or use Caret if position is not given? // TODO: or use Caret if position is not given?
var posBox = context.Position; var posBox = context.Position;
if (null == posBox) if (null == posBox)
return; return;
TextViewPosition pos = posBox.Value; TextViewPosition pos = posBox.Value;
// look for folding on this line: // look for folding on this line:
FoldingSection folding = foldingManager.GetNextFolding(editor.Document.GetOffset(pos.Line, 1)); FoldingSection folding = foldingManager.GetNextFolding(editor.Document.GetOffset(pos.Line, 1));
if (folding == null || editor.Document.GetLineByOffset(folding.StartOffset).LineNumber != pos.Line) { if (folding == null || editor.Document.GetLineByOffset(folding.StartOffset).LineNumber != pos.Line) {
// no folding found on current line: find innermost folding containing the mouse position // no folding found on current line: find innermost folding containing the mouse position
folding = foldingManager.GetFoldingsContaining(editor.Document.GetOffset(pos.Line, pos.Column)).LastOrDefault(); folding = foldingManager.GetFoldingsContaining(editor.Document.GetOffset(pos.Line, pos.Column)).LastOrDefault();
} }
if (folding != null) { if (folding != null) {
folding.IsFolded = !folding.IsFolded; folding.IsFolded = !folding.IsFolded;
} }
} }
} }
} }

Loading…
Cancel
Save