work on menu and bindings
This commit is contained in:
@@ -44,6 +44,7 @@ public class GuiCommand
|
||||
["move-window"] = args => MoveWindow?.Invoke(args[0]),
|
||||
["window-scale"] = args => WindowScaleNet?.Invoke(float.Parse(args[0], CultureInfo.InvariantCulture)),
|
||||
["show-menu"] = args => ShowMenu?.Invoke(),
|
||||
["show-bindings"] = args => ShowBindings(),
|
||||
|
||||
|
||||
// deprecated
|
||||
@@ -265,6 +266,14 @@ public class GuiCommand
|
||||
ProcessHelp.ShellExecute(file);
|
||||
}
|
||||
|
||||
public void ShowBindings()
|
||||
{
|
||||
string info = "# mpv.net might modify the input.conf content before it is passed to mpv." + BR +
|
||||
"# Below are the bindings as they were passed to mpv." + BR2;
|
||||
|
||||
ShowTextWithEditor("Bindings", info + Player.UsedInputConfContent);
|
||||
}
|
||||
|
||||
//public void ShowCommandPalette()
|
||||
//{
|
||||
// MainForm.Instance?.BeginInvoke(() => {
|
||||
|
||||
@@ -13,7 +13,7 @@ public class CommandPalette
|
||||
.Where(i => i.Command != "")
|
||||
.Select(i => new CommandPaletteItem()
|
||||
{
|
||||
Text = i.Path,
|
||||
Text = i.Comment,
|
||||
SecondaryText = i.Input,
|
||||
Action = () => Core.Command(i.Command),
|
||||
Binding = i
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn
|
||||
Header="Name"
|
||||
Binding="{Binding Path}"
|
||||
Binding="{Binding Comment}"
|
||||
MaxWidth="322"
|
||||
/>
|
||||
|
||||
|
||||
@@ -59,11 +59,11 @@ public partial class InputWindow : Window
|
||||
return item.Input.ToLower().Contains(searchText);
|
||||
}
|
||||
else if (searchText.StartsWith("m ") || searchText.StartsWith("m:"))
|
||||
return item.Path.ToLower().Contains(searchText.Substring(2).Trim());
|
||||
return item.Comment.ToLower().Contains(searchText.Substring(2).Trim());
|
||||
else if (searchText.StartsWith("c ") || searchText.StartsWith("c:"))
|
||||
return item.Command.ToLower().Contains(searchText.Substring(2).Trim());
|
||||
else if (item.Command.ToLower().Contains(searchText) ||
|
||||
item.Path.ToLower().Contains(searchText) ||
|
||||
item.Comment.ToLower().Contains(searchText) ||
|
||||
item.Input.ToLower().Contains(searchText))
|
||||
{
|
||||
return true;
|
||||
@@ -120,13 +120,18 @@ public partial class InputWindow : Window
|
||||
return;
|
||||
|
||||
if (App.InputConf.HasMenu)
|
||||
{
|
||||
App.InputConf.CreateBackup();
|
||||
File.WriteAllText(App.InputConf.Path, App.InputConf.Content = newContent);
|
||||
}
|
||||
else
|
||||
{
|
||||
newContent = InputHelp.ConvertToString(InputHelp.GetReducedBindings(Bindings));
|
||||
newContent = newContent.Replace("#menu: ", "# ");
|
||||
App.InputConf.CreateBackup();
|
||||
File.WriteAllText(App.InputConf.Path, App.InputConf.Content = newContent);
|
||||
}
|
||||
|
||||
|
||||
Msg.ShowInfo("Changes will be available on next startup.");
|
||||
}
|
||||
|
||||
|
||||
@@ -30,11 +30,12 @@ public partial class MainForm : Form
|
||||
public Dictionary<string, WpfControls.MenuItem> MenuItemDuplicate = new Dictionary<string, WpfControls.MenuItem>();
|
||||
public bool WasShown { get; set; }
|
||||
public static MainForm? Instance { get; set; }
|
||||
WpfControls.ContextMenu? ContextMenu { get; set; }
|
||||
WpfControls.ContextMenu ContextMenu { get; } = new WpfControls.ContextMenu();
|
||||
AutoResetEvent MenuAutoResetEvent { get; } = new AutoResetEvent(false);
|
||||
Point _lastCursorPosition;
|
||||
Taskbar? _taskbar;
|
||||
Point _mouseDownLocation;
|
||||
List<Binding>? _confBindings;
|
||||
|
||||
int _lastCursorChanged;
|
||||
int _lastCycleFullscreen;
|
||||
@@ -253,7 +254,7 @@ public partial class MainForm : Form
|
||||
|
||||
ShowCursor();
|
||||
UpdateMenu();
|
||||
ContextMenu!.IsOpen = true;
|
||||
ContextMenu.IsOpen = true;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -271,7 +272,10 @@ public partial class MainForm : Form
|
||||
if (!Player.Border)
|
||||
top = ClientSize.Height * 0.1f;
|
||||
|
||||
return pos.Y > ClientSize.Height * 0.78 || pos.X > ClientSize.Width * 0.9 || pos.Y < top;
|
||||
return pos.X < ClientSize.Width * 0.1 ||
|
||||
pos.X > ClientSize.Width * 0.9 ||
|
||||
pos.Y < top ||
|
||||
pos.Y > ClientSize.Height * 0.78;
|
||||
}
|
||||
|
||||
bool IsCommandPaletteVissible() => CommandPaletteHost != null && CommandPaletteHost.Visible;
|
||||
@@ -295,10 +299,10 @@ public partial class MainForm : Form
|
||||
|
||||
foreach (MediaTrack track in vidTracks)
|
||||
{
|
||||
var mi = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
mi.Click += (sender, args) => Player.CommandV("set", "vid", track.ID.ToString());
|
||||
mi.IsChecked = Player.VID == track.ID.ToString();
|
||||
trackMenuItem.Items.Add(mi);
|
||||
var menuItem = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
menuItem.Click += (sender, args) => Player.CommandV("set", "vid", track.ID.ToString());
|
||||
menuItem.IsChecked = Player.VID == track.ID.ToString();
|
||||
trackMenuItem.Items.Add(menuItem);
|
||||
}
|
||||
|
||||
if (vidTracks.Any())
|
||||
@@ -306,10 +310,10 @@ public partial class MainForm : Form
|
||||
|
||||
foreach (MediaTrack track in audTracks)
|
||||
{
|
||||
var mi = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
mi.Click += (sender, args) => Player.CommandV("set", "aid", track.ID.ToString());
|
||||
mi.IsChecked = Player.AID == track.ID.ToString();
|
||||
trackMenuItem.Items.Add(mi);
|
||||
var menuItem = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
menuItem.Click += (sender, args) => Player.CommandV("set", "aid", track.ID.ToString());
|
||||
menuItem.IsChecked = Player.AID == track.ID.ToString();
|
||||
trackMenuItem.Items.Add(menuItem);
|
||||
}
|
||||
|
||||
if (subTracks.Any())
|
||||
@@ -317,18 +321,18 @@ public partial class MainForm : Form
|
||||
|
||||
foreach (MediaTrack track in subTracks)
|
||||
{
|
||||
var mi = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
mi.Click += (sender, args) => Player.CommandV("set", "sid", track.ID.ToString());
|
||||
mi.IsChecked = Player.SID == track.ID.ToString();
|
||||
trackMenuItem.Items.Add(mi);
|
||||
var menuItem = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
menuItem.Click += (sender, args) => Player.CommandV("set", "sid", track.ID.ToString());
|
||||
menuItem.IsChecked = Player.SID == track.ID.ToString();
|
||||
trackMenuItem.Items.Add(menuItem);
|
||||
}
|
||||
|
||||
if (subTracks.Any())
|
||||
{
|
||||
var mi = new WpfControls.MenuItem() { Header = "S: No subtitles" };
|
||||
mi.Click += (sender, args) => Player.CommandV("set", "sid", "no");
|
||||
mi.IsChecked = Player.SID == "no";
|
||||
trackMenuItem.Items.Add(mi);
|
||||
var menuItem = new WpfControls.MenuItem() { Header = "S: No subtitles" };
|
||||
menuItem.Click += (sender, args) => Player.CommandV("set", "sid", "no");
|
||||
menuItem.IsChecked = Player.SID == "no";
|
||||
trackMenuItem.Items.Add(menuItem);
|
||||
}
|
||||
|
||||
if (ediTracks.Any())
|
||||
@@ -336,10 +340,10 @@ public partial class MainForm : Form
|
||||
|
||||
foreach (MediaTrack track in ediTracks)
|
||||
{
|
||||
var mi = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
mi.Click += (sender, args) => Player.CommandV("set", "edition", track.ID.ToString());
|
||||
mi.IsChecked = Player.Edition == track.ID;
|
||||
trackMenuItem.Items.Add(mi);
|
||||
var menuItem = new WpfControls.MenuItem() { Header = track.Text.Replace("_", "__") };
|
||||
menuItem.Click += (sender, args) => Player.CommandV("set", "edition", track.ID.ToString());
|
||||
menuItem.IsChecked = Player.Edition == track.ID;
|
||||
trackMenuItem.Items.Add(menuItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -352,14 +356,16 @@ public partial class MainForm : Form
|
||||
|
||||
foreach (Chapter chapter in Player.GetChapters())
|
||||
{
|
||||
var mi = new WpfControls.MenuItem
|
||||
var menuItem = new WpfControls.MenuItem
|
||||
{
|
||||
Header = chapter.Title,
|
||||
InputGestureText = chapter.TimeDisplay
|
||||
};
|
||||
|
||||
mi.Click += (sender, args) => Player.CommandV("seek", chapter.Time.ToString(CultureInfo.InvariantCulture), "absolute");
|
||||
chaptersMenuItem.Items.Add(mi);
|
||||
menuItem.Click += (sender, args) =>
|
||||
Player.CommandV("seek", chapter.Time.ToString(CultureInfo.InvariantCulture), "absolute");
|
||||
|
||||
chaptersMenuItem.Items.Add(menuItem);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,10 +378,10 @@ public partial class MainForm : Form
|
||||
foreach (string path in App.Settings.RecentFiles)
|
||||
{
|
||||
var file = AppClass.GetTitleAndPath(path);
|
||||
var mi = MenuHelp.Add(recentMenuItem.Items, file.Title.ShortPath(100));
|
||||
var menuItem = MenuHelp.Add(recentMenuItem.Items, file.Title.ShortPath(100));
|
||||
|
||||
if (mi != null)
|
||||
mi.Click += (sender, args) =>
|
||||
if (menuItem != null)
|
||||
menuItem.Click += (sender, args) =>
|
||||
Player.LoadFiles(new[] { file.Path }, true, false);
|
||||
}
|
||||
|
||||
@@ -406,12 +412,12 @@ public partial class MainForm : Form
|
||||
{
|
||||
if (item.Length != TimeSpan.Zero)
|
||||
{
|
||||
var mi = MenuHelp.Add(titlesMenuItem.Items, $"Title {item.Index + 1}");
|
||||
var menuItem = MenuHelp.Add(titlesMenuItem.Items, $"Title {item.Index + 1}");
|
||||
|
||||
if (mi != null)
|
||||
if (menuItem != null)
|
||||
{
|
||||
mi.InputGestureText = item.Length.ToString();
|
||||
mi.Click += (sender, args) => Player.SetBluRayTitle(item.Index);
|
||||
menuItem.InputGestureText = item.Length.ToString();
|
||||
menuItem.Click += (sender, args) => Player.SetBluRayTitle(item.Index);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -420,19 +426,17 @@ public partial class MainForm : Form
|
||||
|
||||
var profilesMenuItem = FindMenuItem("Profile");
|
||||
|
||||
if (profilesMenuItem != null)
|
||||
if (profilesMenuItem != null && !profilesMenuItem.HasItems)
|
||||
{
|
||||
profilesMenuItem.Items.Clear();
|
||||
|
||||
foreach (string profile in Player.ProfileNames)
|
||||
{
|
||||
if (!profile.StartsWith("extension."))
|
||||
{
|
||||
var mi = MenuHelp.Add(profilesMenuItem.Items, profile);
|
||||
var menuItem = MenuHelp.Add(profilesMenuItem.Items, profile);
|
||||
|
||||
if (mi != null)
|
||||
if (menuItem != null)
|
||||
{
|
||||
mi.Click += (sender, args) =>
|
||||
menuItem.Click += (sender, args) =>
|
||||
{
|
||||
Player.CommandV("show-text", profile);
|
||||
Player.CommandV("apply-profile", profile);
|
||||
@@ -441,9 +445,38 @@ public partial class MainForm : Form
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var customMenuItem = FindMenuItem("Custom");
|
||||
|
||||
if (customMenuItem != null)
|
||||
{
|
||||
if (!customMenuItem.HasItems)
|
||||
{
|
||||
var customBindings = _confBindings!.Where(it => it.IsCustomMenu);
|
||||
|
||||
if (customBindings.Any())
|
||||
{
|
||||
foreach (Binding binding in customBindings)
|
||||
{
|
||||
var menuItem = MenuHelp.Add(customMenuItem.Items, binding.Comment);
|
||||
|
||||
if (menuItem != null)
|
||||
{
|
||||
menuItem.Click += (sender, args) => Player.Command(binding.Command);
|
||||
menuItem.InputGestureText = binding.Input;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ContextMenu.Items.Contains(customMenuItem))
|
||||
ContextMenu.Items.Remove(customMenuItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public WpfControls.MenuItem? FindMenuItem(string text) => FindMenuItem(text, ContextMenu?.Items);
|
||||
public WpfControls.MenuItem? FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
|
||||
|
||||
WpfControls.MenuItem? FindMenuItem(string text, WpfControls.ItemCollection? items)
|
||||
{
|
||||
@@ -729,22 +762,24 @@ public partial class MainForm : Form
|
||||
|
||||
public void InitAndBuildContextMenu()
|
||||
{
|
||||
ContextMenu = new WpfControls.ContextMenu();
|
||||
ContextMenu.Closed += ContextMenu_Closed;
|
||||
ContextMenu.UseLayoutRounding = true;
|
||||
|
||||
foreach (Binding binding in App.InputConf.GetMenuBindings())
|
||||
var (menuBindings, confBindings) = App.InputConf.GetBindings();
|
||||
_confBindings = confBindings;
|
||||
|
||||
foreach (Binding binding in menuBindings)
|
||||
{
|
||||
if (!binding.IsMenu)
|
||||
continue;
|
||||
|
||||
Binding tempBinding = binding;
|
||||
|
||||
var menuItem = MenuHelp.Add(ContextMenu?.Items, tempBinding.Path);
|
||||
var menuItem = MenuHelp.Add(ContextMenu.Items, tempBinding.Comment);
|
||||
|
||||
if (menuItem != null)
|
||||
{
|
||||
MenuItemDuplicate[tempBinding.Path] = menuItem;
|
||||
MenuItemDuplicate[tempBinding.Comment] = menuItem;
|
||||
menuItem.Click += (sender, args) => {
|
||||
try {
|
||||
TaskHelp.Run(() => {
|
||||
@@ -915,10 +950,10 @@ public partial class MainForm : Form
|
||||
{
|
||||
Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode;
|
||||
|
||||
if (keyCode == Keys.Escape && _contextMenuIsReady && ContextMenu!.IsOpen)
|
||||
if (keyCode == Keys.Escape && _contextMenuIsReady && ContextMenu.IsOpen)
|
||||
{
|
||||
ignore = true;
|
||||
ContextMenu!.IsOpen = false;
|
||||
ContextMenu.IsOpen = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1097,7 +1132,7 @@ public partial class MainForm : Form
|
||||
else if ((Environment.TickCount - _lastCursorChanged > 1500 ||
|
||||
Environment.TickCount - _lastCursorChanged > 5000) &&
|
||||
ClientRectangle.Contains(PointToClient(MousePosition)) &&
|
||||
ActiveForm == this && !ContextMenu!.IsVisible && !IsMouseInOsc() &&
|
||||
ActiveForm == this && !ContextMenu.IsVisible && !IsMouseInOsc() &&
|
||||
!IsCommandPaletteVissible())
|
||||
|
||||
HideCursor();
|
||||
|
||||
Reference in New Issue
Block a user