input editor improvements
This commit is contained in:
@@ -4,8 +4,11 @@
|
||||
[mpv-repl](https://github.com/rossy/mpv-repl) is currently the best choice
|
||||
- many [wiki pages](https://github.com/stax76/mpv.net/wiki) were improved
|
||||
- the logo/icon had a very small cosmetic change
|
||||
- the help in the context menu was improved
|
||||
- the help in the context menu was improved,
|
||||
for quick access consider the command palette (F1 key)
|
||||
- config options specific to mpv.net are now available from the command line
|
||||
- the input editor no longer as known limitations, 'alt gr' and ctrl+alt are working now
|
||||
- the help in the input editor was simplified and the filter logic was improved
|
||||
|
||||
### 5.0
|
||||
|
||||
|
||||
@@ -48,16 +48,21 @@ namespace mpvnet
|
||||
CollectionView.Refresh();
|
||||
|
||||
if (SearchControl.SearchTextBox.Text == "?")
|
||||
Msg.Show("Filtering works by searching in the Input, Menu and Command but it's possible to reduce the filter scope to either of Input, Menu or Command by prefixing as follows:\n\ni <input search>\ni: <input search>\n\nm <menu search>\nm: <menu search>\n\nc <command search>\nc: <command search>\n\nIf only one character is entered the search will be performed only in the input.", "Filtering");
|
||||
{
|
||||
SearchControl.SearchTextBox.Text = "";
|
||||
Msg.Show("Filtering", "Reduce the filter scope with:\n\ni input\n\nm menu\n\nc command\n\nIf only one character is entered input search is performed.");
|
||||
}
|
||||
}
|
||||
|
||||
bool Filter(CommandItem item)
|
||||
{
|
||||
if (item.Command == "") return false;
|
||||
string searchText = SearchControl.SearchTextBox.Text.ToLower();
|
||||
if (searchText == "") return true;
|
||||
if (searchText == "" || searchText == "?") return true;
|
||||
|
||||
if (searchText.StartsWith("i ") || searchText.StartsWith("i:") || searchText.Length == 1)
|
||||
if (searchText.Length == 1)
|
||||
return item.Input.ToLower().Replace("ctrl+", "").Replace("shift+", "").Replace("alt+", "") == searchText.ToLower();
|
||||
else if (searchText.StartsWith("i ") || searchText.StartsWith("i:") || searchText.Length == 1)
|
||||
{
|
||||
if (searchText.Length > 1)
|
||||
searchText = searchText.Substring(2).Trim();
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d"
|
||||
Title="Learn Input" Height="200" Width="400" WindowStartupLocation="CenterOwner"
|
||||
ResizeMode="NoResize" Loaded="Window_Loaded" Background="Black" MouseWheel="Window_MouseWheel" MouseUp="Window_MouseUp" MouseDoubleClick="Window_MouseDoubleClick">
|
||||
ResizeMode="NoResize" Loaded="Window_Loaded" Background="Black" MouseWheel="Window_MouseWheel" MouseUp="Window_MouseUp" MouseDoubleClick="Window_MouseDoubleClick" TextInput="Window_TextInput">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*" />
|
||||
|
||||
@@ -10,7 +10,8 @@ namespace mpvnet
|
||||
public partial class LearnWindow : Window
|
||||
{
|
||||
public CommandItem InputItem { get; set; }
|
||||
public string NewKey { get; set; } = "";
|
||||
string NewKey = "";
|
||||
string KeyChar = "";
|
||||
|
||||
public LearnWindow() => InitializeComponent();
|
||||
|
||||
@@ -60,9 +61,9 @@ namespace mpvnet
|
||||
case WF.Keys.NumPad9:
|
||||
text = "KP" + e.KeyCode.ToString()[6].ToString(); break;
|
||||
case WF.Keys.Space:
|
||||
text = "SPACE"; break;
|
||||
text = "Space"; break;
|
||||
case WF.Keys.Enter:
|
||||
text = "ENTER"; break;
|
||||
text = "Enter"; break;
|
||||
case WF.Keys.Tab:
|
||||
text = "TAB"; break;
|
||||
case WF.Keys.Back:
|
||||
@@ -72,7 +73,7 @@ namespace mpvnet
|
||||
case WF.Keys.Insert:
|
||||
text = "INS"; break;
|
||||
case WF.Keys.Home:
|
||||
text = "HOME"; break;
|
||||
text = "Home"; break;
|
||||
case WF.Keys.End:
|
||||
text = "END"; break;
|
||||
case WF.Keys.PageUp:
|
||||
@@ -82,56 +83,56 @@ namespace mpvnet
|
||||
case WF.Keys.Escape:
|
||||
text = "ESC"; break;
|
||||
case WF.Keys.PrintScreen:
|
||||
text = "PRINT"; break;
|
||||
text = "Print"; break;
|
||||
case WF.Keys.Play:
|
||||
text = "PLAY"; break;
|
||||
text = "Play"; break;
|
||||
case WF.Keys.Pause:
|
||||
text = "PAUSE"; break;
|
||||
text = "Pause"; break;
|
||||
case WF.Keys.MediaPlayPause:
|
||||
text = "PLAYPAUSE"; break;
|
||||
text = "PlayPause"; break;
|
||||
case WF.Keys.MediaStop:
|
||||
text = "STOP"; break;
|
||||
text = "Stop"; break;
|
||||
case WF.Keys.MediaNextTrack:
|
||||
text = "NEXT"; break;
|
||||
text = "Next"; break;
|
||||
case WF.Keys.MediaPreviousTrack:
|
||||
text = "PREV"; break;
|
||||
text = "Prev"; break;
|
||||
case WF.Keys.VolumeUp:
|
||||
text = "VOLUME_UP"; break;
|
||||
text = "Volume_Up"; break;
|
||||
case WF.Keys.VolumeDown:
|
||||
text = "VOLUME_DOWN"; break;
|
||||
text = "Volume_Down"; break;
|
||||
case WF.Keys.VolumeMute:
|
||||
text = "MUTE"; break;
|
||||
text = "Mute"; break;
|
||||
case WF.Keys.BrowserHome:
|
||||
text = "HOMEPAGE"; break;
|
||||
text = "Homepage"; break;
|
||||
case WF.Keys.LaunchMail:
|
||||
text = "MAIL"; break;
|
||||
text = "Mail"; break;
|
||||
case WF.Keys.BrowserFavorites:
|
||||
text = "FAVORITES"; break;
|
||||
text = "Favorites"; break;
|
||||
case WF.Keys.BrowserSearch:
|
||||
text = "SEARCH"; break;
|
||||
text = "Search"; break;
|
||||
case WF.Keys.Sleep:
|
||||
text = "SLEEP"; break;
|
||||
text = "Sleep"; break;
|
||||
case WF.Keys.Cancel:
|
||||
text = "CANCEL"; break;
|
||||
text = "Cancel"; break;
|
||||
}
|
||||
|
||||
bool shiftWasHandled = false;
|
||||
bool wasModified = false;
|
||||
|
||||
bool isAlt = GetKeyState(18) < (short)0;
|
||||
bool isShift = GetKeyState(16) < (short)0;
|
||||
bool isCtrl = GetKeyState(17) < (short)0;
|
||||
|
||||
if (text.Length == 1 && isShift && text[0] != GetModifiedKey(text[0]))
|
||||
if (text.Length == 1 && KeyChar != text)
|
||||
{
|
||||
text = GetModifiedKey(text[0]).ToString();
|
||||
shiftWasHandled = true;
|
||||
text = KeyChar;
|
||||
wasModified = true;
|
||||
}
|
||||
|
||||
if (text == "#") text = "Sharp";
|
||||
if (text == "#") text = "SHARP";
|
||||
|
||||
if (isAlt) text = "Alt+" + text;
|
||||
if (isShift && !shiftWasHandled) text = "Shift+" + text;
|
||||
if (isCtrl) text = "Ctrl+" + text;
|
||||
if (isAlt && !wasModified) text = "ALT+" + text;
|
||||
if (isShift && !wasModified) text = "SHIFT+" + text;
|
||||
if (isCtrl && !wasModified) text = "CTRL+" + text;
|
||||
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
SetKey(text);
|
||||
@@ -163,24 +164,6 @@ namespace mpvnet
|
||||
}
|
||||
}
|
||||
|
||||
public static char GetModifiedKey(char c)
|
||||
{
|
||||
short vkKeyScanResult = VkKeyScan(c);
|
||||
|
||||
if (vkKeyScanResult == -1)
|
||||
return c;
|
||||
|
||||
uint code = (uint)vkKeyScanResult & 0xff;
|
||||
byte[] b = new byte[256];
|
||||
b[0x10] = 0x80;
|
||||
uint r;
|
||||
|
||||
if (1 != ToAscii(code, code, b, out r, 0))
|
||||
return c;
|
||||
|
||||
return (char)r;
|
||||
}
|
||||
|
||||
void ProcessKeyEventArgs(ref WF.Message m)
|
||||
{
|
||||
int WM_KEYUP = 0x0101, WM_SYSKEYUP = 0x0105, WM_APPCOMMAND = 0x0319;
|
||||
@@ -382,5 +365,10 @@ namespace mpvnet
|
||||
BlockMBTN_LEFT = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_TextInput(object sender, TextCompositionEventArgs e)
|
||||
{
|
||||
KeyChar = e.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user