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
private static void DecompileNodes(params ILSpyTreeNode[] nodes) private static void DecompileNodes(params ILSpyTreeNode[] nodes)
{ {
var title = string.Join(", ", nodes.Select(x => x.ToString())); 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(); DockWorkspace.Instance.ActiveDocument = DockWorkspace.Instance.Documents.Last();
MainWindow.Instance.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (Action)delegate { MainWindow.Instance.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (Action)delegate {
DockWorkspace.Instance.GetTextView().DecompileAsync(MainWindow.Instance.CurrentLanguage, nodes, new DecompilationOptions()); DockWorkspace.Instance.GetTextView().DecompileAsync(MainWindow.Instance.CurrentLanguage, nodes, new DecompilationOptions());

25
ILSpy/Docking/DockWorkspace.cs

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Highlighting;
@ -11,6 +12,8 @@ namespace ICSharpCode.ILSpy.Docking
{ {
public class DockWorkspace : INotifyPropertyChanged public class DockWorkspace : INotifyPropertyChanged
{ {
private SessionSettings sessionSettings;
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
public static DockWorkspace Instance { get; } = new DockWorkspace(); public static DockWorkspace Instance { get; } = new DockWorkspace();
@ -37,12 +40,16 @@ namespace ICSharpCode.ILSpy.Docking
set { set {
if (_activeDocument != value) { if (_activeDocument != value) {
_activeDocument = value; _activeDocument = value;
if (value is DecompiledDocumentModel ddm) {
this.sessionSettings.FilterSettings.Language = ddm.Language;
this.sessionSettings.FilterSettings.LanguageVersion = ddm.LanguageVersion;
}
RaisePropertyChanged(nameof(ActiveDocument)); RaisePropertyChanged(nameof(ActiveDocument));
} }
} }
} }
protected void RaisePropertyChanged(string propertyName) protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{ {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
} }
@ -71,5 +78,21 @@ namespace ICSharpCode.ILSpy.Docking
{ {
GetTextView().ShowNodes(output, nodes, highlighting); 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
SessionSettings = sessionSettings SessionSettings = sessionSettings
}; };
DockWorkspace.Instance.LoadSettings(sessionSettings);
InitializeComponent(); InitializeComponent();
sessionSettings.DockLayout.Deserialize(new XmlLayoutSerializer(DockManager)); sessionSettings.DockLayout.Deserialize(new XmlLayoutSerializer(DockManager));
@ -461,7 +463,7 @@ namespace ICSharpCode.ILSpy
void MainWindow_Loaded(object sender, RoutedEventArgs e) void MainWindow_Loaded(object sender, RoutedEventArgs e)
{ {
DockWorkspace.Instance.ToolPanes.Add(AssemblyListPaneModel.Instance); 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(); DockWorkspace.Instance.ActiveDocument = DockWorkspace.Instance.Documents.First();
ILSpySettings spySettings = this.spySettingsForMainWindow_Loaded; ILSpySettings spySettings = this.spySettingsForMainWindow_Loaded;

24
ILSpy/ViewModels/DocumentModel.cs

@ -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