feat: settings, installer banner

This commit is contained in:
2026-03-09 17:48:11 +01:00
parent 6958781dec
commit f2e4addbb0
14 changed files with 5124 additions and 42 deletions

View File

@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CarManagerV3.Forms
{
public partial class SettingsForm : Form
{
// Settings map (Maps settings to controls and default values + optional change event handler function that takes previous and new value)
private Dictionary<string, (Control control, string defaultValue, Action<string, string> onChange)> settingsMap = new Dictionary<string, (Control control, string defaultValue, Action<string, string> onChange)>();
public SettingsForm()
{
InitializeComponent();
initializeSettingsMap();
}
private void initializeSettingsMap()
{
// Initialize the settings map with setting keys, associated controls, default values, and optional change event handlers
settingsMap["DataLocation"] = (tbxDataLocation, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\CarManagerV3", (string before, string after) =>
{
// TODO
}
);
}
private void SettingsForm_Load(object sender, EventArgs e)
{
loadSettings();
}
private void loadSettings()
{
// with settings map
foreach (var setting in settingsMap)
{
string key = setting.Key;
Control control = setting.Value.control;
string value = Properties.Settings.Default[key]?.ToString() ?? string.Empty;
control.Text = value;
}
}
private void saveSettings()
{
// Save settings using the settings map
foreach (var setting in settingsMap)
{
string key = setting.Key;
Control control = setting.Value.control;
string value = control.Text;
string oldValue = Properties.Settings.Default[key]?.ToString() ?? string.Empty;
// Save the value to application settings
Properties.Settings.Default[key] = value;
// Invoke the change event handler if it exists and the value has changed
if (setting.Value.onChange != null && oldValue != value)
{
setting.Value.onChange(oldValue, value);
}
}
Properties.Settings.Default.Save();
}
private void resetSettings()
{
DialogResult confirmReset = MessageBox.Show("Are you sure you want to reset all settings to their default values? This action cannot be undone.", "Confirm Reset", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if(confirmReset != DialogResult.Yes)
{
return;
}
// Reset settings to default values using the settings map
foreach (var setting in settingsMap)
{
string key = setting.Key;
string defaultValue = setting.Value.defaultValue;
// Reset the value to default in application settings
Properties.Settings.Default[key] = defaultValue;
}
Properties.Settings.Default.Save();
loadSettings();
}
private void btnAccept_Click(object sender, EventArgs e)
{
saveSettings();
this.Close();
}
private void btnDiscard_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnReset_Click(object sender, EventArgs e)
{
resetSettings();
}
}
}