private void MenuItem_Selected(object sender, EventArgs e) { // When a preset is selected store the current values of all known settings to compare against after applying the preset Dictionary <string, string> settingBeforeChange = new Dictionary <string, string>(); foreach (var keyName in PrinterSettings.KnownSettings) { settingBeforeChange.Add(keyName, printer.Settings.GetValue(keyName)); } var activeSettings = printer.Settings; MenuItem item = (MenuItem)sender; if (layerType == NamedSettingsLayers.Material) { if (activeSettings.ActiveMaterialKey != item.Value) { // Restore deactivated user overrides by iterating the Material preset we're coming off of activeSettings.RestoreConflictingUserOverrides(activeSettings.MaterialLayer); activeSettings.ActiveMaterialKey = item.Value; // Deactivate conflicting user overrides by iterating the Material preset we've just switched to activeSettings.DeactivateConflictingUserOverrides(activeSettings.MaterialLayer); } } else if (layerType == NamedSettingsLayers.Quality) { if (activeSettings.ActiveQualityKey != item.Value) { // Restore deactivated user overrides by iterating the Quality preset we're coming off of activeSettings.RestoreConflictingUserOverrides(activeSettings.QualityLayer); activeSettings.ActiveQualityKey = item.Value; // Deactivate conflicting user overrides by iterating the Quality preset we've just switched to activeSettings.DeactivateConflictingUserOverrides(activeSettings.QualityLayer); } } // Ensure that activated or deactivated user overrides are always persisted to disk activeSettings.Save(); UiThread.RunOnIdle(() => { foreach (var keyName in PrinterSettings.KnownSettings) { if (settingBeforeChange[keyName] != printer.Settings.GetValue(keyName)) { PrinterSettings.OnSettingChanged(keyName); } } }); editButton.Enabled = item.Text != defaultMenuItemText; }