From 8adb72bb0f645a3cca26deca6bb37bc82fa468f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damian=20B=C3=BCchel?= Date: Wed, 12 Jul 2017 15:36:30 +0200 Subject: [PATCH] Continued with taskbar implementation, but ran into WPF's UI thread / UI element restriction. Current state does not work, as UI elements cannot be created on a non-UI thread. Must find proper solution to this problem... --- .../BrowserApplicationInfo.cs | 19 ++++++ .../BrowserIconResource.cs | 19 ++++++ .../Images/ChromiumLogo.png | Bin 0 -> 131956 bytes .../Images/ChromiumLogo_Attribution.txt | 2 + .../Properties/AssemblyInfo.cs | 36 +++++++++++ .../SafeExamBrowser.Browser.csproj | 59 ++++++++++++++++++ .../Behaviour/IApplicationController.cs | 20 ++++++ .../IShutdownController.cs | 5 +- .../IStartupController.cs | 6 +- .../Configuration/IApplicationIconResource.cs | 25 ++++++++ .../Configuration/IApplicationInfo.cs | 28 +++++++++ .../Configuration/ISettings.cs | 15 +++++ SafeExamBrowser.Contracts/I18n/IText.cs | 4 ++ .../I18n/ITextResource.cs | 3 + SafeExamBrowser.Contracts/I18n/Key.cs | 3 + .../Logging/ILogContent.cs | 3 + .../Logging/ILogMessage.cs | 15 +++++ .../Logging/ILogObserver.cs | 3 + SafeExamBrowser.Contracts/Logging/ILogText.cs | 3 + SafeExamBrowser.Contracts/Logging/ILogger.cs | 36 +++++++++++ .../Logging/IThreadInfo.cs | 11 ++++ SafeExamBrowser.Contracts/Logging/LogLevel.cs | 3 + .../SafeExamBrowser.Contracts.csproj | 8 ++- .../UserInterface/IMessageBox.cs | 3 + .../UserInterface/ISplashScreen.cs | 17 ++++- .../UserInterface/ITaskbar.cs | 17 ++++- .../UserInterface/ITaskbarButton.cs | 21 ++++++- .../UserInterface/IUiElementFactory.cs | 20 ++++++ .../UserInterface/MessageBoxAction.cs | 3 + .../UserInterface/MessageBoxIcon.cs | 3 + .../ShutdownController.cs | 4 +- .../StartupController.cs | 20 ++++-- SafeExamBrowser.Core/Logging/LogMessage.cs | 7 +-- .../SafeExamBrowser.Core.csproj | 4 +- .../Controls/TaskbarButton.xaml | 2 +- .../Controls/TaskbarButton.xaml.cs | 40 ++++++++++-- .../SafeExamBrowser.UserInterface.csproj | 1 + .../SplashScreen.xaml.cs | 4 +- SafeExamBrowser.UserInterface/Taskbar.xaml.cs | 4 +- .../UiElementFactory.cs | 22 +++++++ SafeExamBrowser.sln | 6 ++ SafeExamBrowser/App.cs | 9 ++- SafeExamBrowser/CompositionRoot.cs | 32 +++++----- SafeExamBrowser/SafeExamBrowser.csproj | 4 ++ 44 files changed, 515 insertions(+), 54 deletions(-) create mode 100644 SafeExamBrowser.Browser/BrowserApplicationInfo.cs create mode 100644 SafeExamBrowser.Browser/BrowserIconResource.cs create mode 100644 SafeExamBrowser.Browser/Images/ChromiumLogo.png create mode 100644 SafeExamBrowser.Browser/Images/ChromiumLogo_Attribution.txt create mode 100644 SafeExamBrowser.Browser/Properties/AssemblyInfo.cs create mode 100644 SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj create mode 100644 SafeExamBrowser.Contracts/Behaviour/IApplicationController.cs rename SafeExamBrowser.Contracts/{Configuration => Behaviour}/IShutdownController.cs (67%) rename SafeExamBrowser.Contracts/{Configuration => Behaviour}/IStartupController.cs (64%) create mode 100644 SafeExamBrowser.Contracts/Configuration/IApplicationIconResource.cs create mode 100644 SafeExamBrowser.Contracts/Configuration/IApplicationInfo.cs create mode 100644 SafeExamBrowser.Contracts/UserInterface/IUiElementFactory.cs rename SafeExamBrowser.Core/{Configuration => Behaviour}/ShutdownController.cs (92%) rename SafeExamBrowser.Core/{Configuration => Behaviour}/StartupController.cs (79%) create mode 100644 SafeExamBrowser.UserInterface/UiElementFactory.cs diff --git a/SafeExamBrowser.Browser/BrowserApplicationInfo.cs b/SafeExamBrowser.Browser/BrowserApplicationInfo.cs new file mode 100644 index 00000000..23661e5a --- /dev/null +++ b/SafeExamBrowser.Browser/BrowserApplicationInfo.cs @@ -0,0 +1,19 @@ +/* + * 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.Configuration; + +namespace SafeExamBrowser.Browser +{ + public class BrowserApplicationInfo : IApplicationInfo + { + public string Name => "Chromium Browser"; + public string Tooltip => Name; + public IApplicationIconResource IconResource { get; } = new BrowserIconResource(); + } +} diff --git a/SafeExamBrowser.Browser/BrowserIconResource.cs b/SafeExamBrowser.Browser/BrowserIconResource.cs new file mode 100644 index 00000000..c1d97705 --- /dev/null +++ b/SafeExamBrowser.Browser/BrowserIconResource.cs @@ -0,0 +1,19 @@ +/* + * 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 SafeExamBrowser.Contracts.Configuration; + +namespace SafeExamBrowser.Browser +{ + public class BrowserIconResource : IApplicationIconResource + { + public Uri Uri => new Uri("pack://application:,,,/SafeExamBrowser.Browser;component/Images/ChromiumLogo.png"); + public bool IsUriResource => true; + } +} diff --git a/SafeExamBrowser.Browser/Images/ChromiumLogo.png b/SafeExamBrowser.Browser/Images/ChromiumLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebfdbe3cee0078905aed03e1388f54b1d08e4be GIT binary patch literal 131956 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%0DlSr4`^~Dvi}XGV%kgh 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 literal 0 HcmV?d00001 diff --git a/SafeExamBrowser.Browser/Images/ChromiumLogo_Attribution.txt b/SafeExamBrowser.Browser/Images/ChromiumLogo_Attribution.txt new file mode 100644 index 00000000..b20cc5dd --- /dev/null +++ b/SafeExamBrowser.Browser/Images/ChromiumLogo_Attribution.txt @@ -0,0 +1,2 @@ +The "Chromium 11 Logo" by The Chromium Development Documentation Project / The Chromium Authors is licensed under +Creative Commons attribution 2.5. Source: https://commons.wikimedia.org/wiki/File:Chromium_11_Logo.svg \ No newline at end of file diff --git a/SafeExamBrowser.Browser/Properties/AssemblyInfo.cs b/SafeExamBrowser.Browser/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..4de2a54f --- /dev/null +++ b/SafeExamBrowser.Browser/Properties/AssemblyInfo.cs @@ -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.Browser")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SafeExamBrowser.Browser")] +[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("04e653f1-98e6-4e34-9dd7-7f2bc1a8b767")] + +// 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")] diff --git a/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj b/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj new file mode 100644 index 00000000..c9969365 --- /dev/null +++ b/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {04E653F1-98E6-4E34-9DD7-7F2BC1A8B767} + Library + Properties + SafeExamBrowser.Browser + SafeExamBrowser.Browser + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + {47DA5933-BEF8-4729-94E6-ABDE2DB12262} + SafeExamBrowser.Contracts + + + + + + + + + \ No newline at end of file diff --git a/SafeExamBrowser.Contracts/Behaviour/IApplicationController.cs b/SafeExamBrowser.Contracts/Behaviour/IApplicationController.cs new file mode 100644 index 00000000..b3f04f7c --- /dev/null +++ b/SafeExamBrowser.Contracts/Behaviour/IApplicationController.cs @@ -0,0 +1,20 @@ +/* + * 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; + +namespace SafeExamBrowser.Contracts.Behaviour +{ + public interface IApplicationController + { + /// + /// The handler to be executed when an application's taskbar button gets clicked. + /// + TaskbarButtonClickHandler OnClick { get; } + } +} diff --git a/SafeExamBrowser.Contracts/Configuration/IShutdownController.cs b/SafeExamBrowser.Contracts/Behaviour/IShutdownController.cs similarity index 67% rename from SafeExamBrowser.Contracts/Configuration/IShutdownController.cs rename to SafeExamBrowser.Contracts/Behaviour/IShutdownController.cs index 2acf5cdb..0da0e1a5 100644 --- a/SafeExamBrowser.Contracts/Configuration/IShutdownController.cs +++ b/SafeExamBrowser.Contracts/Behaviour/IShutdownController.cs @@ -6,10 +6,13 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -namespace SafeExamBrowser.Contracts.Configuration +namespace SafeExamBrowser.Contracts.Behaviour { public interface IShutdownController { + /// + /// Reverts any changes performed during the startup or runtime and releases all used resources. + /// void FinalizeApplication(); } } diff --git a/SafeExamBrowser.Contracts/Configuration/IStartupController.cs b/SafeExamBrowser.Contracts/Behaviour/IStartupController.cs similarity index 64% rename from SafeExamBrowser.Contracts/Configuration/IStartupController.cs rename to SafeExamBrowser.Contracts/Behaviour/IStartupController.cs index f04ae701..913402bd 100644 --- a/SafeExamBrowser.Contracts/Configuration/IStartupController.cs +++ b/SafeExamBrowser.Contracts/Behaviour/IStartupController.cs @@ -6,10 +6,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -namespace SafeExamBrowser.Contracts.Configuration +namespace SafeExamBrowser.Contracts.Behaviour { public interface IStartupController { + /// + /// Tries to initialize the application. Returns true if the initialization was successful, + /// false otherwise. + /// bool TryInitializeApplication(); } } diff --git a/SafeExamBrowser.Contracts/Configuration/IApplicationIconResource.cs b/SafeExamBrowser.Contracts/Configuration/IApplicationIconResource.cs new file mode 100644 index 00000000..dde1084b --- /dev/null +++ b/SafeExamBrowser.Contracts/Configuration/IApplicationIconResource.cs @@ -0,0 +1,25 @@ +/* + * 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; + +namespace SafeExamBrowser.Contracts.Configuration +{ + public interface IApplicationIconResource + { + /// + /// The Uri pointing to the application icon. + /// + Uri Uri { get; } + + /// + /// Indicates whether the icon resource consists of a Uri. + /// + bool IsUriResource { get; } + } +} diff --git a/SafeExamBrowser.Contracts/Configuration/IApplicationInfo.cs b/SafeExamBrowser.Contracts/Configuration/IApplicationInfo.cs new file mode 100644 index 00000000..d00de367 --- /dev/null +++ b/SafeExamBrowser.Contracts/Configuration/IApplicationInfo.cs @@ -0,0 +1,28 @@ +/* + * 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.Configuration +{ + public interface IApplicationInfo + { + /// + /// The name of the application. + /// + string Name { get; } + + /// + /// The tooltip for the application. + /// + string Tooltip { get; } + + /// + /// The resource providing the application icon. + /// + IApplicationIconResource IconResource { get; } + } +} diff --git a/SafeExamBrowser.Contracts/Configuration/ISettings.cs b/SafeExamBrowser.Contracts/Configuration/ISettings.cs index 70ed699f..6a49de0b 100644 --- a/SafeExamBrowser.Contracts/Configuration/ISettings.cs +++ b/SafeExamBrowser.Contracts/Configuration/ISettings.cs @@ -10,9 +10,24 @@ namespace SafeExamBrowser.Contracts.Configuration { public interface ISettings { + /// + /// The copyright information for the application, to be displayed in e.g. the log or the splash screen. + /// string CopyrightInfo { get; } + + /// + /// The path where the log files are to be stored. + /// string LogFolderPath { get; } + + /// + /// The information to be printed at the beginning of the application log. + /// string LogHeader { get; } + + /// + /// The program version of the application. + /// string ProgramVersion { get; } } } diff --git a/SafeExamBrowser.Contracts/I18n/IText.cs b/SafeExamBrowser.Contracts/I18n/IText.cs index eff2d16e..02d8671f 100644 --- a/SafeExamBrowser.Contracts/I18n/IText.cs +++ b/SafeExamBrowser.Contracts/I18n/IText.cs @@ -10,6 +10,10 @@ namespace SafeExamBrowser.Contracts.I18n { public interface IText { + /// + /// Gets the text associated with the specified key. If the key was not found, a default text indicating + /// that the given key is not configured shall be returned. + /// string Get(Key key); } } diff --git a/SafeExamBrowser.Contracts/I18n/ITextResource.cs b/SafeExamBrowser.Contracts/I18n/ITextResource.cs index 64fdb881..5b43ee0c 100644 --- a/SafeExamBrowser.Contracts/I18n/ITextResource.cs +++ b/SafeExamBrowser.Contracts/I18n/ITextResource.cs @@ -12,6 +12,9 @@ namespace SafeExamBrowser.Contracts.I18n { public interface ITextResource { + /// + /// Loads all text data from a resource. + /// IDictionary LoadText(); } } diff --git a/SafeExamBrowser.Contracts/I18n/Key.cs b/SafeExamBrowser.Contracts/I18n/Key.cs index 7368b4f4..046515a8 100644 --- a/SafeExamBrowser.Contracts/I18n/Key.cs +++ b/SafeExamBrowser.Contracts/I18n/Key.cs @@ -8,6 +8,9 @@ namespace SafeExamBrowser.Contracts.I18n { + /// + /// Defines all text components of the user interface. + /// public enum Key { MessageBox_ShutdownError, diff --git a/SafeExamBrowser.Contracts/Logging/ILogContent.cs b/SafeExamBrowser.Contracts/Logging/ILogContent.cs index e4755041..31ff459e 100644 --- a/SafeExamBrowser.Contracts/Logging/ILogContent.cs +++ b/SafeExamBrowser.Contracts/Logging/ILogContent.cs @@ -10,6 +10,9 @@ using System; namespace SafeExamBrowser.Contracts.Logging { + /// + /// Defines a content element of the application log. + /// public interface ILogContent : ICloneable { } diff --git a/SafeExamBrowser.Contracts/Logging/ILogMessage.cs b/SafeExamBrowser.Contracts/Logging/ILogMessage.cs index 5fc62eba..c905295c 100644 --- a/SafeExamBrowser.Contracts/Logging/ILogMessage.cs +++ b/SafeExamBrowser.Contracts/Logging/ILogMessage.cs @@ -12,9 +12,24 @@ namespace SafeExamBrowser.Contracts.Logging { public interface ILogMessage : ILogContent { + /// + /// The date when the message was logged. + /// DateTime DateTime { get; } + + /// + /// The severity of the message. + /// LogLevel Severity { get; } + + /// + /// The message itself. + /// string Message { get; } + + /// + /// Information about the thread on which the message was logged. + /// IThreadInfo ThreadInfo { get; } } } diff --git a/SafeExamBrowser.Contracts/Logging/ILogObserver.cs b/SafeExamBrowser.Contracts/Logging/ILogObserver.cs index 25c3d58d..9e96e3f1 100644 --- a/SafeExamBrowser.Contracts/Logging/ILogObserver.cs +++ b/SafeExamBrowser.Contracts/Logging/ILogObserver.cs @@ -10,6 +10,9 @@ namespace SafeExamBrowser.Contracts.Logging { public interface ILogObserver { + /// + /// Notifies an observer once new content has been added to the application log. + /// void Notify(ILogContent content); } } diff --git a/SafeExamBrowser.Contracts/Logging/ILogText.cs b/SafeExamBrowser.Contracts/Logging/ILogText.cs index 5b3dc81d..64a9ec77 100644 --- a/SafeExamBrowser.Contracts/Logging/ILogText.cs +++ b/SafeExamBrowser.Contracts/Logging/ILogText.cs @@ -10,6 +10,9 @@ namespace SafeExamBrowser.Contracts.Logging { public interface ILogText : ILogContent { + /// + /// The raw text to be appended to the application log. + /// string Text { get; } } } diff --git a/SafeExamBrowser.Contracts/Logging/ILogger.cs b/SafeExamBrowser.Contracts/Logging/ILogger.cs index 8074e267..8b4979ce 100644 --- a/SafeExamBrowser.Contracts/Logging/ILogger.cs +++ b/SafeExamBrowser.Contracts/Logging/ILogger.cs @@ -13,14 +13,50 @@ namespace SafeExamBrowser.Contracts.Logging { public interface ILogger { + /// + /// Logs the given message with severity INFO. + /// void Info(string message); + + /// + /// Logs the given message with severity WARNING. + /// void Warn(string message); + + /// + /// Logs the given message with severity ERROR. + /// void Error(string message); + + /// + /// Logs the given message with severity ERROR and includes information about + /// the specified exception (i.e. type, message and stacktrace). + /// void Error(string message, Exception exception); + + /// + /// Logs the given message as raw text. + /// void Log(string message); + + /// + /// Appends the given content to the log. + /// void Log(ILogContent content); + + /// + /// Suscribes an observer to the application log. + /// void Subscribe(ILogObserver observer); + + /// + /// Unsubscribes an observer from the application log. + /// void Unsubscribe(ILogObserver observer); + + /// + /// Returns a copy of the current log content. + /// IList GetLog(); } } diff --git a/SafeExamBrowser.Contracts/Logging/IThreadInfo.cs b/SafeExamBrowser.Contracts/Logging/IThreadInfo.cs index 1dc23ff3..296b19fb 100644 --- a/SafeExamBrowser.Contracts/Logging/IThreadInfo.cs +++ b/SafeExamBrowser.Contracts/Logging/IThreadInfo.cs @@ -12,8 +12,19 @@ namespace SafeExamBrowser.Contracts.Logging { public interface IThreadInfo : ICloneable { + /// + /// The id of the thread. + /// int Id { get; } + + /// + /// The thread's name. + /// string Name { get; } + + /// + /// A flag indicating whether the thread has a name. + /// bool HasName { get; } } } diff --git a/SafeExamBrowser.Contracts/Logging/LogLevel.cs b/SafeExamBrowser.Contracts/Logging/LogLevel.cs index 53428f9a..4eb47a55 100644 --- a/SafeExamBrowser.Contracts/Logging/LogLevel.cs +++ b/SafeExamBrowser.Contracts/Logging/LogLevel.cs @@ -8,6 +8,9 @@ namespace SafeExamBrowser.Contracts.Logging { + /// + /// Defines the severity levels of the application log. + /// public enum LogLevel { Info = 1, diff --git a/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj b/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj index 01114287..1e4bce48 100644 --- a/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj +++ b/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj @@ -40,9 +40,12 @@ + + + - - + + @@ -58,6 +61,7 @@ + diff --git a/SafeExamBrowser.Contracts/UserInterface/IMessageBox.cs b/SafeExamBrowser.Contracts/UserInterface/IMessageBox.cs index d5181d98..d70a988a 100644 --- a/SafeExamBrowser.Contracts/UserInterface/IMessageBox.cs +++ b/SafeExamBrowser.Contracts/UserInterface/IMessageBox.cs @@ -10,6 +10,9 @@ namespace SafeExamBrowser.Contracts.UserInterface { public interface IMessageBox { + /// + /// Shows a message box according to the specified parameters. + /// void Show(string message, string title, MessageBoxAction action = MessageBoxAction.Confirm, MessageBoxIcon icon = MessageBoxIcon.Information); } } diff --git a/SafeExamBrowser.Contracts/UserInterface/ISplashScreen.cs b/SafeExamBrowser.Contracts/UserInterface/ISplashScreen.cs index 67396d7e..c6696ec7 100644 --- a/SafeExamBrowser.Contracts/UserInterface/ISplashScreen.cs +++ b/SafeExamBrowser.Contracts/UserInterface/ISplashScreen.cs @@ -12,9 +12,24 @@ namespace SafeExamBrowser.Contracts.UserInterface { public interface ISplashScreen : ILogObserver { + /// + /// Closes the splash screen. + /// void Close(); + + /// + /// Set the maximum of the splash screen's progress bar. + /// void SetMaxProgress(int max); + + /// + /// Shows the splash screen to the user. + /// void Show(); - void UpdateProgress(); + + /// + /// Updates the progress bar of the splash screen according to the specified amount. + /// + void UpdateProgress(int amount = 1); } } diff --git a/SafeExamBrowser.Contracts/UserInterface/ITaskbar.cs b/SafeExamBrowser.Contracts/UserInterface/ITaskbar.cs index d14f864f..709a0883 100644 --- a/SafeExamBrowser.Contracts/UserInterface/ITaskbar.cs +++ b/SafeExamBrowser.Contracts/UserInterface/ITaskbar.cs @@ -10,9 +10,24 @@ namespace SafeExamBrowser.Contracts.UserInterface { public interface ITaskbar { + /// + /// Adds the given application button to the taskbar. + /// void AddButton(ITaskbarButton button); + + /// + /// Moves the taskbar to the given location on the screen. + /// void SetPosition(int x, int y); - void SetSize(int widht, int height); + + /// + /// Sets the size of the taskbar. + /// + void SetSize(int width, int height); + + /// + /// Displays the taskbar on the screen. + /// void Show(); } } diff --git a/SafeExamBrowser.Contracts/UserInterface/ITaskbarButton.cs b/SafeExamBrowser.Contracts/UserInterface/ITaskbarButton.cs index f61bc4d1..5e4859d4 100644 --- a/SafeExamBrowser.Contracts/UserInterface/ITaskbarButton.cs +++ b/SafeExamBrowser.Contracts/UserInterface/ITaskbarButton.cs @@ -6,12 +6,31 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +using System; + namespace SafeExamBrowser.Contracts.UserInterface { - public delegate void TaskbarButtonClickHandler(); + public delegate void TaskbarButtonClickHandler(Guid? instanceId = null); public interface ITaskbarButton { + /// + /// OnClick handler, executed when the user clicks on the application button. If multiple instances of + /// an application are active, the handler is only executed when the user selects one of the instances. + /// event TaskbarButtonClickHandler OnClick; + + /// + /// Registers a new instance of an application, to be displayed when the user clicks the taskbar button. + /// + /// The identifier for the application instance. + /// An optional title to be displayed (if multiple instances are active). + void RegisterInstance(Guid id, string title = null); + + /// + /// Unregisters an application instance, e.g. if it gets closed. + /// + /// The identifier for the application instance. + void UnregisterInstance(Guid id); } } diff --git a/SafeExamBrowser.Contracts/UserInterface/IUiElementFactory.cs b/SafeExamBrowser.Contracts/UserInterface/IUiElementFactory.cs new file mode 100644 index 00000000..f397772f --- /dev/null +++ b/SafeExamBrowser.Contracts/UserInterface/IUiElementFactory.cs @@ -0,0 +1,20 @@ +/* + * 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.Configuration; + +namespace SafeExamBrowser.Contracts.UserInterface +{ + public interface IUiElementFactory + { + /// + /// Creates a taskbar button, initialized with the given application information. + /// + ITaskbarButton CreateButton(IApplicationInfo info); + } +} diff --git a/SafeExamBrowser.Contracts/UserInterface/MessageBoxAction.cs b/SafeExamBrowser.Contracts/UserInterface/MessageBoxAction.cs index b61d961f..4d2e987a 100644 --- a/SafeExamBrowser.Contracts/UserInterface/MessageBoxAction.cs +++ b/SafeExamBrowser.Contracts/UserInterface/MessageBoxAction.cs @@ -8,6 +8,9 @@ namespace SafeExamBrowser.Contracts.UserInterface { + /// + /// Defines all actions available for a message box. + /// public enum MessageBoxAction { Confirm diff --git a/SafeExamBrowser.Contracts/UserInterface/MessageBoxIcon.cs b/SafeExamBrowser.Contracts/UserInterface/MessageBoxIcon.cs index 548e8494..9f2a5901 100644 --- a/SafeExamBrowser.Contracts/UserInterface/MessageBoxIcon.cs +++ b/SafeExamBrowser.Contracts/UserInterface/MessageBoxIcon.cs @@ -8,6 +8,9 @@ namespace SafeExamBrowser.Contracts.UserInterface { + /// + /// Defines all icons available in a message box. + /// public enum MessageBoxIcon { Information, diff --git a/SafeExamBrowser.Core/Configuration/ShutdownController.cs b/SafeExamBrowser.Core/Behaviour/ShutdownController.cs similarity index 92% rename from SafeExamBrowser.Core/Configuration/ShutdownController.cs rename to SafeExamBrowser.Core/Behaviour/ShutdownController.cs index 643fba22..b31f6f6b 100644 --- a/SafeExamBrowser.Core/Configuration/ShutdownController.cs +++ b/SafeExamBrowser.Core/Behaviour/ShutdownController.cs @@ -7,12 +7,12 @@ */ using System; -using SafeExamBrowser.Contracts.Configuration; +using SafeExamBrowser.Contracts.Behaviour; using SafeExamBrowser.Contracts.I18n; using SafeExamBrowser.Contracts.Logging; using SafeExamBrowser.Contracts.UserInterface; -namespace SafeExamBrowser.Core.Configuration +namespace SafeExamBrowser.Core.Behaviour { public class ShutdownController : IShutdownController { diff --git a/SafeExamBrowser.Core/Configuration/StartupController.cs b/SafeExamBrowser.Core/Behaviour/StartupController.cs similarity index 79% rename from SafeExamBrowser.Core/Configuration/StartupController.cs rename to SafeExamBrowser.Core/Behaviour/StartupController.cs index c86325f3..95d71155 100644 --- a/SafeExamBrowser.Core/Configuration/StartupController.cs +++ b/SafeExamBrowser.Core/Behaviour/StartupController.cs @@ -8,30 +8,35 @@ using System; using System.Threading; +using SafeExamBrowser.Contracts.Behaviour; using SafeExamBrowser.Contracts.Configuration; using SafeExamBrowser.Contracts.I18n; using SafeExamBrowser.Contracts.Logging; using SafeExamBrowser.Contracts.UserInterface; -namespace SafeExamBrowser.Core.Configuration +namespace SafeExamBrowser.Core.Behaviour { public class StartupController : IStartupController { + private IApplicationInfo browserInfo; private ILogger logger; private IMessageBox messageBox; private ISettings settings; private ISplashScreen splashScreen; private ITaskbar taskbar; private IText text; + private IUiElementFactory uiFactory; - public StartupController(ILogger logger, IMessageBox messageBox, ISettings settings, ISplashScreen splashScreen, ITaskbar taskbar, IText text) + public StartupController(IApplicationInfo browserInfo, ILogger logger, IMessageBox messageBox, ISettings settings, ISplashScreen splashScreen, ITaskbar taskbar, IText text, IUiElementFactory uiFactory) { + this.browserInfo = browserInfo; this.logger = logger; this.messageBox = messageBox; this.settings = settings; this.splashScreen = splashScreen; this.taskbar = taskbar; this.text = text; + this.uiFactory = uiFactory; } public bool TryInitializeApplication() @@ -41,10 +46,15 @@ namespace SafeExamBrowser.Core.Configuration logger.Log(settings.LogHeader); logger.Log($"{Environment.NewLine}# Application started at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}{Environment.NewLine}"); logger.Info("Initiating startup procedure."); - logger.Subscribe(splashScreen); - splashScreen.SetMaxProgress(4); + splashScreen.SetMaxProgress(3); + logger.Info("Initializing browser."); + + var browserButton = uiFactory.CreateButton(browserInfo); + + taskbar.AddButton(browserButton); + splashScreen.UpdateProgress(); // TODO (depending on specification): @@ -72,8 +82,6 @@ namespace SafeExamBrowser.Core.Configuration logger.Info("Closing splash screen."); Thread.Sleep(1000); - - splashScreen.UpdateProgress(); logger.Unsubscribe(splashScreen); logger.Info("Application successfully initialized!"); diff --git a/SafeExamBrowser.Core/Logging/LogMessage.cs b/SafeExamBrowser.Core/Logging/LogMessage.cs index 5f35ad37..a39d6cf4 100644 --- a/SafeExamBrowser.Core/Logging/LogMessage.cs +++ b/SafeExamBrowser.Core/Logging/LogMessage.cs @@ -20,15 +20,10 @@ namespace SafeExamBrowser.Core.Entities public LogMessage(DateTime dateTime, LogLevel severity, string message, IThreadInfo threadInfo) { - if (threadInfo == null) - { - throw new ArgumentNullException(nameof(threadInfo)); - } - DateTime = dateTime; Severity = severity; Message = message; - ThreadInfo = threadInfo; + ThreadInfo = threadInfo ?? throw new ArgumentNullException(nameof(threadInfo)); } public object Clone() diff --git a/SafeExamBrowser.Core/SafeExamBrowser.Core.csproj b/SafeExamBrowser.Core/SafeExamBrowser.Core.csproj index f05e7753..36b64c06 100644 --- a/SafeExamBrowser.Core/SafeExamBrowser.Core.csproj +++ b/SafeExamBrowser.Core/SafeExamBrowser.Core.csproj @@ -41,8 +41,8 @@ - - + + diff --git a/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml b/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml index cb1caf2a..99526f0e 100644 --- a/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml +++ b/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml @@ -7,7 +7,7 @@ mc:Ignorable="d" d:DesignHeight="40" d:DesignWidth="40"> - diff --git a/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml.cs b/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml.cs index 78e33223..cc03e4d6 100644 --- a/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml.cs +++ b/SafeExamBrowser.UserInterface/Controls/TaskbarButton.xaml.cs @@ -9,6 +9,7 @@ using System; using System.Windows.Controls; using System.Windows.Media.Imaging; +using SafeExamBrowser.Contracts.Configuration; using SafeExamBrowser.Contracts.UserInterface; namespace SafeExamBrowser.UserInterface.Controls @@ -17,17 +18,44 @@ namespace SafeExamBrowser.UserInterface.Controls { public event TaskbarButtonClickHandler OnClick; - public TaskbarButton(string imageUri) + public TaskbarButton(IApplicationInfo info) { InitializeComponent(); + InitializeButton(info); + } - var icon = new BitmapImage(); + public void RegisterInstance(Guid id, string title = null) + { + throw new NotImplementedException(); + } - icon.BeginInit(); - icon.UriSource = new Uri(imageUri); - icon.EndInit(); + public void UnregisterInstance(Guid id) + { + throw new NotImplementedException(); + } - IconImage.Source = icon; + private void InitializeButton(IApplicationInfo info) + { + Button.ToolTip = info.Tooltip; + + if (info.IconResource.IsUriResource) + { + var icon = new BitmapImage(); + + icon.BeginInit(); + icon.UriSource = info.IconResource.Uri; + icon.EndInit(); + + IconImage.Source = icon; + } + } + + private void Button_Click(object sender, System.Windows.RoutedEventArgs e) + { + // TODO + OnClick?.Invoke(); + + throw new NotImplementedException(); } } } diff --git a/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj b/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj index 693734cf..43f02d4d 100644 --- a/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj +++ b/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj @@ -72,6 +72,7 @@ Taskbar.xaml + diff --git a/SafeExamBrowser.UserInterface/SplashScreen.xaml.cs b/SafeExamBrowser.UserInterface/SplashScreen.xaml.cs index 583bb8b7..c340e95c 100644 --- a/SafeExamBrowser.UserInterface/SplashScreen.xaml.cs +++ b/SafeExamBrowser.UserInterface/SplashScreen.xaml.cs @@ -45,9 +45,9 @@ namespace SafeExamBrowser.UserInterface model.MaxProgress = max; } - public void UpdateProgress() + public void UpdateProgress(int amount = 1) { - model.CurrentProgress += 1; + model.CurrentProgress += amount; } } } diff --git a/SafeExamBrowser.UserInterface/Taskbar.xaml.cs b/SafeExamBrowser.UserInterface/Taskbar.xaml.cs index 129b08ac..393b161f 100644 --- a/SafeExamBrowser.UserInterface/Taskbar.xaml.cs +++ b/SafeExamBrowser.UserInterface/Taskbar.xaml.cs @@ -32,9 +32,9 @@ namespace SafeExamBrowser.UserInterface Top = y; } - public void SetSize(int widht, int height) + public void SetSize(int width, int height) { - Width = widht; + Width = width; Height = height; } } diff --git a/SafeExamBrowser.UserInterface/UiElementFactory.cs b/SafeExamBrowser.UserInterface/UiElementFactory.cs new file mode 100644 index 00000000..e2291995 --- /dev/null +++ b/SafeExamBrowser.UserInterface/UiElementFactory.cs @@ -0,0 +1,22 @@ +/* + * 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.Configuration; +using SafeExamBrowser.Contracts.UserInterface; +using SafeExamBrowser.UserInterface.Controls; + +namespace SafeExamBrowser.UserInterface +{ + public class UiElementFactory : IUiElementFactory + { + public ITaskbarButton CreateButton(IApplicationInfo info) + { + return new TaskbarButton(info); + } + } +} diff --git a/SafeExamBrowser.sln b/SafeExamBrowser.sln index d8ea5884..d36f315a 100644 --- a/SafeExamBrowser.sln +++ b/SafeExamBrowser.sln @@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Core.UnitTe EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Contracts", "SafeExamBrowser.Contracts\SafeExamBrowser.Contracts.csproj", "{47DA5933-BEF8-4729-94E6-ABDE2DB12262}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Browser", "SafeExamBrowser.Browser\SafeExamBrowser.Browser.csproj", "{04E653F1-98E6-4E34-9DD7-7F2BC1A8B767}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -45,6 +47,10 @@ Global {47DA5933-BEF8-4729-94E6-ABDE2DB12262}.Debug|Any CPU.Build.0 = Debug|Any CPU {47DA5933-BEF8-4729-94E6-ABDE2DB12262}.Release|Any CPU.ActiveCfg = Release|Any CPU {47DA5933-BEF8-4729-94E6-ABDE2DB12262}.Release|Any CPU.Build.0 = Release|Any CPU + {04E653F1-98E6-4E34-9DD7-7F2BC1A8B767}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04E653F1-98E6-4E34-9DD7-7F2BC1A8B767}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04E653F1-98E6-4E34-9DD7-7F2BC1A8B767}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04E653F1-98E6-4E34-9DD7-7F2BC1A8B767}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SafeExamBrowser/App.cs b/SafeExamBrowser/App.cs index 876c200f..a0335e1d 100644 --- a/SafeExamBrowser/App.cs +++ b/SafeExamBrowser/App.cs @@ -15,7 +15,6 @@ namespace SafeExamBrowser public class App : Application { private static readonly Mutex mutex = new Mutex(true, "safe_exam_browser_single_instance_mutex"); - private CompositionRoot instances; [STAThread] @@ -78,14 +77,18 @@ namespace SafeExamBrowser if (success) { - instances.Taskbar.Dispatcher.Invoke(() => + Dispatcher.Invoke(() => { MainWindow = instances.Taskbar; MainWindow.Show(); }); } + else + { + Dispatcher.Invoke(Shutdown); + } - instances.SplashScreen.Dispatcher.Invoke(instances.SplashScreen.Close); + Dispatcher.Invoke(instances.SplashScreen.Close); } } } diff --git a/SafeExamBrowser/CompositionRoot.cs b/SafeExamBrowser/CompositionRoot.cs index d5ed86fb..8e41a7ab 100644 --- a/SafeExamBrowser/CompositionRoot.cs +++ b/SafeExamBrowser/CompositionRoot.cs @@ -6,10 +6,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -using SafeExamBrowser.Contracts.Configuration; -using SafeExamBrowser.Contracts.I18n; -using SafeExamBrowser.Contracts.Logging; -using SafeExamBrowser.Contracts.UserInterface; +using SafeExamBrowser.Browser; +using SafeExamBrowser.Contracts.Behaviour; +using SafeExamBrowser.Core.Behaviour; using SafeExamBrowser.Core.Configuration; using SafeExamBrowser.Core.I18n; using SafeExamBrowser.Core.Logging; @@ -19,28 +18,27 @@ namespace SafeExamBrowser { internal class CompositionRoot { - public ILogger Logger { get; private set; } - public IMessageBox MessageBox { get; private set; } - public ISettings Settings { get; private set; } public IShutdownController ShutdownController { get; set; } public IStartupController StartupController { get; private set; } - public IText Text { get; private set; } + public SplashScreen SplashScreen { get; private set; } public Taskbar Taskbar { get; private set; } public void BuildObjectGraph() { - MessageBox = new WpfMessageBox(); - Settings = new Settings(); - Taskbar = new Taskbar(); + var browserInfo = new BrowserApplicationInfo(); + var messageBox = new WpfMessageBox(); + var settings = new Settings(); + var logger = new Logger(); + var text = new Text(new XmlTextResource()); + var uiFactory = new UiElementFactory(); - Logger = new Logger(); - Logger.Subscribe(new LogFileWriter(Settings)); + logger.Subscribe(new LogFileWriter(settings)); - Text = new Text(new XmlTextResource()); - SplashScreen = new SplashScreen(Settings); - ShutdownController = new ShutdownController(Logger, MessageBox, Text); - StartupController = new StartupController(Logger, MessageBox, Settings, SplashScreen, Taskbar, Text); + Taskbar = new Taskbar(); + SplashScreen = new SplashScreen(settings); + ShutdownController = new ShutdownController(logger, messageBox, text); + StartupController = new StartupController(browserInfo, logger, messageBox, settings, SplashScreen, Taskbar, text, uiFactory); } } } diff --git a/SafeExamBrowser/SafeExamBrowser.csproj b/SafeExamBrowser/SafeExamBrowser.csproj index 1bf280d0..03506c44 100644 --- a/SafeExamBrowser/SafeExamBrowser.csproj +++ b/SafeExamBrowser/SafeExamBrowser.csproj @@ -93,6 +93,10 @@ + + {04E653F1-98E6-4E34-9DD7-7F2BC1A8B767} + SafeExamBrowser.Browser + {47DA5933-BEF8-4729-94E6-ABDE2DB12262} SafeExamBrowser.Contracts