using BackupEssentials.Backup.Data; using System.Collections.Generic; using System.Configuration; using System.Windows; using System.Windows.Controls; namespace BackupEssentials.Pages{ public partial class Settings : Page, IPageShowData, IPageSwitchHandler{ private Properties.Settings AppSettings { get { return Properties.Settings.Default; } } private bool Changed = false; private Dictionary<string,bool> PropertiesChanged = new Dictionary<string,bool>(); // use dictionary in order to get an exception if a key is wrong public Settings(){ InitializeComponent(); foreach(SettingsProperty prop in AppSettings.Properties){ PropertiesChanged.Add(prop.Name,false); } AppSettings.PropertyChanged += (sender, args) => { Changed = true; PropertiesChanged[args.PropertyName] = true; UpdateButtons(); }; } void IPageShowData.OnShow(object data){ Changed = false; foreach(string key in new List<string>(PropertiesChanged.Keys))PropertiesChanged[key] = false; } bool IPageSwitchHandler.OnSwitch(){ if (Changed){ MessageBoxResult result = MessageBox.Show(App.Window,"You have changed the settings, do you want to save them?","Changed settings",MessageBoxButton.YesNoCancel); if (result == MessageBoxResult.Cancel)return true; else if (result == MessageBoxResult.Yes)SaveAndUpdate(); else AppSettings.Reload(); } return false; } private void ClickSave(object sender, RoutedEventArgs e){ SaveAndUpdate(); Changed = false; UpdateButtons(); } private void ClickCancel(object sender, RoutedEventArgs e){ AppSettings.Reload(); Changed = false; UpdateButtons(); } private void ClickReset(object sender, RoutedEventArgs e){ if (MessageBox.Show(App.Window,"Are you sure? This action cannot be taken back!","Reset settings",MessageBoxButton.YesNo) == MessageBoxResult.Yes){ AppSettings.Reset(); Changed = false; UpdateButtons(); } } private void UpdateButtons(){ ButtonSave.IsEnabled = ButtonCancel.IsEnabled = Changed; } private void SaveAndUpdate(){ AppSettings.Save(); if (PropertiesChanged["IntegrateWindowsExplorer"]){ if (AppSettings.IntegrateWindowsExplorer)ExplorerIntegration.Refresh(true); else ExplorerIntegration.Remove(); } foreach(string key in new List<string>(PropertiesChanged.Keys))PropertiesChanged[key] = false; } } }