seb-win-refactoring/SafeExamBrowser.UserInterface.Desktop/Windows/ServerFailureDialog.xaml.cs

96 lines
2.5 KiB
C#

/*
* Copyright (c) 2024 ETH Zürich, IT Services
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
using System.Windows;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.UserInterface.Contracts.Windows;
using SafeExamBrowser.UserInterface.Contracts.Windows.Data;
namespace SafeExamBrowser.UserInterface.Desktop.Windows
{
public partial class ServerFailureDialog : Window, IServerFailureDialog
{
private readonly IText text;
public ServerFailureDialog(string info, bool showFallback, IText text)
{
this.text = text;
InitializeComponent();
InitializeDialog(info, showFallback);
}
public ServerFailureDialogResult Show(IWindow parent = null)
{
return Dispatcher.Invoke(() =>
{
var result = new ServerFailureDialogResult { Success = false };
if (parent is Window)
{
Owner = parent as Window;
WindowStartupLocation = WindowStartupLocation.CenterOwner;
}
if (ShowDialog() is true)
{
result.Abort = Tag as string == nameof(AbortButton);
result.Fallback = Tag as string == nameof(FallbackButton);
result.Retry = Tag as string == nameof(RetryButton);
result.Success = true;
}
else
{
result.Abort = true;
}
return result;
});
}
private void InitializeDialog(string info, bool showFallback)
{
Info.Text = info;
Message.Text = text.Get(TextKey.ServerFailureDialog_Message);
Title = text.Get(TextKey.ServerFailureDialog_Title);
AbortButton.Click += AbortButton_Click;
AbortButton.Content = text.Get(TextKey.ServerFailureDialog_Abort);
FallbackButton.Click += FallbackButton_Click;
FallbackButton.Content = text.Get(TextKey.ServerFailureDialog_Fallback);
FallbackButton.Visibility = showFallback ? Visibility.Visible : Visibility.Collapsed;
Loaded += (o, args) => Activate();
RetryButton.Click += RetryButton_Click;
RetryButton.Content = text.Get(TextKey.ServerFailureDialog_Retry);
}
private void AbortButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
Tag = nameof(AbortButton);
Close();
}
private void FallbackButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
Tag = nameof(FallbackButton);
Close();
}
private void RetryButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
Tag = nameof(RetryButton);
Close();
}
}
}