Browse Source

Enable separate language (version) settings per document.

pull/1801/head
Siegfried Pammer 6 years ago
parent
commit
c84f220338
  1. 2
      ILSpy/Commands/DecompileInNewViewCommand.cs
  2. 25
      ILSpy/Docking/DockWorkspace.cs
  3. 4
      ILSpy/MainWindow.xaml.cs
  4. 24
      ILSpy/ViewModels/DocumentModel.cs

2
ILSpy/Commands/DecompileInNewViewCommand.cs

@ -55,7 +55,7 @@ namespace ICSharpCode.ILSpy.Commands @@ -55,7 +55,7 @@ namespace ICSharpCode.ILSpy.Commands
private static void DecompileNodes(params ILSpyTreeNode[] nodes)
{
var title = string.Join(", ", nodes.Select(x => x.ToString()));
DockWorkspace.Instance.Documents.Add(new ViewModels.DecompiledDocumentModel(title, title));
DockWorkspace.Instance.Documents.Add(new ViewModels.DecompiledDocumentModel(title, title) { Language = MainWindow.Instance.CurrentLanguage, LanguageVersion = MainWindow.Instance.CurrentLanguageVersion });
DockWorkspace.Instance.ActiveDocument = DockWorkspace.Instance.Documents.Last();
MainWindow.Instance.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (Action)delegate {
DockWorkspace.Instance.GetTextView().DecompileAsync(MainWindow.Instance.CurrentLanguage, nodes, new DecompilationOptions());

25
ILSpy/Docking/DockWorkspace.cs

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using ICSharpCode.AvalonEdit.Highlighting;
@ -11,6 +12,8 @@ namespace ICSharpCode.ILSpy.Docking @@ -11,6 +12,8 @@ namespace ICSharpCode.ILSpy.Docking
{
public class DockWorkspace : INotifyPropertyChanged
{
private SessionSettings sessionSettings;
public event PropertyChangedEventHandler PropertyChanged;
public static DockWorkspace Instance { get; } = new DockWorkspace();
@ -37,12 +40,16 @@ namespace ICSharpCode.ILSpy.Docking @@ -37,12 +40,16 @@ namespace ICSharpCode.ILSpy.Docking
set {
if (_activeDocument != value) {
_activeDocument = value;
if (value is DecompiledDocumentModel ddm) {
this.sessionSettings.FilterSettings.Language = ddm.Language;
this.sessionSettings.FilterSettings.LanguageVersion = ddm.LanguageVersion;
}
RaisePropertyChanged(nameof(ActiveDocument));
}
}
}
protected void RaisePropertyChanged(string propertyName)
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
@ -71,5 +78,21 @@ namespace ICSharpCode.ILSpy.Docking @@ -71,5 +78,21 @@ namespace ICSharpCode.ILSpy.Docking
{
GetTextView().ShowNodes(output, nodes, highlighting);
}
internal void LoadSettings(SessionSettings sessionSettings)
{
this.sessionSettings = sessionSettings;
sessionSettings.FilterSettings.PropertyChanged += FilterSettings_PropertyChanged;
}
private void FilterSettings_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (ActiveDocument is DecompiledDocumentModel ddm) {
if (e.PropertyName == "Language" || e.PropertyName == "LanguageVersion") {
ddm.Language = sessionSettings.FilterSettings.Language;
ddm.LanguageVersion = sessionSettings.FilterSettings.LanguageVersion;
}
}
}
}
}

4
ILSpy/MainWindow.xaml.cs

@ -122,6 +122,8 @@ namespace ICSharpCode.ILSpy @@ -122,6 +122,8 @@ namespace ICSharpCode.ILSpy
SessionSettings = sessionSettings
};
DockWorkspace.Instance.LoadSettings(sessionSettings);
InitializeComponent();
sessionSettings.DockLayout.Deserialize(new XmlLayoutSerializer(DockManager));
@ -461,7 +463,7 @@ namespace ICSharpCode.ILSpy @@ -461,7 +463,7 @@ namespace ICSharpCode.ILSpy
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
DockWorkspace.Instance.ToolPanes.Add(AssemblyListPaneModel.Instance);
DockWorkspace.Instance.Documents.Add(new DecompiledDocumentModel() { IsCloseable = false });
DockWorkspace.Instance.Documents.Add(new DecompiledDocumentModel() { IsCloseable = false, Language = CurrentLanguage, LanguageVersion = CurrentLanguageVersion });
DockWorkspace.Instance.ActiveDocument = DockWorkspace.Instance.Documents.First();
ILSpySettings spySettings = this.spySettingsForMainWindow_Loaded;

24
ILSpy/ViewModels/DocumentModel.cs

@ -36,5 +36,27 @@ namespace ICSharpCode.ILSpy.ViewModels @@ -36,5 +36,27 @@ namespace ICSharpCode.ILSpy.ViewModels
}
}
}
private Language language;
public Language Language {
get => language;
set {
if (language != value) {
language = value;
RaisePropertyChanged(nameof(Language));
}
}
}
private LanguageVersion languageVersion;
public LanguageVersion LanguageVersion {
get => languageVersion;
set {
if (languageVersion != value) {
languageVersion = value;
RaisePropertyChanged(nameof(LanguageVersion));
}
}
}
}
}
}
Loading…
Cancel
Save