feat: settings, installer banner
This commit is contained in:
107
CarManagerV3/Forms/SettingsForm.cs
Normal file
107
CarManagerV3/Forms/SettingsForm.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user