alterNERDtive-base: configuration GUI now has an “Apply” button
This commit is contained in:
parent
e73b8c04f9
commit
999d2b6883
6 changed files with 103 additions and 36 deletions
|
@ -1,5 +1,9 @@
|
||||||
# devel
|
# devel
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
* The Configuration GUI now has an “Apply” button.
|
||||||
|
|
||||||
## EliteAttack 8.4
|
## EliteAttack 8.4
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
8
plugins/VoiceAttack-base/GlobalSuppressions.cs
Normal file
8
plugins/VoiceAttack-base/GlobalSuppressions.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
// This file is used by Code Analysis to maintain SuppressMessage
|
||||||
|
// attributes that are applied to this project.
|
||||||
|
// Project-level suppressions either have no target or are given
|
||||||
|
// a specific target and scoped to a namespace, type, member, etc.
|
||||||
|
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
|
[assembly: SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "<Pending>", Scope = "namespace", Target = "~N:alterNERDtive")]
|
|
@ -16,8 +16,9 @@
|
||||||
<TabItem Name="StreamAttack" Header="StreamAttack"></TabItem>
|
<TabItem Name="StreamAttack" Header="StreamAttack"></TabItem>
|
||||||
</TabControl>
|
</TabControl>
|
||||||
<WrapPanel VerticalAlignment="Bottom" HorizontalAlignment="Right">
|
<WrapPanel VerticalAlignment="Bottom" HorizontalAlignment="Right">
|
||||||
<Button Name="cancelButton" Click="cancelButton_Click" Padding="5" Margin="5">Cancel</Button>
|
<Button Name="applyButton" Click="ApplyButton_Click" Padding="5" Margin="5">Apply</Button>
|
||||||
<Button Name="okButton" Click="okButton_Click" Padding="5" Margin="5">OK</Button>
|
<Button Name="okButton" Click="OkButton_Click" Padding="5" Margin="5">Done</Button>
|
||||||
|
<Button Name="cancelButton" Click="CancelButton_Click" Padding="5" Margin="5">Cancel</Button>
|
||||||
</WrapPanel>
|
</WrapPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
using System;
|
// <copyright file="SettingsDialog.xaml.cs" company="alterNERDtive">
|
||||||
|
// Copyright 2019–2022 alterNERDtive.
|
||||||
|
//
|
||||||
|
// This file is part of alterNERDtive VoiceAttack profiles for Elite Dangerous.
|
||||||
|
//
|
||||||
|
// alterNERDtive VoiceAttack profiles for Elite Dangerous is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// alterNERDtive VoiceAttack profiles for Elite Dangerous is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with alterNERDtive VoiceAttack profiles for Elite Dangerous. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
// </copyright>
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
@ -6,33 +25,27 @@ using System.Windows.Controls;
|
||||||
namespace alterNERDtive
|
namespace alterNERDtive
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for SettingsDialog.xaml
|
/// Interaction logic for SettingsDialog.xaml.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class SettingsDialog : UserControl
|
public partial class SettingsDialog : UserControl
|
||||||
{
|
{
|
||||||
private struct Setting
|
private readonly List<Setting> values = new List<Setting>();
|
||||||
{
|
|
||||||
public string Profile { get; }
|
|
||||||
public dynamic Option { get; }
|
|
||||||
public dynamic Value { get; }
|
|
||||||
public dynamic UiElement { get; }
|
|
||||||
|
|
||||||
public Setting(string profile, dynamic option, dynamic value, dynamic uiElement)
|
|
||||||
=> (Profile, Option, Value, UiElement) = (profile, option, value, uiElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<Setting> values = new List<Setting>();
|
|
||||||
private util.Configuration config;
|
private util.Configuration config;
|
||||||
private util.VoiceAttackLog log;
|
private util.VoiceAttackLog log;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="SettingsDialog"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="config">The plugin Configuration.</param>
|
||||||
|
/// <param name="log">The plugin Log.</param>
|
||||||
public SettingsDialog(util.Configuration config, util.VoiceAttackLog log)
|
public SettingsDialog(util.Configuration config, util.VoiceAttackLog log)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
this.InitializeComponent();
|
||||||
|
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.log = log;
|
this.log = log;
|
||||||
|
|
||||||
foreach (TabItem tab in tabs.Items)
|
foreach (TabItem tab in this.tabs.Items)
|
||||||
{
|
{
|
||||||
string profile = tab.Name;
|
string profile = tab.Name;
|
||||||
if (profile == "general")
|
if (profile == "general")
|
||||||
|
@ -57,7 +70,7 @@ namespace alterNERDtive
|
||||||
checkBox.IsChecked = value;
|
checkBox.IsChecked = value;
|
||||||
checkBox.VerticalAlignment = VerticalAlignment.Center;
|
checkBox.VerticalAlignment = VerticalAlignment.Center;
|
||||||
row.Children.Add(checkBox);
|
row.Children.Add(checkBox);
|
||||||
values.Add(new Setting(profile, option, value, checkBox));
|
this.values.Add(new Setting(profile, option, value, checkBox));
|
||||||
|
|
||||||
Label label = new Label();
|
Label label = new Label();
|
||||||
label.Content = option.Description;
|
label.Content = option.Description;
|
||||||
|
@ -76,7 +89,7 @@ namespace alterNERDtive
|
||||||
TextBox input = new TextBox();
|
TextBox input = new TextBox();
|
||||||
input.Text = value.ToString();
|
input.Text = value.ToString();
|
||||||
row.Children.Add(input);
|
row.Children.Add(input);
|
||||||
values.Add(new Setting(profile, option, value, input));
|
this.values.Add(new Setting(profile, option, value, input));
|
||||||
|
|
||||||
panel.Children.Add(row);
|
panel.Children.Add(row);
|
||||||
}
|
}
|
||||||
|
@ -86,17 +99,11 @@ namespace alterNERDtive
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelButton_Click(object sender, RoutedEventArgs e)
|
private bool ApplySettings()
|
||||||
{
|
{
|
||||||
Window.GetWindow(this).Close();
|
bool success = true;
|
||||||
log.Log("Settings dialog cancelled.", util.LogLevel.DEBUG);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void okButton_Click(object sender, RoutedEventArgs reargs)
|
foreach (Setting setting in this.values)
|
||||||
{
|
|
||||||
bool error = false;
|
|
||||||
|
|
||||||
foreach (Setting setting in values)
|
|
||||||
{
|
{
|
||||||
dynamic state = null;
|
dynamic state = null;
|
||||||
|
|
||||||
|
@ -129,21 +136,51 @@ namespace alterNERDtive
|
||||||
|
|
||||||
if (state != setting.Value)
|
if (state != setting.Value)
|
||||||
{
|
{
|
||||||
log.Log($@"Configuration changed via settings dialog: ""{setting.Profile}.{setting.Option.Name}"" → ""{state}""", util.LogLevel.DEBUG);
|
this.log.Log($@"Configuration changed via settings dialog: ""{setting.Profile}.{setting.Option.Name}"" → ""{state}""", util.LogLevel.DEBUG);
|
||||||
config.SetConfig(setting.Profile, setting.Option.Name, state);
|
this.config.SetConfig(setting.Profile, setting.Option.Name, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) when (e is ArgumentNullException || e is FormatException || e is OverflowException)
|
catch (Exception e) when (e is ArgumentNullException || e is FormatException || e is OverflowException)
|
||||||
{
|
{
|
||||||
log.Log($@"Invalid value for ""{setting.Profile}.{setting.Option.Name}"": ""{((TextBox)setting.UiElement).Text}""", util.LogLevel.ERROR);
|
this.log.Log($@"Invalid value for ""{setting.Profile}.{setting.Option.Name}"": ""{((TextBox)setting.UiElement).Text}""", util.LogLevel.ERROR);
|
||||||
error = true;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!error)
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CancelButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Window.GetWindow(this).Close();
|
||||||
|
this.log.Log("Settings dialog cancelled.", util.LogLevel.DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OkButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (this.ApplySettings())
|
||||||
{
|
{
|
||||||
Window.GetWindow(this).Close();
|
Window.GetWindow(this).Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ApplyButton_Click(object sender, RoutedEventArgs reeargs)
|
||||||
|
{
|
||||||
|
this.ApplySettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
private struct Setting
|
||||||
|
{
|
||||||
|
public Setting(string profile, dynamic option, dynamic value, dynamic uiElement)
|
||||||
|
=> (this.Profile, this.Option, this.Value, this.UiElement) = (profile, option, value, uiElement);
|
||||||
|
|
||||||
|
public string Profile { get; }
|
||||||
|
|
||||||
|
public dynamic Option { get; }
|
||||||
|
|
||||||
|
public dynamic Value { get; }
|
||||||
|
|
||||||
|
public dynamic UiElement { get; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="base.cs" />
|
<Compile Include="base.cs" />
|
||||||
<Compile Include="edts.cs" />
|
<Compile Include="edts.cs" />
|
||||||
|
<Compile Include="GlobalSuppressions.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="SettingsDialog.xaml.cs">
|
<Compile Include="SettingsDialog.xaml.cs">
|
||||||
<DependentUpon>SettingsDialog.xaml</DependentUpon>
|
<DependentUpon>SettingsDialog.xaml</DependentUpon>
|
||||||
|
|
16
stylecop.json
Normal file
16
stylecop.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
|
||||||
|
"settings": {
|
||||||
|
"orderingRules": {
|
||||||
|
"usingDirectivesPlacement": "outsideNamespace"
|
||||||
|
},
|
||||||
|
"documentationRules": {
|
||||||
|
"companyName": "alterNERDtive",
|
||||||
|
"copyrightText": "Copyright {year} {companyName}.\n\nThis file is part of {application}.\n\n{application} is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\n{application} is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with {application}. If not, see <https://www.gnu.org/licenses/>.",
|
||||||
|
"variables": {
|
||||||
|
"application": "alterNERDtive VoiceAttack profiles for Elite Dangerous",
|
||||||
|
"year": "2019–2022"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue