Add ImportSettings page for new import behavior
- Move ClearUserOverrides to SettingsProfile
This commit is contained in:
parent
de4fa248a0
commit
20bb5efdd4
6 changed files with 252 additions and 99 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue