You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jellyfin/MediaBrowser.UI.Controls/BaseWindow.cs

176 lines
5.2 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Input;
namespace MediaBrowser.UI.Controls
{
/// <summary>
/// Provides a base class for all Windows
/// </summary>
public abstract class BaseWindow : Window, INotifyPropertyChanged
{
/// <summary>
/// Occurs when [property changed].
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Called when [property changed].
/// </summary>
/// <param name="info">The info.</param>
public void OnPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
/// <summary>
/// The _content scale
/// </summary>
private double _contentScale = 1;
/// <summary>
/// Gets the content scale.
/// </summary>
/// <value>The content scale.</value>
public double ContentScale
{
get { return _contentScale; }
private set
{
_contentScale = value;
OnPropertyChanged("ContentScale");
}
}
/// <summary>
/// Initializes a new instance of the <see cref="BaseWindow" /> class.
/// </summary>
protected BaseWindow()
: base()
{
SizeChanged += MainWindow_SizeChanged;
Loaded += BaseWindowLoaded;
}
/// <summary>
/// Bases the window loaded.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param>
void BaseWindowLoaded(object sender, RoutedEventArgs e)
{
OnLoaded();
}
/// <summary>
/// Called when [loaded].
/// </summary>
protected virtual void OnLoaded()
{
MoveFocus(new TraversalRequest(FocusNavigationDirection.First));
}
/// <summary>
/// Handles the SizeChanged event of the MainWindow control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="SizeChangedEventArgs" /> instance containing the event data.</param>
void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
ContentScale = e.NewSize.Height / 1080;
}
/// <summary>
/// Called when [browser back].
/// </summary>
protected virtual void OnBrowserBack()
{
}
/// <summary>
/// Called when [browser forward].
/// </summary>
protected virtual void OnBrowserForward()
{
}
/// <summary>
/// Invoked when an unhandled <see cref="E:System.Windows.Input.Keyboard.PreviewKeyDown" /> attached event reaches an element in its route that is derived from this class. Implement this method to add class handling for this event.
/// </summary>
/// <param name="e">The <see cref="T:System.Windows.Input.KeyEventArgs" /> that contains the event data.</param>
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (IsBackPress(e))
{
e.Handled = true;
if (!e.IsRepeat)
{
OnBrowserBack();
}
}
else if (IsForwardPress(e))
{
e.Handled = true;
if (!e.IsRepeat)
{
OnBrowserForward();
}
}
base.OnPreviewKeyDown(e);
}
/// <summary>
/// Determines if a keypress should be treated as a backward press
/// </summary>
/// <param name="e">The <see cref="KeyEventArgs" /> instance containing the event data.</param>
/// <returns><c>true</c> if [is back press] [the specified e]; otherwise, <c>false</c>.</returns>
private bool IsBackPress(KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
return true;
}
if (e.Key == Key.BrowserBack || e.Key == Key.Back)
{
return true;
}
if (e.SystemKey == Key.Left && e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Alt))
{
return true;
}
return false;
}
/// <summary>
/// Determines if a keypress should be treated as a forward press
/// </summary>
/// <param name="e">The <see cref="KeyEventArgs" /> instance containing the event data.</param>
/// <returns><c>true</c> if [is forward press] [the specified e]; otherwise, <c>false</c>.</returns>
private bool IsForwardPress(KeyEventArgs e)
{
if (e.Key == Key.BrowserForward)
{
return true;
}
if (e.SystemKey == Key.RightAlt && e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Alt))
{
return true;
}
return false;
}
}
}