Files
mpv.net/src/MpvNet.Windows/WPF/Controls/StringSettingControl.xaml.cs
stax76 86c823bfde misc
2023-12-24 07:34:12 +01:00

132 lines
3.9 KiB
C#

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;
if (string.IsNullOrEmpty(stringSetting.Help))
HelpTextBox.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);
}
}
}