From 5c365f02b0fbb1d19758056f4c578ba1db32bbf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damian=20B=C3=BCchel?= Date: Mon, 31 Jul 2017 20:22:53 +0200 Subject: [PATCH] Continued implementation of browser window, i.e. added basic browser functionality like address bar, refresh and navigation. --- .../BrowserApplicationController.cs | 19 +++-- .../BrowserApplicationInstance.cs | 56 ++++++++++++-- .../BrowserContextMenuHandler.cs | 62 ++++++++++++++++ SafeExamBrowser.Browser/BrowserControl.cs | 59 ++++++++++++++- .../SafeExamBrowser.Browser.csproj | 1 + .../Settings/BrowserSettings.cs | 12 +-- .../Configuration/IApplicationInstance.cs | 13 ++-- .../Settings/IBrowserSettings.cs | 9 ++- SafeExamBrowser.Contracts/I18n/Key.cs | 1 + .../UserInterface/IBrowserControl.cs | 32 ++++++++ .../UserInterface/IBrowserWindow.cs | 36 +++++++++ .../UserInterface/IUserInterfaceFactory.cs | 2 +- .../UserInterface/IWindow.cs | 4 +- SafeExamBrowser.Core/I18n/Text.xml | 43 +++++------ .../BrowserWindow.xaml | 2 +- .../BrowserWindow.xaml.cs | 69 +++++++++++++++++- .../Controls/ApplicationButton.xaml | 2 +- .../Controls/ApplicationButton.xaml.cs | 20 ++++- .../Controls/ApplicationInstanceButton.xaml | 2 +- .../ApplicationInstanceButton.xaml.cs | 11 ++- .../Images/Chromium.ico | Bin 0 -> 191596 bytes .../SafeExamBrowser.UserInterface.csproj | 3 + SafeExamBrowser/CompositionRoot.cs | 3 +- 23 files changed, 391 insertions(+), 70 deletions(-) create mode 100644 SafeExamBrowser.Browser/BrowserContextMenuHandler.cs create mode 100644 SafeExamBrowser.UserInterface/Images/Chromium.ico diff --git a/SafeExamBrowser.Browser/BrowserApplicationController.cs b/SafeExamBrowser.Browser/BrowserApplicationController.cs index 8ecced98..63d44006 100644 --- a/SafeExamBrowser.Browser/BrowserApplicationController.cs +++ b/SafeExamBrowser.Browser/BrowserApplicationController.cs @@ -13,6 +13,7 @@ using CefSharp; using SafeExamBrowser.Contracts.Behaviour; using SafeExamBrowser.Contracts.Configuration; using SafeExamBrowser.Contracts.Configuration.Settings; +using SafeExamBrowser.Contracts.I18n; using SafeExamBrowser.Contracts.UserInterface; namespace SafeExamBrowser.Browser @@ -23,10 +24,12 @@ namespace SafeExamBrowser.Browser private IList instances = new List(); private ISettings settings; private IUserInterfaceFactory uiFactory; + private IText text; - public BrowserApplicationController(ISettings settings, IUserInterfaceFactory uiFactory) + public BrowserApplicationController(ISettings settings, IText text, IUserInterfaceFactory uiFactory) { this.settings = settings; + this.text = text; this.uiFactory = uiFactory; } @@ -56,7 +59,7 @@ namespace SafeExamBrowser.Browser { foreach (var instance in instances) { - instance.OnTerminated -= Instance_OnTerminated; + instance.Terminated -= Instance_Terminated; instance.Window.Close(); } @@ -65,17 +68,13 @@ namespace SafeExamBrowser.Browser private void CreateNewInstance() { - var control = new BrowserControl("www.duckduckgo.com"); - var window = uiFactory.CreateBrowserWindow(control, settings.Browser); - var instance = new BrowserApplicationInstance("DuckDuckGo"); - - instance.RegisterWindow(window); - instance.OnTerminated += Instance_OnTerminated; + var instance = new BrowserApplicationInstance(settings.Browser, text, uiFactory, instances.Count == 0); button.RegisterInstance(instance); instances.Add(instance); - window.Show(); + instance.Terminated += Instance_Terminated; + instance.Window.Show(); } private void Button_OnClick(Guid? instanceId = null) @@ -90,7 +89,7 @@ namespace SafeExamBrowser.Browser } } - private void Instance_OnTerminated(Guid id) + private void Instance_Terminated(Guid id) { instances.Remove(instances.FirstOrDefault(i => i.Id == id)); } diff --git a/SafeExamBrowser.Browser/BrowserApplicationInstance.cs b/SafeExamBrowser.Browser/BrowserApplicationInstance.cs index afe99d3c..716241c1 100644 --- a/SafeExamBrowser.Browser/BrowserApplicationInstance.cs +++ b/SafeExamBrowser.Browser/BrowserApplicationInstance.cs @@ -8,28 +8,70 @@ using System; using SafeExamBrowser.Contracts.Configuration; +using SafeExamBrowser.Contracts.Configuration.Settings; +using SafeExamBrowser.Contracts.I18n; using SafeExamBrowser.Contracts.UserInterface; namespace SafeExamBrowser.Browser { public class BrowserApplicationInstance : IApplicationInstance { + private IBrowserControl control; + private IBrowserWindow window; + public Guid Id { get; private set; } public string Name { get; private set; } - public IWindow Window { get; private set; } + public IWindow Window { get { return window; } } - public event TerminationEventHandler OnTerminated; + public event TerminationEventHandler Terminated; + public event NameChangedEventHandler NameChanged; - public BrowserApplicationInstance(string name) + public BrowserApplicationInstance(IBrowserSettings settings, IText text, IUserInterfaceFactory uiFactory, bool isMainInstance) { Id = Guid.NewGuid(); - Name = name; + + control = new BrowserControl(settings, text); + control.AddressChanged += Control_AddressChanged; + control.TitleChanged += Control_TitleChanged; + + window = uiFactory.CreateBrowserWindow(control, settings); + window.IsMainWindow = isMainInstance; + window.Closing += () => Terminated?.Invoke(Id); + window.AddressChanged += Window_AddressChanged; + window.ReloadRequested += Window_ReloadRequested; + window.BackwardNavigationRequested += Window_BackwardNavigationRequested; + window.ForwardNavigationRequested += Window_ForwardNavigationRequested; } - public void RegisterWindow(IWindow window) + private void Control_AddressChanged(string address) { - Window = window; - Window.OnClose += () => OnTerminated?.Invoke(Id); + window.UpdateAddress(address); + } + + private void Control_TitleChanged(string title) + { + window.UpdateTitle(title); + NameChanged?.Invoke(title); + } + + private void Window_AddressChanged(string address) + { + control.NavigateTo(address); + } + + private void Window_ReloadRequested() + { + control.Reload(); + } + + private void Window_BackwardNavigationRequested() + { + control.NavigateBackwards(); + } + + private void Window_ForwardNavigationRequested() + { + control.NavigateForwards(); } } } diff --git a/SafeExamBrowser.Browser/BrowserContextMenuHandler.cs b/SafeExamBrowser.Browser/BrowserContextMenuHandler.cs new file mode 100644 index 00000000..ebb5a784 --- /dev/null +++ b/SafeExamBrowser.Browser/BrowserContextMenuHandler.cs @@ -0,0 +1,62 @@ +/* + * 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 CefSharp; +using SafeExamBrowser.Contracts.I18n; +using IBrowserSettings = SafeExamBrowser.Contracts.Configuration.Settings.IBrowserSettings; + +namespace SafeExamBrowser.Browser +{ + /// + /// See https://cefsharp.github.io/api/57.0.0/html/T_CefSharp_IContextMenuHandler.htm. + /// + internal class BrowserContextMenuHandler : IContextMenuHandler + { + private const int DEV_CONSOLE_COMMAND = (int) CefMenuCommand.UserFirst + 1; + + private IBrowserSettings settings; + private IText text; + + public BrowserContextMenuHandler(IBrowserSettings settings, IText text) + { + this.settings = settings; + this.text = text; + } + + public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) + { + model.Clear(); + + if (settings.AllowDeveloperConsole) + { + model.AddItem((CefMenuCommand) DEV_CONSOLE_COMMAND, text.Get(Key.Browser_ShowDeveloperConsole)); + } + } + + public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags) + { + if ((int) commandId == DEV_CONSOLE_COMMAND) + { + browser.ShowDevTools(); + + return true; + } + + return false; + } + + public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame) + { + } + + public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) + { + return false; + } + } +} diff --git a/SafeExamBrowser.Browser/BrowserControl.cs b/SafeExamBrowser.Browser/BrowserControl.cs index 0f36a774..7e84efc8 100644 --- a/SafeExamBrowser.Browser/BrowserControl.cs +++ b/SafeExamBrowser.Browser/BrowserControl.cs @@ -6,17 +6,70 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -using System.Windows.Forms; +using System; using CefSharp.WinForms; +using SafeExamBrowser.Contracts.I18n; using SafeExamBrowser.Contracts.UserInterface; +using IBrowserSettings = SafeExamBrowser.Contracts.Configuration.Settings.IBrowserSettings; namespace SafeExamBrowser.Browser { class BrowserControl : ChromiumWebBrowser, IBrowserControl { - public BrowserControl(string url) : base(url) + private AddressChangedHandler addressChanged; + private IBrowserSettings settings; + private TitleChangedHandler titleChanged; + private IText text; + + event AddressChangedHandler IBrowserControl.AddressChanged { - Dock = DockStyle.Fill; + add { addressChanged += value; } + remove { addressChanged -= value; } + } + + event TitleChangedHandler IBrowserControl.TitleChanged + { + add { titleChanged += value; } + remove { titleChanged -= value; } + } + + public BrowserControl(IBrowserSettings settings, IText text) : base(settings.StartUrl) + { + this.settings = settings; + this.text = text; + + Initialize(); + } + + public void NavigateBackwards() + { + GetBrowser().GoBack(); + } + + public void NavigateForwards() + { + GetBrowser().GoForward(); + } + + public void NavigateTo(string address) + { + if (!String.IsNullOrWhiteSpace(address) && Uri.IsWellFormedUriString(address, UriKind.RelativeOrAbsolute)) + { + Load(address); + } + } + + public void Reload() + { + GetBrowser().Reload(); + } + + private void Initialize() + { + AddressChanged += (o, args) => addressChanged?.Invoke(args.Address); + TitleChanged += (o, args) => titleChanged?.Invoke(args.Title); + + MenuHandler = new BrowserContextMenuHandler(settings, text); } } } diff --git a/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj b/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj index 943aa3a8..5d206b91 100644 --- a/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj +++ b/SafeExamBrowser.Browser/SafeExamBrowser.Browser.csproj @@ -67,6 +67,7 @@ + Component diff --git a/SafeExamBrowser.Configuration/Settings/BrowserSettings.cs b/SafeExamBrowser.Configuration/Settings/BrowserSettings.cs index 9a1eb38d..7fe549b6 100644 --- a/SafeExamBrowser.Configuration/Settings/BrowserSettings.cs +++ b/SafeExamBrowser.Configuration/Settings/BrowserSettings.cs @@ -23,24 +23,26 @@ namespace SafeExamBrowser.Configuration.Settings public bool AllowAddressBar => true; - public bool AllowBackwardNavigation => false; + public bool AllowBackwardNavigation => true; - public bool AllowDebugConsole => true; + public bool AllowDeveloperConsole => true; - public bool AllowForwardNavigation => false; + public bool AllowForwardNavigation => true; - public bool AllowReloading => false; + public bool AllowReloading => true; public string CachePath { get { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), settings.AppDataFolderName, "Cache"); } } - public bool FullScreenMode => throw new NotImplementedException(); + public bool FullScreenMode => false; public string LogFile { get { return Path.Combine(settings.LogFolderPath, $"{settings.RuntimeIdentifier}_Browser.txt"); } } + + public string StartUrl => "www.duckduckgo.com"; } } diff --git a/SafeExamBrowser.Contracts/Configuration/IApplicationInstance.cs b/SafeExamBrowser.Contracts/Configuration/IApplicationInstance.cs index af69fcea..476dfc7c 100644 --- a/SafeExamBrowser.Contracts/Configuration/IApplicationInstance.cs +++ b/SafeExamBrowser.Contracts/Configuration/IApplicationInstance.cs @@ -12,6 +12,7 @@ using SafeExamBrowser.Contracts.UserInterface; namespace SafeExamBrowser.Contracts.Configuration { public delegate void TerminationEventHandler(Guid id); + public delegate void NameChangedEventHandler(string name); public interface IApplicationInstance { @@ -28,16 +29,16 @@ namespace SafeExamBrowser.Contracts.Configuration /// /// Event fired when the application instance has been terminated. /// - event TerminationEventHandler OnTerminated; + event TerminationEventHandler Terminated; + + /// + /// Event fired when the name or (document) title of the application instance has changed. + /// + event NameChangedEventHandler NameChanged; /// /// The main window of the application instance. /// IWindow Window { get; } - - /// - /// Registers the given window as the main window of the application instance. - /// - void RegisterWindow(IWindow window); } } diff --git a/SafeExamBrowser.Contracts/Configuration/Settings/IBrowserSettings.cs b/SafeExamBrowser.Contracts/Configuration/Settings/IBrowserSettings.cs index 07aeb3c1..f33df0f9 100644 --- a/SafeExamBrowser.Contracts/Configuration/Settings/IBrowserSettings.cs +++ b/SafeExamBrowser.Contracts/Configuration/Settings/IBrowserSettings.cs @@ -21,9 +21,9 @@ namespace SafeExamBrowser.Contracts.Configuration.Settings bool AllowBackwardNavigation { get; } /// - /// Determines whether the user should be allowed to open the debug console of a browser window. + /// Determines whether the user should be allowed to open the developer console of a browser window. /// - bool AllowDebugConsole { get; } + bool AllowDeveloperConsole { get; } /// /// Determines whether the user should be allowed to navigate forwards in a browser window. @@ -49,5 +49,10 @@ namespace SafeExamBrowser.Contracts.Configuration.Settings /// Determines whether the main browser window should be rendered in fullscreen mode, i.e. without window frame. /// bool FullScreenMode { get; } + + /// + /// The start URL with which a new browser window should be loaded. + /// + string StartUrl { get; } } } diff --git a/SafeExamBrowser.Contracts/I18n/Key.cs b/SafeExamBrowser.Contracts/I18n/Key.cs index 70475318..f90221a5 100644 --- a/SafeExamBrowser.Contracts/I18n/Key.cs +++ b/SafeExamBrowser.Contracts/I18n/Key.cs @@ -13,6 +13,7 @@ namespace SafeExamBrowser.Contracts.I18n /// public enum Key { + Browser_ShowDeveloperConsole, MessageBox_ShutdownError, MessageBox_ShutdownErrorTitle, MessageBox_SingleInstance, diff --git a/SafeExamBrowser.Contracts/UserInterface/IBrowserControl.cs b/SafeExamBrowser.Contracts/UserInterface/IBrowserControl.cs index e6501147..cdb7ece3 100644 --- a/SafeExamBrowser.Contracts/UserInterface/IBrowserControl.cs +++ b/SafeExamBrowser.Contracts/UserInterface/IBrowserControl.cs @@ -8,7 +8,39 @@ namespace SafeExamBrowser.Contracts.UserInterface { + public delegate void AddressChangedHandler(string address); + public delegate void TitleChangedHandler(string title); + public interface IBrowserControl { + /// + /// Event fired when the address of the browser control changes. + /// + event AddressChangedHandler AddressChanged; + + /// + /// Event fired when the current page (and thus the title) of the browser control changes. + /// + event TitleChangedHandler TitleChanged; + + /// + /// Navigates to the previous page in the browser control history. + /// + void NavigateBackwards(); + + /// + /// Navigates to the next page in the browser control history. + /// + void NavigateForwards(); + + /// + /// Navigates to the specified web address. + /// + void NavigateTo(string address); + + /// + /// Reloads the current web page. + /// + void Reload(); } } diff --git a/SafeExamBrowser.Contracts/UserInterface/IBrowserWindow.cs b/SafeExamBrowser.Contracts/UserInterface/IBrowserWindow.cs index 7d920d84..5c200537 100644 --- a/SafeExamBrowser.Contracts/UserInterface/IBrowserWindow.cs +++ b/SafeExamBrowser.Contracts/UserInterface/IBrowserWindow.cs @@ -8,7 +8,43 @@ namespace SafeExamBrowser.Contracts.UserInterface { + public delegate void ActionRequestedHandler(); + public interface IBrowserWindow : IWindow { + /// + /// Event fired when the user changed the URL. + /// + event AddressChangedHandler AddressChanged; + + /// + /// Event fired when the user would like to navigate backwards. + /// + event ActionRequestedHandler BackwardNavigationRequested; + + /// + /// Event fired when the user would like to navigate forwards. + /// + event ActionRequestedHandler ForwardNavigationRequested; + + /// + /// Event fired when the user would like to reload the current page. + /// + event ActionRequestedHandler ReloadRequested; + + /// + /// Determines whether this window is the main browser window. + /// + bool IsMainWindow { get; set; } + + /// + /// Updates the address bar of the browser window to the given value; + /// + void UpdateAddress(string adress); + + /// + /// Sets the title of the browser window to the given value; + /// + void UpdateTitle(string title); } } diff --git a/SafeExamBrowser.Contracts/UserInterface/IUserInterfaceFactory.cs b/SafeExamBrowser.Contracts/UserInterface/IUserInterfaceFactory.cs index baa6c258..e40bac2d 100644 --- a/SafeExamBrowser.Contracts/UserInterface/IUserInterfaceFactory.cs +++ b/SafeExamBrowser.Contracts/UserInterface/IUserInterfaceFactory.cs @@ -20,7 +20,7 @@ namespace SafeExamBrowser.Contracts.UserInterface ITaskbarButton CreateApplicationButton(IApplicationInfo info); /// - /// Creates a new browser window loaded with the given browser control. + /// Creates a new browser window loaded with the given browser control and settings. /// IBrowserWindow CreateBrowserWindow(IBrowserControl control, IBrowserSettings settings); diff --git a/SafeExamBrowser.Contracts/UserInterface/IWindow.cs b/SafeExamBrowser.Contracts/UserInterface/IWindow.cs index 986d16b0..8bb88b77 100644 --- a/SafeExamBrowser.Contracts/UserInterface/IWindow.cs +++ b/SafeExamBrowser.Contracts/UserInterface/IWindow.cs @@ -8,14 +8,14 @@ namespace SafeExamBrowser.Contracts.UserInterface { - public delegate void WindowCloseHandler(); + public delegate void WindowClosingHandler(); public interface IWindow { /// /// Event fired when the window is closing. /// - event WindowCloseHandler OnClose; + event WindowClosingHandler Closing; /// /// Brings the window to the foreground. diff --git a/SafeExamBrowser.Core/I18n/Text.xml b/SafeExamBrowser.Core/I18n/Text.xml index 39de7e61..61400cf4 100644 --- a/SafeExamBrowser.Core/I18n/Text.xml +++ b/SafeExamBrowser.Core/I18n/Text.xml @@ -1,24 +1,25 @@  - An unexpected error occurred during the shutdown procedure! Please consult the application log for more information... - Shutdown Error - An unexpected error occurred during the startup procedure! Please consult the application log for more information... - Startup Error - About Safe Exam Browser - Initializing browser - Initializing process monitoring - Initializing taskbar - Initializing window monitoring - Initializing working area - Restoring working area - Initiating shutdown procedure - Starting event handling - Initiating startup procedure - Stopping event handling - Stopping process monitoring - Stopping window monitoring - Terminating browser - Waiting for Windows explorer to start up - Waiting for Windows explorer to shut down - Version + Open Console + An unexpected error occurred during the shutdown procedure! Please consult the application log for more information... + Shutdown Error + An unexpected error occurred during the startup procedure! Please consult the application log for more information... + Startup Error + About Safe Exam Browser + Initializing browser + Initializing process monitoring + Initializing taskbar + Initializing window monitoring + Initializing working area + Restoring working area + Initiating shutdown procedure + Starting event handling + Initiating startup procedure + Stopping event handling + Stopping process monitoring + Stopping window monitoring + Terminating browser + Waiting for Windows explorer to start up + Waiting for Windows explorer to shut down + Version \ No newline at end of file diff --git a/SafeExamBrowser.UserInterface/BrowserWindow.xaml b/SafeExamBrowser.UserInterface/BrowserWindow.xaml index f09eba9e..57f6697b 100644 --- a/SafeExamBrowser.UserInterface/BrowserWindow.xaml +++ b/SafeExamBrowser.UserInterface/BrowserWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SafeExamBrowser.UserInterface" mc:Ignorable="d" - Title="BrowserWindow" Height="500" Width="500" WindowState="Maximized"> + Title="BrowserWindow" Height="500" Width="500" WindowState="Maximized" Icon=".\Images\Chromium.ico"> diff --git a/SafeExamBrowser.UserInterface/BrowserWindow.xaml.cs b/SafeExamBrowser.UserInterface/BrowserWindow.xaml.cs index 1cf2a2ff..4d9efea8 100644 --- a/SafeExamBrowser.UserInterface/BrowserWindow.xaml.cs +++ b/SafeExamBrowser.UserInterface/BrowserWindow.xaml.cs @@ -7,6 +7,7 @@ */ using System.Windows; +using System.Windows.Controls; using SafeExamBrowser.Contracts.Configuration.Settings; using SafeExamBrowser.Contracts.UserInterface; @@ -14,9 +15,33 @@ namespace SafeExamBrowser.UserInterface { public partial class BrowserWindow : Window, IBrowserWindow { + private bool isMainWindow; private IBrowserSettings settings; + public WindowClosingHandler closing; - public event WindowCloseHandler OnClose; + public bool IsMainWindow + { + get + { + return isMainWindow; + } + set + { + isMainWindow = value; + ApplySettings(); + } + } + + public event AddressChangedHandler AddressChanged; + public event ActionRequestedHandler BackwardNavigationRequested; + public event ActionRequestedHandler ForwardNavigationRequested; + public event ActionRequestedHandler ReloadRequested; + + event WindowClosingHandler IWindow.Closing + { + add { closing += value; } + remove { closing -= value; } + } public BrowserWindow(IBrowserControl browserControl, IBrowserSettings settings) { @@ -36,6 +61,26 @@ namespace SafeExamBrowser.UserInterface Activate(); } + public void UpdateAddress(string url) + { + Dispatcher.Invoke(() => + { + UrlTextBox.TextChanged -= UrlTextBox_TextChanged; + UrlTextBox.Text = url; + UrlTextBox.TextChanged += UrlTextBox_TextChanged; + }); + } + + public void UpdateTitle(string title) + { + Dispatcher.Invoke(() => Title = title); + } + + private void UrlTextBox_TextChanged(object sender, TextChangedEventArgs e) + { + AddressChanged?.Invoke(UrlTextBox.Text); + } + private void InitializeBrowserWindow(IBrowserControl browserControl) { if (browserControl is System.Windows.Forms.Control) @@ -43,8 +88,26 @@ namespace SafeExamBrowser.UserInterface BrowserControlHost.Child = browserControl as System.Windows.Forms.Control; } + Closing += (o, args) => closing?.Invoke(); + UrlTextBox.TextChanged += UrlTextBox_TextChanged; + ReloadButton.Click += (o, args) => ReloadRequested?.Invoke(); + BackButton.Click += (o, args) => BackwardNavigationRequested?.Invoke(); + ForwardButton.Click += (o, args) => ForwardNavigationRequested?.Invoke(); + + ApplySettings(); + } + + private void ApplySettings() + { + if (IsMainWindow && settings.FullScreenMode) + { + MaxHeight = SystemParameters.WorkArea.Height; + ResizeMode = ResizeMode.NoResize; + WindowState = WindowState.Maximized; + WindowStyle = WindowStyle.None; + } + UrlTextBox.IsEnabled = settings.AllowAddressBar; - UrlTextBox.Visibility = settings.AllowAddressBar ? Visibility.Visible : Visibility.Collapsed; ReloadButton.IsEnabled = settings.AllowReloading; ReloadButton.Visibility = settings.AllowReloading ? Visibility.Visible : Visibility.Collapsed; @@ -54,8 +117,6 @@ namespace SafeExamBrowser.UserInterface ForwardButton.IsEnabled = settings.AllowForwardNavigation; ForwardButton.Visibility = settings.AllowForwardNavigation ? Visibility.Visible : Visibility.Collapsed; - - Closing += (o, args) => OnClose?.Invoke(); } } } diff --git a/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml b/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml index 67808356..d309c7d8 100644 --- a/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml +++ b/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml @@ -37,7 +37,7 @@ - + diff --git a/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml.cs b/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml.cs index 6a7b0be6..ba963f3a 100644 --- a/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml.cs +++ b/SafeExamBrowser.UserInterface/Controls/ApplicationButton.xaml.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; +using System.Windows.Media; using SafeExamBrowser.Contracts.Configuration; using SafeExamBrowser.Contracts.UserInterface; using SafeExamBrowser.UserInterface.Utilities; @@ -37,7 +38,7 @@ namespace SafeExamBrowser.UserInterface.Controls var instanceButton = new ApplicationInstanceButton(instance, info); instanceButton.Click += (id) => OnClick?.Invoke(id); - instance.OnTerminated += (id) => Instance_OnTerminated(id, instanceButton); + instance.Terminated += (id) => Instance_OnTerminated(id, instanceButton); instances.Add(instance); InstanceStackPanel.Children.Add(instanceButton); @@ -49,13 +50,24 @@ namespace SafeExamBrowser.UserInterface.Controls { Button.ToolTip = info.Tooltip; Button.Content = IconResourceLoader.Load(info.IconResource); - + Button.MouseEnter += (o, args) => InstancePopup.IsOpen = instances.Count > 1; Button.MouseLeave += (o, args) => InstancePopup.IsOpen &= InstancePopup.IsMouseOver || ActiveBar.IsMouseOver; ActiveBar.MouseLeave += (o, args) => InstancePopup.IsOpen &= InstancePopup.IsMouseOver || Button.IsMouseOver; InstancePopup.MouseLeave += (o, args) => InstancePopup.IsOpen = false; - InstancePopup.Opened += (o, args) => ActiveBar.Width = Double.NaN; - InstancePopup.Closed += (o, args) => ActiveBar.Width = 40; + + InstancePopup.Opened += (o, args) => + { + ActiveBar.Width = Double.NaN; + Background = (Brush) new BrushConverter().ConvertFrom("#2AFFFFFF"); + }; + + InstancePopup.Closed += (o, args) => + { + ActiveBar.Width = 40; + Background = (Brush) new BrushConverter().ConvertFrom("#00000000"); + }; + InstanceStackPanel.SizeChanged += (o, args) => { if (instances.Count > 9) diff --git a/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml b/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml index 58d24d64..dd2616a5 100644 --- a/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml +++ b/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml @@ -10,7 +10,7 @@ - + diff --git a/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml.cs b/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml.cs index 58a20fb2..38adbd36 100644 --- a/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml.cs +++ b/SafeExamBrowser.UserInterface/Controls/ApplicationInstanceButton.xaml.cs @@ -36,7 +36,16 @@ namespace SafeExamBrowser.UserInterface.Controls { Icon.Content = IconResourceLoader.Load(info.IconResource); Text.Text = instance.Name; - Button.ToolTip = $"{instance.Name} - {info.Name}"; + Button.ToolTip = instance.Name; + + instance.NameChanged += (name) => + { + Dispatcher.Invoke(() => + { + Text.Text = name; + Button.ToolTip = name; + }); + }; } private void Button_Click(object sender, RoutedEventArgs e) diff --git a/SafeExamBrowser.UserInterface/Images/Chromium.ico b/SafeExamBrowser.UserInterface/Images/Chromium.ico new file mode 100644 index 0000000000000000000000000000000000000000..46025b80199b73889d619f6f08d35e1702509c3d GIT binary patch literal 191596 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%0A>rK9p&>RH_L->Mljm=k^g%_U(J;n_~+ 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 literal 0 HcmV?d00001 diff --git a/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj b/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj index 452abed7..74f6cc2d 100644 --- a/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj +++ b/SafeExamBrowser.UserInterface/SafeExamBrowser.UserInterface.csproj @@ -163,5 +163,8 @@ + + + \ No newline at end of file diff --git a/SafeExamBrowser/CompositionRoot.cs b/SafeExamBrowser/CompositionRoot.cs index c9494ec9..841bcb97 100644 --- a/SafeExamBrowser/CompositionRoot.cs +++ b/SafeExamBrowser/CompositionRoot.cs @@ -63,10 +63,11 @@ namespace SafeExamBrowser text = new Text(textResource); aboutInfo = new AboutNotificationInfo(text); - browserController = new BrowserApplicationController(settings, uiFactory); + browserController = new BrowserApplicationController(settings, text, uiFactory); processMonitor = new ProcessMonitor(new ModuleLogger(logger, typeof(ProcessMonitor)), nativeMethods); windowMonitor = new WindowMonitor(new ModuleLogger(logger, typeof(WindowMonitor)), nativeMethods); workingArea = new WorkingArea(new ModuleLogger(logger, typeof(WorkingArea)), nativeMethods); + eventController = new EventController(new ModuleLogger(logger, typeof(EventController)), processMonitor, Taskbar, windowMonitor, workingArea); ShutdownController = new ShutdownController(logger, settings, text, uiFactory); StartupController = new StartupController(logger, settings, text, uiFactory);