SEBWIN-219: Started implementing kiosk mode operation.
This commit is contained in:
		
							parent
							
								
									87f4ad8bf2
								
							
						
					
					
						commit
						b22093e6a2
					
				
					 12 changed files with 147 additions and 33 deletions
				
			
		|  | @ -25,6 +25,7 @@ namespace SafeExamBrowser.Contracts.I18n | ||||||
| 		MessageBox_StartupErrorTitle, | 		MessageBox_StartupErrorTitle, | ||||||
| 		Notification_AboutTooltip, | 		Notification_AboutTooltip, | ||||||
| 		Notification_LogTooltip, | 		Notification_LogTooltip, | ||||||
|  | 		RuntimeWindow_ApplicationRunning, | ||||||
| 		SplashScreen_CloseServiceConnection, | 		SplashScreen_CloseServiceConnection, | ||||||
| 		SplashScreen_EmptyClipboard, | 		SplashScreen_EmptyClipboard, | ||||||
| 		SplashScreen_InitializeBrowser, | 		SplashScreen_InitializeBrowser, | ||||||
|  |  | ||||||
|  | @ -108,6 +108,7 @@ | ||||||
|     <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\IRuntimeWindow.cs" /> | ||||||
|     <Compile Include="UserInterface\MessageBoxResult.cs" /> |     <Compile Include="UserInterface\MessageBoxResult.cs" /> | ||||||
|     <Compile Include="UserInterface\Taskbar\INotificationButton.cs" /> |     <Compile Include="UserInterface\Taskbar\INotificationButton.cs" /> | ||||||
|     <Compile Include="UserInterface\ISplashScreen.cs" /> |     <Compile Include="UserInterface\ISplashScreen.cs" /> | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								SafeExamBrowser.Contracts/UserInterface/IRuntimeWindow.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								SafeExamBrowser.Contracts/UserInterface/IRuntimeWindow.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  *  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using SafeExamBrowser.Contracts.I18n; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Contracts.UserInterface | ||||||
|  | { | ||||||
|  | 	public interface IRuntimeWindow : IWindow | ||||||
|  | 	{ | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Updates the status text of the runtime window. If the busy flag is set, | ||||||
|  | 		/// the window will show an animation to indicate a long-running operation. | ||||||
|  | 		/// </summary> | ||||||
|  | 		void UpdateStatus(TextKey key); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -30,6 +30,9 @@ | ||||||
|   <Entry key="Notification_LogTooltip"> |   <Entry key="Notification_LogTooltip"> | ||||||
|     Application Log |     Application Log | ||||||
|   </Entry> |   </Entry> | ||||||
|  |   <Entry key="RuntimeWindow_ApplicationRunning"> | ||||||
|  |     The application is running. | ||||||
|  |   </Entry> | ||||||
|   <Entry key="SplashScreen_CloseServiceConnection"> |   <Entry key="SplashScreen_CloseServiceConnection"> | ||||||
|     Closing service connection |     Closing service connection | ||||||
|   </Entry> |   </Entry> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,22 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  * | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations | ||||||
|  | { | ||||||
|  | 	[TestClass] | ||||||
|  | 	public class KioskModeOperationTests | ||||||
|  | 	{ | ||||||
|  | 		[TestMethod] | ||||||
|  | 		public void Todo() | ||||||
|  | 		{ | ||||||
|  | 			Assert.Fail(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -81,6 +81,7 @@ | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Compile Include="Behaviour\Operations\ConfigurationOperationTests.cs" /> |     <Compile Include="Behaviour\Operations\ConfigurationOperationTests.cs" /> | ||||||
|  |     <Compile Include="Behaviour\Operations\KioskModeOperationTests.cs" /> | ||||||
|     <Compile Include="Behaviour\Operations\ServiceOperationTests.cs" /> |     <Compile Include="Behaviour\Operations\ServiceOperationTests.cs" /> | ||||||
|     <Compile Include="Behaviour\RuntimeControllerTests.cs" /> |     <Compile Include="Behaviour\RuntimeControllerTests.cs" /> | ||||||
|     <Compile Include="Properties\AssemblyInfo.cs" /> |     <Compile Include="Properties\AssemblyInfo.cs" /> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET) | ||||||
|  |  * | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | using SafeExamBrowser.Contracts.Behaviour; | ||||||
|  | using SafeExamBrowser.Contracts.UserInterface; | ||||||
|  | 
 | ||||||
|  | namespace SafeExamBrowser.Runtime.Behaviour.Operations | ||||||
|  | { | ||||||
|  | 	internal class KioskModeOperation : IOperation | ||||||
|  | 	{ | ||||||
|  | 		public bool AbortStartup { get; private set; } | ||||||
|  | 		public ISplashScreen SplashScreen { private get; set; } | ||||||
|  | 
 | ||||||
|  | 		public void Perform() | ||||||
|  | 		{ | ||||||
|  | 			// TODO | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void Revert() | ||||||
|  | 		{ | ||||||
|  | 			// TODO | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -11,7 +11,9 @@ using System.Linq; | ||||||
| using SafeExamBrowser.Contracts.Behaviour; | using SafeExamBrowser.Contracts.Behaviour; | ||||||
| using SafeExamBrowser.Contracts.Communication; | using SafeExamBrowser.Contracts.Communication; | ||||||
| using SafeExamBrowser.Contracts.Configuration.Settings; | using SafeExamBrowser.Contracts.Configuration.Settings; | ||||||
|  | using SafeExamBrowser.Contracts.I18n; | ||||||
| using SafeExamBrowser.Contracts.Logging; | using SafeExamBrowser.Contracts.Logging; | ||||||
|  | using SafeExamBrowser.Contracts.UserInterface; | ||||||
| 
 | 
 | ||||||
| namespace SafeExamBrowser.Runtime.Behaviour | namespace SafeExamBrowser.Runtime.Behaviour | ||||||
| { | { | ||||||
|  | @ -20,6 +22,7 @@ namespace SafeExamBrowser.Runtime.Behaviour | ||||||
| 		private ICommunication serviceProxy; | 		private ICommunication serviceProxy; | ||||||
| 		private Queue<IOperation> operations; | 		private Queue<IOperation> operations; | ||||||
| 		private ILogger logger; | 		private ILogger logger; | ||||||
|  | 		private IRuntimeWindow runtimeWindow; | ||||||
| 		private ISettingsRepository settingsRepository; | 		private ISettingsRepository settingsRepository; | ||||||
| 		private IShutdownController shutdownController; | 		private IShutdownController shutdownController; | ||||||
| 		private IStartupController startupController; | 		private IStartupController startupController; | ||||||
|  | @ -29,12 +32,14 @@ namespace SafeExamBrowser.Runtime.Behaviour | ||||||
| 		public RuntimeController( | 		public RuntimeController( | ||||||
| 			ICommunication serviceProxy, | 			ICommunication serviceProxy, | ||||||
| 			ILogger logger, | 			ILogger logger, | ||||||
|  | 			IRuntimeWindow runtimeWindow, | ||||||
| 			ISettingsRepository settingsRepository, | 			ISettingsRepository settingsRepository, | ||||||
| 			IShutdownController shutdownController, | 			IShutdownController shutdownController, | ||||||
| 			IStartupController startupController) | 			IStartupController startupController) | ||||||
| 		{ | 		{ | ||||||
| 			this.serviceProxy = serviceProxy; | 			this.serviceProxy = serviceProxy; | ||||||
| 			this.logger = logger; | 			this.logger = logger; | ||||||
|  | 			this.runtimeWindow = runtimeWindow; | ||||||
| 			this.settingsRepository = settingsRepository; | 			this.settingsRepository = settingsRepository; | ||||||
| 			this.shutdownController = shutdownController; | 			this.shutdownController = shutdownController; | ||||||
| 			this.startupController = startupController; | 			this.startupController = startupController; | ||||||
|  | @ -66,6 +71,8 @@ namespace SafeExamBrowser.Runtime.Behaviour | ||||||
| 		{ | 		{ | ||||||
| 			logger.Info("Starting event handling..."); | 			logger.Info("Starting event handling..."); | ||||||
| 			// TODO SplashScreen.UpdateText(TextKey.SplashScreen_StartEventHandling); | 			// TODO SplashScreen.UpdateText(TextKey.SplashScreen_StartEventHandling); | ||||||
|  | 
 | ||||||
|  | 			runtimeWindow.UpdateStatus(TextKey.RuntimeWindow_ApplicationRunning); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		private void Stop() | 		private void Stop() | ||||||
|  |  | ||||||
|  | @ -56,8 +56,8 @@ namespace SafeExamBrowser.Runtime | ||||||
| 			var shutdownController = new ShutdownController(logger, runtimeInfo, text, uiFactory); | 			var shutdownController = new ShutdownController(logger, runtimeInfo, text, uiFactory); | ||||||
| 			var startupController = new StartupController(logger, runtimeInfo, systemInfo, text, uiFactory); | 			var startupController = new StartupController(logger, runtimeInfo, systemInfo, text, uiFactory); | ||||||
| 
 | 
 | ||||||
| 			RuntimeController = new RuntimeController(serviceProxy, new ModuleLogger(logger, typeof(RuntimeController)), settingsRepository, shutdownController, startupController); | 			RuntimeWindow = new RuntimeWindow(new DefaultLogFormatter(), runtimeInfo, text); | ||||||
| 			RuntimeWindow = new RuntimeWindow(new DefaultLogFormatter(), runtimeInfo); | 			RuntimeController = new RuntimeController(serviceProxy, new ModuleLogger(logger, typeof(RuntimeController)), RuntimeWindow, settingsRepository, shutdownController, startupController); | ||||||
| 
 | 
 | ||||||
| 			logger.Subscribe(RuntimeWindow); | 			logger.Subscribe(RuntimeWindow); | ||||||
| 
 | 
 | ||||||
|  | @ -65,7 +65,7 @@ namespace SafeExamBrowser.Runtime | ||||||
| 			StartupOperations.Enqueue(new I18nOperation(logger, text)); | 			StartupOperations.Enqueue(new I18nOperation(logger, text)); | ||||||
| 			StartupOperations.Enqueue(new ConfigurationOperation(logger, runtimeInfo, settingsRepository, text, uiFactory, args)); | 			StartupOperations.Enqueue(new ConfigurationOperation(logger, runtimeInfo, settingsRepository, text, uiFactory, args)); | ||||||
| 			StartupOperations.Enqueue(new ServiceOperation(logger, serviceProxy, settingsRepository, text)); | 			StartupOperations.Enqueue(new ServiceOperation(logger, serviceProxy, settingsRepository, text)); | ||||||
| 			//StartupOperations.Enqueue(new KioskModeOperation()); | 			StartupOperations.Enqueue(new KioskModeOperation()); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		internal void LogStartupInformation() | 		internal void LogStartupInformation() | ||||||
|  |  | ||||||
|  | @ -88,6 +88,7 @@ | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Compile Include="App.cs" /> |     <Compile Include="App.cs" /> | ||||||
|     <Compile Include="Behaviour\Operations\ConfigurationOperation.cs" /> |     <Compile Include="Behaviour\Operations\ConfigurationOperation.cs" /> | ||||||
|  |     <Compile Include="Behaviour\Operations\KioskModeOperation.cs" /> | ||||||
|     <Compile Include="Behaviour\Operations\ServiceOperation.cs" /> |     <Compile Include="Behaviour\Operations\ServiceOperation.cs" /> | ||||||
|     <Compile Include="CompositionRoot.cs" /> |     <Compile Include="CompositionRoot.cs" /> | ||||||
|     <Compile Include="Properties\AssemblyInfo.cs"> |     <Compile Include="Properties\AssemblyInfo.cs"> | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
|         xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Classic" |         xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Classic" | ||||||
|         xmlns:s="clr-namespace:System;assembly=mscorlib" |         xmlns:s="clr-namespace:System;assembly=mscorlib" | ||||||
|         mc:Ignorable="d" Background="White" Foreground="White" Height="500" Width="750" WindowStyle="None" WindowStartupLocation="CenterScreen" |         mc:Ignorable="d" Background="White" Foreground="White" Height="500" Width="750" WindowStyle="None" WindowStartupLocation="CenterScreen" | ||||||
|         Icon="./Images/SafeExamBrowser.ico" ResizeMode="NoResize" Title="RuntimeWindow" Topmost="True"> |         Icon="./Images/SafeExamBrowser.ico" ResizeMode="NoResize" Title="Safe Exam Browser" Topmost="True"> | ||||||
|     <Grid> |     <Grid> | ||||||
|         <Border Panel.ZIndex="10" BorderBrush="DodgerBlue" BorderThickness="5"> |         <Border Panel.ZIndex="10" BorderBrush="DodgerBlue" BorderThickness="5"> | ||||||
|             <Border.Effect> |             <Border.Effect> | ||||||
|  | @ -26,31 +26,33 @@ | ||||||
|                 </Style> |                 </Style> | ||||||
|             </Border.Style> |             </Border.Style> | ||||||
|         </Border> |         </Border> | ||||||
|         <Grid Margin="20"> |         <Border BorderBrush="DodgerBlue" BorderThickness="1"> | ||||||
|             <Grid.RowDefinitions> |             <Grid Margin="20"> | ||||||
|                 <RowDefinition Height="2*" /> |                 <Grid.RowDefinitions> | ||||||
|                 <RowDefinition Height="25" /> |                     <RowDefinition Height="2*" /> | ||||||
|                 <RowDefinition Height="3*" /> |                     <RowDefinition Height="25" /> | ||||||
|             </Grid.RowDefinitions> |                     <RowDefinition Height="3*" /> | ||||||
|             <Grid Grid.Row="0"> |                 </Grid.RowDefinitions> | ||||||
|                 <Grid.ColumnDefinitions> |                 <Grid Grid.Row="0"> | ||||||
|                     <ColumnDefinition Width="*" /> |                     <Grid.ColumnDefinitions> | ||||||
|                     <ColumnDefinition Width="350" /> |                         <ColumnDefinition Width="*" /> | ||||||
|                 </Grid.ColumnDefinitions> |                         <ColumnDefinition Width="350" /> | ||||||
|                 <Image Grid.Column="0" Grid.ColumnSpan="2" Margin="-25,0,0,0" Source="pack://application:,,,/SafeExamBrowser.UserInterface.Classic;component/Images/SplashScreen.png" /> |                     </Grid.ColumnDefinitions> | ||||||
|                 <TextBlock x:Name="InfoTextBlock" Grid.Column="1" Foreground="Gray" Margin="10,75,175,10" TextWrapping="Wrap" /> |                     <Image Grid.Column="0" Grid.ColumnSpan="2" Margin="-25,0,0,0" Source="pack://application:,,,/SafeExamBrowser.UserInterface.Classic;component/Images/SplashScreen.png" /> | ||||||
|  |                     <TextBlock x:Name="InfoTextBlock" Grid.Column="1" Foreground="Gray" Margin="10,75,175,10" TextWrapping="Wrap" /> | ||||||
|  |                 </Grid> | ||||||
|  |                 <!--<ProgressBar x:Name="ProgressBar" Grid.Row="1" IsIndeterminate="True" BorderThickness="0" />--> | ||||||
|  |                 <TextBlock x:Name="StatusTextBlock" Grid.Row="1" Text="Application is running..." FontSize="12" FontWeight="Bold" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center" /> | ||||||
|  |                 <Border Grid.Row="2" BorderBrush="DodgerBlue" BorderThickness="0,0.5,0,0"> | ||||||
|  |                     <ScrollViewer x:Name="LogScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Margin="0,10,0,0"> | ||||||
|  |                         <ScrollViewer.Resources> | ||||||
|  |                             <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">5</s:Double> | ||||||
|  |                             <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">5</s:Double> | ||||||
|  |                         </ScrollViewer.Resources> | ||||||
|  |                         <TextBox x:Name="LogTextBlock" Background="Transparent" BorderThickness="0" FontFamily="Courier New" Foreground="Black" IsReadOnly="True" /> | ||||||
|  |                     </ScrollViewer> | ||||||
|  |                 </Border> | ||||||
|             </Grid> |             </Grid> | ||||||
|             <!--<ProgressBar x:Name="ProgressBar" Grid.Row="1" IsIndeterminate="True" BorderThickness="0" />--> |         </Border> | ||||||
|             <TextBlock x:Name="StatusTextBlock" Grid.Row="1" Text="Application is running..." FontSize="12" FontWeight="Bold" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center" /> |  | ||||||
|             <Border Grid.Row="2" BorderBrush="DodgerBlue" BorderThickness="0,0.5,0,0"> |  | ||||||
|                 <ScrollViewer x:Name="LogScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Margin="0,10,0,0"> |  | ||||||
|                     <ScrollViewer.Resources> |  | ||||||
|                         <s:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">5</s:Double> |  | ||||||
|                         <s:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">5</s:Double> |  | ||||||
|                     </ScrollViewer.Resources> |  | ||||||
|                     <TextBox x:Name="LogTextBlock" Background="Transparent" BorderThickness="0" FontFamily="Courier New" Foreground="Black" IsReadOnly="True" /> |  | ||||||
|                 </ScrollViewer> |  | ||||||
|             </Border> |  | ||||||
|         </Grid> |  | ||||||
|     </Grid> |     </Grid> | ||||||
| </Window> | </Window> | ||||||
|  |  | ||||||
|  | @ -10,32 +10,57 @@ using System; | ||||||
| using System.Windows; | using System.Windows; | ||||||
| using System.Windows.Documents; | using System.Windows.Documents; | ||||||
| using SafeExamBrowser.Contracts.Configuration; | using SafeExamBrowser.Contracts.Configuration; | ||||||
|  | using SafeExamBrowser.Contracts.I18n; | ||||||
| using SafeExamBrowser.Contracts.Logging; | using SafeExamBrowser.Contracts.Logging; | ||||||
|  | using SafeExamBrowser.Contracts.UserInterface; | ||||||
| 
 | 
 | ||||||
| namespace SafeExamBrowser.UserInterface.Classic | namespace SafeExamBrowser.UserInterface.Classic | ||||||
| { | { | ||||||
| 	public partial class RuntimeWindow : Window, ILogObserver | 	public partial class RuntimeWindow : Window, ILogObserver, IRuntimeWindow | ||||||
| 	{ | 	{ | ||||||
| 		private ILogContentFormatter formatter; | 		private ILogContentFormatter formatter; | ||||||
| 		private IRuntimeInfo runtimeInfo; | 		private IRuntimeInfo runtimeInfo; | ||||||
|  | 		private IText text; | ||||||
|  | 		private WindowClosingEventHandler closing; | ||||||
| 
 | 
 | ||||||
| 		public RuntimeWindow(ILogContentFormatter formatter, IRuntimeInfo runtimeInfo) | 		event WindowClosingEventHandler IWindow.Closing | ||||||
|  | 		{ | ||||||
|  | 			add { closing += value; } | ||||||
|  | 			remove { closing -= value; } | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public RuntimeWindow(ILogContentFormatter formatter, IRuntimeInfo runtimeInfo, IText text) | ||||||
| 		{ | 		{ | ||||||
| 			this.formatter = formatter; | 			this.formatter = formatter; | ||||||
| 			this.runtimeInfo = runtimeInfo; | 			this.runtimeInfo = runtimeInfo; | ||||||
|  | 			this.text = text; | ||||||
| 
 | 
 | ||||||
| 			InitializeComponent(); | 			InitializeComponent(); | ||||||
| 			InitializeRuntimeWindow(); | 			InitializeRuntimeWindow(); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		public void BringToForeground() | ||||||
|  | 		{ | ||||||
|  | 			Dispatcher.Invoke(Activate); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		public void Notify(ILogContent content) | 		public void Notify(ILogContent content) | ||||||
| 		{ | 		{ | ||||||
| 			LogTextBlock.Text += formatter.Format(content) + Environment.NewLine; | 			Dispatcher.Invoke(() => | ||||||
| 			LogScrollViewer.ScrollToEnd(); | 			{ | ||||||
|  | 				LogTextBlock.Text += formatter.Format(content) + Environment.NewLine; | ||||||
|  | 				LogScrollViewer.ScrollToEnd(); | ||||||
|  | 			}); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void UpdateStatus(TextKey key) | ||||||
|  | 		{ | ||||||
|  | 			Dispatcher.Invoke(() => StatusTextBlock.Text = text.Get(key)); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		private void InitializeRuntimeWindow() | 		private void InitializeRuntimeWindow() | ||||||
| 		{ | 		{ | ||||||
|  | 			Title = $"{runtimeInfo.ProgramTitle} - Version {runtimeInfo.ProgramVersion}"; | ||||||
| 			InfoTextBlock.Inlines.Add(new Run($"Version {runtimeInfo.ProgramVersion}") { FontStyle = FontStyles.Italic }); | 			InfoTextBlock.Inlines.Add(new Run($"Version {runtimeInfo.ProgramVersion}") { FontStyle = FontStyles.Italic }); | ||||||
| 			InfoTextBlock.Inlines.Add(new LineBreak()); | 			InfoTextBlock.Inlines.Add(new LineBreak()); | ||||||
| 			InfoTextBlock.Inlines.Add(new LineBreak()); | 			InfoTextBlock.Inlines.Add(new LineBreak()); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 dbuechel
						dbuechel