From 53f51a2cf3086fbf968f7a906a6c5268f8106431 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 28 Aug 2010 22:28:29 +0200 Subject: [PATCH] Add interface to allow replacing WinFormsMessageService with a custom implementation when hosting SharpDevelop. --- .../Project/Src/Gui/WorkbenchSingleton.cs | 12 ++++++---- .../ICSharpCode.Core.WinForms.csproj | 1 + .../MessageService/IDialogMessageService.cs | 24 +++++++++++++++++++ .../MessageService/WinFormsMessageService.cs | 2 +- 4 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/Main/ICSharpCode.Core.WinForms/MessageService/IDialogMessageService.cs diff --git a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs index 82470dbb9f..93f245457b 100644 --- a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs +++ b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs @@ -57,7 +57,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public static IStatusBarService StatusBar { + public static IStatusBarService StatusBar { get { return workbench != null ? workbench.StatusBar : null; } @@ -77,10 +77,12 @@ namespace ICSharpCode.SharpDevelop.Gui Project.CustomToolsService.Initialize(); Project.BuildModifiedProjectsOnlyService.Initialize(); - var messageService = (WinFormsMessageService)Core.Services.ServiceManager.Instance.MessageService; - messageService.DialogOwner = workbench.MainWin32Window; - Debug.Assert(messageService.DialogOwner != null); - messageService.DialogSynchronizeInvoke = workbench.SynchronizingObject; + var messageService = Core.Services.ServiceManager.Instance.MessageService as IDialogMessageService; + if (messageService != null) { + messageService.DialogOwner = workbench.MainWin32Window; + Debug.Assert(messageService.DialogOwner != null); + messageService.DialogSynchronizeInvoke = workbench.SynchronizingObject; + } workbench.Initialize(); workbench.SetMemento(PropertyService.Get(workbenchMemento, new Properties())); diff --git a/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj b/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj index 11cbbce1a9..bc4adb189b 100644 --- a/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj +++ b/src/Main/ICSharpCode.Core.WinForms/ICSharpCode.Core.WinForms.csproj @@ -59,6 +59,7 @@ + diff --git a/src/Main/ICSharpCode.Core.WinForms/MessageService/IDialogMessageService.cs b/src/Main/ICSharpCode.Core.WinForms/MessageService/IDialogMessageService.cs new file mode 100644 index 0000000000..83d8308578 --- /dev/null +++ b/src/Main/ICSharpCode.Core.WinForms/MessageService/IDialogMessageService.cs @@ -0,0 +1,24 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.ComponentModel; +using System.Windows.Forms; + +using ICSharpCode.Core.Services; + +namespace ICSharpCode.Core.WinForms +{ + /// + /// Message service that sets an owner for dialog boxes. + /// + public interface IDialogMessageService : IMessageService + { + IWin32Window DialogOwner { set; get; } + ISynchronizeInvoke DialogSynchronizeInvoke { set; get; } + } +} diff --git a/src/Main/ICSharpCode.Core.WinForms/MessageService/WinFormsMessageService.cs b/src/Main/ICSharpCode.Core.WinForms/MessageService/WinFormsMessageService.cs index 888b0030f0..6809f7a0e7 100644 --- a/src/Main/ICSharpCode.Core.WinForms/MessageService/WinFormsMessageService.cs +++ b/src/Main/ICSharpCode.Core.WinForms/MessageService/WinFormsMessageService.cs @@ -18,7 +18,7 @@ namespace ICSharpCode.Core.WinForms /// All text displayed using the MessageService is passed to the /// to replace ${res} markers. /// - public class WinFormsMessageService : IMessageService + public class WinFormsMessageService : IDialogMessageService { /// /// Gets/Sets the form used as owner for shown message boxes.