This commit is contained in:
Frank Skare
2019-03-25 09:50:14 +01:00
parent 8a6659b1bf
commit 07b6d4379e
30 changed files with 2870 additions and 77 deletions

View File

@@ -0,0 +1,107 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using Tommy;
namespace DynamicGUI
{
public class Settings
{
public static List<SettingBase> LoadSettings(string filepath)
{
TomlTable table;
using (StreamReader reader = new StreamReader(File.OpenRead(filepath)))
table = TOML.Parse(reader);
List<SettingBase> settingsList = new List<SettingBase>();
foreach (TomlTable setting in table["settings"])
{
SettingBase baseSetting = null;
if (setting.HasKey("options"))
{
OptionSetting optionSetting = new OptionSetting();
baseSetting = optionSetting;
optionSetting.Default = setting["default"];
optionSetting.Value = optionSetting.Default;
foreach (TomlTable option in setting["options"])
{
var opt = new OptionSettingOption();
opt.Name = option["name"];
if (option.HasKey("help"))
opt.Help = option["help"];
if (option.HasKey("text"))
opt.Text = option["text"];
opt.OptionSetting = optionSetting;
optionSetting.Options.Add(opt);
}
}
else if (setting["default"].IsString)
{
StringSetting stringSetting = new StringSetting();
baseSetting = stringSetting;
stringSetting.Default = setting["default"];
if (setting.HasKey("folder")) stringSetting.IsFolder = true;
}
baseSetting.Name = setting["name"];
if (setting.HasKey("help")) baseSetting.Help = setting["help"];
if (setting.HasKey("alias")) baseSetting.Alias = setting["alias"];
if (setting.HasKey("width")) baseSetting.Width = setting["width"];
settingsList.Add(baseSetting);
}
return settingsList;
}
}
public abstract class SettingBase
{
public string Name { get; set; }
public string Alias { get; set; }
public string Help { get; set; }
public string HelpURL { get; set; }
public int Width { get; set; }
}
public class StringSetting : SettingBase
{
public string Default { get; set; }
public string Value { get; set; }
public bool IsFolder { get; set; }
}
public class OptionSetting : SettingBase
{
public string Default { get; set; }
public string Value { get; set; }
public List<OptionSettingOption> Options = new List<OptionSettingOption>();
}
public class OptionSettingOption
{
public string Name { get; set; }
public string Help { get; set; }
public OptionSetting OptionSetting { get; set; }
private string _Text;
public string Text
{
get => string.IsNullOrEmpty(_Text) ? Name : _Text;
set => _Text = value;
}
//private bool _IsChecked;
public bool IsChecked
{
get => OptionSetting.Value == Name ;
set {
if (value)
OptionSetting.Value = Name;
}
}
}
}

View File

@@ -0,0 +1,7 @@
namespace DynamicGUI
{
interface ISearch
{
bool Contains(string searchString);
}
}

View File

@@ -0,0 +1,25 @@
<UserControl x:Name="OptionSettingControl1" x:Class="DynamicGUI.OptionSettingControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DynamicGUI"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Margin="20,0">
<WrapPanel Orientation="Vertical">
<TextBox x:Name="TitleTextBox" FontSize="20" Margin="0,0,0,10" BorderThickness="0" IsReadOnly="True"></TextBox>
<ItemsControl x:Name="ItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<WrapPanel Orientation="Vertical">
<RadioButton x:Name="RadioButton" VerticalContentAlignment="Center" IsChecked="{Binding IsChecked}" GroupName="{Binding OptionSetting.Name}" Content="{Binding Text}" FontSize="16" FontWeight="Normal" VerticalAlignment="Top"></RadioButton>
<TextBox x:Name="ItemHelpTextBox" TextWrapping="WrapWithOverflow" Text="{Binding Help}" Margin="10,0,0,0" BorderThickness="0" IsReadOnly="True" Padding="7,0,0,0" MinHeight="0"></TextBox>
</WrapPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBox x:Name="HelpTextBox" TextWrapping="WrapWithOverflow" Margin="0,10" BorderThickness="0" IsReadOnly="True" Padding="0"></TextBox>
</WrapPanel>
</Grid>
</UserControl>

View File

@@ -0,0 +1,36 @@
using DynamicGUI;
using System.Windows.Controls;
namespace DynamicGUI
{
public partial class OptionSettingControl : UserControl, ISearch
{
private OptionSetting OptionSetting;
public OptionSettingControl(OptionSetting optionSetting)
{
OptionSetting = optionSetting;
InitializeComponent();
TitleTextBox.Text = optionSetting.Name;
HelpTextBox.Text = optionSetting.Help;
ItemsControl.ItemsSource = optionSetting.Options;
}
private string _SearchableText;
public string SearchableText {
get {
if (_SearchableText is null)
{
_SearchableText = TitleTextBox.Text + HelpTextBox.Text;
foreach (var i in OptionSetting.Options)
_SearchableText += i.Text + i.Help + i.Name;
_SearchableText = _SearchableText.ToLower();
}
return _SearchableText;
}
}
public bool Contains(string searchString) => SearchableText.Contains(searchString.ToLower());
}
}

View File

@@ -0,0 +1,24 @@
<UserControl x:Name="StringSettingControl1" x:Class="DynamicGUI.StringSettingControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DynamicGUI"
mc:Ignorable="d"
d:DesignHeight="450"
d:DesignWidth="800" >
<Grid Margin="20,0">
<WrapPanel Orientation="Vertical">
<TextBox x:Name="TitleTextBox" FontSize="20" Margin="0,0,0,10" BorderThickness="0" IsReadOnly="True"></TextBox>
<Grid Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox x:Name="ValueTextBox" Text="{Binding Path=Text, ElementName=StringSettingControl1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="150" HorizontalAlignment="Left" Height="20"/>
<Button x:Name="Button" Height="20" Grid.Column="1" Visibility="{Binding Path=Text, ElementName=StringSettingControl1}" Margin="5,0,0,0" Width="20" Click="Button_Click">...</Button>
</Grid>
<TextBox x:Name="HelpTextBox" TextWrapping="WrapWithOverflow" Margin="0,0,0,10" BorderThickness="0" IsReadOnly="True"></TextBox>
</WrapPanel>
</Grid>
</UserControl>

View File

@@ -0,0 +1,54 @@
using System.Windows;
using System.Windows.Controls;
namespace DynamicGUI
{
public partial class StringSettingControl : UserControl, ISearch
{
private StringSetting StringSetting;
public StringSettingControl(StringSetting stringSetting)
{
StringSetting = stringSetting;
InitializeComponent();
TitleTextBox.Text = stringSetting.Name;
HelpTextBox.Text = stringSetting.Help;
ValueTextBox.Text = stringSetting.Value;
if (stringSetting.Width > 0)
ValueTextBox.Width = stringSetting.Width;
if (!StringSetting.IsFolder)
Button.Visibility = Visibility.Hidden;
}
private string _SearchableText;
public string SearchableText {
get {
if (_SearchableText is null)
_SearchableText = (TitleTextBox.Text + HelpTextBox.Text +ValueTextBox.Text).ToLower();
return _SearchableText;
}
}
public bool Contains(string searchString) => SearchableText.Contains(searchString.ToLower());
public string Text
{
get => StringSetting.Value;
set => StringSetting.Value = value;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
using (var d = new System.Windows.Forms.FolderBrowserDialog())
{
d.Description = "Choose a folder.";
d.SelectedPath = ValueTextBox.Text;
if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
ValueTextBox.Text = d.SelectedPath;
}
}
}
}

File diff suppressed because it is too large Load Diff