diff --git a/src/MpvNet.Windows/GuiCommand.cs b/src/MpvNet.Windows/GuiCommand.cs index d5b0072..0854b54 100644 --- a/src/MpvNet.Windows/GuiCommand.cs +++ b/src/MpvNet.Windows/GuiCommand.cs @@ -65,6 +65,8 @@ public class GuiCommand Window? win = Activator.CreateInstance(winType) as Window; new WindowInteropHelper(win).Owner = MainForm.Instance!.Handle; win?.ShowDialog(); + //TODO: Player.Command("quit"); + Player.Command("quit"); } public void LoadSubtitle(IList args) diff --git a/src/MpvNet.Windows/Settings.cs b/src/MpvNet.Windows/Settings.cs index e6c4d68..0eef2ed 100644 --- a/src/MpvNet.Windows/Settings.cs +++ b/src/MpvNet.Windows/Settings.cs @@ -40,7 +40,7 @@ public class OptionSettingOption public string? Text { - get => string.IsNullOrEmpty(_text) ? Name : _text; + get => _text ?? Name; set => _text = value; } diff --git a/src/MpvNet.Windows/WPF/ComboBoxTemplateSelector.cs b/src/MpvNet.Windows/WPF/ComboBoxTemplateSelector.cs new file mode 100644 index 0000000..9ba32c1 --- /dev/null +++ b/src/MpvNet.Windows/WPF/ComboBoxTemplateSelector.cs @@ -0,0 +1,18 @@ + +using System.Windows.Controls; +using System.Windows; + +namespace MpvNet.Windows.WPF; + +public class ComboBoxTemplateSelector : DataTemplateSelector +{ + public override DataTemplate SelectTemplate(object item, DependencyObject container) + { + ContentPresenter presenter = (ContentPresenter)container; + + if (presenter.TemplatedParent is ComboBox) + return (DataTemplate)presenter.FindResource("ComboBoxCollapsedDataTemplate"); + else // Templated parent is ComboBoxItem + return (DataTemplate)presenter.FindResource("ComboBoxExpandedDataTemplate"); + } +} diff --git a/src/MpvNet.Windows/WPF/ConfWindow.xaml.cs b/src/MpvNet.Windows/WPF/ConfWindow.xaml.cs index 49111ef..e029d5d 100644 --- a/src/MpvNet.Windows/WPF/ConfWindow.xaml.cs +++ b/src/MpvNet.Windows/WPF/ConfWindow.xaml.cs @@ -149,7 +149,10 @@ public partial class ConfWindow : Window, INotifyPropertyChanged MainStackPanel.Children.Add(new StringSettingControl(s) { Visibility = Visibility.Collapsed }); break; case OptionSetting s: - MainStackPanel.Children.Add(new OptionSettingControl(s) { Visibility = Visibility.Collapsed }); + if (s.Options.Count > 3) + MainStackPanel.Children.Add(new ComboBoxSettingControl(s) { Visibility = Visibility.Collapsed }); + else + MainStackPanel.Children.Add(new OptionSettingControl(s) { Visibility = Visibility.Collapsed }); break; } } diff --git a/src/MpvNet.Windows/WPF/Controls/ComboBoxSettingControl.xaml b/src/MpvNet.Windows/WPF/Controls/ComboBoxSettingControl.xaml new file mode 100644 index 0000000..97f1484 --- /dev/null +++ b/src/MpvNet.Windows/WPF/Controls/ComboBoxSettingControl.xaml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/MpvNet.Windows/WPF/Controls/ComboBoxSettingControl.xaml.cs b/src/MpvNet.Windows/WPF/Controls/ComboBoxSettingControl.xaml.cs new file mode 100644 index 0000000..23c1410 --- /dev/null +++ b/src/MpvNet.Windows/WPF/Controls/ComboBoxSettingControl.xaml.cs @@ -0,0 +1,69 @@ + +using System.Windows; +using System.Windows.Controls; + +using MpvNet.Windows.UI; + +namespace MpvNet.Windows.WPF; + +public partial class ComboBoxSettingControl : UserControl, ISettingControl +{ + OptionSetting OptionSetting; + + public ComboBoxSettingControl(OptionSetting optionSetting) + { + OptionSetting = optionSetting; + InitializeComponent(); + DataContext = this; + TitleTextBox.Text = optionSetting.Name; + + if (string.IsNullOrEmpty(optionSetting.Help)) + HelpTextBox.Visibility = Visibility.Collapsed; + + HelpTextBox.Text = optionSetting.Help; + ComboBoxControl.ItemsSource = optionSetting.Options; + + foreach (var item in optionSetting.Options) + if (item.Name == optionSetting.Value) + ComboBoxControl.SelectedItem = item; + + if (string.IsNullOrEmpty(optionSetting.URL)) + LinkTextBlock.Visibility = Visibility.Collapsed; + + Link.SetURL(optionSetting.URL); + } + + public Theme? Theme => Theme.Current; + + public Setting Setting => OptionSetting; + + public bool Contains(string searchString) => ContainsInternal(searchString.ToLower()); + + public bool ContainsInternal(string search) + { + if (TitleTextBox.Text.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1) + return true; + + if (HelpTextBox.Text.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1) + return true; + + foreach (var i in OptionSetting.Options) + { + if (i.Text?.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1) + return true; + + if (i.Help?.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1) + return true; + + if (i.Name?.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1) + return true; + } + + return false; + } + + void ComboBoxControl_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + OptionSetting.Value = (ComboBoxControl.SelectedItem as OptionSettingOption)?.Name; + } +} diff --git a/src/MpvNet.Windows/WPF/Resources.xaml b/src/MpvNet.Windows/WPF/Resources.xaml index 5cada96..a44ca52 100644 --- a/src/MpvNet.Windows/WPF/Resources.xaml +++ b/src/MpvNet.Windows/WPF/Resources.xaml @@ -6,6 +6,183 @@ xmlns:local="clr-namespace:MpvNet.Windows.WPF" > + + + + + + + + + +