diff --git a/LICENSE.txt b/LICENSE.txt index b654f75..66221ca 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,10 +1,21 @@ MIT License -Copyright (c) 2017 stax76 +Copyright (c) 2017-2019 Frank Skare (stax76) -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and ssociated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and ssociated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH +THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 3c22acc..9590b8b 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ Table of contents ### Features - Customizable context menu defined in the same file as the key bindings -- Searchable options dialog with modern UI as mpv compatible standalone application -- Searchable input (key/mouse) binding editor with modern UI as mpv compatible standalone application +- Searchable config dialog with modern UI +- Searchable input (key/mouse) binding editor with modern UI - Modern UI using the OS theme color and dark mode - Rich addon/extension API for .NET languages, over 700 available mpv properties - Rich scripting API for Python, C#, Lua, JavaScript and PowerShell @@ -39,13 +39,13 @@ Table of contents ### Context Menu -The context menu can be customized via input.conf file located at: +The context menu can be customized via inputConf file located at: ``` C:\Users\username\AppData\Roaming\mpv\input.conf ``` if it's missing mpv.net generates it with the following defaults: - + ### Settings @@ -89,6 +89,14 @@ The add-on filename must end with 'Addon.dll' ### Changelog +### 3.2 (2019-0?-??) + +- mpvInputEdit and mpvConfEdit were discontinued and merged into mpvnet +- portable mode: in case no config folder exists mpvnet will ask where the config folder + should be created (portable or appdata) +- there was an issue causing keys not working after a modal window was shown +- there was a crash when no script folder existed in the conf folder + ### 3.1 (2019-04-23) - the Tracks and Chapters menu are now only added if default bindings exist and @@ -101,10 +109,10 @@ The add-on filename must end with 'Addon.dll' - the history feature logs now only files that were opened longer than 90 seconds - the default input command for cycling the audio tracks was replaced with an - mpv.net command that shows detailed track info and has no 'no audio' track. [Default binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt#L89). + mpv.net command that shows detailed track info and has no 'no audio' track. [Default binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt#L89). - new website at -- the Tracks menu supports now MKV edition selection. [Default binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt#L106). -- the Navigate menu supports now chapter selection. [Default binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt#L57). +- the Tracks menu supports now MKV edition selection. [Default binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt#L106). +- the Navigate menu supports now chapter selection. [Default binding](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt#L57). - opening the context menu was crashing if the default binding for Tracks was missing ### 2.9 (2019-04-16) @@ -129,5 +137,5 @@ The add-on filename must end with 'Addon.dll' wasn't necessary (it took a huge amount of time to implement) - the context menu has a new track menu where the active track can be seen and selected, it shows video, audio and subtitle - tracks with various metadata. [Menu default definition](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt#L104). + tracks with various metadata. [Menu default definition](https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt#L104). The screenshots were updated showing the [new track menu](https://github.com/stax76/mpv.net#screenshots). \ No newline at end of file diff --git a/mpv.net/Command.cs b/mpv.net/Command.cs index d809f0e..7b0be12 100644 --- a/mpv.net/Command.cs +++ b/mpv.net/Command.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using System.Reflection; using System.Windows.Forms; - +using System.Windows.Interop; using VBNET; namespace mpvnet @@ -63,12 +63,20 @@ namespace mpvnet public static void show_input_editor(string[] args) { - Process.Start(Application.StartupPath + "\\mpvInputEdit.exe"); + MainForm.Instance.Invoke(new Action(() => { + InputWindow w = new InputWindow(); + new WindowInteropHelper(w).Owner = MainForm.Instance.Handle; + w.ShowDialog(); + })); } public static void show_conf_editor(string[] args) { - Process.Start(Application.StartupPath + "\\mpvConfEdit.exe"); + MainForm.Instance.Invoke(new Action(() => { + ConfWindow w = new ConfWindow(); + new WindowInteropHelper(w).Owner = MainForm.Instance.Handle; + w.ShowDialog(); + })); } public static void show_history(string[] args) @@ -170,7 +178,7 @@ namespace mpvnet public static void load_sub(string[] args) { - MainForm.Instance.BeginInvoke(new Action(() => { + MainForm.Instance.Invoke(new Action(() => { using (var d = new OpenFileDialog()) { d.InitialDirectory = Path.GetDirectoryName(mp.get_property_string("path", false)); @@ -185,7 +193,7 @@ namespace mpvnet public static void load_audio(string[] args) { - MainForm.Instance.BeginInvoke(new Action(() => { + MainForm.Instance.Invoke(new Action(() => { using (var d = new OpenFileDialog()) { d.InitialDirectory = Path.GetDirectoryName(mp.get_property_string("path", false)); diff --git a/mpvConfEdit/SearchTextBoxUserControl.xaml b/mpv.net/Controls/SearchTextBoxUserControl.xaml similarity index 100% rename from mpvConfEdit/SearchTextBoxUserControl.xaml rename to mpv.net/Controls/SearchTextBoxUserControl.xaml diff --git a/mpvConfEdit/SearchTextBoxUserControl.xaml.cs b/mpv.net/Controls/SearchTextBoxUserControl.xaml.cs similarity index 70% rename from mpvConfEdit/SearchTextBoxUserControl.xaml.cs rename to mpv.net/Controls/SearchTextBoxUserControl.xaml.cs index 40730a7..bec2a42 100644 --- a/mpvConfEdit/SearchTextBoxUserControl.xaml.cs +++ b/mpv.net/Controls/SearchTextBoxUserControl.xaml.cs @@ -13,6 +13,16 @@ namespace Controls public string Text { get => SearchTextBox.Text; set => SearchTextBox.Text = value; } + private string _HintText; + + public string HintText { + get => _HintText; + set { + _HintText = value; + UpdateControls(); + } + } + private void SearchClearButton_Click(object sender, RoutedEventArgs e) { SearchTextBox.Text = ""; @@ -21,7 +31,12 @@ namespace Controls private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e) { - HintTextBlock.Text = SearchTextBox.Text == "" ? "Find a setting" : ""; + UpdateControls(); + } + + void UpdateControls() + { + HintTextBlock.Text = SearchTextBox.Text == "" ? HintText : ""; if (SearchTextBox.Text == "") SearchClearButton.Visibility = Visibility.Hidden; diff --git a/mpvConfEdit/DynamicGUI/DynamicGUI.cs b/mpv.net/DynamicGUI/DynamicGUI.cs similarity index 96% rename from mpvConfEdit/DynamicGUI/DynamicGUI.cs rename to mpv.net/DynamicGUI/DynamicGUI.cs index 80b9d98..bce67e1 100644 --- a/mpvConfEdit/DynamicGUI/DynamicGUI.cs +++ b/mpv.net/DynamicGUI/DynamicGUI.cs @@ -4,16 +4,17 @@ using System.Diagnostics; using System.IO; using System.Windows.Documents; using System.Windows.Navigation; + using Tommy; namespace DynamicGUI { public class Settings { - public static List LoadSettings(string filepath) + public static List LoadSettings(string content) { TomlTable table; - using (StreamReader reader = new StreamReader(File.OpenRead(filepath))) + using (StringReader reader = new StringReader(content)) table = TOML.Parse(reader); List settingsList = new List(); diff --git a/mpvConfEdit/DynamicGUI/OptionSettingControl.xaml b/mpv.net/DynamicGUI/OptionSettingControl.xaml similarity index 100% rename from mpvConfEdit/DynamicGUI/OptionSettingControl.xaml rename to mpv.net/DynamicGUI/OptionSettingControl.xaml diff --git a/mpvConfEdit/DynamicGUI/OptionSettingControl.xaml.cs b/mpv.net/DynamicGUI/OptionSettingControl.xaml.cs similarity index 100% rename from mpvConfEdit/DynamicGUI/OptionSettingControl.xaml.cs rename to mpv.net/DynamicGUI/OptionSettingControl.xaml.cs diff --git a/mpvConfEdit/DynamicGUI/StringSettingControl.xaml b/mpv.net/DynamicGUI/StringSettingControl.xaml similarity index 100% rename from mpvConfEdit/DynamicGUI/StringSettingControl.xaml rename to mpv.net/DynamicGUI/StringSettingControl.xaml diff --git a/mpvConfEdit/DynamicGUI/StringSettingControl.xaml.cs b/mpv.net/DynamicGUI/StringSettingControl.xaml.cs similarity index 100% rename from mpvConfEdit/DynamicGUI/StringSettingControl.xaml.cs rename to mpv.net/DynamicGUI/StringSettingControl.xaml.cs diff --git a/mpvConfEdit/DynamicGUI/Tommy.cs b/mpv.net/DynamicGUI/Tommy.cs similarity index 100% rename from mpvConfEdit/DynamicGUI/Tommy.cs rename to mpv.net/DynamicGUI/Tommy.cs diff --git a/mpv.net/License.txt b/mpv.net/License.txt deleted file mode 100644 index b654f75..0000000 --- a/mpv.net/License.txt +++ /dev/null @@ -1,10 +0,0 @@ -MIT License - -Copyright (c) 2017 stax76 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and ssociated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/mpv.net/MainForm.cs b/mpv.net/MainForm.cs index b7ea5fa..bfbae7f 100644 --- a/mpv.net/MainForm.cs +++ b/mpv.net/MainForm.cs @@ -10,6 +10,7 @@ using System.ComponentModel; using VBNET; using System.Globalization; +using System.Diagnostics; namespace mpvnet { @@ -42,8 +43,9 @@ namespace mpvnet AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.ThreadException += Application_ThreadException; Msg.SupportURL = "https://github.com/stax76/mpv.net#support"; - Instance = this; + WPF.WPF.Init(); + System.Windows.Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; Hwnd = Handle; MinimumSize = new Size(FontHeight * 16, FontHeight * 9); Text += " " + Application.ProductVersion; @@ -291,7 +293,7 @@ namespace mpvnet lines = content.Split("\r\n".ToCharArray()).ToList(); else { - lines = Properties.Resources.input_conf.Split("\r\n".ToCharArray()).ToList(); + lines = Properties.Resources.inputConf.Split("\r\n".ToCharArray()).ToList(); foreach (string i in content.Split("\r\n".ToCharArray())) { @@ -397,6 +399,8 @@ namespace mpvnet case 0x0202: // WM_LBUTTONUP case 0x0100: // WM_KEYDOWN case 0x0101: // WM_KEYUP + case 0x0104: // WM_SYSKEYDOWN + case 0x0105: // WM_SYSKEYUP case 0x020A: // WM_MOUSEWHEEL if (mp.MpvWindowHandle != IntPtr.Zero) Native.SendMessage(mp.MpvWindowHandle, m.Msg, m.WParam, m.LParam); @@ -405,14 +409,6 @@ namespace mpvnet if (mp.MpvWindowHandle != IntPtr.Zero) Native.PostMessage(mp.MpvWindowHandle, m.Msg, m.WParam, m.LParam); break; - case 0x0104: // WM_SYSKEYDOWN: - if (mp.MpvWindowHandle != IntPtr.Zero) - Native.SendMessage(mp.MpvWindowHandle, m.Msg, m.WParam, m.LParam); - break; - case 0x0105: // WM_SYSKEYUP: - if (mp.MpvWindowHandle != IntPtr.Zero) - Native.SendMessage(mp.MpvWindowHandle, m.Msg, m.WParam, m.LParam); - break; case 0x203: // Native.WM.LBUTTONDBLCLK if (!IsMouseInOSC()) mp.command_string("cycle fullscreen"); diff --git a/mpv.net/Misc.cs b/mpv.net/Misc.cs index dd89d9e..3a2e550 100644 --- a/mpv.net/Misc.cs +++ b/mpv.net/Misc.cs @@ -1,12 +1,17 @@ -using Microsoft.Win32; -using System; +using System; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using System.Runtime.Serialization; using System.Windows.Forms; +using Microsoft.Win32; + namespace mpvnet { public class Misc @@ -138,4 +143,73 @@ namespace mpvnet public string Type { get; set; } public int ID { get; set; } } + + [Serializable] + public class InputItem : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + public string Menu { get; set; } = ""; + public string Command { get; set; } = ""; + + public InputItem() { } + + public InputItem(SerializationInfo info, StreamingContext context) { } + + private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + private string _Input = ""; + + public string Input { + get => _Input; + set { + _Input = value; + NotifyPropertyChanged(); + } + } + + private static ObservableCollection _InputItems; + + public static ObservableCollection InputItems { + get { + if (_InputItems is null) + { + _InputItems = new ObservableCollection(); + + if (File.Exists(mp.InputConfPath)) + { + foreach (string line in File.ReadAllLines(mp.InputConfPath)) + { + string l = line.Trim(); + if (l.StartsWith("#")) continue; + if (!l.Contains(" ")) continue; + InputItem item = new InputItem(); + item.Input = l.Substring(0, l.IndexOf(" ")); + if (item.Input == "") continue; + l = l.Substring(l.IndexOf(" ") + 1); + + if (l.Contains("#menu:")) + { + item.Menu = l.Substring(l.IndexOf("#menu:") + 6).Trim(); + l = l.Substring(0, l.IndexOf("#menu:")); + + if (item.Menu.Contains(";")) + item.Menu = item.Menu.Substring(item.Menu.IndexOf(";") + 1).Trim(); + } + + item.Command = l.Trim(); + if (item.Command == "") + continue; + if (item.Command.ToLower() == "ignore") + item.Command = ""; + _InputItems.Add(item); + } + } + } + return _InputItems; + } + } + } } \ No newline at end of file diff --git a/mpv.net/Native.cs b/mpv.net/Native.cs index aa8e058..b22d24b 100644 --- a/mpv.net/Native.cs +++ b/mpv.net/Native.cs @@ -14,11 +14,11 @@ namespace mpvnet [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle); - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern string SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); - [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] - public static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); + [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + public static extern IntPtr PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] public static extern void ReleaseCapture(); diff --git a/mpv.net/Properties/Resources.Designer.cs b/mpv.net/Properties/Resources.Designer.cs index fcb89f1..03c989f 100644 --- a/mpv.net/Properties/Resources.Designer.cs +++ b/mpv.net/Properties/Resources.Designer.cs @@ -72,13 +72,35 @@ namespace mpvnet.Properties { /// /// # The defaults of this file can be found at: /// - /// # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt + /// # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt /// - /// # the [rest of string was truncated]";. + /// # the [rest of string was truncated]";. /// - internal static string input_conf { + internal static string inputConf { get { - return ResourceManager.GetString("input_conf", resourceCulture); + return ResourceManager.GetString("inputConf", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to + /// # This file defines the input (keys and mouse) bindings of mpv and mpv.net + /// # and it also defines the context menu of mpv.net. mpv.net has an input + /// # editor and an conf editor as alternatives to editing conf text files. + /// # The input and conf editors can be found in mpv.net's context menu at: + /// + /// # Settings > Show Config Editor + /// # Settings > Show Input Editor + /// + /// # The defaults of this file can be found at: + /// + /// # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt + /// + /// # the [rest of string was truncated]";. + /// + internal static string inputConfHeader { + get { + return ResourceManager.GetString("inputConfHeader", resourceCulture); } } @@ -98,9 +120,41 @@ namespace mpvnet.Properties { ///screenshot-directory = ~~desktop/ ///input-default-bindings = no. /// - internal static string mpv_conf { + internal static string mpvConf { get { - return ResourceManager.GetString("mpv_conf", resourceCulture); + return ResourceManager.GetString("mpvConf", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [[settings]] + ///name = "hwdec" + ///default = "no" + ///filter = "Video" + ///helpurl = "https://mpv.io/manual/master/#options-hwdec" + ///help = "--hwdec=<mode> Specify the hardware video decoding API that should be used if possible. Whether hardware decoding is actually done depends on the video codec. If hardware decoding is not possible, mpv will fall back on software decoding.\n\nFor more information visit:" + ///options = [{ name = "no", help = "always use software decoding (Default)" }, + /// { name = "aut [rest of string was truncated]";. + /// + internal static string mpvConfToml { + get { + return ResourceManager.GetString("mpvConfToml", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to [[settings]] + ///name = "dark-mode" + ///default = "system" + ///filter = "mpv.net" + ///help = "Enables a dark theme." + ///options = [{ name = "always" }, + /// { name = "system" , help = "Windows 10+" }, + /// { name = "never" }]. + /// + internal static string mpvNetConfToml { + get { + return ResourceManager.GetString("mpvNetConfToml", resourceCulture); } } } diff --git a/mpv.net/Properties/Resources.resx b/mpv.net/Properties/Resources.resx index a8b5430..c21778c 100644 --- a/mpv.net/Properties/Resources.resx +++ b/mpv.net/Properties/Resources.resx @@ -118,10 +118,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\input.conf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + ..\Resources\inputConf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - ..\Resources\mpv.conf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + ..\Resources\inputConfHeader.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\Resources\mpvConf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\Resources\mpvConfToml.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\Resources\mpvNetConfToml.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 \ No newline at end of file diff --git a/mpv.net/Resources/input.conf.txt b/mpv.net/Resources/inputConf.txt similarity index 97% rename from mpv.net/Resources/input.conf.txt rename to mpv.net/Resources/inputConf.txt index f18df28..0661a4e 100644 --- a/mpv.net/Resources/input.conf.txt +++ b/mpv.net/Resources/inputConf.txt @@ -9,11 +9,11 @@ # The defaults of this file can be found at: - # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt + # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt # the defaults of mpv can be found at: - # https://github.com/mpv-player/mpv/blob/master/etc/input.conf + # https://github.com/mpv-player/mpv/blob/master/etc/inputConf # mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no' # which disables mpv's input defaults. Every line in this file begins with a @@ -145,8 +145,8 @@ _ script-message mpv.net execute-mpv-command #menu: Tools > Execute mpv command... _ script-message mpv.net shell-execute https://mpv.io/manual/stable/ #menu: Help > Show mpv manual - _ script-message mpv.net shell-execute https://github.com/mpv-player/mpv/blob/master/etc/input.conf #menu: Help > Show mpv default keys - _ script-message mpv.net shell-execute https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt #menu: Help > Show mpv.net default keys + _ script-message mpv.net shell-execute https://github.com/mpv-player/mpv/blob/master/etc/inputConf #menu: Help > Show mpv default keys + _ script-message mpv.net shell-execute https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt #menu: Help > Show mpv.net default keys _ script-message mpv.net shell-execute https://mpv-net.github.io/mpv.net-web-site/ #menu: Help > Show mpv.net web site _ ignore #menu: - diff --git a/mpvInputEdit/Properties/Settings.settings b/mpv.net/Resources/inputConfHeader.txt similarity index 55% rename from mpvInputEdit/Properties/Settings.settings rename to mpv.net/Resources/inputConfHeader.txt index 6b8530c..34364ae 100644 --- a/mpvInputEdit/Properties/Settings.settings +++ b/mpv.net/Resources/inputConfHeader.txt @@ -1,23 +1,19 @@ - - - - - - # This file defines the input (keys and mouse) bindings of mpv and mpv.net + + # This file defines the input (keys and mouse) bindings of mpv and mpv.net # and it also defines the context menu of mpv.net. mpv.net has an input # editor and an conf editor as alternatives to editing conf text files. # The input and conf editors can be found in mpv.net's context menu at: - # Settings > Show Config Editor - # Settings > Show Input Editor + # Settings > Show Config Editor + # Settings > Show Input Editor # The defaults of this file can be found at: - # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt + # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt # the defaults of mpv can be found at: - # https://github.com/mpv-player/mpv/blob/master/etc/input.conf + # https://github.com/mpv-player/mpv/blob/master/etc/inputConf # mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no' # which disables mpv's input defaults. Every line in this file begins with a @@ -26,7 +22,4 @@ # mpv input commands: https://github.com/stax76/mpv.net/wiki/mpv-input-commands - # mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys - - - \ No newline at end of file + # mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys diff --git a/mpv.net/Resources/mpv.conf.txt b/mpv.net/Resources/mpvConf.txt similarity index 100% rename from mpv.net/Resources/mpv.conf.txt rename to mpv.net/Resources/mpvConf.txt diff --git a/mpvConfEdit/mpvConf.toml b/mpv.net/Resources/mpvConfToml.txt similarity index 100% rename from mpvConfEdit/mpvConf.toml rename to mpv.net/Resources/mpvConfToml.txt diff --git a/mpvConfEdit/mpvNetConf.toml b/mpv.net/Resources/mpvNetConfToml.txt similarity index 100% rename from mpvConfEdit/mpvNetConf.toml rename to mpv.net/Resources/mpvNetConfToml.txt diff --git a/mpvConfEdit/App.xaml b/mpv.net/WPF/Resources.xaml similarity index 76% rename from mpvConfEdit/App.xaml rename to mpv.net/WPF/Resources.xaml index 20b4da0..55fc9c2 100644 --- a/mpvConfEdit/App.xaml +++ b/mpv.net/WPF/Resources.xaml @@ -1,9 +1,7 @@ - - + + - - \ No newline at end of file + \ No newline at end of file diff --git a/mpv.net/WPF/WPF.cs b/mpv.net/WPF/WPF.cs new file mode 100644 index 0000000..e27677a --- /dev/null +++ b/mpv.net/WPF/WPF.cs @@ -0,0 +1,34 @@ +using System; +using System.Windows; +using System.Windows.Media; + +namespace WPF +{ + public class WPF + { + public static void Init() + { + EnsureApplicationResources(); + } + + public static void EnsureApplicationResources() + { + if (Application.Current == null) + { + new Application(); + Application.Current.Resources.MergedDictionaries.Add( + Application.LoadComponent(new Uri("mpvnet;component/WPF/Resources.xaml", + UriKind.Relative)) as ResourceDictionary); + } + } + + public static Brush ThemeBrush { + get { + if (Environment.OSVersion.Version.Major < 10) + return new SolidColorBrush(Colors.DarkSlateGray); + else + return SystemParameters.WindowGlassBrush; + } + } + } +} \ No newline at end of file diff --git a/mpvConfEdit/MainWindow.xaml b/mpv.net/Windows/ConfWindow.xaml similarity index 65% rename from mpvConfEdit/MainWindow.xaml rename to mpv.net/Windows/ConfWindow.xaml index 59761fa..a542c8c 100644 --- a/mpvConfEdit/MainWindow.xaml +++ b/mpv.net/Windows/ConfWindow.xaml @@ -1,10 +1,12 @@ - + Height="500" Width="700" Loaded="ConfWindow1_Loaded" ShowInTaskbar="False" + WindowStartupLocation="CenterScreen" Title="Conf Editor"> @@ -14,12 +16,12 @@ - + - + @@ -28,10 +30,10 @@ - Open config folder - Show mpv manual - Show support forum - Write config to disk + Open config folder + Show mpv manual + Show support forum + Write config to disk \ No newline at end of file diff --git a/mpvConfEdit/MainWindow.xaml.cs b/mpv.net/Windows/ConfWindow.xaml.cs similarity index 80% rename from mpvConfEdit/MainWindow.xaml.cs rename to mpv.net/Windows/ConfWindow.xaml.cs index 7b273bd..00bf5ef 100644 --- a/mpvConfEdit/MainWindow.xaml.cs +++ b/mpv.net/Windows/ConfWindow.xaml.cs @@ -4,7 +4,6 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; -using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Input; @@ -13,23 +12,20 @@ using System.Windows.Media; using DynamicGUI; using Microsoft.Win32; -namespace mpvConfEdit +namespace mpvnet { - public partial class MainWindow : Window + public partial class ConfWindow : Window { - private List MpvSettingsDefinitions = Settings.LoadSettings(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\mpvConf.toml"); - private List MpvNetSettingsDefinitions = Settings.LoadSettings(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\mpvNetConf.toml"); + private List MpvSettingsDefinitions = Settings.LoadSettings(Properties.Resources.mpvConfToml); + private List MpvNetSettingsDefinitions = Settings.LoadSettings(Properties.Resources.mpvNetConfToml); private Dictionary> Comments = new Dictionary>(); public ObservableCollection FilterStrings { get; } = new ObservableCollection(); - public string MpvConfPath { get; } = MpvConfFolder + "mpv.conf"; - public string MpvNetConfPath { get; } = MpvConfFolder + "mpvnet.conf"; - public MainWindow() + public ConfWindow() { InitializeComponent(); DataContext = this; - Title = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), true)[0] as AssemblyProductAttribute).Product + " " + Assembly.GetExecutingAssembly().GetName().Version.ToString(); SearchControl.SearchTextBox.TextChanged += SearchTextBox_TextChanged; LoadSettings(MpvSettingsDefinitions, MpvConf); LoadSettings(MpvNetSettingsDefinitions, MpvNetConf); @@ -37,31 +33,13 @@ namespace mpvConfEdit SetDarkTheme(); } - static string StartupFolder { get; } = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\"; - - static string _MpvConfFolder; - - public static string MpvConfFolder { - get { - if (_MpvConfFolder == null) - { - if (Directory.Exists(StartupFolder + "portable_config")) - _MpvConfFolder = StartupFolder + "portable_config\\"; - else - _MpvConfFolder = Environment.GetFolderPath( - Environment.SpecialFolder.ApplicationData) + "\\mpv\\"; - } - return _MpvConfFolder; - } - } - public Brush Foreground2 { get { return (Brush)GetValue(Foreground2Property); } set { SetValue(Foreground2Property, value); } } public static readonly DependencyProperty Foreground2Property = - DependencyProperty.Register("Foreground2", typeof(Brush), typeof(MainWindow), new PropertyMetadata(Brushes.DarkSlateGray)); + DependencyProperty.Register("Foreground2", typeof(Brush), typeof(ConfWindow), new PropertyMetadata(Brushes.DarkSlateGray)); void SetDarkTheme() { @@ -101,12 +79,12 @@ namespace mpvConfEdit { case StringSetting s: var sc = new StringSettingControl(s); - sc.TitleTextBox.Foreground = Controls.Controls.ThemeBrush; + sc.TitleTextBox.Foreground = WPF.WPF.ThemeBrush; MainStackPanel.Children.Add(sc); break; case OptionSetting s: var oc = new OptionSettingControl(s); - oc.TitleTextBox.Foreground = Controls.Controls.ThemeBrush; + oc.TitleTextBox.Foreground = WPF.WPF.ThemeBrush; MainStackPanel.Children.Add(oc); break; } @@ -117,7 +95,7 @@ namespace mpvConfEdit public Dictionary MpvConf { get { - if (_mpvConf == null) _mpvConf = LoadConf(MpvConfPath); + if (_mpvConf == null) _mpvConf = LoadConf(mp.MpvConfPath); return _mpvConf; } } @@ -126,7 +104,7 @@ namespace mpvConfEdit public Dictionary MpvNetConf { get { - if (_mpvNetConf == null) _mpvNetConf = LoadConf(MpvNetConfPath); + if (_mpvNetConf == null) _mpvNetConf = LoadConf(mp.MpvNetConfPath); return _mpvNetConf; } } @@ -183,10 +161,10 @@ namespace mpvConfEdit if (!isDirty) return; - WriteToDisk(MpvConfPath, MpvConf, MpvSettingsDefinitions); - WriteToDisk(MpvNetConfPath, MpvNetConf, MpvNetSettingsDefinitions); + WriteToDisk(mp.MpvConfPath, MpvConf, MpvSettingsDefinitions); + WriteToDisk(mp.MpvNetConfPath, MpvNetConf, MpvNetSettingsDefinitions); - MessageBox.Show("Changes will be available on next startup of mpv(.net).", + MessageBox.Show("Changes will be available on next startup of mpv.net.", Title, MessageBoxButton.OK, MessageBoxImage.Information); } @@ -246,7 +224,7 @@ namespace mpvConfEdit MainScrollViewer.ScrollToTop(); } - private void MainWindow1_Loaded(object sender, RoutedEventArgs e) + private void ConfWindow1_Loaded(object sender, RoutedEventArgs e) { SearchControl.SearchTextBox.SelectAll(); Keyboard.Focus(SearchControl.SearchTextBox); @@ -260,7 +238,7 @@ namespace mpvConfEdit private void OpenSettingsTextBlock_MouseUp(object sender, MouseButtonEventArgs e) { - Process.Start(Path.GetDirectoryName(MpvConfPath)); + Process.Start(Path.GetDirectoryName(mp.MpvConfPath)); } private void ShowManualTextBlock_MouseUp(object sender, MouseButtonEventArgs e) diff --git a/mpvInputEdit/MainWindow.xaml b/mpv.net/Windows/InputWindow.xaml similarity index 62% rename from mpvInputEdit/MainWindow.xaml rename to mpv.net/Windows/InputWindow.xaml index fdf76fb..bf1c652 100644 --- a/mpvInputEdit/MainWindow.xaml +++ b/mpv.net/Windows/InputWindow.xaml @@ -1,17 +1,30 @@ - + Title="Input Editor" Height="500" Width="750" FontSize="13" + Loaded="Window_Loaded" Closed="Window_Closed" ShowInTaskbar="False"> + + + - + diff --git a/mpvInputEdit/MainWindow.xaml.cs b/mpv.net/Windows/InputWindow.xaml.cs similarity index 77% rename from mpvInputEdit/MainWindow.xaml.cs rename to mpv.net/Windows/InputWindow.xaml.cs index ebbf1d6..dd4285c 100644 --- a/mpvInputEdit/MainWindow.xaml.cs +++ b/mpv.net/Windows/InputWindow.xaml.cs @@ -2,25 +2,23 @@ using System.Collections.Generic; using System.ComponentModel; using System.IO; -using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; -namespace mpvInputEdit +namespace mpvnet { - public partial class MainWindow : Window + public partial class InputWindow : Window { ICollectionView CollectionView; - public MainWindow() + public InputWindow() { InitializeComponent(); - Title = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), true)[0] as AssemblyProductAttribute).Product + " " + Assembly.GetExecutingAssembly().GetName().Version.ToString(); SearchControl.SearchTextBox.TextChanged += SearchTextBox_TextChanged; DataGrid.SelectionMode = DataGridSelectionMode.Single; - CollectionViewSource collectionViewSource = new CollectionViewSource() { Source = App.InputItems }; + CollectionViewSource collectionViewSource = new CollectionViewSource() { Source = InputItem.InputItems }; CollectionView = collectionViewSource.View; var yourCostumFilter = new Predicate(item => Filter((InputItem)item)); CollectionView.Filter = yourCostumFilter; @@ -30,6 +28,9 @@ namespace mpvInputEdit private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e) { CollectionView.Refresh(); + + if (SearchControl.SearchTextBox.Text == "?") + MessageBox.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 \ni: \n\nm \nm: \n\nc \nc: \n\nIf only one character is entered the search will be performed only in the input.", "Filtering", MessageBoxButton.OK, MessageBoxImage.Information); } bool Filter(InputItem item) @@ -64,14 +65,14 @@ namespace mpvInputEdit { InputItem item = ((Button)e.Source).DataContext as InputItem; if (item is null) return; - InputWindow w = new InputWindow(); + LearnWindow w = new LearnWindow(); w.Owner = this; w.InputItem = item; w.ShowDialog(); var items = new Dictionary(); - foreach (InputItem i in App.InputItems) + foreach (InputItem i in InputItem.InputItems) if (items.ContainsKey(i.Input) && i.Input != "_") MessageBox.Show($"Duplicate found:\n\n{i.Input}: {i.Menu}\n\n{items[i.Input].Input}: {items[i.Input].Menu}\n\nPlease note that you can chain multiple commands in the same line by using a semicolon as separator.", "Duplicate Found", MessageBoxButton.OK, MessageBoxImage.Warning); else @@ -82,17 +83,17 @@ namespace mpvInputEdit private void Window_Closed(object sender, EventArgs e) { - var backupDir = Path.GetDirectoryName(App.InputConfPath) + "\\backup\\"; + string backupDir = Path.GetDirectoryName(mp.InputConfPath) + "\\backup\\"; if (!Directory.Exists(backupDir)) Directory.CreateDirectory(backupDir); - if (File.Exists(App.InputConfPath)) - File.Copy(App.InputConfPath, backupDir + "input conf " + DateTime.Now.ToString("yyyy-MM-dd HH-mm") + ".conf", true); + if (File.Exists(mp.InputConfPath)) + File.Copy(mp.InputConfPath, backupDir + "input conf " + DateTime.Now.ToString("yyyy-MM-dd HH-mm") + ".conf", true); - string text = "\r\n" + Properties.Settings.Default.input_conf_help + "\r\n\r\n"; + string text = Properties.Resources.inputConfHeader + "\r\n"; - foreach (InputItem item in App.InputItems) + foreach (InputItem item in InputItem.InputItems) { string line = " " + item.Input.PadRight(10); @@ -107,9 +108,9 @@ namespace mpvInputEdit text += line + "\r\n"; } - File.WriteAllText(App.InputConfPath, text); + File.WriteAllText(mp.InputConfPath, text); - MessageBox.Show("Changes will be available on next mpv(.net) startup.", + MessageBox.Show("Changes will be available on next mpv.net startup.", Title, MessageBoxButton.OK, MessageBoxImage.Information); } diff --git a/mpvInputEdit/InputWindow.xaml b/mpv.net/Windows/LearnWindow.xaml similarity index 96% rename from mpvInputEdit/InputWindow.xaml rename to mpv.net/Windows/LearnWindow.xaml index 7b70887..9564c8e 100644 --- a/mpvInputEdit/InputWindow.xaml +++ b/mpv.net/Windows/LearnWindow.xaml @@ -1,4 +1,4 @@ - td = new TaskDialog()) + { + td.MainInstruction = "Choose a settings folder."; + td.Content = "[https://mpv.io/manual/master/#files-on-windows MPV documentation about files on Windows.]"; + td.AddCommandLink("appdata", appdataFolder); + td.AddCommandLink("portable", portableFolder); + _MpvConfFolder = td.Show(); + } + } else - _MpvConfFolder = Environment.GetFolderPath( - Environment.SpecialFolder.ApplicationData) + "\\mpv\\"; + if (Directory.Exists(portableFolder)) + _MpvConfFolder = portableFolder; + else + _MpvConfFolder = appdataFolder; + + if (string.IsNullOrEmpty(_MpvConfFolder)) _MpvConfFolder = appdataFolder; + if (!Directory.Exists(_MpvConfFolder)) Directory.CreateDirectory(_MpvConfFolder); + + if (!File.Exists(_MpvConfFolder + "\\input.conf")) + File.WriteAllText(_MpvConfFolder + "\\input.conf", Properties.Resources.inputConf); + + if (!File.Exists(_MpvConfFolder + "\\mpv.conf")) + File.WriteAllText(_MpvConfFolder + "\\mpv.conf", Properties.Resources.mpvConf); } return _MpvConfFolder; } @@ -121,15 +144,7 @@ namespace mpvnet public static void Init() { - if (!Directory.Exists(mp.MpvConfFolder)) - Directory.CreateDirectory(mp.MpvConfFolder); - - if (!File.Exists(mp.MpvConfPath)) - File.WriteAllText(mp.MpvConfPath, Properties.Resources.mpv_conf); - - if (!File.Exists(mp.InputConfPath)) - File.WriteAllText(mp.InputConfPath, Properties.Resources.input_conf); - + string dummy = MpvConfFolder; LoadLibrary("mpv-1.dll"); MpvHandle = mpv_create(); set_property_string("input-default-bindings", "yes"); @@ -162,11 +177,12 @@ namespace mpvnet if (Path.GetExtension(scriptPath) == ".ps1") PowerShellScript.Init(scriptPath); - foreach (var scriptPath in Directory.GetFiles(mp.MpvConfFolder + "Scripts")) - if (Path.GetExtension(scriptPath) == ".py") - PythonScripts.Add(new PythonScript(File.ReadAllText(scriptPath))); - else if (Path.GetExtension(scriptPath) == ".ps1") - PowerShellScript.Init(scriptPath); + if (Directory.Exists(mp.MpvConfFolder + "Scripts")) + foreach (var scriptPath in Directory.GetFiles(mp.MpvConfFolder + "Scripts")) + if (Path.GetExtension(scriptPath) == ".py") + PythonScripts.Add(new PythonScript(File.ReadAllText(scriptPath))); + else if (Path.GetExtension(scriptPath) == ".ps1") + PowerShellScript.Init(scriptPath); } public static void EventLoop() @@ -235,32 +251,34 @@ namespace mpvnet ScriptInputDispatch?.Invoke(); break; case mpv_event_id.MPV_EVENT_CLIENT_MESSAGE: - if (ClientMessage != null) + var client_messageData = (mpv_event_client_message)Marshal.PtrToStructure(evt.data, typeof(mpv_event_client_message)); + string[] args = NativeUtf8StrArray2ManagedStrArray(client_messageData.args, client_messageData.num_args); + + if (args != null && args.Length > 1 && args[0] == "mpv.net") { - var client_messageData = (mpv_event_client_message)Marshal.PtrToStructure(evt.data, typeof(mpv_event_client_message)); - string[] args = NativeUtf8StrArray2ManagedStrArray(client_messageData.args, client_messageData.num_args); + bool found = false; - if (args != null && args.Length > 1 && args[0] == "mpv.net") + foreach (var i in mpvnet.Command.Commands) { - bool found = false; + if (args[1] == i.Name) + { + found = true; + i.Action.Invoke(args.Skip(2).ToArray()); + MainForm.Instance.BeginInvoke(new Action(() => { + Message m = new Message() { Msg = 0x0202 }; // WM_LBUTTONUP + Native.SendMessage(MainForm.Instance.Handle, m.Msg, m.WParam, m.LParam); + })); - foreach (var i in mpvnet.Command.Commands) - { - if (args[1] == i.Name) - { - found = true; - i.Action.Invoke(args.Skip(2).ToArray()); - } - } - if (!found) - { - List names = mpvnet.Command.Commands.Select((item) => item.Name).ToList(); - names.Sort(); - Msg.ShowError($"No command '{args[1]}' found.", $"Available commands are:\n\n{string.Join("\n", names)}\n\nHow to bind these commands can be seen in the [https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt default input bindings and menu definition]."); } } - ClientMessage?.Invoke(args); + if (!found) + { + List names = mpvnet.Command.Commands.Select((item) => item.Name).ToList(); + names.Sort(); + Msg.ShowError($"No command '{args[1]}' found.", $"Available commands are:\n\n{string.Join("\n", names)}\n\nHow to bind these commands can be seen in the [https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt default input bindings and menu definition]."); + } } + ClientMessage?.Invoke(args); break; case mpv_event_id.MPV_EVENT_VIDEO_RECONFIG: VideoReconfig?.Invoke(); diff --git a/mpv.net/mpv.net.csproj b/mpv.net/mpv.net.csproj index d1beb7a..95cda00 100644 --- a/mpv.net/mpv.net.csproj +++ b/mpv.net/mpv.net.csproj @@ -120,6 +120,8 @@ IronPython\Microsoft.Scripting.dll + + @@ -129,20 +131,41 @@ ..\packages\Microsoft.PowerShell.5.ReferenceAssemblies.1.1.0\lib\net4\System.Management.Automation.dll + + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + SearchTextBoxUserControl.xaml + + + + OptionSettingControl.xaml + + + StringSettingControl.xaml + + Component + True True Resources.resx - @@ -158,8 +181,18 @@ + + ConfWindow.xaml + + + LearnWindow.xaml + + + InputWindow.xaml + + MainForm.cs Designer @@ -183,15 +216,18 @@ Settings.settings True - + + + + - + @@ -199,6 +235,28 @@ VBNET + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/mpvConfEdit/Properties/Settings.Designer.cs b/mpvConfEdit/Properties/Settings.Designer.cs deleted file mode 100644 index af9cb96..0000000 --- a/mpvConfEdit/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace mpvConfEdit.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/mpvConfEdit/Properties/Settings.settings b/mpvConfEdit/Properties/Settings.settings deleted file mode 100644 index 033d7a5..0000000 --- a/mpvConfEdit/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/mpvConfEdit/app.manifest b/mpvConfEdit/app.manifest deleted file mode 100644 index 09c7e05..0000000 --- a/mpvConfEdit/app.manifest +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - \ No newline at end of file diff --git a/mpvConfEdit/mpv.ico b/mpvConfEdit/mpv.ico deleted file mode 100644 index 5467e4e..0000000 Binary files a/mpvConfEdit/mpv.ico and /dev/null differ diff --git a/mpvConfEdit/mpvConfEdit.csproj b/mpvConfEdit/mpvConfEdit.csproj deleted file mode 100644 index 09dbef6..0000000 --- a/mpvConfEdit/mpvConfEdit.csproj +++ /dev/null @@ -1,149 +0,0 @@ - - - - - Debug - AnyCPU - {C4FEAA45-001D-4DC8-8BFA-621527326D09} - WinExe - mpvConfEdit - mpvConfEdit - v4.7.2 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - true - true - - - - AnyCPU - true - full - false - ..\mpv.net\bin\ - DEBUG;TRACE - prompt - 4 - 8.0 - true - enable - false - - - AnyCPU - pdbonly - true - ..\mpv.net\bin\ - TRACE - prompt - 4 - false - 8.0 - - - mpv.ico - - - app.manifest - - - - - - - - - - - - - - 4.0 - - - - - - - - MSBuild:Compile - Designer - - - - - OptionSettingControl.xaml - - - StringSettingControl.xaml - - - - SearchTextBoxUserControl.xaml - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - App.xaml - Code - - - MainWindow.xaml - Code - - - Designer - MSBuild:Compile - - - - - Code - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - Always - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - - - Always - - - - - - - \ No newline at end of file diff --git a/mpvConfEdit/mpvConfEdit.sln b/mpvConfEdit/mpvConfEdit.sln deleted file mode 100644 index 9f519b1..0000000 --- a/mpvConfEdit/mpvConfEdit.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28714.193 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mpvConfEdit", "mpvConfEdit.csproj", "{C4FEAA45-001D-4DC8-8BFA-621527326D09}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C4FEAA45-001D-4DC8-8BFA-621527326D09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4FEAA45-001D-4DC8-8BFA-621527326D09}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4FEAA45-001D-4DC8-8BFA-621527326D09}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4FEAA45-001D-4DC8-8BFA-621527326D09}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {959F2890-E1FC-47A2-856C-A42F8C955D15} - EndGlobalSection -EndGlobal diff --git a/mpvInputEdit/App.config b/mpvInputEdit/App.config deleted file mode 100644 index 651b379..0000000 --- a/mpvInputEdit/App.config +++ /dev/null @@ -1,41 +0,0 @@ - - - - -
- - - - - - - - - # This file defines the input (keys and mouse) bindings of mpv and mpv.net - # and it also defines the context menu of mpv.net. mpv.net has an input - # editor and an conf editor as alternatives to editing conf text files. - # The input and conf editors can be found in mpv.net's context menu at: - - # Settings > Show Config Editor - # Settings > Show Input Editor - - # The defaults of this file can be found at: - - # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt - - # the defaults of mpv can be found at: - - # https://github.com/mpv-player/mpv/blob/master/etc/input.conf - - # mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no' - # which disables mpv's input defaults. Every line in this file begins with a - # space character to make it easier to do a text search, so if you want to know - # if 'o' has already a binding you can make a text search on ' o '. - - # mpv input commands: https://github.com/stax76/mpv.net/wiki/mpv-input-commands - - # mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys - - - - \ No newline at end of file diff --git a/mpvInputEdit/App.xaml b/mpvInputEdit/App.xaml deleted file mode 100644 index 03b0b30..0000000 --- a/mpvInputEdit/App.xaml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - diff --git a/mpvInputEdit/App.xaml.cs b/mpvInputEdit/App.xaml.cs deleted file mode 100644 index 71a8d91..0000000 --- a/mpvInputEdit/App.xaml.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.ObjectModel; -using System.IO; -using System.Windows; - -namespace mpvInputEdit -{ - public partial class App : Application - { - public static string InputConfPath { get; } = MpvConfFolder + "input.conf"; - - static string StartupFolder { get; } = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\"; - - static string _MpvConfFolder; - - public static string MpvConfFolder { - get { - if (_MpvConfFolder == null) - { - if (Directory.Exists(StartupFolder + "portable_config")) - _MpvConfFolder = StartupFolder + "portable_config\\"; - else - _MpvConfFolder = Environment.GetFolderPath( - Environment.SpecialFolder.ApplicationData) + "\\mpv\\"; - } - return _MpvConfFolder; - } - } - - private static ObservableCollection _InputItems; - - public static ObservableCollection InputItems - { - get - { - if (_InputItems is null) - { - _InputItems = new ObservableCollection(); - - if (File.Exists(InputConfPath)) - { - foreach (string line in File.ReadAllLines(InputConfPath)) - { - string l = line.Trim(); - if (l.StartsWith("#")) continue; - if (!l.Contains(" ")) continue; - InputItem item = new InputItem(); - item.Input = l.Substring(0, l.IndexOf(" ")); - if (item.Input == "") continue; - l = l.Substring(l.IndexOf(" ") + 1); - - if (l.Contains("#menu:")) - { - item.Menu = l.Substring(l.IndexOf("#menu:") + 6).Trim(); - l = l.Substring(0, l.IndexOf("#menu:")); - - if (item.Menu.Contains(";")) - item.Menu = item.Menu.Substring(item.Menu.IndexOf(";") + 1).Trim(); - } - - item.Command = l.Trim(); - if (item.Command == "") - continue; - if (item.Command.ToLower() == "ignore") - item.Command = ""; - _InputItems.Add(item); - } - } - } - return _InputItems; - } - } - } -} \ No newline at end of file diff --git a/mpvInputEdit/Controls.cs b/mpvInputEdit/Controls.cs deleted file mode 100644 index a29229e..0000000 --- a/mpvInputEdit/Controls.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Windows; -using System.Windows.Media; - -namespace Controls -{ - class Controls - { - public static Brush ThemeBrush { - get { - if (Environment.OSVersion.Version.Major < 10) - return new SolidColorBrush(Colors.DarkSlateGray); - else - return SystemParameters.WindowGlassBrush; - } - } - } -} \ No newline at end of file diff --git a/mpvInputEdit/License.txt b/mpvInputEdit/License.txt deleted file mode 100644 index b654f75..0000000 --- a/mpvInputEdit/License.txt +++ /dev/null @@ -1,10 +0,0 @@ -MIT License - -Copyright (c) 2017 stax76 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and ssociated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/mpvInputEdit/Properties/AssemblyInfo.cs b/mpvInputEdit/Properties/AssemblyInfo.cs deleted file mode 100644 index 5640444..0000000 --- a/mpvInputEdit/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Reflection; -using System.Resources; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Windows; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("mpv(.net) input edit")] -[assembly: AssemblyDescription("mpv(.net) key and mouse bindings editor")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("mpv(.net) input edit")] -[assembly: AssemblyCopyright("Copyright © 2017-2019 Frank Skare (stax76)")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -//In order to begin building localizable applications, set -//CultureYouAreCodingWith in your .csproj file -//inside a . For example, if you are using US english -//in your source files, set the to en-US. Then uncomment -//the NeutralResourceLanguage attribute below. Update the "en-US" in -//the line below to match the UICulture setting in the project file. - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] - - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.7.0.0")] -[assembly: AssemblyFileVersion("1.7.0.0")] diff --git a/mpvInputEdit/Properties/Resources.Designer.cs b/mpvInputEdit/Properties/Resources.Designer.cs deleted file mode 100644 index 4f907a1..0000000 --- a/mpvInputEdit/Properties/Resources.Designer.cs +++ /dev/null @@ -1,66 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace mpvInputEdit.Properties -{ - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("mpvInputEdit.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/mpvInputEdit/Properties/Resources.resx b/mpvInputEdit/Properties/Resources.resx deleted file mode 100644 index af7dbeb..0000000 --- a/mpvInputEdit/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/mpvInputEdit/Properties/Settings.Designer.cs b/mpvInputEdit/Properties/Settings.Designer.cs deleted file mode 100644 index 08ee49a..0000000 --- a/mpvInputEdit/Properties/Settings.Designer.cs +++ /dev/null @@ -1,61 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace mpvInputEdit.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute(@" # This file defines the input (keys and mouse) bindings of mpv and mpv.net - # and it also defines the context menu of mpv.net. mpv.net has an input - # editor and an conf editor as alternatives to editing conf text files. - # The input and conf editors can be found in mpv.net's context menu at: - - # Settings > Show Config Editor - # Settings > Show Input Editor - - # The defaults of this file can be found at: - - # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/input.conf.txt - - # the defaults of mpv can be found at: - - # https://github.com/mpv-player/mpv/blob/master/etc/input.conf - - # mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no' - # which disables mpv's input defaults. Every line in this file begins with a - # space character to make it easier to do a text search, so if you want to know - # if 'o' has already a binding you can make a text search on ' o '. - - # mpv input commands: https://github.com/stax76/mpv.net/wiki/mpv-input-commands - - # mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys")] - public string input_conf_help { - get { - return ((string)(this["input_conf_help"])); - } - set { - this["input_conf_help"] = value; - } - } - } -} diff --git a/mpvInputEdit/SearchTextBoxUserControl.xaml b/mpvInputEdit/SearchTextBoxUserControl.xaml deleted file mode 100644 index f277129..0000000 --- a/mpvInputEdit/SearchTextBoxUserControl.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/mpvInputEdit/SearchTextBoxUserControl.xaml.cs b/mpvInputEdit/SearchTextBoxUserControl.xaml.cs deleted file mode 100644 index 5eda9f0..0000000 --- a/mpvInputEdit/SearchTextBoxUserControl.xaml.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Windows; -using System.Windows.Controls; -using System.Windows.Input; - -namespace Controls -{ - public partial class SearchTextBoxUserControl : UserControl - { - public SearchTextBoxUserControl() - { - InitializeComponent(); - } - - public string Text { get => SearchTextBox.Text; set => SearchTextBox.Text = value; } - - private void SearchClearButton_Click(object sender, RoutedEventArgs e) - { - SearchTextBox.Text = ""; - Keyboard.Focus(SearchTextBox); - } - - private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e) - { - SearchHintTextBlock.Text = SearchTextBox.Text == "" ? "Type ? to get help." : ""; - - if (SearchTextBox.Text == "") - SearchClearButton.Visibility = Visibility.Hidden; - else - SearchClearButton.Visibility = Visibility.Visible; - - if (SearchTextBox.Text == "?") - MessageBox.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 \ni: \n\nm \nm: \n\nc \nc: \n\nIf only one character is entered the search will be performed only in the input.", "Filtering", MessageBoxButton.OK, MessageBoxImage.Information); - } - } -} \ No newline at end of file diff --git a/mpvInputEdit/app.manifest b/mpvInputEdit/app.manifest deleted file mode 100644 index 09c7e05..0000000 --- a/mpvInputEdit/app.manifest +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - \ No newline at end of file diff --git a/mpvInputEdit/misc.cs b/mpvInputEdit/misc.cs deleted file mode 100644 index 87d4949..0000000 --- a/mpvInputEdit/misc.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.ComponentModel; -using System.Runtime.CompilerServices; -using System.Runtime.Serialization; - -namespace mpvInputEdit -{ - [Serializable] - public class InputItem : INotifyPropertyChanged - { - public event PropertyChangedEventHandler PropertyChanged; - public string Menu { get; set; } = ""; - public string Command { get; set; } = ""; - - public InputItem() { } - - public InputItem(SerializationInfo info, StreamingContext context) {} - - private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - - private string _Input = ""; - - public string Input { - get => _Input; - set { - _Input = value; - NotifyPropertyChanged(); - } - } - } -} \ No newline at end of file diff --git a/mpvInputEdit/mpv.ico b/mpvInputEdit/mpv.ico deleted file mode 100644 index 5467e4e..0000000 Binary files a/mpvInputEdit/mpv.ico and /dev/null differ diff --git a/mpvInputEdit/mpvInputEdit.csproj b/mpvInputEdit/mpvInputEdit.csproj deleted file mode 100644 index ab32ae5..0000000 --- a/mpvInputEdit/mpvInputEdit.csproj +++ /dev/null @@ -1,129 +0,0 @@ - - - - - Debug - AnyCPU - {635F8308-9F79-4BCC-B839-75FCEF8588AE} - WinExe - mpvInputEdit - mpvInputEdit - v4.7.2 - 512 - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 4 - true - true - - - AnyCPU - true - full - false - ..\mpv.net\bin\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - ..\mpv.net\bin\ - TRACE - prompt - 4 - - - mpv.ico - - - app.manifest - - - - - - - - - - - - - 4.0 - - - - - - - - MSBuild:Compile - Designer - - - - SearchTextBoxUserControl.xaml - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - App.xaml - Code - - - InputWindow.xaml - - - MainWindow.xaml - Code - - - MSBuild:Compile - Designer - - - - - - Code - - - True - True - Resources.resx - - - True - Settings.settings - True - - - ResXFileCodeGenerator - Resources.Designer.cs - - - README.md - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - - - - - - \ No newline at end of file diff --git a/mpvInputEdit/mpvInputEdit.sln b/mpvInputEdit/mpvInputEdit.sln deleted file mode 100644 index 224a34c..0000000 --- a/mpvInputEdit/mpvInputEdit.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28721.148 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mpvInputEdit", "mpvInputEdit.csproj", "{635F8308-9F79-4BCC-B839-75FCEF8588AE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {635F8308-9F79-4BCC-B839-75FCEF8588AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {635F8308-9F79-4BCC-B839-75FCEF8588AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {635F8308-9F79-4BCC-B839-75FCEF8588AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {635F8308-9F79-4BCC-B839-75FCEF8588AE}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {492E8273-D465-496D-BA18-DC8CEC9EAD70} - EndGlobalSection -EndGlobal