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
|
||||
|
||||
### Added
|
||||
|
||||
* The Configuration GUI now has an “Apply” button.
|
||||
|
||||
## EliteAttack 8.4
|
||||
|
||||
### 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>
|
||||
</TabControl>
|
||||
<WrapPanel VerticalAlignment="Bottom" HorizontalAlignment="Right">
|
||||
<Button Name="cancelButton" Click="cancelButton_Click" Padding="5" Margin="5">Cancel</Button>
|
||||
<Button Name="okButton" Click="okButton_Click" Padding="5" Margin="5">OK</Button>
|
||||
<Button Name="applyButton" Click="ApplyButton_Click" Padding="5" Margin="5">Apply</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>
|
||||
</StackPanel>
|
||||
</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.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
@ -6,33 +25,27 @@ using System.Windows.Controls;
|
|||
namespace alterNERDtive
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for SettingsDialog.xaml
|
||||
/// Interaction logic for SettingsDialog.xaml.
|
||||
/// </summary>
|
||||
public partial class SettingsDialog : UserControl
|
||||
{
|
||||
private struct 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 readonly List<Setting> values = new List<Setting>();
|
||||
private util.Configuration config;
|
||||
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)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.InitializeComponent();
|
||||
|
||||
this.config = config;
|
||||
this.log = log;
|
||||
|
||||
foreach (TabItem tab in tabs.Items)
|
||||
foreach (TabItem tab in this.tabs.Items)
|
||||
{
|
||||
string profile = tab.Name;
|
||||
if (profile == "general")
|
||||
|
@ -57,7 +70,7 @@ namespace alterNERDtive
|
|||
checkBox.IsChecked = value;
|
||||
checkBox.VerticalAlignment = VerticalAlignment.Center;
|
||||
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.Content = option.Description;
|
||||
|
@ -76,7 +89,7 @@ namespace alterNERDtive
|
|||
TextBox input = new TextBox();
|
||||
input.Text = value.ToString();
|
||||
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);
|
||||
}
|
||||
|
@ -86,17 +99,11 @@ namespace alterNERDtive
|
|||
}
|
||||
}
|
||||
|
||||
private void cancelButton_Click(object sender, RoutedEventArgs e)
|
||||
private bool ApplySettings()
|
||||
{
|
||||
Window.GetWindow(this).Close();
|
||||
log.Log("Settings dialog cancelled.", util.LogLevel.DEBUG);
|
||||
}
|
||||
bool success = true;
|
||||
|
||||
private void okButton_Click(object sender, RoutedEventArgs reargs)
|
||||
{
|
||||
bool error = false;
|
||||
|
||||
foreach (Setting setting in values)
|
||||
foreach (Setting setting in this.values)
|
||||
{
|
||||
dynamic state = null;
|
||||
|
||||
|
@ -129,21 +136,51 @@ namespace alterNERDtive
|
|||
|
||||
if (state != setting.Value)
|
||||
{
|
||||
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.log.Log($@"Configuration changed via settings dialog: ""{setting.Profile}.{setting.Option.Name}"" → ""{state}""", util.LogLevel.DEBUG);
|
||||
this.config.SetConfig(setting.Profile, setting.Option.Name, state);
|
||||
}
|
||||
}
|
||||
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);
|
||||
error = true;
|
||||
this.log.Log($@"Invalid value for ""{setting.Profile}.{setting.Option.Name}"": ""{((TextBox)setting.UiElement).Text}""", util.LogLevel.ERROR);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
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>
|
||||
<Compile Include="base.cs" />
|
||||
<Compile Include="edts.cs" />
|
||||
<Compile Include="GlobalSuppressions.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SettingsDialog.xaml.cs">
|
||||
<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