diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs index 47f039dc3e..fca39fbbae 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -55,12 +55,19 @@ namespace ICSharpCode.SharpDevelop.Gui public void Attach(IWorkbench workbench) { + if (this.workbench != null) + throw new InvalidOperationException("Can attach only once!"); this.workbench = (WpfWorkbench)workbench; this.workbench.mainContent.Content = dockingManager; + foreach (PadDescriptor pd in workbench.PadContentCollection) { + ShowPad(pd); + } + LoadConfiguration(); } public void Detach() { + StoreConfiguration(); this.workbench.mainContent.Content = null; } @@ -161,7 +168,6 @@ namespace ICSharpCode.SharpDevelop.Gui public void LoadConfiguration() { - return; try { if (File.Exists(LayoutConfiguration.CurrentLayoutFileName)) { dockingManager.RestoreLayout(LayoutConfiguration.CurrentLayoutFileName); diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs index a7e08e615a..192368b7a6 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs @@ -8,6 +8,7 @@ using System; using AvalonDock; using ICSharpCode.Core; +using System.Windows; namespace ICSharpCode.SharpDevelop.Gui { @@ -17,13 +18,27 @@ namespace ICSharpCode.SharpDevelop.Gui sealed class AvalonPadContent : DockableContent { PadDescriptor descriptor; + IPadContent content; public AvalonPadContent(PadDescriptor descriptor) { this.descriptor = descriptor; + this.Name = descriptor.Class.Replace('.', '_'); this.Title = StringParser.Parse(descriptor.Title); - this.Content = descriptor.Class; + this.Content = "Placeholder for " + descriptor.Class; + + this.Loaded += AvalonPadContent_Loaded; + } + + void AvalonPadContent_Loaded(object sender, RoutedEventArgs e) + { + this.Loaded -= AvalonPadContent_Loaded; + // the first time the pad is "loaded" + content = descriptor.PadContent; + if (content != null) { + this.Content = AvalonWorkbenchWindow.WrapContent(content.Content); + } } } } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs index 2d24cf27a3..fc2417afd1 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs @@ -177,7 +177,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - static object WrapContent(object content) + internal static object WrapContent(object content) { if (content is System.Windows.Forms.Control) { return new System.Windows.Forms.Integration.WindowsFormsHost { diff --git a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs index fed4d34893..1446641b27 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs @@ -126,7 +126,9 @@ namespace ICSharpCode.SharpDevelop.Gui //workbenchLayout.ActiveWorkbenchWindowChanged -= OnActiveWindowChanged; workbenchLayout.Detach(); } - value.Attach(this); + if (value != null) { + value.Attach(this); + } workbenchLayout = value; //workbenchLayout.ActiveWorkbenchWindowChanged += OnActiveWindowChanged; //OnActiveWindowChanged(null, null); @@ -209,5 +211,13 @@ namespace ICSharpCode.SharpDevelop.Gui this.Height = memento.Get("Height", 400.0); this.WindowState = memento.Get("WindowState", System.Windows.WindowState.Maximized); } + + protected override void OnClosing(CancelEventArgs e) + { + base.OnClosing(e); + if (!e.Cancel) { + this.WorkbenchLayout = null; + } + } } }