diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogControlsSideTab.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogControlsSideTab.cs index 5cdf289823..1d8b655d6c 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogControlsSideTab.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/SetupDialogControlsSideTab.cs @@ -17,7 +17,7 @@ namespace ICSharpCode.WixBinding public sealed class SetupDialogControlsSideTab : SideTabDesigner { SetupDialogControlsSideTab(SideBarControl sideBar, Category category, IToolboxService toolboxService) - : base(sideBar, category, toolboxService) + : base(null/*TODO!!!!!!!!!!!!!!!!!!!!!!!!!*/, sideBar, category, toolboxService) { } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/FormsCommands.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/FormsCommands.cs index 5c78946f19..02a479be92 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/FormsCommands.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/FormsCommands.cs @@ -9,6 +9,7 @@ using System.Windows.Forms.Design; using ICSharpCode.Core; using ICSharpCode.Core.WinForms; +using ICSharpCode.FormsDesigner.Services; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; @@ -19,11 +20,11 @@ namespace ICSharpCode.FormsDesigner.Commands /// public abstract class AbstractFormsDesignerCommand : AbstractMenuCommand { - public abstract CommandID CommandID { + public abstract CommandIDEnum CommandID { get; } - protected virtual bool CanExecuteCommand(IDesignerHost host) + protected virtual bool CanExecuteCommand(FormsDesignerAppDomainHost host) { return true; } @@ -42,9 +43,9 @@ namespace ICSharpCode.FormsDesigner.Commands try { FormsDesignerViewContent formDesigner = FormDesigner; - if (formDesigner != null && CanExecuteCommand(formDesigner.AppDomainHost.Host)) { - IMenuCommandService menuCommandService = (IMenuCommandService)formDesigner.AppDomainHost.Host.GetService(typeof(IMenuCommandService)); - menuCommandService.GlobalInvoke(CommandID); + if (formDesigner != null && CanExecuteCommand(formDesigner.AppDomainHost)) { + IMenuCommandService menuCommandService = (IMenuCommandService)formDesigner.AppDomainHost.GetService(typeof(IMenuCommandService)); + menuCommandService.GlobalInvoke(CommandIDEnumConverter.ToCommandID(CommandID)); } } catch (Exception e) { MessageService.ShowException(e); @@ -57,14 +58,8 @@ namespace ICSharpCode.FormsDesigner.Commands } } - public class ViewCode : AbstractFormsDesignerCommand + public class ViewCode : AbstractMenuCommand { - public override CommandID CommandID { - get { - return StandardCommands.ViewCode; - } - } - FormsDesignerViewContent FormDesigner { get { IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow; @@ -89,14 +84,8 @@ namespace ICSharpCode.FormsDesigner.Commands } } - public class ShowProperties : AbstractFormsDesignerCommand + public class ShowProperties : AbstractMenuCommand { - public override CommandID CommandID { - get { - return StandardCommands.PropertiesWindow; - } - } - public override void Run() { PadDescriptor padContent = WorkbenchSingleton.Workbench.GetPad(typeof(ICSharpCode.SharpDevelop.Gui.PropertyPad)); @@ -153,63 +142,63 @@ namespace ICSharpCode.FormsDesigner.Commands #region Align Commands public class AlignToGrid : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignToGrid; + return CommandIDEnum.AlignToGrid; } } } public class AlignLeft : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignLeft; + return CommandIDEnum.AlignLeft; } } } public class AlignRight : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignRight; + return CommandIDEnum.AlignRight; } } } public class AlignTop : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignTop; + return CommandIDEnum.AlignTop; } } } public class AlignBottom : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignBottom; + return CommandIDEnum.AlignBottom; } } } public class AlignHorizontalCenters : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignHorizontalCenters; + return CommandIDEnum.AlignHorizontalCenters; } } } public class AlignVerticalCenters : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.AlignVerticalCenters; + return CommandIDEnum.AlignVerticalCenters; } } } @@ -218,36 +207,36 @@ namespace ICSharpCode.FormsDesigner.Commands #region Make Same Size Commands public class SizeToGrid : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.SizeToGrid; + return CommandIDEnum.SizeToGrid; } } } public class SizeToControl : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.SizeToControl; + return CommandIDEnum.SizeToControl; } } } public class SizeToControlHeight : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.SizeToControlHeight; + return CommandIDEnum.SizeToControlHeight; } } } public class SizeToControlWidth : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.SizeToControlWidth; + return CommandIDEnum.SizeToControlWidth; } } } @@ -256,13 +245,13 @@ namespace ICSharpCode.FormsDesigner.Commands #region Horizontal Spacing Commands public class HorizSpaceMakeEqual : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.HorizSpaceMakeEqual; + return CommandIDEnum.HorizSpaceMakeEqual; } } - protected override bool CanExecuteCommand(IDesignerHost host) + protected override bool CanExecuteCommand(FormsDesignerAppDomainHost host) { ISelectionService selectionService = (ISelectionService)host.GetService(typeof(ISelectionService)); return selectionService.SelectionCount > 1; @@ -271,27 +260,27 @@ namespace ICSharpCode.FormsDesigner.Commands public class HorizSpaceIncrease : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.HorizSpaceIncrease; + return CommandIDEnum.HorizSpaceIncrease; } } } public class HorizSpaceDecrease : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.HorizSpaceDecrease; + return CommandIDEnum.HorizSpaceDecrease; } } } public class HorizSpaceConcatenate : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.HorizSpaceConcatenate; + return CommandIDEnum.HorizSpaceConcatenate; } } } @@ -300,13 +289,13 @@ namespace ICSharpCode.FormsDesigner.Commands #region Vertical Spacing Commands public class VertSpaceMakeEqual : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.VertSpaceMakeEqual; + return CommandIDEnum.VertSpaceMakeEqual; } } - protected override bool CanExecuteCommand(IDesignerHost host) + protected override bool CanExecuteCommand(FormsDesignerAppDomainHost host) { ISelectionService selectionService = (ISelectionService)host.GetService(typeof(ISelectionService)); return selectionService.SelectionCount > 1; @@ -316,27 +305,27 @@ namespace ICSharpCode.FormsDesigner.Commands public class VertSpaceIncrease : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.VertSpaceIncrease; + return CommandIDEnum.VertSpaceIncrease; } } } public class VertSpaceDecrease : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.VertSpaceDecrease; + return CommandIDEnum.VertSpaceDecrease; } } } public class VertSpaceConcatenate : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.VertSpaceConcatenate; + return CommandIDEnum.VertSpaceConcatenate; } } } @@ -345,17 +334,17 @@ namespace ICSharpCode.FormsDesigner.Commands #region Center Commands public class CenterHorizontally : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.CenterHorizontally; + return CommandIDEnum.CenterHorizontally; } } } public class CenterVertically : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.CenterVertically; + return CommandIDEnum.CenterVertically; } } } @@ -364,18 +353,18 @@ namespace ICSharpCode.FormsDesigner.Commands #region Order Commands public class SendToBack : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.SendToBack; + return CommandIDEnum.SendToBack; } } } public class BringToFront : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.BringToFront; + return CommandIDEnum.BringToFront; } } } @@ -385,9 +374,9 @@ namespace ICSharpCode.FormsDesigner.Commands public class LineUpIcons : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.LineupIcons; + return CommandIDEnum.LineupIcons; } } } @@ -422,7 +411,7 @@ namespace ICSharpCode.FormsDesigner.Commands get { FormsDesignerViewContent formDesigner = FormDesigner; if (formDesigner != null) { - return formDesigner.AppDomainHost.Host.GetService(typeof(ComponentTray)) as ComponentTray; + return formDesigner.AppDomainHost.GetService(typeof(ComponentTray)) as ComponentTray; } return null; @@ -437,9 +426,9 @@ namespace ICSharpCode.FormsDesigner.Commands #region Global Commands public class LockControls : AbstractFormsDesignerCommand { - public override CommandID CommandID { + public override CommandIDEnum CommandID { get { - return StandardCommands.LockControls; + return CommandIDEnum.LockControls; } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/SideBarCommands.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/SideBarCommands.cs index 5425fb27f2..a76093652d 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/SideBarCommands.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Commands/SideBarCommands.cs @@ -10,11 +10,15 @@ namespace ICSharpCode.FormsDesigner { public class CustomizeSideBar : AbstractMenuCommand { - public override void Run() + public override void Run() { - using (ConfigureSideBarDialog configureSideBarDialog = new ConfigureSideBarDialog()) { - if (configureSideBarDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) { - ToolboxProvider.ReloadSideTabs(true); + #warning test this! + var sidebar = Owner as SideTabDesigner; + if (sidebar != null) { + using (ConfigureSideBarDialog configureSideBarDialog = new ConfigureSideBarDialog(sidebar.Toolbox)) { + if (configureSideBarDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) { + sidebar.Toolbox.ReloadSideTabs(true); + } } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormKeyHandler.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormKeyHandler.cs index 2c32c35c8a..a1e4acc726 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormKeyHandler.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormKeyHandler.cs @@ -9,7 +9,7 @@ using System.ComponentModel.Design; using System.Reflection; using System.Windows.Forms; using System.Windows.Forms.Design; - +using System.Windows.Forms.Integration; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; @@ -69,7 +69,7 @@ namespace ICSharpCode.FormsDesigner FormsDesignerViewContent formDesigner = WorkbenchSingleton.Workbench.ActiveContent as FormsDesignerViewContent; - if (formDesigner == null || formDesigner.AppDomainHost.Host == null) { + if (formDesigner == null || formDesigner.AppDomainHost == null) { return false; } if (formDesigner.UserContent != null && !((Control)formDesigner.UserContent).ContainsFocus) { @@ -77,7 +77,7 @@ namespace ICSharpCode.FormsDesigner } Control originControl = Control.FromChildHandle(m.HWnd); - if (originControl != null && formDesigner.UserContent != null && !(formDesigner.UserContent == originControl || formDesigner.UserContent.Contains(originControl))) { + if (originControl != null && formDesigner.UserContent != null && !(formDesigner.UserContent == originControl || ((WindowsFormsHost)formDesigner.UserContent).Child.Contains(originControl))) { // Ignore if message origin not in forms designer // (e.g. navigating the main menu) return false; @@ -102,8 +102,8 @@ namespace ICSharpCode.FormsDesigner } LoggingService.Debug("Run menu command: " + commandWrapper.CommandID); - IMenuCommandService menuCommandService = (IMenuCommandService)formDesigner.AppDomainHost.Host.GetService(typeof(IMenuCommandService)); - ISelectionService selectionService = (ISelectionService)formDesigner.AppDomainHost.Host.GetService(typeof(ISelectionService)); + IMenuCommandService menuCommandService = (IMenuCommandService)formDesigner.AppDomainHost.GetService(typeof(IMenuCommandService)); + ISelectionService selectionService = (ISelectionService)formDesigner.AppDomainHost.GetService(typeof(ISelectionService)); ICollection components = selectionService.GetSelectedComponents(); if (components.Count == 1) { foreach (IComponent component in components) { @@ -128,7 +128,7 @@ namespace ICSharpCode.FormsDesigner Assembly asm = typeof(WindowsFormsDesignerOptionService).Assembly; // Microsoft made ToolStripKeyboardHandlingService internal, so we need Reflection Type keyboardType = asm.GetType("System.Windows.Forms.Design.ToolStripKeyboardHandlingService"); - object keyboardService = formDesigner.AppDomainHost.Host.GetService(keyboardType); + object keyboardService = formDesigner.AppDomainHost.GetService(keyboardType); if (keyboardService == null) { LoggingService.Debug("no ToolStripKeyboardHandlingService found"); return false; // handle command normally diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj index 3fd116d757..ba7f8a8d12 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj @@ -39,6 +39,10 @@ + + + 3.5 + 3.5 @@ -50,12 +54,18 @@ + + 3.5 + 3.5 + + 3.0 + @@ -104,9 +114,13 @@ Form + + ConfigureSideBarDialog.cs + - - Form + + + RenameCategoryDialog.cs @@ -168,6 +182,12 @@ LocalizationModelOptionsPanel.cs + + ConfigureSideBarDialog.cs + + + RenameCategoryDialog.cs + \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerLoggingServiceImpl.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerLoggingServiceImpl.cs index 9c3d464fb9..f6d1ed0148 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerLoggingServiceImpl.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerLoggingServiceImpl.cs @@ -10,7 +10,7 @@ namespace ICSharpCode.FormsDesigner /// /// Description of FormsDesignerLoggingServiceImpl. /// - public class FormsDesignerLoggingServiceImpl : IFormsDesignerLoggingService + public class FormsDesignerLoggingServiceImpl : MarshalByRefObject, IFormsDesignerLoggingService { public void Debug(string message) { diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs index f070703e3b..7b33f0d73c 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs @@ -2,16 +2,19 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.AddIn.Pipeline; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; +using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; + using ICSharpCode.Core; using ICSharpCode.FormsDesigner.Gui; using ICSharpCode.FormsDesigner.Gui.OptionPanels; @@ -37,6 +40,8 @@ namespace ICSharpCode.FormsDesigner readonly ResourceStore resourceStore; FormsDesignerUndoEngine undoEngine; FormsDesignerAppDomainHost appDomainHost; + EventHandlers eventHandlers; + ToolboxProvider toolbox; public FormsDesignerAppDomainHost AppDomainHost { get { return appDomainHost; } @@ -116,6 +121,10 @@ namespace ICSharpCode.FormsDesigner FileService.FileRemoving += this.FileServiceFileRemoving; ICSharpCode.SharpDevelop.Debugging.DebuggerService.DebugStarting += this.DebugStarting; + + appDomain = null; + appDomainHost = FormsDesignerAppDomainHost.CreateFormsDesignerInAppDomain(ref appDomain, PrimaryFileName, new DomTypeLocator(PrimaryFileName), new DomGacWrapper(), new SharpDevelopCommandProvider(this), new ViewContentIFormsDesignerProxy(this), new FormsDesignerLoggingServiceImpl()); + toolbox = new ToolboxProvider(appDomainHost); } public FormsDesignerViewContent(IViewContent primaryViewContent, IDesignerLoaderProvider loaderProvider, IDesignerGenerator generator, IDesignerSourceProvider sourceProvider) @@ -131,6 +140,7 @@ namespace ICSharpCode.FormsDesigner this.generator = generator; this.sourceProvider = sourceProvider; this.sourceProvider.Attach(this); + this.eventHandlers = new FormsDesignerViewContent.EventHandlers(this); this.Files.Add(this.primaryViewContent.PrimaryFile); } @@ -151,8 +161,9 @@ namespace ICSharpCode.FormsDesigner protected override void LoadInternal(OpenedFile file, System.IO.Stream stream) { LoggingService.Debug("Forms designer: Load " + file.FileName + "; inMasterLoadOperation=" + this.inMasterLoadOperation); - appDomain = null; - appDomainHost = FormsDesignerAppDomainHost.CreateFormsDesignerInAppDomain(ref appDomain, new DomTypeLocator(PrimaryFileName), new DomGacWrapper()); + + propertyContainer.PropertyGridReplacementContent = FrameworkElementAdapters.ContractToViewAdapter(appDomainHost.CreatePropertyGrid()); + // TODO : init PropertyGrid if (inMasterLoadOperation) { @@ -170,7 +181,7 @@ namespace ICSharpCode.FormsDesigner throw new InvalidOperationException("Designer loading a source code file while DesignerLoader is loading and the view is not in a master load operation. This must not happen."); } - if (appDomainHost.DesignSurface != null) { + if (appDomainHost.DesignSurfaceName != null) { this.UnloadDesigner(); } @@ -256,6 +267,85 @@ namespace ICSharpCode.FormsDesigner this.Files.Add(file); } + #region Proxies + class EventHandlers : MarshalByRefObject + { + object vc; + + public EventHandlers(object vc) + { + this.vc = vc; + } + + internal void DesignerLoading(object sender, EventArgs e) + { +// vc.DesignerLoading(sender, e); + } + + internal void DesignerLoaded(object sender, LoadedEventArgs e) + { +// vc.DesignerLoaded(sender, e); + } + + internal void DesignerUnloading(object sender, EventArgs e) + { +// vc.DesignerUnloading(sender, e); + } + + internal void DesignerFlushed(object sender, EventArgs e) + { +// vc.DesignerFlushed(sender, e); + } + + internal void TransactionClose(object sender, DesignerTransactionCloseEventArgs e) + { +// vc.TransactionClose(sender, e); + } + } + + class ViewContentIFormsDesignerProxy : MarshalByRefObject, IFormsDesigner + { + FormsDesignerViewContent vc; + + public ViewContentIFormsDesignerProxy(FormsDesignerViewContent vc) + { + this.vc = vc; + } + + public IDesignerGenerator Generator { + get { + return vc.generator; + } + } + + public SharpDevelopDesignerOptions DesignerOptions { + get { + return vc.DesignerOptions; + } + } + + public IntPtr GetDialogOwnerWindowHandle() + { + return vc.GetDialogOwnerWindowHandle(); + } + + public void ShowSourceCode() + { + vc.ShowSourceCode(); + } + + public void ShowSourceCode(int lineNumber) + { + vc.ShowSourceCode(lineNumber); + } + + public void ShowSourceCode(IComponent component, EventDescriptor edesc, string methodName) + { + vc.ShowSourceCode(component, edesc, methodName); + } + } + #endregion + void LoadDesigner() { LoggingService.Info("Form Designer: BEGIN INITIALIZE"); @@ -264,7 +354,7 @@ namespace ICSharpCode.FormsDesigner appDomainHost.Services.AddService(typeof(IMessageService), new FormsMessageService()); appDomainHost.Services.AddService(typeof(System.Windows.Forms.Design.IUIService), new UIService(this)); - appDomainHost.Services.AddService(typeof(System.Drawing.Design.IToolboxService), ToolboxProvider.ToolboxService); + appDomainHost.Services.AddService(typeof(System.Drawing.Design.IToolboxService), toolbox.ToolboxService); appDomainHost.Services.AddService(typeof(IHelpService), new HelpService()); appDomainHost.Services.AddService(typeof(System.Drawing.Design.IPropertyValueUIService), new PropertyValueUIService()); @@ -284,33 +374,29 @@ namespace ICSharpCode.FormsDesigner appDomainHost.Services.AddService(typeof(System.CodeDom.Compiler.CodeDomProvider), generator.CodeDomProvider); } - appDomainHost.DesignSurface.Loading += this.DesignerLoading; - appDomainHost.DesignSurface.Loaded += this.DesignerLoaded; - appDomainHost.DesignSurface.Flushed += this.DesignerFlushed; - appDomainHost.DesignSurface.Unloading += this.DesignerUnloading; - - appDomainHost.Services.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), new ICSharpCode.FormsDesigner.Services.MenuCommandService(new SharpDevelopCommandProvider(this), appDomainHost.DesignSurface)); - ICSharpCode.FormsDesigner.Services.EventBindingService eventBindingService = new ICSharpCode.FormsDesigner.Services.EventBindingService(this, appDomainHost.DesignSurface); - appDomainHost.Services.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService); - - this.loader = new SharpDevelopDesignerLoader(generator, loaderProvider.CreateLoader(generator)); - appDomainHost.DesignSurface.BeginLoad(this.loader); - - if (!appDomainHost.DesignSurface.IsLoaded) { - throw new FormsDesignerLoadException(FormatLoadErrors(appDomainHost.DesignSurface)); + appDomainHost.DesignSurfaceLoading += eventHandlers.DesignerLoading; + appDomainHost.DesignSurfaceLoaded += eventHandlers.DesignerLoaded; + appDomainHost.DesignSurfaceFlushed += eventHandlers.DesignerFlushed; + appDomainHost.DesignSurfaceUnloading += eventHandlers.DesignerUnloading; + + this.loader = new SharpDevelopDesignerLoader(appDomainHost, generator, loaderProvider.CreateLoader(generator)); + appDomainHost.BeginDesignSurfaceLoad(this.loader); + + if (!appDomainHost.IsDesignSurfaceLoaded) { + throw new FormsDesignerLoadException(appDomainHost.LoadErrors); } - undoEngine = new FormsDesignerUndoEngine(appDomainHost.Host); + undoEngine = new FormsDesignerUndoEngine(appDomainHost); appDomainHost.Services.AddService(typeof(UndoEngine), undoEngine); - IComponentChangeService componentChangeService = (IComponentChangeService)appDomainHost.DesignSurface.GetService(typeof(IComponentChangeService)); + IComponentChangeService componentChangeService = (IComponentChangeService)appDomainHost.GetService(typeof(IComponentChangeService)); componentChangeService.ComponentChanged += ComponentChanged; componentChangeService.ComponentAdded += ComponentListChanged; componentChangeService.ComponentRemoved += ComponentListChanged; componentChangeService.ComponentRename += ComponentListChanged; - appDomainHost.Host.TransactionClosed += TransactionClose; + appDomainHost.Host.TransactionClosed += eventHandlers.TransactionClose; - ISelectionService selectionService = (ISelectionService)appDomainHost.DesignSurface.GetService(typeof(ISelectionService)); + ISelectionService selectionService = (ISelectionService)appDomainHost.GetService(typeof(ISelectionService)); selectionService.SelectionChanged += SelectionChangedHandler; if (IsTabOrderMode) { // fixes SD2-1015 @@ -415,13 +501,13 @@ namespace ICSharpCode.FormsDesigner // in the PropertyPad, "InvalidOperationException: The container cannot be disposed // at design time" is thrown. // This is solved by calling dispose after the double-click event has been processed. - if (appDomainHost.DesignSurface != null) { - appDomainHost.DesignSurface.Loading -= this.DesignerLoading; - appDomainHost.DesignSurface.Loaded -= this.DesignerLoaded; - appDomainHost.DesignSurface.Flushed -= this.DesignerFlushed; - appDomainHost.DesignSurface.Unloading -= this.DesignerUnloading; + if (appDomainHost.DesignSurfaceName != null) { + appDomainHost.DesignSurfaceLoading -= eventHandlers.DesignerLoading; + appDomainHost.DesignSurfaceLoaded -= eventHandlers.DesignerLoaded; + appDomainHost.DesignSurfaceFlushed -= eventHandlers.DesignerFlushed; + appDomainHost.DesignSurfaceUnloading -= eventHandlers.DesignerUnloading; - IComponentChangeService componentChangeService = appDomainHost.DesignSurface.GetService(typeof(IComponentChangeService)) as IComponentChangeService; + IComponentChangeService componentChangeService = appDomainHost.GetService(typeof(IComponentChangeService)) as IComponentChangeService; if (componentChangeService != null) { componentChangeService.ComponentChanged -= ComponentChanged; componentChangeService.ComponentAdded -= ComponentListChanged; @@ -429,18 +515,18 @@ namespace ICSharpCode.FormsDesigner componentChangeService.ComponentRename -= ComponentListChanged; } if (appDomainHost.Host != null) { - appDomainHost.Host.TransactionClosed -= TransactionClose; + appDomainHost.Host.TransactionClosed -= eventHandlers.TransactionClose; } - ISelectionService selectionService = appDomainHost.DesignSurface.GetService(typeof(ISelectionService)) as ISelectionService; + ISelectionService selectionService = appDomainHost.GetService(typeof(ISelectionService)) as ISelectionService; if (selectionService != null) { selectionService.SelectionChanged -= SelectionChangedHandler; } if (disposing) { - appDomainHost.DesignSurface.Dispose(); + appDomainHost.DisposeDesignSurface(); } else { - WorkbenchSingleton.SafeThreadAsyncCall(appDomainHost.DesignSurface.Dispose); + WorkbenchSingleton.SafeThreadAsyncCall(appDomainHost.DisposeDesignSurface); } // host.DesignSurface = null; } @@ -464,11 +550,11 @@ namespace ICSharpCode.FormsDesigner public void ShowHelp() { - if (appDomainHost.Host == null) { + if (appDomainHost == null) { return; } - ISelectionService selectionService = (ISelectionService)appDomainHost.Host.GetService(typeof(ISelectionService)); + ISelectionService selectionService = (ISelectionService)appDomainHost.GetService(typeof(ISelectionService)); if (selectionService != null) { Control ctl = selectionService.PrimarySelection as Control; if (ctl != null) { @@ -489,8 +575,8 @@ namespace ICSharpCode.FormsDesigner throw new FormsDesignerLoadException(e.InnerException.Message, e); } else if (e is FormsDesignerLoadException) { throw; - } else if (appDomainHost.DesignSurface != null && !appDomainHost.DesignSurface.IsLoaded && appDomainHost.DesignSurface.LoadErrors != null) { - throw new FormsDesignerLoadException(FormatLoadErrors(appDomainHost.DesignSurface), e); + } else if (appDomainHost.DesignSurfaceName != null && !appDomainHost.IsDesignSurfaceLoaded && appDomainHost.LoadErrors != null) { + throw new FormsDesignerLoadException(appDomainHost.LoadErrors, e); } else { throw; } @@ -498,8 +584,8 @@ namespace ICSharpCode.FormsDesigner } } - internal new Control UserContent { - get { return base.UserContent as Control; } + internal new object UserContent { + get { return base.UserContent; } set { base.UserContent = value; } } @@ -535,16 +621,16 @@ namespace ICSharpCode.FormsDesigner if (e.HasSucceeded) { // Display the designer on the view content bool savedIsDirty = this.DesignerCodeFile.IsDirty; - Control designView = (Control)appDomainHost.DesignSurface.View; + System.Windows.FrameworkElement designView = FrameworkElementAdapters.ContractToViewAdapter(appDomainHost.DesignSurfaceView); - designView.BackColor = Color.White; - designView.RightToLeft = RightToLeft.No; +// designView.BackColor = Color.White; +// designView.RightToLeft = RightToLeft.No; // Make sure auto-scaling is based on the correct font. // This is required on Vista, I don't know why it works correctly in XP - designView.Font = System.Windows.Forms.Control.DefaultFont; +// designView.Font = System.Windows.Forms.Control.DefaultFont; this.UserContent = designView; - LoggingService.Debug("FormsDesigner loaded, setting ActiveDesignSurface to " + appDomainHost.DesignSurface.ToString()); + LoggingService.Debug("FormsDesigner loaded, setting ActiveDesignSurface to " + appDomainHost.DesignSurfaceName); appDomainHost.ActivateDesignSurface(); this.DesignerCodeFile.IsDirty = savedIsDirty; this.UpdatePropertyPad(); @@ -555,9 +641,7 @@ namespace ICSharpCode.FormsDesigner // When a load error occurs there, we are not somewhere // below the Load method which handles load errors. // That is why we create an error text box here anyway. - TextBox errorTextBox = new TextBox() { Multiline=true, ScrollBars=ScrollBars.Both, ReadOnly=true, BackColor=SystemColors.Window, Dock=DockStyle.Fill }; - errorTextBox.Text = String.Concat(this.LoadErrorHeaderText, FormatLoadErrors(appDomainHost.DesignSurface)); - this.UserContent = errorTextBox; + ShowError(new Exception(appDomainHost.LoadErrors)); } } @@ -567,19 +651,9 @@ namespace ICSharpCode.FormsDesigner this.hasUnmergedChanges = false; } - static string FormatLoadErrors(DesignSurface designSurface) - { - StringBuilder sb = new StringBuilder(); - foreach(Exception le in designSurface.LoadErrors) { - sb.AppendLine(le.ToString()); - sb.AppendLine(); - } - return sb.ToString(); - } - public virtual void MergeFormChanges() { - if (this.HasLoadError || appDomainHost.DesignSurface == null) { + if (this.HasLoadError || appDomainHost.DesignSurfaceName == null) { LoggingService.Debug("Forms designer: Cannot merge form changes because the designer is not loaded successfully or not loaded at all"); return; } else if (this.DesignerCodeFile == null) { @@ -587,7 +661,7 @@ namespace ICSharpCode.FormsDesigner } bool isDirty = this.DesignerCodeFile.IsDirty; LoggingService.Info("Merging form changes..."); - appDomainHost.DesignSurface.Flush(); + appDomainHost.FlushDesignSurface(); this.resourceStore.CommitAllResourceChanges(); LoggingService.Info("Finished merging form changes"); hasUnmergedChanges = false; @@ -624,31 +698,31 @@ namespace ICSharpCode.FormsDesigner void IsActiveViewContentChangedHandler(object sender, EventArgs e) { - if (this.IsActiveViewContent) { + if (this.IsActiveViewContent && appDomainHost != null) { - LoggingService.Debug("FormsDesigner view content activated, setting ActiveDesignSurface to " + ((appDomainHost.DesignSurface == null) ? "null" : appDomainHost.DesignSurface.ToString())); + LoggingService.Debug("FormsDesigner view content activated, setting ActiveDesignSurface to " + appDomainHost.DesignSurfaceName); appDomainHost.ActivateDesignSurface(); - if (appDomainHost.DesignSurface != null && appDomainHost.Host != null) { + if (appDomainHost.DesignSurfaceName != null) { // Reload designer when a referenced assembly has changed // (the default Load/Save logic using OpenedFile cannot catch this case) -// if (this.typeResolutionService.ReferencedAssemblyChanged) { -// IDesignerLoaderService loaderService = this.DesignSurface.GetService(typeof(IDesignerLoaderService)) as IDesignerLoaderService; -// if (loaderService != null) { -// if (!this.Host.Loading) { -// LoggingService.Info("Forms designer reloading due to change in referenced assembly"); -// this.reloadPending = true; -// if (!loaderService.Reload()) { -// this.reloadPending = false; -// MessageService.ShowMessage("The designer has detected that a referenced assembly has been changed, but the designer loader did not accept the reload command. Please reload the designer manually by closing and reopening this file."); -// } -// } else { -// LoggingService.Debug("Forms designer detected change in referenced assembly, but is in load operation"); -// } -// } else { -// MessageService.ShowMessage("The designer has detected that a referenced assembly has been changed, but it cannot reload itself because IDesignerLoaderService is unavailable. Please reload the designer manually by closing and reopening this file."); -// } -// } + if (appDomainHost.ReferencedAssemblyChanged) { + IDesignerLoaderService loaderService = appDomainHost.GetService(typeof(IDesignerLoaderService)) as IDesignerLoaderService; + if (loaderService != null) { + if (!appDomainHost.Host.Loading) { + LoggingService.Info("Forms designer reloading due to change in referenced assembly"); + this.reloadPending = true; + if (!loaderService.Reload()) { + this.reloadPending = false; + MessageService.ShowMessage("The designer has detected that a referenced assembly has been changed, but the designer loader did not accept the reload command. Please reload the designer manually by closing and reopening this file."); + } + } else { + LoggingService.Debug("Forms designer detected change in referenced assembly, but is in load operation"); + } + } else { + MessageService.ShowMessage("The designer has detected that a referenced assembly has been changed, but it cannot reload itself because IDesignerLoaderService is unavailable. Please reload the designer manually by closing and reopening this file."); + } + } } } else { @@ -706,7 +780,7 @@ namespace ICSharpCode.FormsDesigner if (appDomainHost.Host != null) { propertyContainer.Host = appDomainHost.Host; propertyContainer.SelectableObjects = appDomainHost.Host.Container.Components; - ISelectionService selectionService = (ISelectionService)appDomainHost.Host.GetService(typeof(ISelectionService)); + ISelectionService selectionService = (ISelectionService)appDomainHost.GetService(typeof(ISelectionService)); if (selectionService != null) { UpdatePropertyPadSelection(selectionService); } @@ -748,11 +822,11 @@ namespace ICSharpCode.FormsDesigner #region IClipboardHandler implementation bool IsMenuCommandEnabled(CommandID commandID) { - if (appDomainHost.DesignSurface == null) { + if (appDomainHost.DesignSurfaceName == null) { return false; } - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); if (menuCommandService == null) { return false; } @@ -793,37 +867,37 @@ namespace ICSharpCode.FormsDesigner public bool EnableSelectAll { get { - return appDomainHost.DesignSurface != null; + return appDomainHost.DesignSurfaceName != null; } } public void Cut() { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.Cut); } public void Copy() { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.Copy); } public void Paste() { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.Paste); } public void Delete() { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.Delete); } public void SelectAll() { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.SelectAll); } #endregion @@ -839,7 +913,7 @@ namespace ICSharpCode.FormsDesigner public virtual void ShowTabOrder() { if (!IsTabOrderMode) { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.TabOrder); tabOrderMode = true; } @@ -848,7 +922,7 @@ namespace ICSharpCode.FormsDesigner public virtual void HideTabOrder() { if (IsTabOrderMode) { - IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.DesignSurface.GetService(typeof(IMenuCommandService)); + IMenuCommandService menuCommandService = (IMenuCommandService)appDomainHost.GetService(typeof(IMenuCommandService)); menuCommandService.GlobalInvoke(StandardCommands.TabOrder); tabOrderMode = false; } @@ -874,7 +948,7 @@ namespace ICSharpCode.FormsDesigner } public virtual object ToolsContent { - get { return ToolboxProvider.FormsDesignerSideBar; } + get { return toolbox.FormsDesignerSideBar; } } void FileServiceFileRemoving(object sender, FileCancelEventArgs e) diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs index 6b0eb7b966..70bf60f298 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs @@ -117,8 +117,6 @@ namespace ICSharpCode.FormsDesigner IDesignerGenerator generator; IDesignerSourceProvider sourceProvider; - FormsDesignerLoggingService.Service = new FormsDesignerLoggingServiceImpl(); - switch (fileExtension) { case ".cs": loader = new NRefactoryDesignerLoaderProvider(SupportedLanguage.CSharp); diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs index d42c48b344..34b5834bed 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs @@ -9,7 +9,7 @@ using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.FormsDesigner.Services { - public class DomTypeLocator : ITypeLocator + public class DomTypeLocator : MarshalByRefObject, ITypeLocator { string formSourceFileName; IProjectContent callingProject; @@ -117,7 +117,7 @@ namespace ICSharpCode.FormsDesigner.Services } } - public class DomGacWrapper : IGacWrapper + public class DomGacWrapper : MarshalByRefObject, IGacWrapper { public bool IsGacAssembly(string path) { diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs index f34f33a140..3d63b5c4f5 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs @@ -38,5 +38,10 @@ namespace ICSharpCode.FormsDesigner.Services return sw.ToString().TrimEnd(); } } + + public void ShowPropertiesPad() + { + WorkbenchSingleton.Workbench.GetPad(typeof(PropertyPad)).BringPadToFront(); + } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs index ca8add998a..2db2eb93f0 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs @@ -2,17 +2,20 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Collections.Generic; using System.ComponentModel.Design; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.Design; +using System.Windows.Forms.Integration; using ICSharpCode.Core.WinForms; using ICSharpCode.FormsDesigner.Commands; +using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.FormsDesigner.Services { - public class SharpDevelopCommandProvider : ICommandProvider + public class SharpDevelopCommandProvider : MarshalByRefObject, ICommandProvider { FormsDesignerViewContent vc; @@ -21,23 +24,6 @@ namespace ICSharpCode.FormsDesigner.Services this.vc = vc; } - public void InitializeGlobalCommands(IMenuCommandService service) - { - // Most commands like Delete, Cut, Copy and paste are all added to the MenuCommandService - // by the other services like the DesignerHost. Commands like ViewCode and ShowProperties - // need to be added by the IDE because only the IDE would know how to perform those actions. - // This allows people to call MenuCommandSerice.GlobalInvoke( StandardCommands.ViewCode ); - // from designers and what not. .Net Control Designers like the TableLayoutPanelDesigner - // build up their own context menus instead of letting the MenuCommandService build it. - // The context menus they build up are in the format that Visual studio expects and invokes - // the ViewCode and Properties commands by using GlobalInvoke. - - AbstractFormsDesignerCommand viewCodeCommand = new ViewCode(); - AbstractFormsDesignerCommand propertiesCodeCommand = new ShowProperties(); - service.AddCommand(new System.ComponentModel.Design.MenuCommand(viewCodeCommand.CommandCallBack, viewCodeCommand.CommandID)); - service.AddCommand(new System.ComponentModel.Design.MenuCommand(propertiesCodeCommand.CommandCallBack, propertiesCodeCommand.CommandID)); - } - public void ShowContextMenu(CommandID menuID, int x, int y) { string contextMenuPath = "/SharpDevelop/FormsDesigner/ContextMenus/"; @@ -54,7 +40,7 @@ namespace ICSharpCode.FormsDesigner.Services throw new Exception(); } - Control panel = vc.UserContent; + Control panel = ((WindowsFormsHost)vc.UserContent).Child; if (panel != null) { Point p = panel.PointToClient(new Point(x, y)); diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabDesigner.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabDesigner.cs index 400d6503a9..6f1d52ca31 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabDesigner.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabDesigner.cs @@ -32,19 +32,27 @@ namespace ICSharpCode.FormsDesigner.Gui this.Items.Add(new SideTabItemDesigner()); } + ToolboxProvider toolbox; + + public ToolboxProvider Toolbox { + get { return toolbox; } + } + ///Load an assembly's controls - public SideTabDesigner(SideBarControl sideBar, Category category, IToolboxService toolboxService) : this(sideBar, category.Name, toolboxService) + public SideTabDesigner(ToolboxProvider toolbox, SideBarControl sideBar, Category category, IToolboxService toolboxService) + : this(sideBar, category.Name, toolboxService) { + this.toolbox = toolbox; foreach (ToolComponent component in category.ToolComponents) { if (component.IsEnabled) { ToolboxItem toolboxItem = new ToolboxItem(); toolboxItem.TypeName = component.FullName; - toolboxItem.Bitmap = ToolboxProvider.ComponentLibraryLoader.GetIcon(component); + toolboxItem.Bitmap = toolbox.ComponentLibraryLoader.GetIcon(component); toolboxItem.DisplayName = component.Name; Assembly asm = component.LoadAssembly(); toolboxItem.AssemblyName = asm.GetName(); - this.Items.Add(new SideTabItemDesigner(toolboxItem)); + this.Items.Add(new SideTabItemDesigner(toolbox, toolboxItem)); } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabItemDesigner.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabItemDesigner.cs index 3c5c597915..bb84332ccb 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabItemDesigner.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/SideTabItemDesigner.cs @@ -28,17 +28,21 @@ namespace ICSharpCode.FormsDesigner.Gui { public class SideTabItemDesigner : SharpDevelopSideTabItem { + ToolboxProvider provider; + ///create a tabitem from a toolboxitem. It init Icon and name from the tag - public SideTabItemDesigner(ToolboxItem tag) : base(tag.DisplayName, tag) + public SideTabItemDesigner(ToolboxProvider provider, ToolboxItem tag) : base(tag.DisplayName, tag) { + this.provider = provider; CanBeRenamed = false; this.Icon = tag.Bitmap; ReloadToolBox(); } ///create a tabitem from a toolboxitem. It init Icon from the tag - public SideTabItemDesigner(string name, ToolboxItem tag) : base(name, tag) + public SideTabItemDesigner(ToolboxProvider provider, string name, ToolboxItem tag) : base(name, tag) { + this.provider = provider; CanBeRenamed = false; this.Icon = tag.Bitmap; ReloadToolBox(); @@ -62,7 +66,7 @@ namespace ICSharpCode.FormsDesigner.Gui public void ReloadToolBox() { if (this.Name != "Pointer") { - ToolboxProvider.ToolboxService.AddToolboxItem(this.Tag as ToolboxItem); + provider.ToolboxService.AddToolboxItem(this.Tag as ToolboxItem); } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/ToolboxProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/ToolboxProvider.cs index aff68b55ea..13b55b42f3 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/ToolboxProvider.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/ToolboxProvider.cs @@ -20,49 +20,53 @@ namespace ICSharpCode.FormsDesigner { public class ToolboxProvider { - static ICSharpCode.FormsDesigner.Services.ToolboxService toolboxService = null; + ICSharpCode.FormsDesigner.Services.ToolboxService toolboxService = null; + SharpDevelopSideBar sideBar; + CustomComponentsSideTab customTab; + ComponentLibraryLoader componentLibraryLoader; + IServiceProvider services; - static SharpDevelopSideBar sideBar; - - static CustomComponentsSideTab customTab; - - static ComponentLibraryLoader componentLibraryLoader = new ComponentLibraryLoader(); + public ToolboxProvider(IServiceProvider services) + { + this.services = services; + componentLibraryLoader = new ComponentLibraryLoader(services); + } - public static ComponentLibraryLoader ComponentLibraryLoader { + public ComponentLibraryLoader ComponentLibraryLoader { get { return componentLibraryLoader; } } - public static ICSharpCode.FormsDesigner.Services.ToolboxService ToolboxService { + public ICSharpCode.FormsDesigner.Services.ToolboxService ToolboxService { get { CreateToolboxService(); return toolboxService; } } - public static SharpDevelopSideBar FormsDesignerSideBar { + public SharpDevelopSideBar FormsDesignerSideBar { get { CreateToolboxService(); return sideBar; } } - static void CreateToolboxService() + void CreateToolboxService() { Debug.Assert(WorkbenchSingleton.InvokeRequired == false); if (toolboxService == null) { sideBar = new SharpDevelopSideBar(); LoadToolbox(); - toolboxService = new ICSharpCode.FormsDesigner.Services.ToolboxService(); + toolboxService = new ICSharpCode.FormsDesigner.Services.ToolboxService(services); ReloadSideTabs(false); toolboxService.SelectedItemUsed += new EventHandler(SelectedToolUsedHandler); sideBar.SideTabDeleted += SideTabDeleted; } } - static string componentLibraryFile = "SharpDevelopControlLibrary.sdcl"; + string componentLibraryFile = "SharpDevelopControlLibrary.sdcl"; - static string GlobalConfigFile { + string GlobalConfigFile { get { return PropertyService.DataDirectory + Path.DirectorySeparatorChar + "options" + Path.DirectorySeparatorChar + @@ -70,18 +74,18 @@ namespace ICSharpCode.FormsDesigner } } - static string UserConfigFile { + string UserConfigFile { get { return Path.Combine(PropertyService.ConfigDirectory, componentLibraryFile); } } - public static void SaveToolbox() + public void SaveToolbox() { componentLibraryLoader.SaveToolComponentLibrary(UserConfigFile); } - public static void LoadToolbox() + public void LoadToolbox() { if (!componentLibraryLoader.LoadToolComponentLibrary(UserConfigFile)) { if (!componentLibraryLoader.LoadToolComponentLibrary(GlobalConfigFile)) { @@ -91,7 +95,7 @@ namespace ICSharpCode.FormsDesigner } } - public static void ReloadSideTabs(bool doInsert) + public void ReloadSideTabs(bool doInsert) { CreateToolboxService(); @@ -99,7 +103,7 @@ namespace ICSharpCode.FormsDesigner foreach (Category category in componentLibraryLoader.Categories) { if (category.IsEnabled) { try { - SideTabDesigner newTab = new SideTabDesigner(sideBar, category, toolboxService); + SideTabDesigner newTab = new SideTabDesigner(this, sideBar, category, toolboxService); newTab.ItemRemoved += SideTabItemRemoved; newTab.ItemsExchanged += SideTabItemsExchanged; sideBar.Tabs.Add(newTab); @@ -111,7 +115,7 @@ namespace ICSharpCode.FormsDesigner if (customTab != null) { customTab.Dispose(); } - customTab = new CustomComponentsSideTab(sideBar, ResourceService.GetString("ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CustomComponents"), toolboxService); + customTab = new CustomComponentsSideTab(this, sideBar, ResourceService.GetString("ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CustomComponents"), toolboxService); customTab.ItemRemoved += SideTabItemRemoved; customTab.ItemsExchanged += SideTabItemsExchanged; sideBar.Tabs.Add(customTab); @@ -121,7 +125,7 @@ namespace ICSharpCode.FormsDesigner toolboxService.SetSelectedToolboxItem(null); } - static void SelectedToolUsedHandler(object sender, EventArgs e) + void SelectedToolUsedHandler(object sender, EventArgs e) { LoggingService.Debug("SelectedToolUsedHandler"); SideTab tab = sideBar.ActiveTab; @@ -163,7 +167,7 @@ namespace ICSharpCode.FormsDesigner sideBar.Refresh(); } - static bool ProjectContainsReference(IProject project, AssemblyName referenceName) + bool ProjectContainsReference(IProject project, AssemblyName referenceName) { LoggingService.Debug("Checking project has reference: " + referenceName.FullName); bool isAlreadyInRefFolder = false; @@ -194,11 +198,11 @@ namespace ICSharpCode.FormsDesigner return isAlreadyInRefFolder; } - static void AddReferenceToProject(IProject project, AssemblyName referenceName) + void AddReferenceToProject(IProject project, AssemblyName referenceName) { LoggingService.Warn("Adding reference to project: " + referenceName.FullName); ReferenceProjectItem reference = new ReferenceProjectItem(project, "Reference"); - ToolComponent toolComponent = ToolboxProvider.ComponentLibraryLoader.GetToolComponent(referenceName.FullName); + ToolComponent toolComponent = ComponentLibraryLoader.GetToolComponent(referenceName.FullName); if (toolComponent == null || toolComponent.HintPath == null) { reference.Include = referenceName.FullName; LoggingService.Debug("Added GAC reference to project: " + reference.Include); @@ -232,7 +236,7 @@ namespace ICSharpCode.FormsDesigner return null; } - static void AddProjectReferenceToProject(IProject project, IProject referenceTo) + void AddProjectReferenceToProject(IProject project, IProject referenceTo) { LoggingService.Warn("Adding project reference to project."); ProjectReferenceProjectItem reference = new ProjectReferenceProjectItem(project, referenceTo); @@ -240,13 +244,13 @@ namespace ICSharpCode.FormsDesigner project.Save(); } - static void SideTabDeleted(object source, SideTabEventArgs e) + void SideTabDeleted(object source, SideTabEventArgs e) { componentLibraryLoader.RemoveCategory(e.SideTab.Name); SaveToolbox(); } - static void SideTabItemRemoved(object source, SideTabItemEventArgs e) + void SideTabItemRemoved(object source, SideTabItemEventArgs e) { SideTabDesigner tab = source as SideTabDesigner; ToolboxItem toolboxItem = e.Item.Tag as ToolboxItem; @@ -256,7 +260,7 @@ namespace ICSharpCode.FormsDesigner } } - static void SideTabItemsExchanged(object source, SideTabItemExchangeEventArgs e) + void SideTabItemsExchanged(object source, SideTabItemExchangeEventArgs e) { SideTabDesigner tab = source as SideTabDesigner; ToolboxItem toolboxItem1 = e.Item1.Tag as ToolboxItem; diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs index c7e534bbc7..e636c42d31 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesignerAppDomainHost.cs @@ -1,9 +1,16 @@ // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.AddIn.Contract; +using System.AddIn.Pipeline; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; - +using System.IO; +using System.Reflection; +using System.Runtime.Remoting.Lifetime; +using System.Text; +using System.Windows.Forms; +using System.Windows.Forms.Integration; using ICSharpCode.FormsDesigner.Services; namespace ICSharpCode.FormsDesigner @@ -11,15 +18,14 @@ namespace ICSharpCode.FormsDesigner /// /// Description of FormsDesignerAppDomainHost. /// - public class FormsDesignerAppDomainHost : MarshalByRefObject + public class FormsDesignerAppDomainHost : MarshalByRefObject, IServiceProvider { DesignSurface designSurface; ServiceContainer container; - string fileName; - public DesignSurface DesignSurface { + public string DesignSurfaceName { get { - return designSurface; + return (designSurface == null) ? null : designSurface.ToString(); } } @@ -37,12 +43,12 @@ namespace ICSharpCode.FormsDesigner static readonly DesignSurfaceManager designSurfaceManager = new DesignSurfaceManager(); - public static FormsDesignerAppDomainHost CreateFormsDesignerInAppDomain(ref AppDomain appDomain, ITypeLocator typeLocator, IGacWrapper gacWrapper) + public static FormsDesignerAppDomainHost CreateFormsDesignerInAppDomain(ref AppDomain appDomain, string fileName, ITypeLocator typeLocator, IGacWrapper gacWrapper, ICommandProvider commands, IFormsDesigner formsDesignerProxy, IFormsDesignerLoggingService logger) { if (appDomain == null) { // Construct and initialize settings for a second AppDomain. AppDomainSetup formsDesignerAppDomainSetup = new AppDomainSetup(); - // bamlDecompilerAppDomainSetup.ApplicationBase = "file:///" + Path.GetDirectoryName(assemblyFileName); + formsDesignerAppDomainSetup.ApplicationBase = Path.GetDirectoryName(typeof(FormsDesignerAppDomainHost).Assembly.Location); formsDesignerAppDomainSetup.DisallowBindingRedirects = false; formsDesignerAppDomainSetup.DisallowCodeDownload = true; formsDesignerAppDomainSetup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; @@ -51,24 +57,93 @@ namespace ICSharpCode.FormsDesigner appDomain = AppDomain.CreateDomain("FormsDesigner AD", null, formsDesignerAppDomainSetup); } var host = (FormsDesignerAppDomainHost)appDomain.CreateInstanceAndUnwrap(typeof(FormsDesignerAppDomainHost).Assembly.FullName, typeof(FormsDesignerAppDomainHost).FullName); - - ServiceContainer container = host.InitServices(typeLocator, gacWrapper); - host.designSurface = designSurfaceManager.CreateDesignSurface(container); - + host.Initialize(fileName, typeLocator, gacWrapper, commands, formsDesignerProxy, logger); return host; } - ServiceContainer InitServices(ITypeLocator typeLocator, IGacWrapper gacWrapper) + void Initialize(string fileName, ITypeLocator typeLocator, IGacWrapper gacWrapper, ICommandProvider commands, IFormsDesigner formsDesignerProxy, IFormsDesignerLoggingService logger) { this.container = new DefaultServiceContainer(); - + container.AddService(typeof(IFormsDesignerLoggingService), logger); container.AddService(typeof(System.Drawing.Design.IPropertyValueUIService), new PropertyValueUIService()); container.AddService(typeof(ITypeResolutionService), new TypeResolutionService(fileName, container, typeLocator)); - container.AddService(typeof(ITypeDiscoveryService), new TypeDiscoveryService(gacWrapper)); - container.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService()); + container.AddService(typeof(ITypeDiscoveryService), new TypeDiscoveryService(gacWrapper, container)); + container.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService(container)); + + this.designSurface = designSurfaceManager.CreateDesignSurface(container); - return container; + container.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), new ICSharpCode.FormsDesigner.Services.MenuCommandService(commands, designSurface).Proxy); + Services.EventBindingService eventBindingService = new Services.EventBindingService(formsDesignerProxy, designSurface); + container.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService); + + InitializeEvents(); + } + + #region Events + public event EventHandler DesignSurfaceLoading; + + protected virtual void OnDesignSurfaceLoading(EventArgs e) + { + if (DesignSurfaceLoading != null) { + DesignSurfaceLoading(this, e); + } + } + + public event LoadedEventHandler DesignSurfaceLoaded; + + protected virtual void OnDesignSurfaceLoaded(LoadedEventArgs e) + { + if (DesignSurfaceLoaded != null) { + DesignSurfaceLoaded(this, e); + } + } + + public event EventHandler DesignSurfaceFlushed; + + protected virtual void OnDesignSurfaceFlushed(EventArgs e) + { + if (DesignSurfaceFlushed != null) { + DesignSurfaceFlushed(this, e); + } + } + + public event EventHandler DesignSurfaceUnloading; + + protected virtual void OnDesignSurfaceUnloading(EventArgs e) + { + if (DesignSurfaceUnloading != null) { + DesignSurfaceUnloading(this, e); + } + } + + void InitializeEvents() + { + designSurface.Loading += designSurface_Loading; + designSurface.Loaded += designSurface_Loaded; + designSurface.Flushed += designSurface_Flushed; + designSurface.Unloading += designSurface_Unloading; + } + + void designSurface_Unloading(object sender, EventArgs e) + { + OnDesignSurfaceUnloading(e); + } + + void designSurface_Flushed(object sender, EventArgs e) + { + OnDesignSurfaceFlushed(e); + } + + void designSurface_Loaded(object sender, LoadedEventArgs e) + { + OnDesignSurfaceLoaded(e); } + + void designSurface_Loading(object sender, EventArgs e) + { + OnDesignSurfaceLoading(e); + } + #endregion public void ActivateDesignSurface() { @@ -83,5 +158,75 @@ namespace ICSharpCode.FormsDesigner public bool IsActiveDesignSurface { get { return designSurfaceManager.ActiveDesignSurface == this.designSurface; } } + + public object GetService(Type serviceType) + { + return designSurface.GetService(serviceType); + } + + public void BeginDesignSurfaceLoad(DesignerLoader loader) + { + designSurface.BeginLoad(loader); + } + + static string FormatLoadErrors(DesignSurface designSurface) + { + StringBuilder sb = new StringBuilder(); + foreach(Exception le in designSurface.LoadErrors) { + sb.AppendLine(le.ToString()); + sb.AppendLine(); + } + return sb.ToString(); + } + + public string LoadErrors { + get { return FormatLoadErrors(designSurface); } + } + + public bool IsDesignSurfaceLoaded { + get { return designSurface.IsLoaded; } + } + + public bool ReferencedAssemblyChanged { + get { return ((TypeResolutionService)GetService(typeof(ITypeResolutionService))).ReferencedAssemblyChanged; } + } + + public void FlushDesignSurface() + { + designSurface.Flush(); + } + + WindowsFormsHost host; + + public INativeHandleContract DesignSurfaceView { + get { + if (host == null) { + host = new WindowsFormsHost(); + host.Child = (Control)designSurface.View; + } + + return FrameworkElementAdapters.ViewToContractAdapter(host); + } + } + + public void DisposeDesignSurface() + { + designSurface.Dispose(); + } + + public INativeHandleContract CreatePropertyGrid() + { + var grid = new PropertyGrid() { Dock = DockStyle.Fill }; + var host = new WindowsFormsHost(); + host.Child = grid; + + return FrameworkElementAdapters.ViewToContractAdapter(host); + } + + public IFormsDesignerLoggingService LoggingService { + get { + return GetService(typeof(IFormsDesignerLoggingService)) as IFormsDesignerLoggingService; + } + } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerAppDomainManager.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerAppDomainManager.cs index e4ceb3d4df..944ec1d4b3 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerAppDomainManager.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerAppDomainManager.cs @@ -14,7 +14,7 @@ namespace ICSharpCode.FormsDesigner /// Gets whether this is a designer domain (and not the SharpDevelop domain) /// public static bool IsDesignerDomain { - get { throw new NotImplementedException(); } + get { return AppDomain.CurrentDomain.FriendlyName == "FormsDesigner AD"; } } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs index 4076210784..fea579fe90 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs @@ -23,6 +23,7 @@ namespace ICSharpCode.FormsDesigner ITypeResolutionService typeResolutionService = null; readonly IDesignerLoader loader; readonly IDesignerGenerator generator; + readonly IFormsDesignerLoggingService logger; public override bool Loading { get { return base.Loading || loading; } @@ -44,7 +45,7 @@ namespace ICSharpCode.FormsDesigner get { return this.generator; } } - public SharpDevelopDesignerLoader(IDesignerGenerator generator, IDesignerLoader loader) + public SharpDevelopDesignerLoader(IServiceProvider services, IDesignerGenerator generator, IDesignerLoader loader) { if (generator == null) { throw new ArgumentNullException("generator", "Generator cannot be null"); @@ -54,6 +55,7 @@ namespace ICSharpCode.FormsDesigner this.generator = generator; this.loader = loader; + this.logger = (IFormsDesignerLoggingService)services.GetService(typeof(IFormsDesignerLoggingService)); } public override void Dispose() @@ -61,10 +63,10 @@ namespace ICSharpCode.FormsDesigner try { IComponentChangeService componentChangeService = (IComponentChangeService)this.GetService(typeof(IComponentChangeService)); if (componentChangeService != null) { - FormsDesignerLoggingService.Debug("Forms designer: Removing ComponentAdded handler for nested container setup"); + logger.Debug("Forms designer: Removing ComponentAdded handler for nested container setup"); componentChangeService.ComponentAdded -= ComponentContainerSetUp; } else { - FormsDesignerLoggingService.Info("Forms designer: Could not remove ComponentAdding handler because IComponentChangeService is no longer available"); + logger.Info("Forms designer: Could not remove ComponentAdding handler because IComponentChangeService is no longer available"); } } finally { base.Dispose(); @@ -80,7 +82,7 @@ namespace ICSharpCode.FormsDesigner base.BeginLoad(host); } - static void ComponentContainerSetUp(object sender, ComponentEventArgs e) + void ComponentContainerSetUp(object sender, ComponentEventArgs e) { // HACK: This reflection mess fixes SD2-1374 and SD2-1375. However I am not sure why it is needed in the first place. // There seems to be a problem with the nested container class used @@ -98,7 +100,7 @@ namespace ICSharpCode.FormsDesigner if (nestedContainer != null) { MethodInfo getServiceMethod = nestedContainer.GetType().GetMethod("GetService", BindingFlags.Instance | BindingFlags.NonPublic, null, new [] {typeof(Type)}, null); if (getServiceMethod != null) { - FormsDesignerLoggingService.Debug("Forms designer: Initializing nested service container of " + e.Component.ToString() + " using Reflection"); + logger.Debug("Forms designer: Initializing nested service container of " + e.Component.ToString() + " using Reflection"); getServiceMethod.Invoke(nestedContainer, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic, null, new [] {typeof(IServiceContainer)}, null); } } @@ -110,16 +112,16 @@ namespace ICSharpCode.FormsDesigner CodeDomLocalizationProvider localizationProvider = new CodeDomLocalizationProvider(designerLoaderHost, model); IDesignerSerializationManager manager = (IDesignerSerializationManager)designerLoaderHost.GetService(typeof(IDesignerSerializationManager)); - manager.AddSerializationProvider(new SharpDevelopSerializationProvider()); + manager.AddSerializationProvider(new SharpDevelopSerializationProvider(designerLoaderHost)); manager.AddSerializationProvider(localizationProvider); base.Initialize(); IComponentChangeService componentChangeService = (IComponentChangeService)this.GetService(typeof(IComponentChangeService)); if (componentChangeService != null) { - FormsDesignerLoggingService.Debug("Forms designer: Adding ComponentAdded handler for nested container setup"); + logger.Debug("Forms designer: Adding ComponentAdded handler for nested container setup"); componentChangeService.ComponentAdded += ComponentContainerSetUp; } else { - FormsDesignerLoggingService.Warn("Forms designer: Cannot add ComponentAdded handler for nested container setup because IComponentChangeService is unavailable"); + logger.Warn("Forms designer: Cannot add ComponentAdded handler for nested container setup because IComponentChangeService is unavailable"); } } @@ -132,13 +134,13 @@ namespace ICSharpCode.FormsDesigner try { base.OnEndLoad(successful, errors); } catch(ExceptionCollection e) { - FormsDesignerLoggingService.Error("DesignerLoader.OnEndLoad error " + e.Message, e); + logger.Error("DesignerLoader.OnEndLoad error " + e.Message, e); foreach(Exception ine in e.Exceptions) { - FormsDesignerLoggingService.Error("DesignerLoader.OnEndLoad error " + ine.Message, ine); + logger.Error("DesignerLoader.OnEndLoad error " + ine.Message, ine); } throw; } catch(Exception e) { - FormsDesignerLoggingService.Error("DesignerLoader.OnEndLoad error " + e.Message, e); + logger.Error("DesignerLoader.OnEndLoad error " + e.Message, e); throw; } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ComponentLibraryLoader.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ComponentLibraryLoader.cs index 3d552b00a2..370f4d706c 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ComponentLibraryLoader.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ComponentLibraryLoader.cs @@ -223,6 +223,15 @@ namespace ICSharpCode.FormsDesigner.Gui ArrayList assemblies = new ArrayList(); ArrayList categories = new ArrayList(); + IServiceProvider provider; + IFormsDesignerLoggingService logger; + + public ComponentLibraryLoader(IServiceProvider provider) + { + this.provider = provider; + logger = (IFormsDesignerLoggingService)provider.GetService(typeof(IFormsDesignerLoggingService)); + } + public ArrayList Categories { get { return categories; @@ -326,15 +335,15 @@ namespace ICSharpCode.FormsDesigner.Gui Category newCategory = new Category(name); foreach (XmlNode componentNode in node.ChildNodes) { ToolComponent newToolComponent = new ToolComponent(componentNode.Attributes["class"].InnerText, - (ComponentAssembly)assemblies[Int32.Parse(componentNode.Attributes["assembly"].InnerText)], - IsEnabled(componentNode.Attributes["enabled"])); + (ComponentAssembly)assemblies[Int32.Parse(componentNode.Attributes["assembly"].InnerText)], + IsEnabled(componentNode.Attributes["enabled"])); newCategory.ToolComponents.Add(newToolComponent); } categories.Add(newCategory); } } } catch (Exception e) { - FormsDesignerLoggingService.Warn("ComponentLibraryLoader.LoadToolComponentLibrary: " + e.Message); + logger.Warn("ComponentLibraryLoader.LoadToolComponentLibrary: " + e.Message); return false; } return true; @@ -364,7 +373,7 @@ namespace ICSharpCode.FormsDesigner.Gui b.MakeTransparent(); } } catch (Exception e) { - FormsDesignerLoggingService.Warn("ComponentLibraryLoader.GetIcon: " + e.Message); + logger.Warn("ComponentLibraryLoader.GetIcon: " + e.Message); } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs index d28973f69b..c3991d57a7 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs @@ -26,7 +26,7 @@ namespace ICSharpCode.FormsDesigner.Gui void Init(IDesignerHost host) { - FormsDesignerLoggingService.Debug("Initializing MyToolBoxItem: " + className); + ((IFormsDesignerLoggingService)host.GetService(typeof(IFormsDesignerLoggingService))).Debug("Initializing MyToolBoxItem: " + className); if (host == null) throw new ArgumentNullException("host"); if (sourceFileName != null) { TypeResolutionService typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as TypeResolutionService; diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DefaultMemberRelationshipService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DefaultMemberRelationshipService.cs index f268f8ae5f..6ea7927072 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DefaultMemberRelationshipService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DefaultMemberRelationshipService.cs @@ -10,14 +10,17 @@ namespace ICSharpCode.FormsDesigner.Services { public class DefaultMemberRelationshipService : MemberRelationshipService { - public DefaultMemberRelationshipService() + IServiceProvider services; + + public DefaultMemberRelationshipService(IServiceProvider services) { + this.services = services; } public override bool SupportsRelationship(MemberRelationship source, MemberRelationship relationship) { #if WFDESIGN_LOG_MEMBERRELATIONSHIPSERVICE - FormsDesignerLoggingService.Debug("MemberRelationshipService: SupportsRelationship called, source=" + ToString(source) + ", relationship=" + ToString(relationship)); + ((IFormsDesignerLoggingService)services.GetService(typeof(IFormsDesignerLoggingService))).Debug("MemberRelationshipService: SupportsRelationship called, source=" + ToString(source) + ", relationship=" + ToString(relationship)); #endif return true; } @@ -25,9 +28,9 @@ namespace ICSharpCode.FormsDesigner.Services #if WFDESIGN_LOG_MEMBERRELATIONSHIPSERVICE protected override MemberRelationship GetRelationship(MemberRelationship source) { - FormsDesignerLoggingService.Debug("MemberRelationshipService: GetRelationship called, source=" + ToString(source)); + ((IFormsDesignerLoggingService)services.GetService(typeof(IFormsDesignerLoggingService))).Debug("MemberRelationshipService: GetRelationship called, source=" + ToString(source)); var mrs = base.GetRelationship(source); - FormsDesignerLoggingService.Debug("MemberRelationshipService: -> returning " + ToString(mrs)); + ((IFormsDesignerLoggingService)services.GetService(typeof(IFormsDesignerLoggingService))).Debug("MemberRelationshipService: -> returning " + ToString(mrs)); return mrs; } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs index edbfa51e83..4a6fba3ae0 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs @@ -3,6 +3,7 @@ using System; using System.CodeDom; +using System.Collections.Generic; using System.ComponentModel.Design; using System.IO; using System.Linq; @@ -20,6 +21,7 @@ namespace ICSharpCode.FormsDesigner.Services public interface IMessageService { void ShowOutputPad(); + void ShowPropertiesPad(); void AppendTextToBuildMessages(string text); void ShowException(Exception ex, string message); string CodeStatementToString(CodeStatement statement); @@ -34,7 +36,186 @@ namespace ICSharpCode.FormsDesigner.Services public interface ICommandProvider { - void InitializeGlobalCommands(IMenuCommandService service); void ShowContextMenu(CommandID menuID, int x, int y); } + + public static class CommandIDEnumConverter + { + public static CommandID ToCommandID(CommandIDEnum key) + { + switch (key) { + case CommandIDEnum.AlignBottom: + return StandardCommands.AlignBottom; + case CommandIDEnum.AlignHorizontalCenters: + return StandardCommands.AlignHorizontalCenters; + case CommandIDEnum.AlignLeft: + return StandardCommands.AlignLeft; + case CommandIDEnum.AlignRight: + return StandardCommands.AlignRight; + case CommandIDEnum.AlignToGrid: + return StandardCommands.AlignToGrid; + case CommandIDEnum.AlignTop: + return StandardCommands.AlignTop; + case CommandIDEnum.AlignVerticalCenters: + return StandardCommands.AlignVerticalCenters; + case CommandIDEnum.ArrangeBottom: + return StandardCommands.ArrangeBottom; + case CommandIDEnum.ArrangeRight: + return StandardCommands.ArrangeRight; + case CommandIDEnum.BringForward: + return StandardCommands.BringForward; + case CommandIDEnum.BringToFront: + return StandardCommands.BringToFront; + case CommandIDEnum.CenterHorizontally: + return StandardCommands.CenterHorizontally; + case CommandIDEnum.CenterVertically: + return StandardCommands.CenterVertically; + case CommandIDEnum.ViewCode: + return StandardCommands.ViewCode; + case CommandIDEnum.DocumentOutline: + return StandardCommands.DocumentOutline; + case CommandIDEnum.Copy: + return StandardCommands.Copy; + case CommandIDEnum.Cut: + return StandardCommands.Cut; + case CommandIDEnum.Delete: + return StandardCommands.Delete; + case CommandIDEnum.Group: + return StandardCommands.Group; + case CommandIDEnum.HorizSpaceConcatenate: + return StandardCommands.HorizSpaceConcatenate; + case CommandIDEnum.HorizSpaceDecrease: + return StandardCommands.HorizSpaceDecrease; + case CommandIDEnum.HorizSpaceIncrease: + return StandardCommands.HorizSpaceIncrease; + case CommandIDEnum.HorizSpaceMakeEqual: + return StandardCommands.HorizSpaceMakeEqual; + case CommandIDEnum.Paste: + return StandardCommands.Paste; + case CommandIDEnum.Properties: + return StandardCommands.Properties; + case CommandIDEnum.Redo: + return StandardCommands.Redo; + case CommandIDEnum.MultiLevelRedo: + return StandardCommands.MultiLevelRedo; + case CommandIDEnum.SelectAll: + return StandardCommands.SelectAll; + case CommandIDEnum.SendBackward: + return StandardCommands.SendBackward; + case CommandIDEnum.SendToBack: + return StandardCommands.SendToBack; + case CommandIDEnum.SizeToControl: + return StandardCommands.SizeToControl; + case CommandIDEnum.SizeToControlHeight: + return StandardCommands.SizeToControlHeight; + case CommandIDEnum.SizeToControlWidth: + return StandardCommands.SizeToControlWidth; + case CommandIDEnum.SizeToFit: + return StandardCommands.SizeToFit; + case CommandIDEnum.SizeToGrid: + return StandardCommands.SizeToGrid; + case CommandIDEnum.SnapToGrid: + return StandardCommands.SnapToGrid; + case CommandIDEnum.TabOrder: + return StandardCommands.TabOrder; + case CommandIDEnum.Undo: + return StandardCommands.Undo; + case CommandIDEnum.MultiLevelUndo: + return StandardCommands.MultiLevelUndo; + case CommandIDEnum.Ungroup: + return StandardCommands.Ungroup; + case CommandIDEnum.VertSpaceConcatenate: + return StandardCommands.VertSpaceConcatenate; + case CommandIDEnum.VertSpaceDecrease: + return StandardCommands.VertSpaceDecrease; + case CommandIDEnum.VertSpaceIncrease: + return StandardCommands.VertSpaceIncrease; + case CommandIDEnum.VertSpaceMakeEqual: + return StandardCommands.VertSpaceMakeEqual; + case CommandIDEnum.ShowGrid: + return StandardCommands.ShowGrid; + case CommandIDEnum.ViewGrid: + return StandardCommands.ViewGrid; + case CommandIDEnum.Replace: + return StandardCommands.Replace; + case CommandIDEnum.PropertiesWindow: + return StandardCommands.PropertiesWindow; + case CommandIDEnum.LockControls: + return StandardCommands.LockControls; + case CommandIDEnum.F1Help: + return StandardCommands.F1Help; + case CommandIDEnum.ArrangeIcons: + return StandardCommands.ArrangeIcons; + case CommandIDEnum.LineupIcons: + return StandardCommands.LineupIcons; + case CommandIDEnum.ShowLargeIcons: + return StandardCommands.ShowLargeIcons; + case CommandIDEnum.VerbFirst: + return StandardCommands.VerbFirst; + case CommandIDEnum.VerbLast: + return StandardCommands.VerbLast; + default: + throw new Exception("Invalid value for CommandIDEnum"); + } + } + } + + public enum CommandIDEnum + { + AlignBottom, + AlignHorizontalCenters, + AlignLeft, + AlignRight, + AlignToGrid, + AlignTop, + AlignVerticalCenters, + ArrangeBottom, + ArrangeRight, + BringForward, + BringToFront, + CenterHorizontally, + CenterVertically, + ViewCode, + DocumentOutline, + Copy, + Cut, + Delete, + Group, + HorizSpaceConcatenate, + HorizSpaceDecrease, + HorizSpaceIncrease, + HorizSpaceMakeEqual, + Paste, + Properties, + Redo, + MultiLevelRedo, + SelectAll, + SendBackward, + SendToBack, + SizeToControl, + SizeToControlHeight, + SizeToControlWidth, + SizeToFit, + SizeToGrid, + SnapToGrid, + TabOrder, + Undo, + MultiLevelUndo, + Ungroup, + VertSpaceConcatenate, + VertSpaceDecrease, + VertSpaceIncrease, + VertSpaceMakeEqual , + ShowGrid, + ViewGrid, + Replace, + PropertiesWindow, + LockControls, + F1Help, + ArrangeIcons, + LineupIcons, + ShowLargeIcons, + VerbFirst, + VerbLast + } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs index 6aef59704c..f366d03ad8 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs @@ -49,9 +49,11 @@ namespace ICSharpCode.FormsDesigner.Services return value; } + IFormsDesignerLoggingService logger = provider.GetService(typeof(IFormsDesignerLoggingService)) as IFormsDesignerLoggingService; + IComponent component = context.Instance as IComponent; if (component == null || component.Site == null) { - FormsDesignerLoggingService.Info("Editing of image properties on objects not implementing IComponent and components without Site is not supported by the ImageResourceEditor."); + logger.Info("Editing of image properties on objects not implementing IComponent and components without Site is not supported by the ImageResourceEditor."); if (typeof(Icon).IsAssignableFrom(context.PropertyDescriptor.PropertyType)) { return new IconEditor().EditValue(context, provider, value); } else { diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs index 9a21830e74..957c943374 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs @@ -4,26 +4,93 @@ using System; using System.Drawing; using System.Windows.Forms; -using System.Windows.Forms.Design; - using CommandID = System.ComponentModel.Design.CommandID; using MenuCommand = System.ComponentModel.Design.MenuCommand; +using StandardCommands = System.ComponentModel.Design.StandardCommands; namespace ICSharpCode.FormsDesigner.Services { public class MenuCommandService : System.ComponentModel.Design.MenuCommandService { + public readonly MenuCommandServiceProxy Proxy; + ICommandProvider commandProvider; public MenuCommandService(ICommandProvider commandProvider, IServiceProvider serviceProvider) : base(serviceProvider) { + Proxy = new MenuCommandServiceProxy(this); this.commandProvider = commandProvider; - commandProvider.InitializeGlobalCommands(this); + AddProxyCommand(delegate { + IFormsDesigner fd = serviceProvider.GetService(typeof(IFormsDesigner)) as IFormsDesigner; + if (fd != null) + fd.ShowSourceCode(); + }, StandardCommands.ViewCode); + AddProxyCommand(delegate { + IMessageService ms = serviceProvider.GetService(typeof(IMessageService)) as IMessageService; + if (ms != null) + ms.ShowPropertiesPad(); + }, StandardCommands.PropertiesWindow); } public override void ShowContextMenu(CommandID menuID, int x, int y) { commandProvider.ShowContextMenu(menuID, x, y); } + + public void AddProxyCommand(EventHandler commandCallBack, CommandID commandID) + { + AddCommand(new MenuCommand(commandCallBack, commandID)); + } + } + + public class MenuCommandServiceProxy : MarshalByRefObject, System.ComponentModel.Design.IMenuCommandService + { + MenuCommandService mcs; + + public MenuCommandServiceProxy(MenuCommandService mcs) + { + this.mcs = mcs; + } + + public System.ComponentModel.Design.DesignerVerbCollection Verbs { + get { + return mcs.Verbs; + } + } + + public void AddCommand(MenuCommand command) + { + mcs.AddCommand(command); + } + + public MenuCommand FindCommand(CommandID commandID) + { + return mcs.FindCommand(commandID); + } + + public void ShowContextMenu(CommandID menuID, int x, int y) + { + mcs.ShowContextMenu(menuID, x, y); + } + + public void AddVerb(System.ComponentModel.Design.DesignerVerb verb) + { + mcs.AddVerb(verb); + } + + public bool GlobalInvoke(CommandID commandID) + { + return mcs.GlobalInvoke(commandID); + } + + public void RemoveCommand(MenuCommand command) + { + mcs.RemoveCommand(command); + } + + public void RemoveVerb(System.ComponentModel.Design.DesignerVerb verb) + { + mcs.RemoveVerb(verb); + } } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs index 9989d05b17..9f836b4061 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs @@ -17,12 +17,16 @@ namespace ICSharpCode.FormsDesigner.Services internal sealed class ProjectResourcesComponentCodeDomSerializer : CodeDomSerializer { readonly CodeDomSerializer baseSerializer; + readonly IServiceProvider provider; + IFormsDesignerLoggingService logger; - internal ProjectResourcesComponentCodeDomSerializer(CodeDomSerializer baseSerializer) + internal ProjectResourcesComponentCodeDomSerializer(IServiceProvider provider, CodeDomSerializer baseSerializer) { if (baseSerializer == null) throw new ArgumentNullException("baseSerializer"); this.baseSerializer = baseSerializer; + this.provider = provider; + logger = (IFormsDesignerLoggingService)provider.GetService(typeof(IFormsDesignerLoggingService)); } public override object Deserialize(IDesignerSerializationManager manager, object codeObject) @@ -94,16 +98,16 @@ namespace ICSharpCode.FormsDesigner.Services IMessageService messenger = manager.GetService(typeof(IMessageService)) as IMessageService; - FormsDesignerLoggingService.Debug("Forms designer: deserializing a property assignment:"); - FormsDesignerLoggingService.Debug("-> " + messenger.CodeStatementToString(assignStatement)); + logger.Debug("Forms designer: deserializing a property assignment:"); + logger.Debug("-> " + messenger.CodeStatementToString(assignStatement)); IComponent component = this.baseSerializer.Deserialize(manager, propRefTarget.TargetObject) as IComponent; if (component == null) { - FormsDesignerLoggingService.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer could not deserialze the target object to IComponent"); + logger.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer could not deserialze the target object to IComponent"); return false; } if (component.Site == null) { - FormsDesignerLoggingService.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer: The deserialized component '" + component.ToString() + "' does not have a Site."); + logger.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer: The deserialized component '" + component.ToString() + "' does not have a Site."); return false; } @@ -147,8 +151,8 @@ namespace ICSharpCode.FormsDesigner.Services IMessageService messenger = manager.GetService(typeof(IMessageService)) as IMessageService; - FormsDesignerLoggingService.Debug("Forms designer: deserializing a method invocation:"); - FormsDesignerLoggingService.Debug("-> " + messenger.CodeStatementToString(new CodeExpressionStatement(invokeExpression))); + logger.Debug("Forms designer: deserializing a method invocation:"); + logger.Debug("-> " + messenger.CodeStatementToString(new CodeExpressionStatement(invokeExpression))); object extenderProvider = this.baseSerializer.Deserialize(manager, invokeExpression.Method.TargetObject); if (extenderProvider == null) { @@ -157,11 +161,11 @@ namespace ICSharpCode.FormsDesigner.Services IComponent targetComponent = this.baseSerializer.Deserialize(manager, invokeExpression.Parameters[0]) as IComponent; if (targetComponent == null) { - FormsDesignerLoggingService.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer could not deserialze the target object to IComponent"); + logger.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer could not deserialze the target object to IComponent"); return false; } if (targetComponent.Site == null) { - FormsDesignerLoggingService.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer: The deserialized component '" + targetComponent.ToString() + "' does not have a Site."); + logger.Info("Forms designer: ProjectResourcesComponentCodeDomSerializer: The deserialized component '" + targetComponent.ToString() + "' does not have a Site."); return false; } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs index ad6cd74c16..00bbaaae31 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs @@ -20,12 +20,16 @@ namespace ICSharpCode.FormsDesigner.Services internal sealed class ProjectResourcesMemberCodeDomSerializer : MemberCodeDomSerializer { readonly MemberCodeDomSerializer baseSerializer; + readonly IServiceProvider provider; + IFormsDesignerLoggingService logger; - public ProjectResourcesMemberCodeDomSerializer(MemberCodeDomSerializer baseSerializer) + public ProjectResourcesMemberCodeDomSerializer(IServiceProvider provider, MemberCodeDomSerializer baseSerializer) { if (baseSerializer == null) throw new ArgumentNullException("baseSerializer"); this.baseSerializer = baseSerializer; + this.provider = provider; + logger = (IFormsDesignerLoggingService)provider.GetService(typeof(IFormsDesignerLoggingService)); } public override void Serialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor, CodeStatementCollection statements) @@ -52,7 +56,7 @@ namespace ICSharpCode.FormsDesigner.Services var prs = manager.GetService(typeof(IProjectResourceService)) as IProjectResourceService; if (prs == null) { - FormsDesignerLoggingService.Warn("ProjectResourceService not found"); + logger.Warn("ProjectResourceService not found"); return false; } @@ -60,7 +64,7 @@ namespace ICSharpCode.FormsDesigner.Services if (resourceInfo == null) return false; if (!Object.ReferenceEquals(resourceInfo.OriginalValue, propDesc.GetValue(value))) { - FormsDesignerLoggingService.Info("Value of property '" + propDesc.Name + "' on component '" + value.ToString() + "' is not equal to stored project resource value. Ignoring this resource."); + logger.Info("Value of property '" + propDesc.Name + "' on component '" + value.ToString() + "' is not equal to stored project resource value. Ignoring this resource."); return false; } @@ -72,16 +76,16 @@ namespace ICSharpCode.FormsDesigner.Services // Now do the actual serialization. - FormsDesignerLoggingService.Debug("Serializing project resource: Component '" + component.ToString() + "', Property: '" + propDesc.Name + "', Resource class: '" + resourceClassFullyQualifiedName + "', Resource property: '" + resourcePropertyName + "'"); + logger.Debug("Serializing project resource: Component '" + component.ToString() + "', Property: '" + propDesc.Name + "', Resource class: '" + resourceClassFullyQualifiedName + "', Resource property: '" + resourcePropertyName + "'"); var targetObjectExpr = base.SerializeToExpression(manager, value); if (targetObjectExpr == null) { - FormsDesignerLoggingService.Info("Target object could not be serialized: " + value.ToString()); + logger.Info("Target object could not be serialized: " + value.ToString()); return false; } if (propDesc.SerializationVisibility == DesignerSerializationVisibility.Content) { - FormsDesignerLoggingService.Debug("-> is a content property, ignoring this."); + logger.Debug("-> is a content property, ignoring this."); return false; } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/SharpDevelopSerializationProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/SharpDevelopSerializationProvider.cs index 8c6721ac70..c02bb186ac 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/SharpDevelopSerializationProvider.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/SharpDevelopSerializationProvider.cs @@ -12,8 +12,11 @@ namespace ICSharpCode.FormsDesigner.Services /// internal sealed class SharpDevelopSerializationProvider : IDesignerSerializationProvider { - internal SharpDevelopSerializationProvider() + IServiceProvider provider; + + internal SharpDevelopSerializationProvider(IServiceProvider provider) { + this.provider = provider; } object IDesignerSerializationProvider.GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType) @@ -23,17 +26,16 @@ namespace ICSharpCode.FormsDesigner.Services return null; } - if (serializerType == typeof(MemberCodeDomSerializer)) { if (typeof(PropertyDescriptor).IsAssignableFrom(objectType) && !(currentSerializer is ProjectResourcesMemberCodeDomSerializer)) { - return new ProjectResourcesMemberCodeDomSerializer((MemberCodeDomSerializer)currentSerializer); + return new ProjectResourcesMemberCodeDomSerializer(provider, (MemberCodeDomSerializer)currentSerializer); } } else if (serializerType == typeof(CodeDomSerializer)) { if (typeof(IComponent).IsAssignableFrom(objectType) && !(currentSerializer is ProjectResourcesComponentCodeDomSerializer)) { - return new ProjectResourcesComponentCodeDomSerializer((CodeDomSerializer)currentSerializer); + return new ProjectResourcesComponentCodeDomSerializer(provider, (CodeDomSerializer)currentSerializer); } } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ToolboxService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ToolboxService.cs index 3cb6a7c6a0..bc80a8dfad 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ToolboxService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ToolboxService.cs @@ -65,14 +65,20 @@ namespace ICSharpCode.FormsDesigner.Services string selectedCategory = null; ToolboxItem selectedItem = null; + IServiceProvider provider; + IFormsDesignerLoggingService logger; + // Constructor - public ToolboxService() + public ToolboxService(IServiceProvider provider) { IList list = new ArrayList(); toolboxByCategory.Add(ALL_CATEGORIES, list); list = new ArrayList(); toolboxByHost.Add(ALL_HOSTS, list); + + this.provider = provider; + logger = (IFormsDesignerLoggingService)provider.GetService(typeof(IFormsDesignerLoggingService)); } // Properties @@ -178,7 +184,7 @@ namespace ICSharpCode.FormsDesigner.Services /// public void AddCreator(ToolboxItemCreatorCallback creator, string format, IDesignerHost host) { - FormsDesignerLoggingService.DebugFormatted("\tDefaultToolboxService:AddCreator({0}, {1}, {2})", creator, format, host); + logger.DebugFormatted("\tDefaultToolboxService:AddCreator({0}, {1}, {2})", creator, format, host); if (host == null) { creators.Add(format, creator); } else { @@ -249,7 +255,7 @@ namespace ICSharpCode.FormsDesigner.Services public ToolboxItem DeserializeToolboxItem(object serializedObject, IDesignerHost host) { - FormsDesignerLoggingService.DebugFormatted("DeserializeToolboxItem {0} host {1}", serializedObject, host); + logger.DebugFormatted("DeserializeToolboxItem {0} host {1}", serializedObject, host); if (serializedObject is System.Windows.Forms.IDataObject) { if (((System.Windows.Forms.IDataObject)serializedObject).GetDataPresent(typeof(ToolboxItem))) { ToolboxItem item = (ToolboxItem) ((System.Windows.Forms.IDataObject)serializedObject).GetData(typeof(ToolboxItem)); @@ -258,7 +264,7 @@ namespace ICSharpCode.FormsDesigner.Services if (host != null) { list = (ArrayList)toolboxByHost[host]; if (list != null && list.Contains(item)) { - FormsDesignerLoggingService.Warn(item.TypeName); + logger.Warn(item.TypeName); return item; } } @@ -268,7 +274,7 @@ namespace ICSharpCode.FormsDesigner.Services } } } - FormsDesignerLoggingService.WarnFormatted("DeserializeToolboxItem {0} host {1} return null", serializedObject, host); + logger.WarnFormatted("DeserializeToolboxItem {0} host {1} return null", serializedObject, host); return null; } @@ -293,7 +299,7 @@ namespace ICSharpCode.FormsDesigner.Services public ToolboxItemCollection GetToolboxItems() { - FormsDesignerLoggingService.Debug("ToolboxService: GetToolboxItems"); + logger.Debug("ToolboxService: GetToolboxItems"); ToolboxItem[] items = new ToolboxItem[toolboxItems.Count]; toolboxItems.CopyTo(items); return new ToolboxItemCollection(items); @@ -301,7 +307,7 @@ namespace ICSharpCode.FormsDesigner.Services public ToolboxItemCollection GetToolboxItems(string category) { - FormsDesignerLoggingService.Debug("ToolboxService: GetToolboxItems category " + category); + logger.Debug("ToolboxService: GetToolboxItems category " + category); if (category == null) { category = ALL_CATEGORIES; } @@ -315,7 +321,7 @@ namespace ICSharpCode.FormsDesigner.Services public ToolboxItemCollection GetToolboxItems(string category, IDesignerHost host) { - FormsDesignerLoggingService.DebugFormatted("ToolboxService: GetToolboxItems category {0} host {1}", category, host); + logger.DebugFormatted("ToolboxService: GetToolboxItems category {0} host {1}", category, host); if (category == null) { category = ALL_CATEGORIES; } diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeDiscoveryService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeDiscoveryService.cs index 0eea7e322e..31acc4b2e0 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeDiscoveryService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeDiscoveryService.cs @@ -13,10 +13,14 @@ namespace ICSharpCode.FormsDesigner.Services public class TypeDiscoveryService : ITypeDiscoveryService { IGacWrapper gacWrapper; + IServiceProvider services; + IFormsDesignerLoggingService logger; - public TypeDiscoveryService(IGacWrapper gacWrapper) + public TypeDiscoveryService(IGacWrapper gacWrapper, IServiceProvider services) { this.gacWrapper = gacWrapper; + this.services = services; + this.logger = ((IFormsDesignerLoggingService)services.GetService(typeof(IFormsDesignerLoggingService))); } /// @@ -33,7 +37,7 @@ namespace ICSharpCode.FormsDesigner.Services baseType = typeof(object); } - FormsDesignerLoggingService.Debug("TypeDiscoveryService.GetTypes for " + baseType.FullName + logger.Debug("TypeDiscoveryService.GetTypes for " + baseType.FullName + "excludeGlobalTypes=" + excludeGlobalTypes.ToString()); //seek in all assemblies //allow to work designers like columns editor in datagridview @@ -50,7 +54,7 @@ namespace ICSharpCode.FormsDesigner.Services // ignore assembly load errors } } - FormsDesignerLoggingService.Debug("TypeDiscoveryService returns " + types.Count + " types"); + logger.Debug("TypeDiscoveryService returns " + types.Count + " types"); // TODO - Don't look in all assemblies. // Should use the current project and its referenced assemblies diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs index 709898d9f9..ef1f59437b 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs @@ -70,6 +70,7 @@ namespace ICSharpCode.FormsDesigner.Services string formSourceFileName; ServiceContainer serviceContainer; ITypeLocator typeLocator; + static IFormsDesignerLoggingService logger; /// /// Dictionary of file name -> hash of loaded assemblies for the currently designed document. @@ -86,6 +87,7 @@ namespace ICSharpCode.FormsDesigner.Services this.formSourceFileName = formSourceFileName; this.serviceContainer = serviceContainer; this.typeLocator = typeLocator; + logger = (IFormsDesignerLoggingService)serviceContainer.GetService(typeof(IFormsDesignerLoggingService)); } static string GetHash(string fileName) @@ -99,10 +101,10 @@ namespace ICSharpCode.FormsDesigner.Services try { return new Uri(asm.CodeBase, UriKind.Absolute).LocalPath; } catch (UriFormatException ex) { - FormsDesignerLoggingService.Warn("Could not determine path for assembly '" + asm.ToString() + "', CodeBase='" + asm.CodeBase + "': " + ex.Message); + logger.Warn("Could not determine path for assembly '" + asm.ToString() + "', CodeBase='" + asm.CodeBase + "': " + ex.Message); return asm.Location; } catch (InvalidOperationException ex) { - FormsDesignerLoggingService.Warn("Could not determine path for assembly '" + asm.ToString() + "', CodeBase='" + asm.CodeBase + "': " + ex.Message); + logger.Warn("Could not determine path for assembly '" + asm.ToString() + "', CodeBase='" + asm.CodeBase + "': " + ex.Message); return asm.Location; } } @@ -134,12 +136,12 @@ namespace ICSharpCode.FormsDesigner.Services Assembly asm; if (assemblyDict.TryGetValue(hash, out asm)) return asm; - FormsDesignerLoggingService.Debug("Loading assembly " + fileName + " (hash " + hash + ")"); + logger.Debug("Loading assembly " + fileName + " (hash " + hash + ")"); try { asm = Assembly.Load(File.ReadAllBytes(fileName)); } catch (BadImageFormatException e) { if (e.Message.Contains("HRESULT: 0x8013141D")) { - FormsDesignerLoggingService.Debug("Get HRESULt 0x8013141D, loading netmodule"); + logger.Debug("Get HRESULt 0x8013141D, loading netmodule"); //netmodule string tempPath = Path.GetTempFileName(); File.Delete(tempPath); @@ -171,14 +173,14 @@ namespace ICSharpCode.FormsDesigner.Services // but do not prevent the designer from loading. // The error might be caused by an assembly that is // not even needed for the designer to load. - FormsDesignerLoggingService.Error("Error loading assembly " + fileName, e); + logger.Error("Error loading assembly " + fileName, e); messenger.ShowOutputPad(); messenger.AppendTextToBuildMessages("${res:FileUtilityService.ErrorWhileLoading}\r\n" + fileName + "\r\n" + e.Message + "\r\n"); return null; } } catch (FileLoadException e) { if (e.Message.Contains("HRESULT: 0x80131402")) { - FormsDesignerLoggingService.Debug("Get HRESULt 0x80131402, loading mixed modes asm from disk"); + logger.Debug("Get HRESULt 0x80131402, loading mixed modes asm from disk"); //this is C++/CLI Mixed assembly which can only be loaded from disk, not in-memory string tempPath = Path.GetTempFileName(); File.Delete(tempPath); @@ -285,7 +287,7 @@ namespace ICSharpCode.FormsDesigner.Services } #if DEBUG if (!name.StartsWith("System.")) { - FormsDesignerLoggingService.Debug("TypeResolutionService: Looking for " + name); + logger.Debug("TypeResolutionService: Looking for " + name); } #endif try { @@ -323,7 +325,7 @@ namespace ICSharpCode.FormsDesigner.Services try { assembly = Assembly.Load(assemblyName); } catch (Exception e) { - FormsDesignerLoggingService.Error(e); + logger.Error(e); } if (assembly != null) { string fileName = GetOriginalAssemblyFullPath(assembly); @@ -365,14 +367,14 @@ namespace ICSharpCode.FormsDesigner.Services return type; } catch (Exception e) { - FormsDesignerLoggingService.Error(e); + logger.Error(e); } return null; } public void ReferenceAssembly(AssemblyName name) { - FormsDesignerLoggingService.Warn("TODO: Add Assembly reference : " + name); + logger.Warn("TODO: Add Assembly reference : " + name); } /// @@ -442,7 +444,7 @@ namespace ICSharpCode.FormsDesigner.Services static Assembly AssemblyResolveEventHandler(object sender, ResolveEventArgs args) { - FormsDesignerLoggingService.Debug("TypeResolutionService: AssemblyResolveEventHandler: " + args.Name); + logger.Debug("TypeResolutionService: AssemblyResolveEventHandler: " + args.Name); Assembly lastAssembly = null; @@ -459,7 +461,7 @@ namespace ICSharpCode.FormsDesigner.Services } if (lastAssembly != null) { TypeResolutionService.DesignerAssemblies.Add(lastAssembly); - FormsDesignerLoggingService.Info("ICSharpAssemblyResolver found..." + args.Name); + logger.Info("ICSharpAssemblyResolver found..." + args.Name); } return lastAssembly; } diff --git a/src/Main/Base/Project/Src/Gui/AbstractViewContentHandlingLoadErrors.cs b/src/Main/Base/Project/Src/Gui/AbstractViewContentHandlingLoadErrors.cs index 4f64214739..a11da563bd 100644 --- a/src/Main/Base/Project/Src/Gui/AbstractViewContentHandlingLoadErrors.cs +++ b/src/Main/Base/Project/Src/Gui/AbstractViewContentHandlingLoadErrors.cs @@ -79,7 +79,7 @@ namespace ICSharpCode.SharpDevelop.Gui TextBox errorTextBox; - void ShowError(Exception ex) + protected void ShowError(Exception ex) { if (errorTextBox == null) { errorTextBox = new TextBox();