Refactored taskbar components (moved contracts to separate namespace and introduced XAML control templates) and started implementing system components.
This commit is contained in:
parent
1c26d54e34
commit
7baf826e5a
38 changed files with 464 additions and 120 deletions
|
@ -15,12 +15,13 @@ 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.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Browser
|
namespace SafeExamBrowser.Browser
|
||||||
{
|
{
|
||||||
public class BrowserApplicationController : IApplicationController
|
public class BrowserApplicationController : IApplicationController
|
||||||
{
|
{
|
||||||
private ITaskbarButton button;
|
private IApplicationButton button;
|
||||||
private IList<IApplicationInstance> instances = new List<IApplicationInstance>();
|
private IList<IApplicationInstance> instances = new List<IApplicationInstance>();
|
||||||
private ISettings settings;
|
private ISettings settings;
|
||||||
private IUserInterfaceFactory uiFactory;
|
private IUserInterfaceFactory uiFactory;
|
||||||
|
@ -49,7 +50,7 @@ namespace SafeExamBrowser.Browser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterApplicationButton(ITaskbarButton button)
|
public void RegisterApplicationButton(IApplicationButton button)
|
||||||
{
|
{
|
||||||
this.button = button;
|
this.button = button;
|
||||||
this.button.Clicked += Button_OnClick;
|
this.button.Clicked += Button_OnClick;
|
||||||
|
|
|
@ -36,10 +36,13 @@ namespace SafeExamBrowser.Configuration
|
||||||
|
|
||||||
private void InitializeOperatingSystem()
|
private void InitializeOperatingSystem()
|
||||||
{
|
{
|
||||||
// See https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions for mapping source...
|
// IMPORTANT:
|
||||||
|
// In order to be able to retrieve the correct operating system version via System.Environment.OSVersion, the executing
|
||||||
|
// assembly needs to define an application manifest where the supported Windows versions are specified!
|
||||||
var major = System.Environment.OSVersion.Version.Major;
|
var major = System.Environment.OSVersion.Version.Major;
|
||||||
var minor = System.Environment.OSVersion.Version.Minor;
|
var minor = System.Environment.OSVersion.Version.Minor;
|
||||||
|
|
||||||
|
// See https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions for mapping source...
|
||||||
if (major == 6)
|
if (major == 6)
|
||||||
{
|
{
|
||||||
if (minor == 1)
|
if (minor == 1)
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.Behaviour
|
namespace SafeExamBrowser.Contracts.Behaviour
|
||||||
{
|
{
|
||||||
|
@ -20,7 +21,7 @@ namespace SafeExamBrowser.Contracts.Behaviour
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers the taskbar button for this application.
|
/// Registers the taskbar button for this application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void RegisterApplicationButton(ITaskbarButton button);
|
void RegisterApplicationButton(IApplicationButton button);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Performs any termination work, e.g. freeing of resources.
|
/// Performs any termination work, e.g. freeing of resources.
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.Behaviour
|
namespace SafeExamBrowser.Contracts.Behaviour
|
||||||
{
|
{
|
||||||
|
@ -15,7 +16,7 @@ namespace SafeExamBrowser.Contracts.Behaviour
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers the taskbar notification.
|
/// Registers the taskbar notification.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void RegisterNotification(ITaskbarNotification notification);
|
void RegisterNotification(INotificationButton notification);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instructs the controller to shut down and release all used resources.
|
/// Instructs the controller to shut down and release all used resources.
|
||||||
|
|
|
@ -86,15 +86,18 @@
|
||||||
<Compile Include="Monitoring\KeyModifier.cs" />
|
<Compile Include="Monitoring\KeyModifier.cs" />
|
||||||
<Compile Include="Monitoring\KeyState.cs" />
|
<Compile Include="Monitoring\KeyState.cs" />
|
||||||
<Compile Include="Monitoring\MouseButton.cs" />
|
<Compile Include="Monitoring\MouseButton.cs" />
|
||||||
|
<Compile Include="SystemComponents\ISystemComponent.cs" />
|
||||||
<Compile Include="UserInterface\IBrowserControl.cs" />
|
<Compile Include="UserInterface\IBrowserControl.cs" />
|
||||||
<Compile Include="UserInterface\IBrowserWindow.cs" />
|
<Compile Include="UserInterface\IBrowserWindow.cs" />
|
||||||
<Compile Include="UserInterface\IMessageBox.cs" />
|
<Compile Include="UserInterface\IMessageBox.cs" />
|
||||||
<Compile Include="UserInterface\ITaskbarNotification.cs" />
|
<Compile Include="UserInterface\Taskbar\INotificationButton.cs" />
|
||||||
<Compile Include="UserInterface\ISplashScreen.cs" />
|
<Compile Include="UserInterface\ISplashScreen.cs" />
|
||||||
<Compile Include="UserInterface\ITaskbar.cs" />
|
<Compile Include="UserInterface\Taskbar\ISystemPowerSupplyControl.cs" />
|
||||||
|
<Compile Include="UserInterface\Taskbar\ISystemControl.cs" />
|
||||||
|
<Compile Include="UserInterface\Taskbar\ITaskbar.cs" />
|
||||||
<Compile Include="I18n\ITextResource.cs" />
|
<Compile Include="I18n\ITextResource.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="UserInterface\ITaskbarButton.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\IWindow.cs" />
|
||||||
<Compile Include="UserInterface\MessageBoxAction.cs" />
|
<Compile Include="UserInterface\MessageBoxAction.cs" />
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 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 SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.Contracts.SystemComponents
|
||||||
|
{
|
||||||
|
public interface ISystemComponent<TControl> where TControl : ISystemControl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the resources used by the component and starts its operations, if applicable.
|
||||||
|
/// </summary>
|
||||||
|
void Initialize();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers the taskbar control for the system component.
|
||||||
|
/// </summary>
|
||||||
|
void RegisterControl(TControl control);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Instructs the component to stop any running operations and release all used resources.
|
||||||
|
/// </summary>
|
||||||
|
void Terminate();
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ 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.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface
|
||||||
{
|
{
|
||||||
|
@ -23,7 +24,7 @@ namespace SafeExamBrowser.Contracts.UserInterface
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a taskbar button, initialized with the given application information.
|
/// Creates a taskbar button, initialized with the given application information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ITaskbarButton CreateApplicationButton(IApplicationInfo info);
|
IApplicationButton CreateApplicationButton(IApplicationInfo info);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new browser window loaded with the given browser control and settings.
|
/// Creates a new browser window loaded with the given browser control and settings.
|
||||||
|
@ -38,7 +39,12 @@ namespace SafeExamBrowser.Contracts.UserInterface
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a taskbar notification, initialized with the given notification information.
|
/// Creates a taskbar notification, initialized with the given notification information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ITaskbarNotification CreateNotification(INotificationInfo info);
|
INotificationButton CreateNotification(INotificationInfo info);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a system control displaying the power supply status of the computer.
|
||||||
|
/// </summary>
|
||||||
|
ISystemPowerSupplyControl CreatePowerSupplyControl();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new splash screen which runs on its own thread.
|
/// Creates a new splash screen which runs on its own thread.
|
||||||
|
|
|
@ -9,17 +9,17 @@
|
||||||
using System;
|
using System;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Contracts.UserInterface
|
namespace SafeExamBrowser.Contracts.UserInterface.Taskbar
|
||||||
{
|
{
|
||||||
public delegate void TaskbarButtonClickedEventHandler(Guid? instanceId = null);
|
public delegate void ApplicationButtonClickedEventHandler(Guid? instanceId = null);
|
||||||
|
|
||||||
public interface ITaskbarButton
|
public interface IApplicationButton
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event fired when the user clicked on the application button. If multiple instances of an application
|
/// Event fired when the user clicked on the application button. If multiple instances of an application are active,
|
||||||
/// are active, the handler is only executed when the user selects one of the instances.
|
/// the handler is only executed when the user selects one of the instances.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
event TaskbarButtonClickedEventHandler Clicked;
|
event ApplicationButtonClickedEventHandler Clicked;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Registers a new instance of an application, to be started / displayed if the user clicked the taskbar button.
|
/// Registers a new instance of an application, to be started / displayed if the user clicked the taskbar button.
|
|
@ -6,15 +6,15 @@
|
||||||
* 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.Taskbar
|
||||||
{
|
{
|
||||||
public delegate void TaskbarNotificationClickedEventHandler();
|
public delegate void NotificationButtonClickedEventHandler();
|
||||||
|
|
||||||
public interface ITaskbarNotification
|
public interface INotificationButton
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event fired when the user clicked on the notification icon.
|
/// Event fired when the user clicked on the notification icon.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
event TaskbarNotificationClickedEventHandler Clicked;
|
event NotificationButtonClickedEventHandler Clicked;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.Contracts.UserInterface.Taskbar
|
||||||
|
{
|
||||||
|
public interface ISystemControl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the tooltip text of the system control.
|
||||||
|
/// </summary>
|
||||||
|
void SetTooltip(string text);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.Contracts.UserInterface.Taskbar
|
||||||
|
{
|
||||||
|
public interface ISystemPowerSupplyControl : ISystemControl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the current charge of the system battery, if available. <c>0.0</c> means the battery is empty, <c>1.0</c> means it's
|
||||||
|
/// fully charged. Pass <c>null</c> to indicate that the computer system has no battery.
|
||||||
|
/// </summary>
|
||||||
|
void SetBatteryCharge(double? percentage);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the power supply status, i.e. whether the computer system is connected to the power grid or not.
|
||||||
|
/// </summary>
|
||||||
|
void SetPowerGridConnection(bool connected);
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,19 +6,24 @@
|
||||||
* 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.Taskbar
|
||||||
{
|
{
|
||||||
public interface ITaskbar
|
public interface ITaskbar
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds the given application button to the taskbar.
|
/// Adds the given application button to the taskbar.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void AddButton(ITaskbarButton button);
|
void AddApplication(IApplicationButton button);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds the given notification button to the taskbar.
|
/// Adds the given notification button to the taskbar.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void AddNotification(ITaskbarNotification notification);
|
void AddNotification(INotificationButton button);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the given system control to the taskbar.
|
||||||
|
/// </summary>
|
||||||
|
void AddSystemControl(ISystemControl control);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the absolute height of the taskbar (i.e. in physical pixels).
|
/// Returns the absolute height of the taskbar (i.e. in physical pixels).
|
|
@ -12,7 +12,7 @@ using Moq;
|
||||||
using SafeExamBrowser.Contracts.Behaviour;
|
using SafeExamBrowser.Contracts.Behaviour;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.Monitoring;
|
using SafeExamBrowser.Contracts.Monitoring;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using SafeExamBrowser.Core.Behaviour;
|
using SafeExamBrowser.Core.Behaviour;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.UnitTests.Behaviour
|
namespace SafeExamBrowser.Core.UnitTests.Behaviour
|
||||||
|
|
|
@ -11,6 +11,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.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.Behaviour.Operations
|
namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
{
|
{
|
||||||
|
@ -48,7 +49,7 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
browserController.Initialize();
|
browserController.Initialize();
|
||||||
browserController.RegisterApplicationButton(browserButton);
|
browserController.RegisterApplicationButton(browserButton);
|
||||||
|
|
||||||
taskbar.AddButton(browserButton);
|
taskbar.AddApplication(browserButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Revert()
|
public void Revert()
|
||||||
|
|
|
@ -11,6 +11,7 @@ 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.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.Behaviour.Operations
|
namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,7 +11,9 @@ 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.SystemComponents;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using SafeExamBrowser.Core.Notifications;
|
using SafeExamBrowser.Core.Notifications;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.Behaviour.Operations
|
namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
|
@ -21,6 +23,7 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
private INotificationController aboutController, logController;
|
private INotificationController aboutController, logController;
|
||||||
private ISettings settings;
|
private ISettings settings;
|
||||||
|
private ISystemComponent<ISystemPowerSupplyControl> powerSupply;
|
||||||
private ISystemInfo systemInfo;
|
private ISystemInfo systemInfo;
|
||||||
private ITaskbar taskbar;
|
private ITaskbar taskbar;
|
||||||
private IUserInterfaceFactory uiFactory;
|
private IUserInterfaceFactory uiFactory;
|
||||||
|
@ -31,6 +34,7 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
public TaskbarOperation(
|
public TaskbarOperation(
|
||||||
ILogger logger,
|
ILogger logger,
|
||||||
ISettings settings,
|
ISettings settings,
|
||||||
|
ISystemComponent<ISystemPowerSupplyControl> powerSupply,
|
||||||
ISystemInfo systemInfo,
|
ISystemInfo systemInfo,
|
||||||
ITaskbar taskbar,
|
ITaskbar taskbar,
|
||||||
IText text,
|
IText text,
|
||||||
|
@ -38,6 +42,7 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
this.powerSupply = powerSupply;
|
||||||
this.systemInfo = systemInfo;
|
this.systemInfo = systemInfo;
|
||||||
this.taskbar = taskbar;
|
this.taskbar = taskbar;
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
@ -55,21 +60,15 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateAboutNotification();
|
CreateAboutNotification();
|
||||||
|
CreatePowerSupplyComponent();
|
||||||
if (systemInfo.HasBattery)
|
|
||||||
{
|
|
||||||
CreateBatteryNotification();
|
|
||||||
}
|
|
||||||
|
|
||||||
CreateNetworkNotification();
|
|
||||||
CreateAudioNotification();
|
|
||||||
CreateKeyboardNotification();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Revert()
|
public void Revert()
|
||||||
{
|
{
|
||||||
logController?.Terminate();
|
logController?.Terminate();
|
||||||
aboutController?.Terminate();
|
aboutController?.Terminate();
|
||||||
|
|
||||||
|
powerSupply.Terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateLogNotification()
|
private void CreateLogNotification()
|
||||||
|
@ -94,25 +93,14 @@ namespace SafeExamBrowser.Core.Behaviour.Operations
|
||||||
taskbar.AddNotification(aboutNotification);
|
taskbar.AddNotification(aboutNotification);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateBatteryNotification()
|
private void CreatePowerSupplyComponent()
|
||||||
{
|
{
|
||||||
// TODO: Are these specializations of INotification -> ISystemNotification? If yes, is this the right place, or do they
|
var control = uiFactory.CreatePowerSupplyControl();
|
||||||
// need to go to a separate assembly?
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateNetworkNotification()
|
powerSupply.RegisterControl(control);
|
||||||
{
|
powerSupply.Initialize();
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateAudioNotification()
|
taskbar.AddSystemControl(control);
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateKeyboardNotification()
|
|
||||||
{
|
|
||||||
// TODO
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ using System;
|
||||||
using SafeExamBrowser.Contracts.Behaviour;
|
using SafeExamBrowser.Contracts.Behaviour;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.Monitoring;
|
using SafeExamBrowser.Contracts.Monitoring;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.Behaviour
|
namespace SafeExamBrowser.Core.Behaviour
|
||||||
{
|
{
|
||||||
|
|
|
@ -91,7 +91,7 @@ namespace SafeExamBrowser.Core.Behaviour
|
||||||
|
|
||||||
logger.Log($"{titleLine}{copyrightLine}{emptyLine}{githubLine}");
|
logger.Log($"{titleLine}{copyrightLine}{emptyLine}{githubLine}");
|
||||||
logger.Log($"{Environment.NewLine}# Application started at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
|
logger.Log($"{Environment.NewLine}# Application started at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}");
|
||||||
logger.Log($"# Operating system: {systemInfo.OperatingSystemInfo}{Environment.NewLine}");
|
logger.Log($"# Running on {systemInfo.OperatingSystemInfo}{Environment.NewLine}");
|
||||||
logger.Info("--- Initiating startup procedure ---");
|
logger.Info("--- Initiating startup procedure ---");
|
||||||
|
|
||||||
splashScreen = uiFactory.CreateSplashScreen(settings, text);
|
splashScreen = uiFactory.CreateSplashScreen(settings, text);
|
||||||
|
|
|
@ -10,12 +10,13 @@ using SafeExamBrowser.Contracts.Behaviour;
|
||||||
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.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.Notifications
|
namespace SafeExamBrowser.Core.Notifications
|
||||||
{
|
{
|
||||||
public class AboutNotificationController : INotificationController
|
public class AboutNotificationController : INotificationController
|
||||||
{
|
{
|
||||||
private ITaskbarNotification notification;
|
private INotificationButton notification;
|
||||||
private ISettings settings;
|
private ISettings settings;
|
||||||
private IText text;
|
private IText text;
|
||||||
private IUserInterfaceFactory uiFactory;
|
private IUserInterfaceFactory uiFactory;
|
||||||
|
@ -28,7 +29,7 @@ namespace SafeExamBrowser.Core.Notifications
|
||||||
this.uiFactory = uiFactory;
|
this.uiFactory = uiFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterNotification(ITaskbarNotification notification)
|
public void RegisterNotification(INotificationButton notification)
|
||||||
{
|
{
|
||||||
this.notification = notification;
|
this.notification = notification;
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,13 @@ using SafeExamBrowser.Contracts.Behaviour;
|
||||||
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.Taskbar;
|
||||||
|
|
||||||
namespace SafeExamBrowser.Core.Notifications
|
namespace SafeExamBrowser.Core.Notifications
|
||||||
{
|
{
|
||||||
public class LogNotificationController : INotificationController
|
public class LogNotificationController : INotificationController
|
||||||
{
|
{
|
||||||
private ITaskbarNotification notification;
|
private INotificationButton notification;
|
||||||
private ILogger logger;
|
private ILogger logger;
|
||||||
private IText text;
|
private IText text;
|
||||||
private IUserInterfaceFactory uiFactory;
|
private IUserInterfaceFactory uiFactory;
|
||||||
|
@ -28,7 +29,7 @@ namespace SafeExamBrowser.Core.Notifications
|
||||||
this.uiFactory = uiFactory;
|
this.uiFactory = uiFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterNotification(ITaskbarNotification notification)
|
public void RegisterNotification(INotificationButton notification)
|
||||||
{
|
{
|
||||||
this.notification = notification;
|
this.notification = notification;
|
||||||
|
|
||||||
|
|
40
SafeExamBrowser.SystemComponents/PowerSupply.cs
Normal file
40
SafeExamBrowser.SystemComponents/PowerSupply.cs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 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 SafeExamBrowser.Contracts.Logging;
|
||||||
|
using SafeExamBrowser.Contracts.SystemComponents;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.SystemComponents
|
||||||
|
{
|
||||||
|
public class PowerSupply : ISystemComponent<ISystemPowerSupplyControl>
|
||||||
|
{
|
||||||
|
private ILogger logger;
|
||||||
|
private ISystemPowerSupplyControl control;
|
||||||
|
|
||||||
|
public PowerSupply(ILogger logger)
|
||||||
|
{
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterControl(ISystemPowerSupplyControl control)
|
||||||
|
{
|
||||||
|
this.control = control;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Terminate()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
SafeExamBrowser.SystemComponents/Properties/AssemblyInfo.cs
Normal file
36
SafeExamBrowser.SystemComponents/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("SafeExamBrowser.SystemComponents")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("SafeExamBrowser.SystemComponents")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("acee2ef1-14d2-4b52-8994-5c053055bb51")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{ACEE2EF1-14D2-4B52-8994-5C053055BB51}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>SafeExamBrowser.SystemComponents</RootNamespace>
|
||||||
|
<AssemblyName>SafeExamBrowser.SystemComponents</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
|
<OutputPath>bin\x86\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="PowerSupply.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\SafeExamBrowser.Contracts\SafeExamBrowser.Contracts.csproj">
|
||||||
|
<Project>{47DA5933-BEF8-4729-94E6-ABDE2DB12262}</Project>
|
||||||
|
<Name>SafeExamBrowser.Contracts</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
|
@ -5,8 +5,14 @@
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
|
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
|
||||||
xmlns:s="clr-namespace:System;assembly=mscorlib"
|
xmlns:s="clr-namespace:System;assembly=mscorlib"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d" d:DesignHeight="40" d:DesignWidth="50">
|
||||||
d:DesignHeight="40" d:DesignWidth="50">
|
<UserControl.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="../Styles/ButtonStyles.xaml"/>
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Popup x:Name="InstancePopup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}" AllowsTransparency="True">
|
<Popup x:Name="InstancePopup" IsOpen="False" Placement="Top" PlacementTarget="{Binding ElementName=Button}" AllowsTransparency="True">
|
||||||
<ScrollViewer x:Name="InstanceScrollViewer" VerticalScrollBarVisibility="Auto">
|
<ScrollViewer x:Name="InstanceScrollViewer" VerticalScrollBarVisibility="Auto">
|
||||||
|
@ -19,23 +25,8 @@
|
||||||
<StackPanel x:Name="InstanceStackPanel" />
|
<StackPanel x:Name="InstanceStackPanel" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</Popup>
|
</Popup>
|
||||||
<Button x:Name="Button" Background="#00000000" BorderThickness="0" Click="Button_Click" Width="50">
|
<Button x:Name="Button" Background="#00000000" BorderThickness="0" Click="Button_Click" Padding="5"
|
||||||
<Button.Template>
|
Template="{StaticResource ResourceKey=TaskbarButton}" Width="50" />
|
||||||
<ControlTemplate TargetType="Button">
|
|
||||||
<Border x:Name="ButtonContent" Background="{TemplateBinding Background}" Padding="5">
|
|
||||||
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Content" />
|
|
||||||
</Border>
|
|
||||||
<ControlTemplate.Triggers>
|
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
|
||||||
<Setter TargetName="ButtonContent" Property="Background" Value="#2AFFFFFF" />
|
|
||||||
</Trigger>
|
|
||||||
<Trigger Property="IsPressed" Value="True">
|
|
||||||
<Setter TargetName="ButtonContent" Property="Background" Value="#10FFFFFF" />
|
|
||||||
</Trigger>
|
|
||||||
</ControlTemplate.Triggers>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Button.Template>
|
|
||||||
</Button>
|
|
||||||
<Grid Panel.ZIndex="10">
|
<Grid Panel.ZIndex="10">
|
||||||
<Rectangle x:Name="ActiveBar" Height="2" Width="40" VerticalAlignment="Bottom" Fill="LightSteelBlue" Visibility="Collapsed" />
|
<Rectangle x:Name="ActiveBar" Height="2" Width="40" VerticalAlignment="Bottom" Fill="LightSteelBlue" Visibility="Collapsed" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
@ -13,17 +13,17 @@ using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using SafeExamBrowser.UserInterface.Utilities;
|
using SafeExamBrowser.UserInterface.Utilities;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Controls
|
namespace SafeExamBrowser.UserInterface.Controls
|
||||||
{
|
{
|
||||||
public partial class ApplicationButton : UserControl, ITaskbarButton
|
public partial class ApplicationButton : UserControl, IApplicationButton
|
||||||
{
|
{
|
||||||
private IApplicationInfo info;
|
private IApplicationInfo info;
|
||||||
private IList<IApplicationInstance> instances = new List<IApplicationInstance>();
|
private IList<IApplicationInstance> instances = new List<IApplicationInstance>();
|
||||||
|
|
||||||
public event TaskbarButtonClickedEventHandler Clicked;
|
public event ApplicationButtonClickedEventHandler Clicked;
|
||||||
|
|
||||||
public ApplicationButton(IApplicationInfo info)
|
public ApplicationButton(IApplicationInfo info)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<UserControl x:Class="SafeExamBrowser.UserInterface.Controls.NotificationButton"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
|
||||||
|
mc:Ignorable="d" d:DesignHeight="40" d:DesignWidth="28">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="../Styles/ButtonStyles.xaml"/>
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Button x:Name="IconButton" Click="Icon_Click" Background="#00000000" BorderThickness="0" Padding="5,0"
|
||||||
|
Template="{StaticResource ResourceKey=TaskbarButton}" Width="28"/>
|
||||||
|
</UserControl>
|
|
@ -9,16 +9,16 @@
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using SafeExamBrowser.Contracts.Configuration;
|
using SafeExamBrowser.Contracts.Configuration;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using SafeExamBrowser.UserInterface.Utilities;
|
using SafeExamBrowser.UserInterface.Utilities;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface.Controls
|
namespace SafeExamBrowser.UserInterface.Controls
|
||||||
{
|
{
|
||||||
public partial class NotificationIcon : UserControl, ITaskbarNotification
|
public partial class NotificationButton : UserControl, INotificationButton
|
||||||
{
|
{
|
||||||
public event TaskbarNotificationClickedEventHandler Clicked;
|
public event NotificationButtonClickedEventHandler Clicked;
|
||||||
|
|
||||||
public NotificationIcon(INotificationInfo info)
|
public NotificationButton(INotificationInfo info)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
InitializeNotificationIcon(info);
|
InitializeNotificationIcon(info);
|
|
@ -1,25 +0,0 @@
|
||||||
<UserControl x:Class="SafeExamBrowser.UserInterface.Controls.NotificationIcon"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
|
|
||||||
mc:Ignorable="d" d:DesignHeight="16" d:DesignWidth="26">
|
|
||||||
<Button x:Name="IconButton" Click="Icon_Click" Background="#00000000" BorderThickness="0">
|
|
||||||
<Button.Template>
|
|
||||||
<ControlTemplate TargetType="Button">
|
|
||||||
<Border x:Name="ButtonContent" Background="{TemplateBinding Background}" Padding="5,0">
|
|
||||||
<ContentPresenter ContentSource="Content" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="18" RenderOptions.BitmapScalingMode="HighQuality" />
|
|
||||||
</Border>
|
|
||||||
<ControlTemplate.Triggers>
|
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
|
||||||
<Setter TargetName="ButtonContent" Property="Background" Value="#2AFFFFFF" />
|
|
||||||
</Trigger>
|
|
||||||
<Trigger Property="IsPressed" Value="True">
|
|
||||||
<Setter TargetName="ButtonContent" Property="Background" Value="#10FFFFFF" />
|
|
||||||
</Trigger>
|
|
||||||
</ControlTemplate.Triggers>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Button.Template>
|
|
||||||
</Button>
|
|
||||||
</UserControl>
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<UserControl x:Class="SafeExamBrowser.UserInterface.Controls.PowerSupplyControl"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Controls"
|
||||||
|
mc:Ignorable="d" d:DesignHeight="40" d:DesignWidth="28">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ResourceDictionary Source="../Styles/ButtonStyles.xaml"/>
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Button x:Name="Button" Background="#00000000" BorderThickness="0" Foreground="White" Padding="5,0"
|
||||||
|
Template="{StaticResource ResourceKey=TaskbarButton}" Width="28">
|
||||||
|
<Canvas Height="18" Width="18">
|
||||||
|
<Path Stroke="White" Data="M3,6 H17 V9 H18 V11 H17 V9 H17 V14 H3 Z" Panel.ZIndex="2" />
|
||||||
|
<Rectangle x:Name="BatteryCharge" Canvas.Left="3" Canvas.Top="6" Fill="Green" Height="8" Width="14" />
|
||||||
|
<Grid x:Name="PowerPlug" Panel.ZIndex="3">
|
||||||
|
<Path Stroke="White" Fill="Black" Data="M2.5,14.5 V10 Q5,10 5,6 H4 V4 H4 V6 H1 V4 H1 V6 H0 Q0,10 2.5,10" Panel.ZIndex="2" />
|
||||||
|
<Path Stroke="Black" Data="M4,14.5 V10 Q6,10 6,5.5" Panel.ZIndex="1" />
|
||||||
|
</Grid>
|
||||||
|
</Canvas>
|
||||||
|
</Button>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 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;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
|
|
||||||
|
namespace SafeExamBrowser.UserInterface.Controls
|
||||||
|
{
|
||||||
|
public partial class PowerSupplyControl : UserControl, ISystemPowerSupplyControl
|
||||||
|
{
|
||||||
|
public PowerSupplyControl()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
InitializePowerSupplyControl();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetBatteryCharge(double? percentage)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetPowerGridConnection(bool connected)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTooltip(string text)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitializePowerSupplyControl()
|
||||||
|
{
|
||||||
|
Button.Resources.MergedDictionaries.Add(new ResourceDictionary
|
||||||
|
{
|
||||||
|
Source = (new Uri("/SafeExamBrowser.UserInterface;component/Styles/ButtonStyles.xaml", UriKind.RelativeOrAbsolute))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -77,8 +77,11 @@
|
||||||
<Compile Include="Controls\ApplicationButton.xaml.cs">
|
<Compile Include="Controls\ApplicationButton.xaml.cs">
|
||||||
<DependentUpon>ApplicationButton.xaml</DependentUpon>
|
<DependentUpon>ApplicationButton.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Controls\NotificationIcon.xaml.cs">
|
<Compile Include="Controls\NotificationButton.xaml.cs">
|
||||||
<DependentUpon>NotificationIcon.xaml</DependentUpon>
|
<DependentUpon>NotificationButton.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\PowerSupplyControl.xaml.cs">
|
||||||
|
<DependentUpon>PowerSupplyControl.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Controls\QuitButton.xaml.cs">
|
<Compile Include="Controls\QuitButton.xaml.cs">
|
||||||
<DependentUpon>QuitButton.xaml</DependentUpon>
|
<DependentUpon>QuitButton.xaml</DependentUpon>
|
||||||
|
@ -141,7 +144,11 @@
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Include="Controls\NotificationIcon.xaml">
|
<Page Include="Controls\NotificationButton.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
<Page Include="Controls\PowerSupplyControl.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
@ -157,6 +164,10 @@
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="Styles\ButtonStyles.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="Taskbar.xaml">
|
<Page Include="Taskbar.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
|
17
SafeExamBrowser.UserInterface/Styles/ButtonStyles.xaml
Normal file
17
SafeExamBrowser.UserInterface/Styles/ButtonStyles.xaml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Styles">
|
||||||
|
<ControlTemplate x:Key="TaskbarButton" TargetType="Button">
|
||||||
|
<Border x:Name="ButtonContent" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
|
||||||
|
<ContentPresenter ContentSource="Content" HorizontalAlignment="Center" VerticalAlignment="Center" RenderOptions.BitmapScalingMode="HighQuality" />
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="ButtonContent" Property="Background" Value="#2AFFFFFF" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter TargetName="ButtonContent" Property="Background" Value="#10FFFFFF" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</ResourceDictionary>
|
|
@ -17,6 +17,7 @@
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="40" />
|
<ColumnDefinition Width="40" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<ScrollViewer Grid.Column="0" x:Name="ApplicationScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
|
<ScrollViewer Grid.Column="0" x:Name="ApplicationScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto">
|
||||||
|
@ -26,8 +27,9 @@
|
||||||
<StackPanel x:Name="ApplicationStackPanel" Orientation="Horizontal" />
|
<StackPanel x:Name="ApplicationStackPanel" Orientation="Horizontal" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
<StackPanel Grid.Column="1" x:Name="NotificationStackPanel" Margin="5,0,0,0" Orientation="Horizontal" VerticalAlignment="Stretch" />
|
<StackPanel Grid.Column="1" x:Name="NotificationStackPanel" Margin="5,0,0,0" Orientation="Horizontal" VerticalAlignment="Stretch" />
|
||||||
<local:DateTimeControl Grid.Column="2" />
|
<StackPanel Grid.Column="2" x:Name="SystemControlStackPanel" Orientation="Horizontal" VerticalAlignment="Stretch" />
|
||||||
<local:QuitButton Grid.Column="3" />
|
<local:DateTimeControl Grid.Column="3" />
|
||||||
|
<local:QuitButton Grid.Column="4" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
</Window>
|
</Window>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using SafeExamBrowser.UserInterface.Utilities;
|
using SafeExamBrowser.UserInterface.Utilities;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface
|
namespace SafeExamBrowser.UserInterface
|
||||||
|
@ -26,7 +26,7 @@ namespace SafeExamBrowser.UserInterface
|
||||||
Loaded += (o, args) => InitializeBounds();
|
Loaded += (o, args) => InitializeBounds();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddButton(ITaskbarButton button)
|
public void AddApplication(IApplicationButton button)
|
||||||
{
|
{
|
||||||
if (button is UIElement)
|
if (button is UIElement)
|
||||||
{
|
{
|
||||||
|
@ -34,7 +34,7 @@ namespace SafeExamBrowser.UserInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddNotification(ITaskbarNotification button)
|
public void AddNotification(INotificationButton button)
|
||||||
{
|
{
|
||||||
if (button is UIElement)
|
if (button is UIElement)
|
||||||
{
|
{
|
||||||
|
@ -42,6 +42,14 @@ namespace SafeExamBrowser.UserInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddSystemControl(ISystemControl control)
|
||||||
|
{
|
||||||
|
if (control is UIElement)
|
||||||
|
{
|
||||||
|
SystemControlStackPanel.Children.Add(control as UIElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int GetAbsoluteHeight()
|
public int GetAbsoluteHeight()
|
||||||
{
|
{
|
||||||
return Dispatcher.Invoke(() =>
|
return Dispatcher.Invoke(() =>
|
||||||
|
|
|
@ -13,6 +13,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.Taskbar;
|
||||||
using SafeExamBrowser.UserInterface.Controls;
|
using SafeExamBrowser.UserInterface.Controls;
|
||||||
|
|
||||||
namespace SafeExamBrowser.UserInterface
|
namespace SafeExamBrowser.UserInterface
|
||||||
|
@ -24,7 +25,7 @@ namespace SafeExamBrowser.UserInterface
|
||||||
return new AboutWindow(settings, text);
|
return new AboutWindow(settings, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ITaskbarButton CreateApplicationButton(IApplicationInfo info)
|
public IApplicationButton CreateApplicationButton(IApplicationInfo info)
|
||||||
{
|
{
|
||||||
return new ApplicationButton(info);
|
return new ApplicationButton(info);
|
||||||
}
|
}
|
||||||
|
@ -59,9 +60,14 @@ namespace SafeExamBrowser.UserInterface
|
||||||
return logWindow;
|
return logWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ITaskbarNotification CreateNotification(INotificationInfo info)
|
public INotificationButton CreateNotification(INotificationInfo info)
|
||||||
{
|
{
|
||||||
return new NotificationIcon(info);
|
return new NotificationButton(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ISystemPowerSupplyControl CreatePowerSupplyControl()
|
||||||
|
{
|
||||||
|
return new PowerSupplyControl();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISplashScreen CreateSplashScreen(ISettings settings, IText text)
|
public ISplashScreen CreateSplashScreen(ISettings settings, IText text)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio 15
|
||||||
VisualStudioVersion = 15.0.26430.15
|
VisualStudioVersion = 15.0.26430.16
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser", "SafeExamBrowser\SafeExamBrowser.csproj", "{E3AED2F8-B5DF-45D1-AC19-48066923D6D8}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser", "SafeExamBrowser\SafeExamBrowser.csproj", "{E3AED2F8-B5DF-45D1-AC19-48066923D6D8}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Configurati
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.WindowsApi", "SafeExamBrowser.WindowsApi\SafeExamBrowser.WindowsApi.csproj", "{73724659-4150-4792-A94E-42F5F3C1B696}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.WindowsApi", "SafeExamBrowser.WindowsApi\SafeExamBrowser.WindowsApi.csproj", "{73724659-4150-4792-A94E-42F5F3C1B696}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.SystemComponents", "SafeExamBrowser.SystemComponents\SafeExamBrowser.SystemComponents.csproj", "{ACEE2EF1-14D2-4B52-8994-5C053055BB51}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -107,6 +109,14 @@ Global
|
||||||
{73724659-4150-4792-A94E-42F5F3C1B696}.Release|Any CPU.Build.0 = Release|Any CPU
|
{73724659-4150-4792-A94E-42F5F3C1B696}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{73724659-4150-4792-A94E-42F5F3C1B696}.Release|x86.ActiveCfg = Release|x86
|
{73724659-4150-4792-A94E-42F5F3C1B696}.Release|x86.ActiveCfg = Release|x86
|
||||||
{73724659-4150-4792-A94E-42F5F3C1B696}.Release|x86.Build.0 = Release|x86
|
{73724659-4150-4792-A94E-42F5F3C1B696}.Release|x86.Build.0 = Release|x86
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{ACEE2EF1-14D2-4B52-8994-5C053055BB51}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -15,7 +15,9 @@ using SafeExamBrowser.Contracts.Configuration.Settings;
|
||||||
using SafeExamBrowser.Contracts.I18n;
|
using SafeExamBrowser.Contracts.I18n;
|
||||||
using SafeExamBrowser.Contracts.Logging;
|
using SafeExamBrowser.Contracts.Logging;
|
||||||
using SafeExamBrowser.Contracts.Monitoring;
|
using SafeExamBrowser.Contracts.Monitoring;
|
||||||
|
using SafeExamBrowser.Contracts.SystemComponents;
|
||||||
using SafeExamBrowser.Contracts.UserInterface;
|
using SafeExamBrowser.Contracts.UserInterface;
|
||||||
|
using SafeExamBrowser.Contracts.UserInterface.Taskbar;
|
||||||
using SafeExamBrowser.Contracts.WindowsApi;
|
using SafeExamBrowser.Contracts.WindowsApi;
|
||||||
using SafeExamBrowser.Core.Behaviour;
|
using SafeExamBrowser.Core.Behaviour;
|
||||||
using SafeExamBrowser.Core.Behaviour.Operations;
|
using SafeExamBrowser.Core.Behaviour.Operations;
|
||||||
|
@ -26,6 +28,7 @@ using SafeExamBrowser.Monitoring.Keyboard;
|
||||||
using SafeExamBrowser.Monitoring.Mouse;
|
using SafeExamBrowser.Monitoring.Mouse;
|
||||||
using SafeExamBrowser.Monitoring.Processes;
|
using SafeExamBrowser.Monitoring.Processes;
|
||||||
using SafeExamBrowser.Monitoring.Windows;
|
using SafeExamBrowser.Monitoring.Windows;
|
||||||
|
using SafeExamBrowser.SystemComponents;
|
||||||
using SafeExamBrowser.UserInterface;
|
using SafeExamBrowser.UserInterface;
|
||||||
using SafeExamBrowser.WindowsApi;
|
using SafeExamBrowser.WindowsApi;
|
||||||
|
|
||||||
|
@ -44,6 +47,7 @@ namespace SafeExamBrowser
|
||||||
private IProcessMonitor processMonitor;
|
private IProcessMonitor processMonitor;
|
||||||
private IRuntimeController runtimeController;
|
private IRuntimeController runtimeController;
|
||||||
private ISettings settings;
|
private ISettings settings;
|
||||||
|
private ISystemComponent<ISystemPowerSupplyControl> powerSupply;
|
||||||
private ISystemInfo systemInfo;
|
private ISystemInfo systemInfo;
|
||||||
private IText text;
|
private IText text;
|
||||||
private ITextResource textResource;
|
private ITextResource textResource;
|
||||||
|
@ -74,6 +78,7 @@ namespace SafeExamBrowser
|
||||||
displayMonitor = new DisplayMonitor(new ModuleLogger(logger, typeof(DisplayMonitor)), nativeMethods);
|
displayMonitor = new DisplayMonitor(new ModuleLogger(logger, typeof(DisplayMonitor)), nativeMethods);
|
||||||
keyboardInterceptor = new KeyboardInterceptor(settings.Keyboard, new ModuleLogger(logger, typeof(KeyboardInterceptor)));
|
keyboardInterceptor = new KeyboardInterceptor(settings.Keyboard, new ModuleLogger(logger, typeof(KeyboardInterceptor)));
|
||||||
mouseInterceptor = new MouseInterceptor(new ModuleLogger(logger, typeof(MouseInterceptor)), settings.Mouse);
|
mouseInterceptor = new MouseInterceptor(new ModuleLogger(logger, typeof(MouseInterceptor)), settings.Mouse);
|
||||||
|
powerSupply = new PowerSupply(new ModuleLogger(logger, typeof(PowerSupply)));
|
||||||
processMonitor = new ProcessMonitor(new ModuleLogger(logger, typeof(ProcessMonitor)), nativeMethods);
|
processMonitor = new ProcessMonitor(new ModuleLogger(logger, typeof(ProcessMonitor)), nativeMethods);
|
||||||
windowMonitor = new WindowMonitor(new ModuleLogger(logger, typeof(WindowMonitor)), nativeMethods);
|
windowMonitor = new WindowMonitor(new ModuleLogger(logger, typeof(WindowMonitor)), nativeMethods);
|
||||||
|
|
||||||
|
@ -86,7 +91,7 @@ namespace SafeExamBrowser
|
||||||
StartupOperations.Enqueue(new WindowMonitorOperation(logger, windowMonitor));
|
StartupOperations.Enqueue(new WindowMonitorOperation(logger, windowMonitor));
|
||||||
StartupOperations.Enqueue(new ProcessMonitorOperation(logger, processMonitor));
|
StartupOperations.Enqueue(new ProcessMonitorOperation(logger, processMonitor));
|
||||||
StartupOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, Taskbar));
|
StartupOperations.Enqueue(new DisplayMonitorOperation(displayMonitor, logger, Taskbar));
|
||||||
StartupOperations.Enqueue(new TaskbarOperation(logger, settings, systemInfo, Taskbar, text, uiFactory));
|
StartupOperations.Enqueue(new TaskbarOperation(logger, settings, powerSupply, systemInfo, Taskbar, text, uiFactory));
|
||||||
StartupOperations.Enqueue(new BrowserOperation(browserController, browserInfo, logger, Taskbar, uiFactory));
|
StartupOperations.Enqueue(new BrowserOperation(browserController, browserInfo, logger, Taskbar, uiFactory));
|
||||||
StartupOperations.Enqueue(new RuntimeControllerOperation(runtimeController, logger));
|
StartupOperations.Enqueue(new RuntimeControllerOperation(runtimeController, logger));
|
||||||
StartupOperations.Enqueue(new ClipboardOperation(logger, nativeMethods));
|
StartupOperations.Enqueue(new ClipboardOperation(logger, nativeMethods));
|
||||||
|
|
|
@ -135,6 +135,10 @@
|
||||||
<Project>{ef563531-4eb5-44b9-a5ec-d6d6f204469b}</Project>
|
<Project>{ef563531-4eb5-44b9-a5ec-d6d6f204469b}</Project>
|
||||||
<Name>SafeExamBrowser.Monitoring</Name>
|
<Name>SafeExamBrowser.Monitoring</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\SafeExamBrowser.SystemComponents\SafeExamBrowser.SystemComponents.csproj">
|
||||||
|
<Project>{ACEE2EF1-14D2-4B52-8994-5C053055BB51}</Project>
|
||||||
|
<Name>SafeExamBrowser.SystemComponents</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\SafeExamBrowser.UserInterface\SafeExamBrowser.UserInterface.csproj">
|
<ProjectReference Include="..\SafeExamBrowser.UserInterface\SafeExamBrowser.UserInterface.csproj">
|
||||||
<Project>{e1be031a-4354-41e7-83e8-843ded4489ff}</Project>
|
<Project>{e1be031a-4354-41e7-83e8-843ded4489ff}</Project>
|
||||||
<Name>SafeExamBrowser.UserInterface</Name>
|
<Name>SafeExamBrowser.UserInterface</Name>
|
||||||
|
|
Loading…
Reference in a new issue