Add ImportSettings page for new import behavior

- Move ClearUserOverrides to SettingsProfile
This commit is contained in:
John Lewin 2016-06-11 16:24:30 -07:00
parent de4fa248a0
commit 20bb5efdd4
6 changed files with 252 additions and 99 deletions

View file

@ -248,6 +248,54 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
}
internal static void ImportFromExisting(string settingsFilePath)
{
if (string.IsNullOrEmpty(settingsFilePath) || !File.Exists(settingsFilePath))
{
return;
}
var printerIdentifier = new PrinterInfo
{
Name = Path.GetFileNameWithoutExtension(settingsFilePath),
Id = Guid.NewGuid().ToString()
};
string importType = Path.GetExtension(settingsFilePath).ToLower();
switch (importType)
{
case ".printer":
var profile = LoadProfileFromDisk(settingsFilePath);
profile.ID = Guid.NewGuid().ToString();
break;
case ".ini":
var settingsToImport = SettingsLayer.LoadFromIni(settingsFilePath);
var oemProfile = new OemProfile(settingsToImport);
SettingsLayer baseConfig = LoadMatterHackersBaseLayer();
var layeredProfile = new LayeredProfile(oemProfile, baseConfig)
{
ID = printerIdentifier.Id,
DocumentPath = Path.Combine(profilesPath, printerIdentifier.Id + ".json")
};
// TODO: Resolve name conflicts
layeredProfile.UserLayer["MatterControl.PrinterName"] = printerIdentifier.Name;
layeredProfile.Save();
break;
}
ProfileData.Profiles.Add(printerIdentifier);
UserSettings.Instance.set("ActiveProfileID", printerIdentifier.Id);
Instance = LoadProfile(printerIdentifier.Id);
}
internal static void AcquireNewProfile(string make, string model, string printerName)
{
string guid = Guid.NewGuid().ToString();

View file

@ -65,7 +65,17 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
layeredProfile = profile;
}
public string ID => layeredProfile.ID;
public string ID
{
get
{
return layeredProfile.ID;
}
set
{
layeredProfile.ID = value;
}
}
public SettingsLayer BaseLayer => layeredProfile.BaseLayer;
@ -146,6 +156,39 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
}
public void ClearUserOverrides()
{
var userOverrides = this.UserLayer.Keys.ToArray();
// Leave user layer items that have no Organizer definition and thus cannot be changed by the user
var keysToRetain = new HashSet<string>(userOverrides.Except(this.KnownSettings));
foreach (var item in SliceSettingsOrganizer.Instance.SettingsData.Where(settingsItem => !settingsItem.ShowAsOverride))
{
switch (item.SlicerConfigName)
{
case "MatterControl.BaudRate":
case "MatterControl.AutoConnect":
// These items are marked as not being overrides but should be cleared on 'reset to defaults'
break;
default:
// All other non-overrides should be retained
keysToRetain.Add(item.SlicerConfigName);
break;
}
}
var keysToRemove = (from keyValue in this.UserLayer
where !keysToRetain.Contains(keyValue.Key)
select keyValue.Key).ToList();
foreach (string key in keysToRemove)
{
this.UserLayer.Remove(key);
}
}
internal void SaveChanges()
{
layeredProfile.Save();