replace v6 with experimental v7 code
This commit is contained in:
128
src/MpvNet.Windows/WPF/Controls/StringSettingControl.xaml.cs
Normal file
128
src/MpvNet.Windows/WPF/Controls/StringSettingControl.xaml.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
|
||||
using System.Globalization;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
|
||||
using Forms = System.Windows.Forms;
|
||||
|
||||
using MpvNet.Windows.UI;
|
||||
|
||||
namespace MpvNet.Windows.WPF;
|
||||
|
||||
public partial class StringSettingControl : UserControl, ISettingControl
|
||||
{
|
||||
StringSetting StringSetting;
|
||||
|
||||
public StringSettingControl(StringSetting stringSetting)
|
||||
{
|
||||
StringSetting = stringSetting;
|
||||
InitializeComponent();
|
||||
DataContext = this;
|
||||
TitleTextBox.Text = stringSetting.Name;
|
||||
HelpTextBox.Text = stringSetting.Help;
|
||||
ValueTextBox.Text = StringSetting.Value;
|
||||
|
||||
if (StringSetting.Width > 0)
|
||||
ValueTextBox.Width = StringSetting.Width;
|
||||
|
||||
if (StringSetting.Type != "folder" && StringSetting.Type != "color")
|
||||
Button.Visibility = Visibility.Hidden;
|
||||
|
||||
Link.SetURL(StringSetting.URL);
|
||||
|
||||
if (string.IsNullOrEmpty(stringSetting.URL))
|
||||
LinkTextBlock.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
public Theme? Theme => Theme.Current;
|
||||
|
||||
public bool Contains(string search)
|
||||
{
|
||||
if (TitleTextBox.Text.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1)
|
||||
return true;
|
||||
|
||||
if (HelpTextBox.Text.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1)
|
||||
return true;
|
||||
|
||||
if (ValueTextBox.Text.IndexOf(search, StringComparison.InvariantCultureIgnoreCase) > -1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public Setting Setting => StringSetting;
|
||||
|
||||
public string? Text
|
||||
{
|
||||
get => StringSetting.Value;
|
||||
set => StringSetting.Value = value;
|
||||
}
|
||||
|
||||
void Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
switch (StringSetting.Type)
|
||||
{
|
||||
case "folder":
|
||||
{
|
||||
var dialog = new Forms.FolderBrowserDialog { InitialDirectory = ValueTextBox.Text };
|
||||
|
||||
if (dialog.ShowDialog() == Forms.DialogResult.OK)
|
||||
ValueTextBox.Text = dialog.SelectedPath;
|
||||
}
|
||||
break;
|
||||
case "color":
|
||||
using (var dialog = new Forms.ColorDialog())
|
||||
{
|
||||
dialog.FullOpen = true;
|
||||
|
||||
try
|
||||
{
|
||||
if (!string.IsNullOrEmpty(ValueTextBox.Text))
|
||||
{
|
||||
Color col = GetColor(ValueTextBox.Text);
|
||||
dialog.Color = System.Drawing.Color.FromArgb(col.A, col.R, col.G, col.B);
|
||||
}
|
||||
} catch {}
|
||||
|
||||
if (dialog.ShowDialog() == Forms.DialogResult.OK)
|
||||
ValueTextBox.Text = "#" + dialog.Color.ToArgb().ToString("X8");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ValueTextBox_TextChanged(object sender, TextChangedEventArgs e) => Update();
|
||||
|
||||
Color GetColor(string value)
|
||||
{
|
||||
if (value.Contains('/'))
|
||||
{
|
||||
string[] a = value.Split('/');
|
||||
|
||||
if (a.Length == 3)
|
||||
return Color.FromRgb(ToByte(a[0]), ToByte(a[1]), ToByte(a[2]));
|
||||
else if (a.Length == 4)
|
||||
return Color.FromArgb(ToByte(a[3]), ToByte(a[0]), ToByte(a[1]), ToByte(a[2]));
|
||||
}
|
||||
|
||||
return (Color)ColorConverter.ConvertFromString(value);
|
||||
|
||||
byte ToByte(string val) => Convert.ToByte(Convert.ToSingle(val, CultureInfo.InvariantCulture) * 255);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (StringSetting.Type == "color")
|
||||
{
|
||||
Color color = Colors.Transparent;
|
||||
|
||||
if (ValueTextBox.Text != "")
|
||||
try {
|
||||
color = GetColor(ValueTextBox.Text);
|
||||
} catch {}
|
||||
|
||||
ValueTextBox.Background = new SolidColorBrush(color);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user