SEBWIN-219: Extracted message box from UI factory and tidied up user interface contracts.
This commit is contained in:
parent
6334294e4d
commit
49d9b03d7a
37 changed files with 183 additions and 185 deletions
|
@ -18,6 +18,7 @@ using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using BrowserSettings = SafeExamBrowser.Contracts.Configuration.Settings.BrowserSettings;
|
using BrowserSettings = SafeExamBrowser.Contracts.Configuration.Settings.BrowserSettings;
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ namespace SafeExamBrowser.Browser
|
||||||
private IList<IApplicationInstance> instances = new List<IApplicationInstance>();
|
private IList<IApplicationInstance> instances = new List<IApplicationInstance>();
|
||||||
private BrowserSettings settings;
|
private BrowserSettings settings;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
|
private IMessageBox messageBox;
|
||||||
private IRuntimeProxy runtime;
|
private IRuntimeProxy runtime;
|
||||||
private RuntimeInfo runtimeInfo;
|
private RuntimeInfo runtimeInfo;
|
||||||
private IUserInterfaceFactory uiFactory;
|
private IUserInterfaceFactory uiFactory;
|
||||||
|
@ -38,11 +40,13 @@ namespace SafeExamBrowser.Browser
|
||||||
BrowserSettings settings,
|
BrowserSettings settings,
|
||||||
RuntimeInfo runtimeInfo,
|
RuntimeInfo runtimeInfo,
|
||||||
ILogger logger,
|
ILogger logger,
|
||||||
|
IMessageBox messageBox,
|
||||||
IRuntimeProxy runtime,
|
IRuntimeProxy runtime,
|
||||||
IText text,
|
IText text,
|
||||||
IUserInterfaceFactory uiFactory)
|
IUserInterfaceFactory uiFactory)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.messageBox = messageBox;
|
||||||
this.runtime = runtime;
|
this.runtime = runtime;
|
||||||
this.runtimeInfo = runtimeInfo;
|
this.runtimeInfo = runtimeInfo;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
@ -122,7 +126,7 @@ namespace SafeExamBrowser.Browser
|
||||||
|
|
||||||
private void Instance_ConfigurationDetected(string url, CancelEventArgs args)
|
private void Instance_ConfigurationDetected(string url, CancelEventArgs args)
|
||||||
{
|
{
|
||||||
var result = uiFactory.Show(TextKey.MessageBox_ReconfigurationQuestion, TextKey.MessageBox_ReconfigurationQuestionTitle, MessageBoxAction.YesNo, MessageBoxIcon.Question);
|
var result = messageBox.Show(TextKey.MessageBox_ReconfigurationQuestion, TextKey.MessageBox_ReconfigurationQuestionTitle, MessageBoxAction.YesNo, MessageBoxIcon.Question);
|
||||||
var reconfigure = result == MessageBoxResult.Yes;
|
var reconfigure = result == MessageBoxResult.Yes;
|
||||||
var allowed = false;
|
var allowed = false;
|
||||||
|
|
||||||
|
@ -137,13 +141,13 @@ namespace SafeExamBrowser.Browser
|
||||||
|
|
||||||
if (!allowed)
|
if (!allowed)
|
||||||
{
|
{
|
||||||
uiFactory.Show(TextKey.MessageBox_ReconfigurationDenied, TextKey.MessageBox_ReconfigurationDeniedTitle);
|
messageBox.Show(TextKey.MessageBox_ReconfigurationDenied, TextKey.MessageBox_ReconfigurationDeniedTitle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
logger.Error("Failed to communicate the reconfiguration request to the runtime!", e);
|
logger.Error("Failed to communicate the reconfiguration request to the runtime!", e);
|
||||||
uiFactory.Show(TextKey.MessageBox_ReconfigurationError, TextKey.MessageBox_ReconfigurationErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_ReconfigurationError, TextKey.MessageBox_ReconfigurationErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,8 @@ using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
|
using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Browser;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Browser
|
namespace SafeExamBrowser.Browser
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System;
|
||||||
using CefSharp.WinForms;
|
using CefSharp.WinForms;
|
||||||
using SafeExamBrowser.Browser.Handlers;
|
using SafeExamBrowser.Browser.Handlers;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Browser;
|
||||||
using BrowserSettings = SafeExamBrowser.Contracts.Configuration.Settings.BrowserSettings;
|
using BrowserSettings = SafeExamBrowser.Contracts.Configuration.Settings.BrowserSettings;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Browser
|
namespace SafeExamBrowser.Browser
|
||||||
|
|
|
@ -10,8 +10,8 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
using Moq;
|
using Moq;
|
||||||
using SafeExamBrowser.Client.Notifications;
|
using SafeExamBrowser.Client.Notifications;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Client.UnitTests.Notifications
|
namespace SafeExamBrowser.Client.UnitTests.Notifications
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,6 +11,7 @@ using Moq;
|
||||||
using SafeExamBrowser.Client.Notifications;
|
using SafeExamBrowser.Client.Notifications;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Client.UnitTests.Notifications
|
namespace SafeExamBrowser.Client.UnitTests.Notifications
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,7 +16,9 @@ using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.Monitoring;
|
using SafeExamBrowser.Contracts.Monitoring;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Client.Behaviour
|
namespace SafeExamBrowser.Client.Behaviour
|
||||||
{
|
{
|
||||||
|
@ -24,6 +26,7 @@ namespace SafeExamBrowser.Client.Behaviour
|
||||||
{
|
{
|
||||||
private IDisplayMonitor displayMonitor;
|
private IDisplayMonitor displayMonitor;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
|
private IMessageBox messageBox;
|
||||||
private IOperationSequence operations;
|
private IOperationSequence operations;
|
||||||
private IProcessMonitor processMonitor;
|
private IProcessMonitor processMonitor;
|
||||||
private IRuntimeProxy runtime;
|
private IRuntimeProxy runtime;
|
||||||
|
@ -54,6 +57,7 @@ namespace SafeExamBrowser.Client.Behaviour
|
||||||
public ClientController(
|
public ClientController(
|
||||||
IDisplayMonitor displayMonitor,
|
IDisplayMonitor displayMonitor,
|
||||||
ILogger logger,
|
ILogger logger,
|
||||||
|
IMessageBox messageBox,
|
||||||
IOperationSequence operations,
|
IOperationSequence operations,
|
||||||
IProcessMonitor processMonitor,
|
IProcessMonitor processMonitor,
|
||||||
IRuntimeProxy runtime,
|
IRuntimeProxy runtime,
|
||||||
|
@ -64,6 +68,7 @@ namespace SafeExamBrowser.Client.Behaviour
|
||||||
{
|
{
|
||||||
this.displayMonitor = displayMonitor;
|
this.displayMonitor = displayMonitor;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.messageBox = messageBox;
|
||||||
this.operations = operations;
|
this.operations = operations;
|
||||||
this.processMonitor = processMonitor;
|
this.processMonitor = processMonitor;
|
||||||
this.runtime = runtime;
|
this.runtime = runtime;
|
||||||
|
@ -186,7 +191,7 @@ namespace SafeExamBrowser.Client.Behaviour
|
||||||
private void Runtime_ConnectionLost()
|
private void Runtime_ConnectionLost()
|
||||||
{
|
{
|
||||||
logger.Error("Lost connection to the runtime!");
|
logger.Error("Lost connection to the runtime!");
|
||||||
uiFactory.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
|
|
||||||
taskbar.Close();
|
taskbar.Close();
|
||||||
shutdown.Invoke();
|
shutdown.Invoke();
|
||||||
|
@ -194,7 +199,7 @@ namespace SafeExamBrowser.Client.Behaviour
|
||||||
|
|
||||||
private void Taskbar_QuitButtonClicked()
|
private void Taskbar_QuitButtonClicked()
|
||||||
{
|
{
|
||||||
var result = uiFactory.Show(TextKey.MessageBox_Quit, TextKey.MessageBox_QuitTitle, MessageBoxAction.YesNo, MessageBoxIcon.Question);
|
var result = messageBox.Show(TextKey.MessageBox_Quit, TextKey.MessageBox_QuitTitle, MessageBoxAction.YesNo, MessageBoxIcon.Question);
|
||||||
|
|
||||||
if (result == MessageBoxResult.Yes)
|
if (result == MessageBoxResult.Yes)
|
||||||
{
|
{
|
||||||
|
@ -205,7 +210,7 @@ namespace SafeExamBrowser.Client.Behaviour
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
logger.Error("Failed to communicate shutdown request to the runtime!", e);
|
logger.Error("Failed to communicate shutdown request to the runtime!", e);
|
||||||
uiFactory.Show(TextKey.MessageBox_QuitError, TextKey.MessageBox_QuitErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_QuitError, TextKey.MessageBox_QuitErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
using SafeExamBrowser.Contracts.WindowsApi;
|
using SafeExamBrowser.Contracts.WindowsApi;
|
||||||
using SafeExamBrowser.Core.Behaviour.OperationModel;
|
using SafeExamBrowser.Core.Behaviour.OperationModel;
|
||||||
using SafeExamBrowser.Core.Communication;
|
using SafeExamBrowser.Core.Communication;
|
||||||
|
@ -47,6 +48,7 @@ namespace SafeExamBrowser.Client
|
||||||
private ClientConfiguration configuration;
|
private ClientConfiguration configuration;
|
||||||
private IClientHost clientHost;
|
private IClientHost clientHost;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
|
private IMessageBox messageBox;
|
||||||
private INativeMethods nativeMethods;
|
private INativeMethods nativeMethods;
|
||||||
private IRuntimeProxy runtimeProxy;
|
private IRuntimeProxy runtimeProxy;
|
||||||
private ISystemInfo systemInfo;
|
private ISystemInfo systemInfo;
|
||||||
|
@ -68,6 +70,7 @@ namespace SafeExamBrowser.Client
|
||||||
InitializeLogging();
|
InitializeLogging();
|
||||||
|
|
||||||
text = new Text(logger);
|
text = new Text(logger);
|
||||||
|
messageBox = new MessageBox(text);
|
||||||
uiFactory = new UserInterfaceFactory(text);
|
uiFactory = new UserInterfaceFactory(text);
|
||||||
runtimeProxy = new RuntimeProxy(runtimeHostUri, new ModuleLogger(logger, typeof(RuntimeProxy)));
|
runtimeProxy = new RuntimeProxy(runtimeHostUri, new ModuleLogger(logger, typeof(RuntimeProxy)));
|
||||||
|
|
||||||
|
@ -96,7 +99,7 @@ namespace SafeExamBrowser.Client
|
||||||
|
|
||||||
var sequence = new OperationSequence(logger, operations);
|
var sequence = new OperationSequence(logger, operations);
|
||||||
|
|
||||||
ClientController = new ClientController(displayMonitor, logger, sequence, processMonitor, runtimeProxy, shutdown, Taskbar, uiFactory, windowMonitor);
|
ClientController = new ClientController(displayMonitor, logger, messageBox, sequence, processMonitor, runtimeProxy, shutdown, Taskbar, uiFactory, windowMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void LogStartupInformation()
|
internal void LogStartupInformation()
|
||||||
|
@ -145,7 +148,7 @@ namespace SafeExamBrowser.Client
|
||||||
private IOperation BuildBrowserOperation()
|
private IOperation BuildBrowserOperation()
|
||||||
{
|
{
|
||||||
var moduleLogger = new ModuleLogger(logger, typeof(BrowserApplicationController));
|
var moduleLogger = new ModuleLogger(logger, typeof(BrowserApplicationController));
|
||||||
var browserController = new BrowserApplicationController(configuration.Settings.Browser, configuration.RuntimeInfo, moduleLogger, runtimeProxy, text, uiFactory);
|
var browserController = new BrowserApplicationController(configuration.Settings.Browser, configuration.RuntimeInfo, moduleLogger, messageBox, runtimeProxy, text, uiFactory);
|
||||||
var browserInfo = new BrowserApplicationInfo();
|
var browserInfo = new BrowserApplicationInfo();
|
||||||
var operation = new BrowserOperation(browserController, browserInfo, logger, Taskbar, uiFactory);
|
var operation = new BrowserOperation(browserController, browserInfo, logger, Taskbar, uiFactory);
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.Behaviour;
|
using SafeExamBrowser.Contracts.Behaviour;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Client.Notifications
|
namespace SafeExamBrowser.Client.Notifications
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.Behaviour;
|
using SafeExamBrowser.Contracts.Behaviour;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Client.Notifications
|
namespace SafeExamBrowser.Client.Notifications
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.Configuration
|
namespace SafeExamBrowser.Contracts.Configuration
|
||||||
{
|
{
|
||||||
|
|
|
@ -123,14 +123,14 @@
|
||||||
<Compile Include="SystemComponents\ISystemComponent.cs" />
|
<Compile Include="SystemComponents\ISystemComponent.cs" />
|
||||||
<Compile Include="SystemComponents\IWirelessNetwork.cs" />
|
<Compile Include="SystemComponents\IWirelessNetwork.cs" />
|
||||||
<Compile Include="SystemComponents\WirelessNetworkStatus.cs" />
|
<Compile Include="SystemComponents\WirelessNetworkStatus.cs" />
|
||||||
<Compile Include="UserInterface\IBrowserControl.cs" />
|
<Compile Include="UserInterface\Browser\IBrowserControl.cs" />
|
||||||
<Compile Include="UserInterface\IBrowserWindow.cs" />
|
<Compile Include="UserInterface\Browser\IBrowserWindow.cs" />
|
||||||
<Compile Include="UserInterface\IMessageBox.cs" />
|
<Compile Include="UserInterface\MessageBox\IMessageBox.cs" />
|
||||||
<Compile Include="UserInterface\IProgressIndicator.cs" />
|
<Compile Include="UserInterface\IProgressIndicator.cs" />
|
||||||
<Compile Include="UserInterface\IRuntimeWindow.cs" />
|
<Compile Include="UserInterface\Windows\IRuntimeWindow.cs" />
|
||||||
<Compile Include="UserInterface\MessageBoxResult.cs" />
|
<Compile Include="UserInterface\MessageBox\MessageBoxResult.cs" />
|
||||||
<Compile Include="UserInterface\Taskbar\INotificationButton.cs" />
|
<Compile Include="UserInterface\Taskbar\INotificationButton.cs" />
|
||||||
<Compile Include="UserInterface\ISplashScreen.cs" />
|
<Compile Include="UserInterface\Windows\ISplashScreen.cs" />
|
||||||
<Compile Include="UserInterface\Taskbar\ISystemKeyboardLayoutControl.cs" />
|
<Compile Include="UserInterface\Taskbar\ISystemKeyboardLayoutControl.cs" />
|
||||||
<Compile Include="UserInterface\Taskbar\ISystemPowerSupplyControl.cs" />
|
<Compile Include="UserInterface\Taskbar\ISystemPowerSupplyControl.cs" />
|
||||||
<Compile Include="UserInterface\Taskbar\ISystemControl.cs" />
|
<Compile Include="UserInterface\Taskbar\ISystemControl.cs" />
|
||||||
|
@ -140,9 +140,9 @@
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="UserInterface\Taskbar\IApplicationButton.cs" />
|
<Compile Include="UserInterface\Taskbar\IApplicationButton.cs" />
|
||||||
<Compile Include="UserInterface\IUserInterfaceFactory.cs" />
|
<Compile Include="UserInterface\IUserInterfaceFactory.cs" />
|
||||||
<Compile Include="UserInterface\IWindow.cs" />
|
<Compile Include="UserInterface\Windows\IWindow.cs" />
|
||||||
<Compile Include="UserInterface\MessageBoxAction.cs" />
|
<Compile Include="UserInterface\MessageBox\MessageBoxAction.cs" />
|
||||||
<Compile Include="UserInterface\MessageBoxIcon.cs" />
|
<Compile Include="UserInterface\MessageBox\MessageBoxIcon.cs" />
|
||||||
<Compile Include="WindowsApi\IBounds.cs" />
|
<Compile Include="WindowsApi\IBounds.cs" />
|
||||||
<Compile Include="WindowsApi\IDesktop.cs" />
|
<Compile Include="WindowsApi\IDesktop.cs" />
|
||||||
<Compile Include="WindowsApi\INativeMethods.cs" />
|
<Compile Include="WindowsApi\INativeMethods.cs" />
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.Browser
|
||||||
{
|
{
|
||||||
public delegate void AddressChangedEventHandler(string address);
|
public delegate void AddressChangedEventHandler(string address);
|
||||||
public delegate void LoadingStateChangedEventHandler(bool isLoading);
|
public delegate void LoadingStateChangedEventHandler(bool isLoading);
|
|
@ -6,7 +6,9 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.Contracts.UserInterface.Browser
|
||||||
{
|
{
|
||||||
public delegate void ActionRequestedEventHandler();
|
public delegate void ActionRequestedEventHandler();
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
|
using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Browser;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface
|
||||||
{
|
{
|
||||||
|
@ -18,7 +20,7 @@ namespace SafeExamBrowser.Contracts.UserInterface
|
||||||
/// from the particular user interface framework in use, all dynamically generated user interface elements must be generated by this
|
/// from the particular user interface framework in use, all dynamically generated user interface elements must be generated by this
|
||||||
/// factory.
|
/// factory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IUserInterfaceFactory : IMessageBox
|
public interface IUserInterfaceFactory
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new about window displaying information about the currently running application version.
|
/// Creates a new about window displaying information about the currently running application version.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.MessageBox
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines the API for message boxes.
|
/// Defines the API for message boxes.
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.MessageBox
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines all actions available for a message box.
|
/// Defines all actions available for a message box.
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.MessageBox
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines all icons available in a message box.
|
/// Defines all icons available in a message box.
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.MessageBox
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines all possible results of a message box.
|
/// Defines all possible results of a message box.
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.Windows
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main window of the runtime application component. It is controlled by the <see cref="Behaviour.IRuntimeController"/> and serves
|
/// The main window of the runtime application component. It is controlled by the <see cref="Behaviour.IRuntimeController"/> and serves
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.Windows
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines the functionality of a splash screen.
|
/// Defines the functionality of a splash screen.
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.Windows
|
||||||
{
|
{
|
||||||
public delegate void WindowClosingEventHandler();
|
public delegate void WindowClosingEventHandler();
|
||||||
|
|
|
@ -16,6 +16,7 @@ using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
using SafeExamBrowser.Runtime.Behaviour.Operations;
|
using SafeExamBrowser.Runtime.Behaviour.Operations;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
|
@ -24,22 +25,22 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
public class ConfigurationOperationTests
|
public class ConfigurationOperationTests
|
||||||
{
|
{
|
||||||
private Mock<ILogger> logger;
|
private Mock<ILogger> logger;
|
||||||
|
private Mock<IMessageBox> messageBox;
|
||||||
private RuntimeInfo info;
|
private RuntimeInfo info;
|
||||||
private Mock<IConfigurationRepository> repository;
|
private Mock<IConfigurationRepository> repository;
|
||||||
private Settings settings;
|
private Settings settings;
|
||||||
private Mock<IText> text;
|
private Mock<IText> text;
|
||||||
private Mock<IUserInterfaceFactory> uiFactory;
|
|
||||||
private ConfigurationOperation sut;
|
private ConfigurationOperation sut;
|
||||||
|
|
||||||
[TestInitialize]
|
[TestInitialize]
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
logger = new Mock<ILogger>();
|
|
||||||
info = new RuntimeInfo();
|
info = new RuntimeInfo();
|
||||||
|
logger = new Mock<ILogger>();
|
||||||
|
messageBox = new Mock<IMessageBox>();
|
||||||
repository = new Mock<IConfigurationRepository>();
|
repository = new Mock<IConfigurationRepository>();
|
||||||
settings = new Settings();
|
settings = new Settings();
|
||||||
text = new Mock<IText>();
|
text = new Mock<IText>();
|
||||||
uiFactory = new Mock<IUserInterfaceFactory>();
|
|
||||||
|
|
||||||
info.AppDataFolder = @"C:\Not\Really\AppData";
|
info.AppDataFolder = @"C:\Not\Really\AppData";
|
||||||
info.DefaultSettingsFileName = "SettingsDummy.txt";
|
info.DefaultSettingsFileName = "SettingsDummy.txt";
|
||||||
|
@ -53,11 +54,11 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
{
|
{
|
||||||
repository.Setup(r => r.LoadDefaultSettings());
|
repository.Setup(r => r.LoadDefaultSettings());
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, null);
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, null);
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, new string[] { });
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, new string[] { });
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
{
|
{
|
||||||
var path = @"an/invalid\path.'*%yolo/()";
|
var path = @"an/invalid\path.'*%yolo/()";
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, new [] { "blubb.exe", path });
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, new [] { "blubb.exe", path });
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
}
|
}
|
||||||
|
@ -83,7 +84,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
info.ProgramDataFolder = location;
|
info.ProgramDataFolder = location;
|
||||||
info.AppDataFolder = location;
|
info.AppDataFolder = location;
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, new[] { "blubb.exe", path });
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, new[] { "blubb.exe", path });
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
|
|
||||||
|
@ -98,7 +99,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
info.ProgramDataFolder = location;
|
info.ProgramDataFolder = location;
|
||||||
info.AppDataFolder = $@"{location}\WRONG";
|
info.AppDataFolder = $@"{location}\WRONG";
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, null);
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, null);
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
|
|
||||||
|
@ -112,7 +113,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
|
|
||||||
info.AppDataFolder = location;
|
info.AppDataFolder = location;
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, null);
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, null);
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
|
|
||||||
|
@ -122,7 +123,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void MustFallbackToDefaultsAsLastPrio()
|
public void MustFallbackToDefaultsAsLastPrio()
|
||||||
{
|
{
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, null);
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, null);
|
||||||
|
|
||||||
sut.Perform();
|
sut.Perform();
|
||||||
|
|
||||||
|
@ -133,9 +134,9 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
public void MustAbortIfWishedByUser()
|
public void MustAbortIfWishedByUser()
|
||||||
{
|
{
|
||||||
info.ProgramDataFolder = Path.GetDirectoryName(GetType().Assembly.Location);
|
info.ProgramDataFolder = Path.GetDirectoryName(GetType().Assembly.Location);
|
||||||
uiFactory.Setup(u => u.Show(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<MessageBoxAction>(), It.IsAny<MessageBoxIcon>())).Returns(MessageBoxResult.Yes);
|
messageBox.Setup(u => u.Show(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<MessageBoxAction>(), It.IsAny<MessageBoxIcon>())).Returns(MessageBoxResult.Yes);
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, null);
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, null);
|
||||||
|
|
||||||
var result = sut.Perform();
|
var result = sut.Perform();
|
||||||
|
|
||||||
|
@ -145,9 +146,9 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void MustNotAbortIfNotWishedByUser()
|
public void MustNotAbortIfNotWishedByUser()
|
||||||
{
|
{
|
||||||
uiFactory.Setup(u => u.Show(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<MessageBoxAction>(), It.IsAny<MessageBoxIcon>())).Returns(MessageBoxResult.No);
|
messageBox.Setup(u => u.Show(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<MessageBoxAction>(), It.IsAny<MessageBoxIcon>())).Returns(MessageBoxResult.No);
|
||||||
|
|
||||||
sut = new ConfigurationOperation(repository.Object, logger.Object, info, text.Object, uiFactory.Object, null);
|
sut = new ConfigurationOperation(repository.Object, logger.Object, messageBox.Object, info, text.Object, null);
|
||||||
|
|
||||||
var result = sut.Perform();
|
var result = sut.Perform();
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Runtime.Behaviour.Operations
|
namespace SafeExamBrowser.Runtime.Behaviour.Operations
|
||||||
{
|
{
|
||||||
|
@ -21,9 +22,9 @@ namespace SafeExamBrowser.Runtime.Behaviour.Operations
|
||||||
{
|
{
|
||||||
private IConfigurationRepository repository;
|
private IConfigurationRepository repository;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
|
private IMessageBox messageBox;
|
||||||
private RuntimeInfo runtimeInfo;
|
private RuntimeInfo runtimeInfo;
|
||||||
private IText text;
|
private IText text;
|
||||||
private IUserInterfaceFactory uiFactory;
|
|
||||||
private string[] commandLineArgs;
|
private string[] commandLineArgs;
|
||||||
|
|
||||||
public IProgressIndicator ProgressIndicator { private get; set; }
|
public IProgressIndicator ProgressIndicator { private get; set; }
|
||||||
|
@ -31,17 +32,17 @@ namespace SafeExamBrowser.Runtime.Behaviour.Operations
|
||||||
public ConfigurationOperation(
|
public ConfigurationOperation(
|
||||||
IConfigurationRepository repository,
|
IConfigurationRepository repository,
|
||||||
ILogger logger,
|
ILogger logger,
|
||||||
|
IMessageBox messageBox,
|
||||||
RuntimeInfo runtimeInfo,
|
RuntimeInfo runtimeInfo,
|
||||||
IText text,
|
IText text,
|
||||||
IUserInterfaceFactory uiFactory,
|
|
||||||
string[] commandLineArgs)
|
string[] commandLineArgs)
|
||||||
{
|
{
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
this.messageBox = messageBox;
|
||||||
this.commandLineArgs = commandLineArgs;
|
this.commandLineArgs = commandLineArgs;
|
||||||
this.runtimeInfo = runtimeInfo;
|
this.runtimeInfo = runtimeInfo;
|
||||||
this.text = text;
|
this.text = text;
|
||||||
this.uiFactory = uiFactory;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult Perform()
|
public OperationResult Perform()
|
||||||
|
@ -129,7 +130,7 @@ namespace SafeExamBrowser.Runtime.Behaviour.Operations
|
||||||
{
|
{
|
||||||
var message = text.Get(TextKey.MessageBox_ClientConfigurationQuestion);
|
var message = text.Get(TextKey.MessageBox_ClientConfigurationQuestion);
|
||||||
var title = text.Get(TextKey.MessageBox_ClientConfigurationQuestionTitle);
|
var title = text.Get(TextKey.MessageBox_ClientConfigurationQuestionTitle);
|
||||||
var abort = uiFactory.Show(message, title, MessageBoxAction.YesNo, MessageBoxIcon.Question);
|
var abort = messageBox.Show(message, title, MessageBoxAction.YesNo, MessageBoxIcon.Question);
|
||||||
|
|
||||||
return abort == MessageBoxResult.Yes;
|
return abort == MessageBoxResult.Yes;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Runtime.Behaviour
|
namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
{
|
{
|
||||||
|
@ -24,6 +26,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
|
|
||||||
private IConfigurationRepository configuration;
|
private IConfigurationRepository configuration;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
|
private IMessageBox messageBox;
|
||||||
private IOperationSequence bootstrapSequence;
|
private IOperationSequence bootstrapSequence;
|
||||||
private IOperationSequence sessionSequence;
|
private IOperationSequence sessionSequence;
|
||||||
private IRuntimeHost runtimeHost;
|
private IRuntimeHost runtimeHost;
|
||||||
|
@ -37,6 +40,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
public RuntimeController(
|
public RuntimeController(
|
||||||
IConfigurationRepository configuration,
|
IConfigurationRepository configuration,
|
||||||
ILogger logger,
|
ILogger logger,
|
||||||
|
IMessageBox messageBox,
|
||||||
IOperationSequence bootstrapSequence,
|
IOperationSequence bootstrapSequence,
|
||||||
IOperationSequence sessionSequence,
|
IOperationSequence sessionSequence,
|
||||||
IRuntimeHost runtimeHost,
|
IRuntimeHost runtimeHost,
|
||||||
|
@ -46,11 +50,12 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
IUserInterfaceFactory uiFactory)
|
IUserInterfaceFactory uiFactory)
|
||||||
{
|
{
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
this.logger = logger;
|
|
||||||
this.bootstrapSequence = bootstrapSequence;
|
this.bootstrapSequence = bootstrapSequence;
|
||||||
this.sessionSequence = sessionSequence;
|
this.logger = logger;
|
||||||
|
this.messageBox = messageBox;
|
||||||
this.runtimeHost = runtimeHost;
|
this.runtimeHost = runtimeHost;
|
||||||
this.runtimeInfo = runtimeInfo;
|
this.runtimeInfo = runtimeInfo;
|
||||||
|
this.sessionSequence = sessionSequence;
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.shutdown = shutdown;
|
this.shutdown = shutdown;
|
||||||
this.uiFactory = uiFactory;
|
this.uiFactory = uiFactory;
|
||||||
|
@ -86,7 +91,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
logger.Info("--- Application startup aborted! ---");
|
logger.Info("--- Application startup aborted! ---");
|
||||||
logger.Log(string.Empty);
|
logger.Log(string.Empty);
|
||||||
|
|
||||||
uiFactory.Show(TextKey.MessageBox_StartupError, TextKey.MessageBox_StartupErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_StartupError, TextKey.MessageBox_StartupErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
return initialized && sessionRunning;
|
return initialized && sessionRunning;
|
||||||
|
@ -121,7 +126,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
logger.Info("--- Shutdown procedure failed! ---");
|
logger.Info("--- Shutdown procedure failed! ---");
|
||||||
logger.Log(string.Empty);
|
logger.Log(string.Empty);
|
||||||
|
|
||||||
uiFactory.Show(TextKey.MessageBox_ShutdownError, TextKey.MessageBox_ShutdownErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_ShutdownError, TextKey.MessageBox_ShutdownErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
splashScreen?.Close();
|
splashScreen?.Close();
|
||||||
|
@ -163,7 +168,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
|
|
||||||
if (result == OperationResult.Failed)
|
if (result == OperationResult.Failed)
|
||||||
{
|
{
|
||||||
uiFactory.Show(TextKey.MessageBox_SessionStartError, TextKey.MessageBox_SessionStartErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_SessionStartError, TextKey.MessageBox_SessionStartErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!initial)
|
if (!initial)
|
||||||
|
@ -193,7 +198,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger.Info(">>>--- Session reversion was erroneous! ---<<<");
|
logger.Info(">>>--- Session reversion was erroneous! ---<<<");
|
||||||
uiFactory.Show(TextKey.MessageBox_SessionStopError, TextKey.MessageBox_SessionStopErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_SessionStopError, TextKey.MessageBox_SessionStopErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +230,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
{
|
{
|
||||||
logger.Error($"Client application has unexpectedly terminated with exit code {exitCode}!");
|
logger.Error($"Client application has unexpectedly terminated with exit code {exitCode}!");
|
||||||
// TODO: Check if message box is rendered on new desktop as well -> otherwise shutdown is blocked!
|
// TODO: Check if message box is rendered on new desktop as well -> otherwise shutdown is blocked!
|
||||||
uiFactory.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
|
|
||||||
shutdown.Invoke();
|
shutdown.Invoke();
|
||||||
}
|
}
|
||||||
|
@ -234,7 +239,7 @@ namespace SafeExamBrowser.Runtime.Behaviour
|
||||||
{
|
{
|
||||||
logger.Error("Lost connection to the client application!");
|
logger.Error("Lost connection to the client application!");
|
||||||
// TODO: Check if message box is rendered on new desktop as well -> otherwise shutdown is blocked!
|
// TODO: Check if message box is rendered on new desktop as well -> otherwise shutdown is blocked!
|
||||||
uiFactory.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error);
|
messageBox.Show(TextKey.MessageBox_ApplicationError, TextKey.MessageBox_ApplicationErrorTitle, icon: MessageBoxIcon.Error);
|
||||||
|
|
||||||
shutdown.Invoke();
|
shutdown.Invoke();
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ namespace SafeExamBrowser.Runtime
|
||||||
InitializeLogging();
|
InitializeLogging();
|
||||||
|
|
||||||
var text = new Text(logger);
|
var text = new Text(logger);
|
||||||
|
var messageBox = new MessageBox(text);
|
||||||
var uiFactory = new UserInterfaceFactory(text);
|
var uiFactory = new UserInterfaceFactory(text);
|
||||||
var desktop = new Desktop(new ModuleLogger(logger, typeof(Desktop)));
|
var desktop = new Desktop(new ModuleLogger(logger, typeof(Desktop)));
|
||||||
var processFactory = new ProcessFactory(desktop, new ModuleLogger(logger, typeof(ProcessFactory)));
|
var processFactory = new ProcessFactory(desktop, new ModuleLogger(logger, typeof(ProcessFactory)));
|
||||||
|
@ -61,7 +62,7 @@ namespace SafeExamBrowser.Runtime
|
||||||
bootstrapOperations.Enqueue(new CommunicationOperation(runtimeHost, logger));
|
bootstrapOperations.Enqueue(new CommunicationOperation(runtimeHost, logger));
|
||||||
|
|
||||||
sessionOperations.Enqueue(new SessionSequenceStartOperation(sessionController));
|
sessionOperations.Enqueue(new SessionSequenceStartOperation(sessionController));
|
||||||
sessionOperations.Enqueue(new ConfigurationOperation(configuration, logger, runtimeInfo, text, uiFactory, args));
|
sessionOperations.Enqueue(new ConfigurationOperation(configuration, logger, messageBox, runtimeInfo, text, args));
|
||||||
sessionOperations.Enqueue(new ServiceConnectionOperation(configuration, logger, serviceProxy, text));
|
sessionOperations.Enqueue(new ServiceConnectionOperation(configuration, logger, serviceProxy, text));
|
||||||
sessionOperations.Enqueue(new KioskModeOperation(logger, configuration));
|
sessionOperations.Enqueue(new KioskModeOperation(logger, configuration));
|
||||||
sessionOperations.Enqueue(new SessionSequenceEndOperation(sessionController));
|
sessionOperations.Enqueue(new SessionSequenceEndOperation(sessionController));
|
||||||
|
@ -69,7 +70,7 @@ namespace SafeExamBrowser.Runtime
|
||||||
var boostrapSequence = new OperationSequence(logger, bootstrapOperations);
|
var boostrapSequence = new OperationSequence(logger, bootstrapOperations);
|
||||||
var sessionSequence = new OperationSequence(logger, sessionOperations);
|
var sessionSequence = new OperationSequence(logger, sessionOperations);
|
||||||
|
|
||||||
RuntimeController = new RuntimeController(configuration, logger, boostrapSequence, sessionSequence, runtimeHost, runtimeInfo, serviceProxy, shutdown, uiFactory);
|
RuntimeController = new RuntimeController(configuration, logger, messageBox, boostrapSequence, sessionSequence, runtimeHost, runtimeInfo, serviceProxy, shutdown, uiFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void LogStartupInformation()
|
internal void LogStartupInformation()
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System.Windows;
|
||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Classic
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,8 @@ using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
|
using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Browser;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Classic.Utilities;
|
using SafeExamBrowser.UserInterface.Classic.Utilities;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Classic
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System.ComponentModel;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Classic.ViewModels;
|
using SafeExamBrowser.UserInterface.Classic.ViewModels;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Classic
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
|
|
82
SafeExamBrowser.UserInterface.Classic/MessageBox.cs
Normal file
82
SafeExamBrowser.UserInterface.Classic/MessageBox.cs
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Windows;
|
||||||
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.MessageBox;
|
||||||
|
using MessageBoxResult = SafeExamBrowser.Contracts.UserInterface.MessageBox.MessageBoxResult;
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
|
{
|
||||||
|
public class MessageBox : IMessageBox
|
||||||
|
{
|
||||||
|
private IText text;
|
||||||
|
|
||||||
|
public MessageBox(IText text)
|
||||||
|
{
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information)
|
||||||
|
{
|
||||||
|
// The last two parameters are an unfortunate necessity, since e.g. splash screens are displayed topmost while running in their
|
||||||
|
// own thread / dispatcher, and would thus conceal the message box...
|
||||||
|
var result = System.Windows.MessageBox.Show(message, title, ToButton(action), ToImage(icon), System.Windows.MessageBoxResult.None, MessageBoxOptions.ServiceNotification);
|
||||||
|
|
||||||
|
return ToResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information)
|
||||||
|
{
|
||||||
|
return Show(text.Get(message), text.Get(title), action, icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MessageBoxButton ToButton(MessageBoxAction action)
|
||||||
|
{
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case MessageBoxAction.YesNo:
|
||||||
|
return MessageBoxButton.YesNo;
|
||||||
|
default:
|
||||||
|
return MessageBoxButton.OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MessageBoxImage ToImage(MessageBoxIcon icon)
|
||||||
|
{
|
||||||
|
switch (icon)
|
||||||
|
{
|
||||||
|
case MessageBoxIcon.Error:
|
||||||
|
return MessageBoxImage.Error;
|
||||||
|
case MessageBoxIcon.Question:
|
||||||
|
return MessageBoxImage.Question;
|
||||||
|
case MessageBoxIcon.Warning:
|
||||||
|
return MessageBoxImage.Warning;
|
||||||
|
default:
|
||||||
|
return MessageBoxImage.Information;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MessageBoxResult ToResult(System.Windows.MessageBoxResult result)
|
||||||
|
{
|
||||||
|
switch (result)
|
||||||
|
{
|
||||||
|
case System.Windows.MessageBoxResult.Cancel:
|
||||||
|
return MessageBoxResult.Cancel;
|
||||||
|
case System.Windows.MessageBoxResult.No:
|
||||||
|
return MessageBoxResult.No;
|
||||||
|
case System.Windows.MessageBoxResult.OK:
|
||||||
|
return MessageBoxResult.Ok;
|
||||||
|
case System.Windows.MessageBoxResult.Yes:
|
||||||
|
return MessageBoxResult.Yes;
|
||||||
|
default:
|
||||||
|
return MessageBoxResult.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ using System.Windows.Documents;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Classic.ViewModels;
|
using SafeExamBrowser.UserInterface.Classic.ViewModels;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Classic
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
|
|
|
@ -105,6 +105,7 @@
|
||||||
<Compile Include="LogWindow.xaml.cs">
|
<Compile Include="LogWindow.xaml.cs">
|
||||||
<DependentUpon>LogWindow.xaml</DependentUpon>
|
<DependentUpon>LogWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="MessageBox.cs" />
|
||||||
<Compile Include="RuntimeWindow.xaml.cs">
|
<Compile Include="RuntimeWindow.xaml.cs">
|
||||||
<DependentUpon>RuntimeWindow.xaml</DependentUpon>
|
<DependentUpon>RuntimeWindow.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System.Windows;
|
||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Classic.ViewModels;
|
using SafeExamBrowser.UserInterface.Classic.ViewModels;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Classic
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
|
|
|
@ -7,16 +7,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
|
using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Browser;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Classic.Controls;
|
using SafeExamBrowser.UserInterface.Classic.Controls;
|
||||||
using SafeExamBrowser.UserInterface.Classic.Utilities;
|
using SafeExamBrowser.UserInterface.Classic.Utilities;
|
||||||
using MessageBoxResult = SafeExamBrowser.Contracts.UserInterface.MessageBoxResult;
|
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Classic
|
namespace SafeExamBrowser.UserInterface.Classic
|
||||||
{
|
{
|
||||||
|
@ -137,62 +137,5 @@ namespace SafeExamBrowser.UserInterface.Classic
|
||||||
{
|
{
|
||||||
return new WirelessNetworkControl();
|
return new WirelessNetworkControl();
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information)
|
|
||||||
{
|
|
||||||
// The last two parameters are an unfortunate necessity, since e.g. splash screens are displayed topmost while running in their
|
|
||||||
// own thread / dispatcher, and would thus conceal the message box...
|
|
||||||
var result = MessageBox.Show(message, title, ToButton(action), ToImage(icon), System.Windows.MessageBoxResult.None, MessageBoxOptions.ServiceNotification);
|
|
||||||
|
|
||||||
return ToResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information)
|
|
||||||
{
|
|
||||||
return Show(text.Get(message), text.Get(title), action, icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
private MessageBoxButton ToButton(MessageBoxAction action)
|
|
||||||
{
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
case MessageBoxAction.YesNo:
|
|
||||||
return MessageBoxButton.YesNo;
|
|
||||||
default:
|
|
||||||
return MessageBoxButton.OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private MessageBoxImage ToImage(MessageBoxIcon icon)
|
|
||||||
{
|
|
||||||
switch (icon)
|
|
||||||
{
|
|
||||||
case MessageBoxIcon.Error:
|
|
||||||
return MessageBoxImage.Error;
|
|
||||||
case MessageBoxIcon.Question:
|
|
||||||
return MessageBoxImage.Question;
|
|
||||||
case MessageBoxIcon.Warning:
|
|
||||||
return MessageBoxImage.Warning;
|
|
||||||
default:
|
|
||||||
return MessageBoxImage.Information;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private MessageBoxResult ToResult(System.Windows.MessageBoxResult result)
|
|
||||||
{
|
|
||||||
switch (result)
|
|
||||||
{
|
|
||||||
case System.Windows.MessageBoxResult.Cancel:
|
|
||||||
return MessageBoxResult.Cancel;
|
|
||||||
case System.Windows.MessageBoxResult.No:
|
|
||||||
return MessageBoxResult.No;
|
|
||||||
case System.Windows.MessageBoxResult.OK:
|
|
||||||
return MessageBoxResult.Ok;
|
|
||||||
case System.Windows.MessageBoxResult.Yes:
|
|
||||||
return MessageBoxResult.Yes;
|
|
||||||
default:
|
|
||||||
return MessageBoxResult.None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System.Windows;
|
||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Windows10
|
namespace SafeExamBrowser.UserInterface.Windows10
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System.ComponentModel;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Windows10.ViewModels;
|
using SafeExamBrowser.UserInterface.Windows10.ViewModels;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Windows10
|
namespace SafeExamBrowser.UserInterface.Windows10
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System.Windows;
|
||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Windows10.ViewModels;
|
using SafeExamBrowser.UserInterface.Windows10.ViewModels;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Windows10
|
namespace SafeExamBrowser.UserInterface.Windows10
|
||||||
|
|
|
@ -7,15 +7,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.Configuration.Settings;
|
using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Browser;
|
||||||
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Windows;
|
||||||
using SafeExamBrowser.UserInterface.Windows10.Controls;
|
using SafeExamBrowser.UserInterface.Windows10.Controls;
|
||||||
using MessageBoxResult = SafeExamBrowser.Contracts.UserInterface.MessageBoxResult;
|
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Windows10
|
namespace SafeExamBrowser.UserInterface.Windows10
|
||||||
{
|
{
|
||||||
|
@ -122,62 +122,5 @@ namespace SafeExamBrowser.UserInterface.Windows10
|
||||||
// TODO
|
// TODO
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageBoxResult Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information)
|
|
||||||
{
|
|
||||||
// The last two parameters are an unfortunate necessity, since e.g. splash screens are displayed topmost while running in their
|
|
||||||
// own thread / dispatcher, and would thus conceal the message box...
|
|
||||||
var result = MessageBox.Show(message, title, ToButton(action), ToImage(icon), System.Windows.MessageBoxResult.None, MessageBoxOptions.ServiceNotification);
|
|
||||||
|
|
||||||
return ToResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageBoxResult Show(TextKey message, TextKey title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information)
|
|
||||||
{
|
|
||||||
return Show(text.Get(message), text.Get(title), action, icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
private MessageBoxButton ToButton(MessageBoxAction action)
|
|
||||||
{
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
case MessageBoxAction.YesNo:
|
|
||||||
return MessageBoxButton.YesNo;
|
|
||||||
default:
|
|
||||||
return MessageBoxButton.OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private MessageBoxImage ToImage(MessageBoxIcon icon)
|
|
||||||
{
|
|
||||||
switch (icon)
|
|
||||||
{
|
|
||||||
case MessageBoxIcon.Error:
|
|
||||||
return MessageBoxImage.Error;
|
|
||||||
case MessageBoxIcon.Question:
|
|
||||||
return MessageBoxImage.Question;
|
|
||||||
case MessageBoxIcon.Warning:
|
|
||||||
return MessageBoxImage.Warning;
|
|
||||||
default:
|
|
||||||
return MessageBoxImage.Information;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private MessageBoxResult ToResult(System.Windows.MessageBoxResult result)
|
|
||||||
{
|
|
||||||
switch (result)
|
|
||||||
{
|
|
||||||
case System.Windows.MessageBoxResult.Cancel:
|
|
||||||
return MessageBoxResult.Cancel;
|
|
||||||
case System.Windows.MessageBoxResult.No:
|
|
||||||
return MessageBoxResult.No;
|
|
||||||
case System.Windows.MessageBoxResult.OK:
|
|
||||||
return MessageBoxResult.Ok;
|
|
||||||
case System.Windows.MessageBoxResult.Yes:
|
|
||||||
return MessageBoxResult.Yes;
|
|
||||||
default:
|
|
||||||
return MessageBoxResult.None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue