Files
PowerToys/src/core/Microsoft.PowerToys.Settings.UI/Controls/HotkeySettingsControl.xaml.cs

101 lines
3.1 KiB
C#
Raw Normal View History

2020-04-08 00:19:00 -07:00
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.PowerToys.Settings.UI.Lib;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace Microsoft.PowerToys.Settings.UI.Controls
{
public sealed partial class HotkeySettingsControl : UserControl
{
public string Header { get; set; }
public static readonly DependencyProperty HotkeySettingsProperty =
DependencyProperty.Register(
2020-04-08 00:19:00 -07:00
"HotkeySettings",
typeof(HotkeySettings),
typeof(HotkeySettingsControl),
null);
2020-04-08 00:19:00 -07:00
private HotkeySettings hotkeySettings;
public HotkeySettings HotkeySettings
{
get
{
return hotkeySettings;
2020-04-08 00:19:00 -07:00
}
set
{
if (hotkeySettings != value)
{
hotkeySettings = value;
SetValue(HotkeySettingsProperty, value);
HotkeyTextBox.Text = HotkeySettings.ToString();
}
2020-04-08 00:19:00 -07:00
}
}
public HotkeySettingsControl()
{
InitializeComponent();
HotkeyTextBox.PreviewKeyDown += HotkeyTextBox_KeyDown;
}
private static bool IsDown(Windows.System.VirtualKey key)
{
return Window.Current.CoreWindow.GetKeyState(key).HasFlag(CoreVirtualKeyStates.Down);
}
private void HotkeyTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
e.Handled = true;
if (
e.Key == Windows.System.VirtualKey.LeftWindows ||
e.Key == Windows.System.VirtualKey.RightWindows ||
e.Key == Windows.System.VirtualKey.Control ||
e.Key == Windows.System.VirtualKey.Menu ||
2020-04-08 00:19:00 -07:00
e.Key == Windows.System.VirtualKey.Shift)
{
return;
}
var settings = new HotkeySettings();
2020-04-08 00:19:00 -07:00
// Display HotKey value
2020-04-08 00:19:00 -07:00
if (IsDown(Windows.System.VirtualKey.LeftWindows) ||
IsDown(Windows.System.VirtualKey.RightWindows))
{
settings.win = true;
}
2020-04-08 00:19:00 -07:00
if (IsDown(Windows.System.VirtualKey.Control))
{
settings.ctrl = true;
}
2020-04-08 00:19:00 -07:00
if (IsDown(Windows.System.VirtualKey.Menu))
{
settings.alt = true;
}
2020-04-08 00:19:00 -07:00
if (IsDown(Windows.System.VirtualKey.Shift))
{
settings.shift = true;
}
settings.key = e.Key.ToString();
// TODO: Check that e.OriginalKey is the ScanCode. It is not clear from docs.
2020-04-08 00:19:00 -07:00
settings.code = (int)e.OriginalKey;
HotkeySettings = settings;
}
}
}