108 lines
3.7 KiB
C#
108 lines
3.7 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|