* Added icon to "Recent >" menu item. * Refactored app menu implementation, and implemented keyboard accelerators. Still doesn't work though. * Few things fixed, but still doesn't work. * Clicking menu items works. * Fixing an issue with resources. * New menu binding implemented. Still doesn't work though. * Menu displayed properly, except for "Settings". * Menu works, but it doesn't refresh. * Works. But needs to be polished. * All known issues with the new app menu solved. * Significantly simplifying app menu binding. * Removing some obsolete classes. * Menu binding mechanism additionally optimized for performances. * Removing unused translations. * Further refactoring app menu binding, in order to make it more general. * New window mechanism simplified. Terminal-launching code refactored to be more readable. A bug with "SSH Info" fixed. * Merging the latest changed.
147 lines
3.1 KiB
C#
147 lines
3.1 KiB
C#
using FluentTerminal.Models;
|
|
using GalaSoft.MvvmLight;
|
|
|
|
namespace FluentTerminal.App.ViewModels.Menu
|
|
{
|
|
public class MenuItemKeyBindingViewModel : ViewModelBase
|
|
{
|
|
#region Properties
|
|
|
|
private int _key;
|
|
|
|
public int Key
|
|
{
|
|
get => _key;
|
|
set => Set(ref _key, value);
|
|
}
|
|
|
|
private int _keyModifiers;
|
|
|
|
// Corresponds to https://docs.microsoft.com/en-us/uwp/api/windows.system.virtualkeymodifiers
|
|
public int KeyModifiers
|
|
{
|
|
get => _keyModifiers;
|
|
private set => Set(ref _keyModifiers, value);
|
|
}
|
|
|
|
private bool _ctrl;
|
|
|
|
public bool Ctrl
|
|
{
|
|
get => _ctrl;
|
|
set
|
|
{
|
|
if (Set(ref _ctrl, value))
|
|
{
|
|
SetKeyModifiers();
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _alt;
|
|
|
|
public bool Alt
|
|
{
|
|
get => _alt;
|
|
set
|
|
{
|
|
if (Set(ref _alt, value))
|
|
{
|
|
SetKeyModifiers();
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _shift;
|
|
|
|
public bool Shift
|
|
{
|
|
get => _shift;
|
|
set
|
|
{
|
|
if (Set(ref _shift, value))
|
|
{
|
|
SetKeyModifiers();
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _windows;
|
|
|
|
public bool Windows
|
|
{
|
|
get => _windows;
|
|
set
|
|
{
|
|
if (Set(ref _windows, value))
|
|
{
|
|
SetKeyModifiers();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion Properties
|
|
|
|
#region Constructors
|
|
|
|
public MenuItemKeyBindingViewModel(int key = 0, bool ctrl = false, bool alt = false, bool shift = false,
|
|
bool windows = false)
|
|
{
|
|
_key = key;
|
|
_ctrl = ctrl;
|
|
_alt = alt;
|
|
_shift = shift;
|
|
_windows = windows;
|
|
|
|
SetKeyModifiers();
|
|
}
|
|
|
|
public MenuItemKeyBindingViewModel(KeyBinding keyBinding) : this(keyBinding.Key, keyBinding.Ctrl,
|
|
keyBinding.Alt, keyBinding.Shift, keyBinding.Meta)
|
|
{
|
|
}
|
|
|
|
#endregion Constructors
|
|
|
|
#region Methods
|
|
|
|
private void SetKeyModifiers()
|
|
{
|
|
// Based on VirtualKeyModifiers enum values (https://docs.microsoft.com/en-us/uwp/api/windows.system.virtualkeymodifiers)
|
|
var result = 0;
|
|
|
|
if (_ctrl)
|
|
{
|
|
result |= 1;
|
|
}
|
|
|
|
if (_alt)
|
|
{
|
|
result |= 2;
|
|
}
|
|
|
|
if (_shift)
|
|
{
|
|
result |= 4;
|
|
}
|
|
|
|
if (_windows)
|
|
{
|
|
result |= 8;
|
|
}
|
|
|
|
KeyModifiers = result;
|
|
}
|
|
|
|
public bool EquivalentTo(MenuItemKeyBindingViewModel other)
|
|
{
|
|
if (ReferenceEquals(this, other)) return true;
|
|
|
|
if (other == null) return false;
|
|
|
|
return _key == other._key && _keyModifiers == other._keyModifiers;
|
|
}
|
|
|
|
#endregion Methods
|
|
}
|
|
} |