diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogListPad.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogListPad.cs index faa71eef00..bee47ccfcc 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogListPad.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogListPad.cs @@ -45,7 +45,7 @@ namespace ICSharpCode.WixBinding } } - public override Control Control { + public override object Content { get { return setupDialogListView; } diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramViewContent.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramViewContent.cs index dd1e697556..e05b31c177 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramViewContent.cs +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassDiagramViewContent.cs @@ -164,7 +164,7 @@ namespace ClassDiagramAddin PadDescriptor padDesc = WorkbenchSingleton.Workbench.GetPad(typeof(ClassEditorPad)); if (padDesc != null) { - ((ClassEditor)padDesc.PadContent.Control).SetClass(cci.RepresentedClassType); + ((ClassEditor)padDesc.PadContent.Content).SetClass(cci.RepresentedClassType); } } } diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs index 6502b4f2a9..a32b39c93b 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs @@ -157,7 +157,7 @@ namespace ClassDiagramAddin /// /// The representing the pad /// - public override Control Control + public override object Content { get { return editor; } } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs index 8ec5025b6c..7468df1668 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs @@ -38,7 +38,7 @@ namespace ICSharpCode.XmlEditor /// /// The representing the pad. /// - public override Control Control { + public override object Content { get { return xPathQueryControl; } diff --git a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs index 54ad5f6aaa..b12882941a 100644 --- a/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs +++ b/src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoveragePad.cs @@ -38,7 +38,7 @@ namespace ICSharpCode.CodeCoverage } } - public override Control Control { + public override object Content { get { return codeCoverageControl; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs index d8c093c4f1..b82e38377e 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs @@ -58,7 +58,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads ColumnHeader name = new ColumnHeader(); ColumnHeader language = new ColumnHeader(); - public override Control Control { + public override object Content { get { return callStackList; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs index e0ffbf0e80..d00af96564 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs @@ -59,7 +59,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads ColumnHeader information = new ColumnHeader(); - public override Control Control { + public override object Content { get { return loadedModulesList; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs index 5846ec6fd7..9dc2bdc369 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs @@ -61,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads /// /// This is not used anywhere, but it is neccessary to be overridden in children of AbstractPadContent. /// - public override Control Control { + public override object Content { get { return localVarList; } diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs index e0a9a39920..735defea3e 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs @@ -56,7 +56,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads ColumnHeader priority = new ColumnHeader(); ColumnHeader breaked = new ColumnHeader(); - public override Control Control { + public override object Content { get { return runningThreadsList; } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs index 0e51d4c345..c1f943d942 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs @@ -43,7 +43,7 @@ namespace HtmlHelp2 private string debugPreElement = String.Empty; private bool enableDebugInfo = HtmlHelp2Environment.Config.DynamicHelpDebugInfos; - public override Control Control + public override object Content { get { return dynamicHelpBrowser; } } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs index e8278362da..93f8024686 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexPad.cs @@ -33,7 +33,7 @@ namespace HtmlHelp2 { MSHelp2IndexControl help2IndexControl; - public override Control Control + public override object Content { get { return help2IndexControl; } } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexResultsPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexResultsPad.cs index 9e4ed57701..8473f75cde 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexResultsPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/IndexResultsPad.cs @@ -32,7 +32,7 @@ namespace HtmlHelp2 ColumnHeader title = new ColumnHeader(); ColumnHeader location = new ColumnHeader(); - public override Control Control + public override object Content { get { return listView; } } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/SearchPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/SearchPad.cs index d0e44196e8..269cde3d23 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/SearchPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/SearchPad.cs @@ -47,7 +47,7 @@ namespace HtmlHelp2 Label label2 = new Label(); bool searchIsBusy; - public override Control Control + public override object Content { get { return mainPanel; } } diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs index f3e46ee6d1..7ca9db4770 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/TocPad.cs @@ -34,7 +34,7 @@ namespace HtmlHelp2 { MSHelp2TocControl help2TocControl; - public override Control Control + public override object Content { get { return help2TocControl; } } diff --git a/src/AddIns/Misc/ServerTools/ServerBrowserHost.cs b/src/AddIns/Misc/ServerTools/ServerBrowserHost.cs index e176c16aa2..1b8386b119 100644 --- a/src/AddIns/Misc/ServerTools/ServerBrowserHost.cs +++ b/src/AddIns/Misc/ServerTools/ServerBrowserHost.cs @@ -21,8 +21,8 @@ namespace ICSharpCode.ServerTools /// public class ServerBrowserHost : AbstractPadContent { - ElementHost ctl; - + ServerControl serverControl; + /// /// ServerBrowserTool hosts one or more TreeViews providing views of types /// of server. Currently it shows only relational database servers. @@ -30,17 +30,15 @@ namespace ICSharpCode.ServerTools public ServerBrowserHost() { LoggingService.Debug("Loading ServerBrowserHost"); - ctl = new ElementHost(); - ServerControl serverControl = new ServerControl(); - ctl.Child = serverControl; + serverControl = new ServerControl(); } /// /// The representing the pad /// - public override Control Control { + public override object Content { get { - return ctl; + return serverControl; } } @@ -57,7 +55,6 @@ namespace ICSharpCode.ServerTools /// public override void Dispose() { - ctl.Dispose(); } } } diff --git a/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs b/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs index c5ac7bb42b..5424dcc63f 100644 --- a/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs +++ b/src/AddIns/Misc/UnitTesting/Src/UnitTestsPad.cs @@ -73,7 +73,7 @@ namespace ICSharpCode.UnitTesting } } - public override Control Control { + public override object Content { get { return panel; } diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index eaa966e939..78911ccb22 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -124,6 +124,7 @@ + diff --git a/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs b/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs index 36e03c90a1..ca4f5f2e8e 100644 --- a/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs +++ b/src/Main/Base/Project/Src/Commands/MenuItemBuilders.cs @@ -493,7 +493,7 @@ namespace ICSharpCode.SharpDevelop.Commands this.padDescriptor = padDescriptor; this.Header = ICSharpCode.Core.Presentation.MenuService.ConvertLabel(StringParser.Parse(padDescriptor.Title)); if (!string.IsNullOrEmpty(padDescriptor.Icon)) { - this.Icon = PresentationResourceService.GetBitmapSource(padDescriptor.Icon); + this.Icon = PresentationResourceService.GetImage(padDescriptor.Icon); } if (padDescriptor.Shortcut != null) { this.InputGestureText = padDescriptor.Shortcut; diff --git a/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs b/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs index 9bc0fb133b..cf1c99c135 100644 --- a/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs +++ b/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs @@ -12,7 +12,7 @@ namespace ICSharpCode.SharpDevelop.Gui { public abstract class AbstractPadContent : IPadContent { - public abstract Control Control { + public abstract object Content { get; } @@ -23,12 +23,5 @@ namespace ICSharpCode.SharpDevelop.Gui public virtual void Dispose() { } - - public bool IsVisible { - get { - Control ctl = this.Control; - return ctl.Visible && ctl.Width > 0 && ctl.Height > 0; - } - } } } diff --git a/src/Main/Base/Project/Src/Gui/IPadContent.cs b/src/Main/Base/Project/Src/Gui/IPadContent.cs index 81acb12dd6..caa679dc34 100644 --- a/src/Main/Base/Project/Src/Gui/IPadContent.cs +++ b/src/Main/Base/Project/Src/Gui/IPadContent.cs @@ -17,9 +17,10 @@ namespace ICSharpCode.SharpDevelop.Gui public interface IPadContent : IDisposable { /// - /// Returns the Windows.Control for this pad. + /// This is the UI element for the view. + /// You can use both Windows.Forms and WPF controls. /// - Control Control { + object Content { get; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs index 405e641af6..2e3c9bce82 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs @@ -59,7 +59,7 @@ namespace ICSharpCode.SharpDevelop.Gui.ClassBrowser } } - public override Control Control { + public override object Content { get { return contentPanel; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs index 6482048b76..5bf6936679 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/CompilerMessageView/CompilerMessageView.cs @@ -92,7 +92,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public override Control Control { + public override object Content { get { return myPanel; } @@ -289,9 +289,9 @@ namespace ICSharpCode.SharpDevelop.Gui break; } } - if (!this.IsVisible) { - ActivateThisPad(); - } + //if (!this.IsVisible) { + // ActivateThisPad(); + //} } void SelectCategory(string categoryName, string text) diff --git a/src/Main/Base/Project/Src/Gui/Pads/DefinitionViewPad.cs b/src/Main/Base/Project/Src/Gui/Pads/DefinitionViewPad.cs index 1b4427b575..3dd38eefac 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/DefinitionViewPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/DefinitionViewPad.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Gui /// /// The representing the pad /// - public override Control Control { + public override object Content { get { return ctl; } @@ -73,7 +73,6 @@ namespace ICSharpCode.SharpDevelop.Gui void UpdateTick(ParserUpdateStepEventArgs e) { - if (!this.IsVisible) return; LoggingService.Debug("DefinitionViewPad.Update"); ResolveResult res = ResolveAtCaret(e); @@ -112,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Gui return ParserService.Resolve(expr, caret.Line + 1, caret.Column + 1, fileName, content); } catch (Exception ex) { disableDefinitionView = true; - this.Control.Visible = false; + ctl.Visible = false; MessageService.ShowError(ex, "Error resolving at " + (caret.Line + 1) + "/" + (caret.Column + 1) + ". DefinitionViewPad is disabled until you restart SharpDevelop."); return null; diff --git a/src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs index 4b16bee646..5fa0e1aee3 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ErrorList/ErrorListPad.cs @@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public override Control Control { + public override object Content { get { return contentPanel; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/FileScout.cs b/src/Main/Base/Project/Src/Gui/Pads/FileScout.cs index deba230b32..cb8102259e 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/FileScout.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/FileScout.cs @@ -325,7 +325,7 @@ namespace ICSharpCode.SharpDevelop.Gui public class FileScout : UserControl, IPadContent { - public Control Control { + public object Content { get { return this; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs index d6bed2e01d..a3aac0088f 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs @@ -63,7 +63,7 @@ namespace ICSharpCode.SharpDevelop.Project } } - public override Control Control { + public override object Content { get { return projectBrowserPanel; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs b/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs index 72415e86ec..f408a0571a 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs @@ -123,7 +123,7 @@ namespace ICSharpCode.SharpDevelop.Gui public static event EventHandler SelectedObjectChanged; public static event SelectedGridItemChangedEventHandler SelectedGridItemChanged; - public override Control Control { + public override object Content { get { return panel; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/SearchResultPad/SearchResultPanel.cs b/src/Main/Base/Project/Src/Gui/Pads/SearchResultPad/SearchResultPanel.cs index 9b890dd1c4..a2d8404d41 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/SearchResultPad/SearchResultPanel.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/SearchResultPad/SearchResultPanel.cs @@ -50,7 +50,7 @@ namespace SearchAndReplace string curPattern = null; IList curResults = null; - public override Control Control { + public override object Content { get { return myPanel; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs b/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs index e2cbc4dad4..37b5de294b 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public override Control Control { + public override object Content { get { return contentPanel; } diff --git a/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs index b56c1ab812..6d9afc08cc 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs @@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Gui Label noToolsAvailable = new Label(); Control child; - public override Control Control { + public override object Content { get { return panel; } 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 ea06fa9a2b..47f039dc3e 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -6,10 +6,13 @@ // using System; +using System.Collections.Generic; using System.IO; using System.Windows; -using AvalonDock; +using System.Windows.Controls; using System.Windows.Media.Imaging; + +using AvalonDock; using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Gui @@ -63,17 +66,69 @@ namespace ICSharpCode.SharpDevelop.Gui public void ShowPad(PadDescriptor content) { - throw new NotImplementedException(); + AvalonPadContent pad = new AvalonPadContent(content); + GetPane(Dock.Right).Items.Add(pad); + dockingManager.Show(pad, DockableContentState.Docked); + } + + DockablePane GetPane(Dock dockPosition) + { + List allPanes = new List(); + ListAllPanes(allPanes, dockingManager.Content); + // try to find an existing pane + DockablePane pane = allPanes.Find(p => DetectDock(p) == dockPosition); + if (pane == null) { + // none found: create a new pane + pane = new DockablePane(); + UIElement content = (UIElement)dockingManager.Content; + ResizingPanel rp = new ResizingPanel(); + dockingManager.Content = rp; + if (dockPosition == Dock.Left || dockPosition == Dock.Right) { + rp.Orientation = Orientation.Horizontal; + } else { + rp.Orientation = Orientation.Vertical; + } + if (dockPosition == Dock.Left || dockPosition == Dock.Top) { + rp.Children.Add(pane); + rp.Children.Add(content); + } else { + rp.Children.Add(content); + rp.Children.Add(pane); + } + } + return pane; + } + + static Dock? DetectDock(DockablePane pane) + { + ResizingPanel rp = pane.Parent as ResizingPanel; + if (rp != null) { + if (rp.Children[0] == pane) { + return rp.Orientation == Orientation.Vertical ? Dock.Top : Dock.Left; + } else if (rp.Children[rp.Children.Count - 1] == pane) { + return rp.Orientation == Orientation.Vertical ? Dock.Bottom : Dock.Right; + } + } + return null; + } + + static void ListAllPanes(List list, object content) + { + if (content is DockablePane) { + list.Add((DockablePane)content); + } else if (content is ResizingPanel) { + ResizingPanel rp = (ResizingPanel)content; + foreach (object o in rp.Children) + ListAllPanes(list, o); + } } public void ActivatePad(PadDescriptor content) { - throw new NotImplementedException(); } public void ActivatePad(string fullyQualifiedTypeName) { - throw new NotImplementedException(); } public void HidePad(PadDescriptor content) @@ -88,7 +143,7 @@ namespace ICSharpCode.SharpDevelop.Gui public bool IsVisible(PadDescriptor padContent) { - throw new NotImplementedException(); + return false; } public void RedrawAllComponents() @@ -106,6 +161,7 @@ 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 new file mode 100644 index 0000000000..a7e08e615a --- /dev/null +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonPadContent.cs @@ -0,0 +1,29 @@ +// +// +// +// +// $Revision$ +// + +using System; +using AvalonDock; +using ICSharpCode.Core; + +namespace ICSharpCode.SharpDevelop.Gui +{ + /// + /// . + /// + sealed class AvalonPadContent : DockableContent + { + PadDescriptor descriptor; + + public AvalonPadContent(PadDescriptor descriptor) + { + this.descriptor = descriptor; + + this.Title = StringParser.Parse(descriptor.Title); + this.Content = descriptor.Class; + } + } +} diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs index 815ddfef90..8831440a1d 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs @@ -386,7 +386,7 @@ namespace ICSharpCode.SharpDevelop.Gui IPadContent content = padDescriptor.PadContent; if (content == null) return; - Control control = content.Control; + Control control = content.Content; control.Dock = DockStyle.Fill; Controls.Add(control); } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs index 595bc227bd..71a3cb1955 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs @@ -90,7 +90,7 @@ namespace ICSharpCode.SharpDevelop.Gui { this.Text = StringParser.Parse(desc.Title); - Control ctl = desc.PadContent.Control; + Control ctl = desc.PadContent.Content; ctl.Dock = DockStyle.Fill; Controls.Add(ctl); } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs index c4420f18bf..fed4d34893 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs @@ -55,6 +55,12 @@ namespace ICSharpCode.SharpDevelop.Gui public void Initialize() { + foreach (PadDescriptor content in AddInTree.BuildItems(viewContentPath, this, false)) { + if (content != null) { + ShowPad(content); + } + } + mainMenu.ItemsSource = MenuService.CreateMenuItems(this, mainMenuPath); toolBars = ToolBarService.CreateToolBars(this, "/SharpDevelop/Workbench/ToolBar"); @@ -69,13 +75,13 @@ namespace ICSharpCode.SharpDevelop.Gui foreach (ToolBar tb in toolBars) { ToolBarService.UpdateStatus(tb.ItemsSource); } - StatusBarService.RedrawStatusbar(); + StatusBarService.SetMessage("${res:MainWindow.StatusBar.ReadyMessage}"); } public ICollection ViewContentCollection { get { - return new IViewContent[0]; + return viewContentCollection.AsReadOnly(); } } @@ -87,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Gui public IList PadContentCollection { get { - return new PadDescriptor[0]; + return padViewContentCollection.AsReadOnly(); } } @@ -135,6 +141,8 @@ namespace ICSharpCode.SharpDevelop.Gui public void ShowView(IViewContent content) { + if (content == null) + throw new ArgumentNullException("content"); System.Diagnostics.Debug.Assert(WorkbenchLayout != null); viewContentCollection.Add(content); @@ -145,6 +153,14 @@ namespace ICSharpCode.SharpDevelop.Gui public void ShowPad(PadDescriptor content) { + if (content == null) + throw new ArgumentNullException("content"); + + padViewContentCollection.Add(content); + + if (WorkbenchLayout != null) { + WorkbenchLayout.ShowPad(content); + } } public void UnloadPad(PadDescriptor content) diff --git a/src/Main/Base/Project/Src/Internal/Doozers/PadDescriptor.cs b/src/Main/Base/Project/Src/Internal/Doozers/PadDescriptor.cs index 66e2025208..fba885751b 100644 --- a/src/Main/Base/Project/Src/Internal/Doozers/PadDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Doozers/PadDescriptor.cs @@ -113,7 +113,8 @@ namespace ICSharpCode.SharpDevelop public bool HasFocus { get { - return (padContent != null) ? padContent.Control.ContainsFocus : false; + return false; + //return (padContent != null) ? padContent.Content.ContainsFocus : false; } } diff --git a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPad.cs b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPad.cs index 045d63e068..ae43fddbf7 100644 --- a/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPad.cs +++ b/src/Main/Base/Project/Src/TextEditor/Bookmarks/Pad/BookmarkPad.cs @@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks Dictionary fileNodes = new Dictionary(); - public override Control Control { + public override object Content { get { return myPanel; } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorBasedPad.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorBasedPad.cs index 60d096c51b..3e9514f7dc 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorBasedPad.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorBasedPad.cs @@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor get; } - public override System.Windows.Forms.Control Control { + public override object Content { get { return this.TextEditorControl; } } diff --git a/src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs b/src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs index 8d4cd70a51..0bc63c61d1 100644 --- a/src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs +++ b/src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs @@ -21,6 +21,23 @@ namespace ICSharpCode.Core.Presentation { static readonly Dictionary bitmapCache = new Dictionary(); + /// + /// Creates a new System.Windows.Controls.Image object containing the image with the + /// specified resource name. + /// + /// + /// The name of the requested bitmap. + /// + /// + /// Is thrown when the GlobalResource manager can't find a requested resource. + /// + public static System.Windows.Controls.Image GetImage(string name) + { + return new System.Windows.Controls.Image { + Source = GetBitmapSource(name) + }; + } + /// /// Returns a BitmapSource from the resource database, it handles localization /// transparent for the user. diff --git a/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs b/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs index 5c48bd415a..535b7cdc0a 100644 --- a/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs +++ b/src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarButton.cs @@ -32,10 +32,8 @@ namespace ICSharpCode.Core.Presentation } if (codon.Properties.Contains("icon")) { - Image image = new Image { - Source = PresentationResourceService.GetBitmapSource(StringParser.Parse(codon.Properties["icon"])), - Height = 16 - }; + Image image = PresentationResourceService.GetImage(StringParser.Parse(codon.Properties["icon"])); + image.Height = 16; image.SetResourceReference(StyleProperty, ToolBarService.ImageStyleKey); this.Content = image; } diff --git a/src/Main/ICSharpCode.SharpDevelop.Sda/Src/ExceptionBox.cs b/src/Main/ICSharpCode.SharpDevelop.Sda/Src/ExceptionBox.cs index 83713119ba..c4b108db29 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Sda/Src/ExceptionBox.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Sda/Src/ExceptionBox.cs @@ -40,6 +40,13 @@ namespace ICSharpCode.SharpDevelop.Sda Application.ThreadException += ShowErrorBox; AppDomain.CurrentDomain.UnhandledException += ShowErrorBox; MessageService.CustomErrorReporter = ShowErrorBox; + System.Windows.Threading.Dispatcher.CurrentDispatcher.UnhandledException += Dispatcher_UnhandledException; + } + + static void Dispatcher_UnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) + { + ShowErrorBox(e.Exception, "Unhandled WPF exception", false); + e.Handled = true; } static void ShowErrorBox(object sender, ThreadExceptionEventArgs e) diff --git a/src/Main/StartUp/Project/app.template.config b/src/Main/StartUp/Project/app.template.config index 20723149f3..4cb2b50c7a 100644 --- a/src/Main/StartUp/Project/app.template.config +++ b/src/Main/StartUp/Project/app.template.config @@ -17,6 +17,14 @@ + + + + + + + +