Browse Source

Properly restore all open panes.

pull/1820/head
Siegfried Pammer 6 years ago
parent
commit
a416566091
  1. 12
      ILSpy/Docking/DockLayoutSettings.cs
  2. 35
      ILSpy/Docking/DockWorkspace.cs
  3. 4
      ILSpy/Docking/PaneTemplateSelector.cs
  4. 15
      ILSpy/MainWindow.xaml.cs

12
ILSpy/Docking/DockLayoutSettings.cs

@ -51,9 +51,17 @@ namespace ICSharpCode.ILSpy.Docking
{ {
if (!Valid) if (!Valid)
rawSettings = "<LayoutRoot />"; rawSettings = "<LayoutRoot />";
try {
Deserialize(rawSettings);
} catch (Exception) {
Deserialize("<LayoutRoot />");
}
using (StringReader reader = new StringReader(rawSettings)) { void Deserialize(string settings)
serializer.Deserialize(reader); {
using (StringReader reader = new StringReader(settings)) {
serializer.Deserialize(reader);
}
} }
} }

35
ILSpy/Docking/DockWorkspace.cs

@ -25,6 +25,8 @@ using System.Threading.Tasks;
using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.ILSpy.TextView; using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.ViewModels; using ICSharpCode.ILSpy.ViewModels;
using Xceed.Wpf.AvalonDock.Layout;
using Xceed.Wpf.AvalonDock.Layout.Serialization;
namespace ICSharpCode.ILSpy.Docking namespace ICSharpCode.ILSpy.Docking
{ {
@ -67,6 +69,39 @@ namespace ICSharpCode.ILSpy.Docking
} }
} }
internal void LayoutSerializationCallback(object sender, LayoutSerializationCallbackEventArgs e)
{
switch (e.Model) {
case LayoutAnchorable la:
switch (la.ContentId) {
case AssemblyListPaneModel.PaneContentId:
e.Content = AssemblyListPaneModel.Instance;
break;
case SearchPaneModel.PaneContentId:
e.Content = SearchPaneModel.Instance;
break;
case AnalyzerPaneModel.PaneContentId:
e.Content = AnalyzerPaneModel.Instance;
break;
#if DEBUG
case DebugStepsPaneModel.PaneContentId:
e.Content = DebugStepsPaneModel.Instance;
break;
#endif
default:
e.Cancel = true;
break;
}
if (!e.Cancel) {
ToolPanes.Add((ToolPaneModel)e.Content);
}
break;
default:
e.Cancel = true;
break;
}
}
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{ {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

4
ILSpy/Docking/PaneTemplateSelector.cs

@ -36,6 +36,10 @@ namespace ICSharpCode.ILSpy.Docking
public override DataTemplate SelectTemplate(object item, DependencyObject container) public override DataTemplate SelectTemplate(object item, DependencyObject container)
{ {
if (item == null) {
return base.SelectTemplate(item, container);
}
return Mappings.FirstOrDefault(m => m.Type == item.GetType())?.Template return Mappings.FirstOrDefault(m => m.Type == item.GetType())?.Template
?? base.SelectTemplate(item, container); ?? base.SelectTemplate(item, container);
} }

15
ILSpy/MainWindow.xaml.cs

@ -126,7 +126,13 @@ namespace ICSharpCode.ILSpy
InitializeComponent(); InitializeComponent();
sessionSettings.DockLayout.Deserialize(new XmlLayoutSerializer(DockManager)); XmlLayoutSerializer serializer = new XmlLayoutSerializer(DockManager);
serializer.LayoutSerializationCallback += DockWorkspace.Instance.LayoutSerializationCallback;
try {
sessionSettings.DockLayout.Deserialize(serializer);
} finally {
serializer.LayoutSerializationCallback -= DockWorkspace.Instance.LayoutSerializationCallback;
}
sessionSettings.FilterSettings.PropertyChanged += filterSettings_PropertyChanged; sessionSettings.FilterSettings.PropertyChanged += filterSettings_PropertyChanged;
@ -462,8 +468,11 @@ 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.Documents.Add(new DecompiledDocumentModel() {
DockWorkspace.Instance.Documents.Add(new DecompiledDocumentModel() { IsCloseable = false, Language = CurrentLanguage, LanguageVersion = CurrentLanguageVersion }); 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;

Loading…
Cancel
Save