Files
2dust_v2rayN/v2rayN/v2rayN.Desktop/Views/GlobalHotkeySettingWindow.axaml.cs
T
DHR60 9664ee380e ViewModel-First (#9621)
* Interaction

* Remove view action

* ViewModel-first

* MainGirdOrientation Hot Reload

* Fix avalonia preview

* Remove CloseWindowInteraction

* Fix

* Avoid threading issues

* Fix

* ProfilesSelect

* Try fix previewer

* Remove AppEvents.ProfilesRefreshRequested

* Remove AppEvents.SubscriptionsRefreshRequested

* Remove AppEvents.ProxiesReloadRequested

* Remove AppEvents.AdjustMainLvColWidthRequested

* Remove AppEvents.SetDefaultServerRequested

* Remove AppEvents.RoutingsMenuRefreshRequested

* Remove AppEvents.TestServerRequested

* Remove AppEvents.InboundDisplayRequested

* Remove AppEvents.SubscriptionsUpdateRequested

* Remove AppEvents.ShowHideWindowRequested

* Remove AppEvents.ReloadRequested

* Remove AppEvents.AddServerRequested

* Fix
2026-07-14 09:05:05 +08:00

129 lines
3.5 KiB
C#

using v2rayN.Desktop.Base;
using v2rayN.Desktop.Manager;
namespace v2rayN.Desktop.Views;
public partial class GlobalHotkeySettingWindow : WindowBase<GlobalHotkeySettingViewModel>
{
private readonly List<object> _textBoxKeyEventItem = [];
public GlobalHotkeySettingWindow()
{
InitializeComponent();
btnReset.Click += btnReset_Click;
HotkeyManager.Instance.IsPause = true;
Loaded += Window_Loaded;
Closing += (s, e) => HotkeyManager.Instance.IsPause = false;
btnCancel.Click += (s, e) => Close();
this.WhenActivated(disposables =>
{
this.BindCommand(ViewModel, vm => vm.SaveCmd, v => v.btnSave).DisposeWith(disposables);
BindingData();
});
Init();
}
private void Init()
{
_textBoxKeyEventItem.Add(txtGlobalHotkey0);
_textBoxKeyEventItem.Add(txtGlobalHotkey1);
_textBoxKeyEventItem.Add(txtGlobalHotkey2);
_textBoxKeyEventItem.Add(txtGlobalHotkey3);
_textBoxKeyEventItem.Add(txtGlobalHotkey4);
for (var index = 0; index < _textBoxKeyEventItem.Count; index++)
{
var sender = _textBoxKeyEventItem[index];
if (sender is not TextBox txtBox)
{
continue;
}
txtBox.Tag = (EGlobalHotkey)index;
txtBox.KeyDown += TxtGlobalHotkey_PreviewKeyDown;
}
}
private void TxtGlobalHotkey_PreviewKeyDown(object? sender, KeyEventArgs e)
{
e.Handled = true;
if (sender is not TextBox txtBox)
{
return;
}
if (ViewModel == null)
{
return;
}
var item = ViewModel.GetKeyEventItem((EGlobalHotkey)txtBox.Tag!);
var modifierKeys = new[] { Key.LeftCtrl, Key.RightCtrl, Key.LeftShift, Key.RightShift, Key.LeftAlt, Key.RightAlt, Key.LWin, Key.RWin };
item.KeyCode = (int)(e.Key == Key.System ? modifierKeys.Contains(Key.System) ? Key.None : Key.System : modifierKeys.Contains(e.Key) ? Key.None : e.Key);
item.Alt = (e.KeyModifiers & KeyModifiers.Alt) == KeyModifiers.Alt;
item.Control = (e.KeyModifiers & KeyModifiers.Control) == KeyModifiers.Control;
item.Shift = (e.KeyModifiers & KeyModifiers.Shift) == KeyModifiers.Shift;
txtBox.Text = KeyEventItemToString(item);
}
private void BindingData()
{
foreach (var sender in _textBoxKeyEventItem)
{
if (sender is not TextBox txtBox)
{
continue;
}
var item = ViewModel?.GetKeyEventItem((EGlobalHotkey)txtBox.Tag);
txtBox.Text = KeyEventItemToString(item);
}
}
private void btnReset_Click(object sender, RoutedEventArgs e)
{
ViewModel?.ResetKeyEventItem();
BindingData();
}
private string KeyEventItemToString(KeyEventItem? item)
{
if (item == null)
{
return string.Empty;
}
var res = new StringBuilder();
if (item.Control)
{
res.Append($"{KeyModifiers.Control} + ");
}
if (item.Shift)
{
res.Append($"{KeyModifiers.Shift} + ");
}
if (item.Alt)
{
res.Append($"{KeyModifiers.Alt} + ");
}
if (item.KeyCode != null && (Key)item.KeyCode != Key.None)
{
res.Append($"{(Key)item.KeyCode}");
}
return res.ToString();
}
private void Window_Loaded(object? sender, RoutedEventArgs e)
{
btnCancel.Focus();
}
}