Browse Source

Fold the result "Open Explorer" button into output extensions

Six command outputs ended with the same AddButton(OpenExplorer ...) +
WriteLine() tail. Add AddOpenFolderButton / AddRevealFileButton on
ISmartTextOutput and route each site through them. This also drops the
no-op `isFile ? path : path` in the package-extraction output, which now
picks the reveal vs open helper directly.

Assisted-by: Claude:claude-opus-4-8:Claude Code
pull/3755/head
Siegfried Pammer 4 weeks ago
parent
commit
0b0c172afe
  1. 3
      ILSpy/Commands/CreateDiagramContextMenuEntry.cs
  2. 7
      ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs
  3. 3
      ILSpy/Commands/PdbGenerator.cs
  4. 4
      ILSpy/Commands/ProjectExport.cs
  5. 3
      ILSpy/Commands/SaveCodeHelper.cs
  6. 3
      ILSpy/Commands/SolutionExport.cs
  7. 23
      ILSpy/SmartTextOutputExtensions.cs

3
ILSpy/Commands/CreateDiagramContextMenuEntry.cs

@ -99,8 +99,7 @@ namespace ILSpy.Commands
output.WriteLine(); output.WriteLine();
output.WriteLine(); output.WriteLine();
var diagramHtml = Path.Combine(outputFolder, "index.html"); var diagramHtml = Path.Combine(outputFolder, "index.html");
output.AddButton(null, Resources.OpenExplorer, (_, _) => ShellHelper.RevealFile(diagramHtml)); output.AddRevealFileButton(diagramHtml);
output.WriteLine();
return output; return output;
} }

7
ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs

@ -133,9 +133,10 @@ namespace ILSpy.Commands
output.Write(string.Format(Resources.GenerationCompleteInSeconds, stopwatch.Elapsed.TotalSeconds.ToString("F1"))); output.Write(string.Format(Resources.GenerationCompleteInSeconds, stopwatch.Elapsed.TotalSeconds.ToString("F1")));
output.WriteLine(); output.WriteLine();
output.WriteLine(); output.WriteLine();
var openTarget = isFile ? path : path; if (isFile)
output.AddButton(null, Resources.OpenExplorer, (_, _) => { if (isFile) ShellHelper.RevealFile(openTarget); else ShellHelper.OpenFolder(openTarget); }); output.AddRevealFileButton(path);
output.WriteLine(); else
output.AddOpenFolderButton(path);
return output; return output;
}, token)).ConfigureAwait(true); }, token)).ConfigureAwait(true);
} }

3
ILSpy/Commands/PdbGenerator.cs

@ -136,8 +136,7 @@ namespace ILSpy.Commands
output.Write(string.Format(Resources.GenerationCompleteInSeconds, totalWatch.Elapsed.TotalSeconds.ToString("F1"))); output.Write(string.Format(Resources.GenerationCompleteInSeconds, totalWatch.Elapsed.TotalSeconds.ToString("F1")));
output.WriteLine(); output.WriteLine();
output.WriteLine(); output.WriteLine();
output.AddButton(null, Resources.OpenExplorer, (_, _) => ShellHelper.OpenFolder(folder)); output.AddOpenFolderButton(folder);
output.WriteLine();
return output; return output;
}, token)).ConfigureAwait(true); }, token)).ConfigureAwait(true);
} }

4
ILSpy/Commands/ProjectExport.cs

@ -86,9 +86,7 @@ namespace ILSpy.Commands
o.WriteLine(); o.WriteLine();
if (result.Success && Directory.Exists(options.OutputDirectory)) if (result.Success && Directory.Exists(options.OutputDirectory))
{ {
o.AddButton(null, ICSharpCode.ILSpy.Properties.Resources.OpenExplorer, o.AddOpenFolderButton(options.OutputDirectory);
(_, _) => ShellHelper.OpenFolder(options.OutputDirectory));
o.WriteLine();
} }
return o; return o;
}); });

3
ILSpy/Commands/SaveCodeHelper.cs

@ -81,8 +81,7 @@ namespace ILSpy.Commands
o.WriteLine(); o.WriteLine();
if (Path.GetDirectoryName(path) is { Length: > 0 } directory) if (Path.GetDirectoryName(path) is { Length: > 0 } directory)
{ {
o.AddButton(null, Resources.OpenExplorer, (_, _) => ShellHelper.OpenFolder(directory)); o.AddOpenFolderButton(directory);
o.WriteLine();
} }
return o; return o;
}, token), node.Text?.ToString()).ConfigureAwait(true); }, token), node.Text?.ToString()).ConfigureAwait(true);

3
ILSpy/Commands/SolutionExport.cs

@ -82,8 +82,7 @@ namespace ILSpy.Commands
o.WriteLine(); o.WriteLine();
if (result.Success && Path.GetDirectoryName(path) is { Length: > 0 } directory) if (result.Success && Path.GetDirectoryName(path) is { Length: > 0 } directory)
{ {
o.AddButton(null, Resources.OpenExplorer, (_, _) => ShellHelper.OpenFolder(directory)); o.AddOpenFolderButton(directory);
o.WriteLine();
} }
return o; return o;
}).ConfigureAwait(true); }).ConfigureAwait(true);

23
ILSpy/SmartTextOutputExtensions.cs

@ -25,12 +25,35 @@ using Avalonia.Interactivity;
using Avalonia.Layout; using Avalonia.Layout;
using Avalonia.Media; using Avalonia.Media;
using ICSharpCode.ILSpy.Properties;
using ILSpy.TextView; using ILSpy.TextView;
using ILSpy.Util;
namespace ILSpy namespace ILSpy
{ {
public static class SmartTextOutputExtensions public static class SmartTextOutputExtensions
{ {
/// <summary>
/// Appends the standard "Open Explorer" result button that opens <paramref name="folder"/> in
/// the OS file manager, followed by a blank line. Shared tail of the export / save / PDB outputs.
/// </summary>
public static void AddOpenFolderButton(this ISmartTextOutput output, string folder)
{
output.AddButton(null, Resources.OpenExplorer, (_, _) => ShellHelper.OpenFolder(folder));
output.WriteLine();
}
/// <summary>
/// Appends an "Open Explorer" result button that reveals <paramref name="file"/> in the OS file
/// manager (selecting it where supported), followed by a blank line.
/// </summary>
public static void AddRevealFileButton(this ISmartTextOutput output, string file)
{
output.AddButton(null, Resources.OpenExplorer, (_, _) => ShellHelper.RevealFile(file));
output.WriteLine();
}
public static void AddButton(this ISmartTextOutput output, IImage? icon, string text, EventHandler<RoutedEventArgs> click) public static void AddButton(this ISmartTextOutput output, IImage? icon, string text, EventHandler<RoutedEventArgs> click)
{ {
ArgumentNullException.ThrowIfNull(output); ArgumentNullException.ThrowIfNull(output);

Loading…
Cancel
Save