Writing a generic SetValue

Improved GetValue to match
This commit is contained in:
Lars Brubaker 2023-06-08 12:21:10 -07:00
parent d70c8bacf8
commit 48b26b36a6
5 changed files with 43 additions and 20 deletions

View file

@ -69,12 +69,7 @@ namespace MatterHackers.MatterControl.DesignTools
{
get
{
if (UserSettings.Instance.get(UserSettingsKey.SupportMaxOverHangAngle) == null)
{
return 45;
}
var value = UserSettings.Instance.GetValue<double>(UserSettingsKey.SupportMaxOverHangAngle);
var value = UserSettings.Instance.GetValue<double>(UserSettingsKey.SupportMaxOverHangAngle, 45);
if (value < 0)
{
return 0;
@ -98,7 +93,7 @@ namespace MatterHackers.MatterControl.DesignTools
{
get
{
var value = UserSettings.Instance.GetValue<double>(UserSettingsKey.SupportPillarSize, "4");
var value = UserSettings.Instance.GetValue<double>(UserSettingsKey.SupportPillarSize, 4);
if (value < 1.5)
{
return 1.5;

View file

@ -142,7 +142,7 @@ namespace MatterHackers.MatterControl.Library.Export
{
var levelingCheckbox = new CheckBox("Apply leveling to G-Code during export".Localize(), theme.TextColor, 10)
{
Checked = UserSettings.Instance.GetValue<bool>(UserSettingsKey.ApplyLevelingDurringExport, "1"),
Checked = UserSettings.Instance.GetValue<bool>(UserSettingsKey.ApplyLevelingDurringExport, true),
Cursor = Cursors.Hand,
Margin = new BorderDouble(left: 10)
};
@ -340,7 +340,7 @@ namespace MatterHackers.MatterControl.Library.Export
{
try
{
var finalStream = GetExportStream(Printer, gCodeFileStream, UserSettings.Instance.GetValue<bool>(UserSettingsKey.ApplyLevelingDurringExport, "1"));
var finalStream = GetExportStream(Printer, gCodeFileStream, UserSettings.Instance.GetValue<bool>(UserSettingsKey.ApplyLevelingDurringExport, true));
var totalLines = gCodeFileStream.GCodeFile.LineCount;
var currentLine = 0;

View file

@ -633,12 +633,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
get
{
if (string.IsNullOrEmpty(UserSettings.Instance.get(UserSettingsKey.SnapGridDistance)))
{
return 1;
}
return UserSettings.Instance.GetValue<double>(UserSettingsKey.SnapGridDistance);
return UserSettings.Instance.GetValue<double>(UserSettingsKey.SnapGridDistance, 1);
}
set

View file

@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using g3;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl
{
@ -142,13 +145,13 @@ namespace MatterHackers.MatterControl
/// <typeparam name="T">The type of value being gotten</typeparam>
/// <param name="settingsKey">The name of the value to get</param>
/// <returns>The typed value</returns>
public T GetValue<T>(string settingsKey, string defaultValue = null) where T : IConvertible
public T GetValue<T>(string settingsKey, T defaultValue)
{
var settingValue = this.get(settingsKey);
if (settingValue == null)
{
settingValue = defaultValue;
return defaultValue;
}
if (typeof(T) == typeof(string))
@ -171,11 +174,41 @@ namespace MatterHackers.MatterControl
double.TryParse(settingValue, out double result);
return (T)(object)result;
}
else if (typeof(T) == typeof(Vector2))
{
var parts = settingValue.Split(new[] { 'X', ':', ',', 'Y', ':' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length == 2 && double.TryParse(parts[0].Trim(), out double x) && double.TryParse(parts[1].Trim(), out double y))
{
Vector2 result = new Vector2(x, y);
return (T)(object)result;
}
// Else, handle the case when the parsing fails...
}
return (T)default(T);
return (T)default(T);
}
public string get(string key)
public void SetValue<T>(string key, T value)
{
if (typeof(T) == typeof(bool))
{
set(key, ((bool)(object)value) ? "1" : "0");
}
else if (value is Vector2 vector)
{
set(key, $"X:{vector.X},Y:{vector.Y}");
}
else if (value is IConvertible convertible)
{
set(key, convertible.ToString(CultureInfo.InvariantCulture));
}
else
{
set(key, value.ToString());
}
}
public string get(string key)
{
UserSetting userSetting;
if (settingsDictionary.TryGetValue(key, out userSetting))

@ -1 +1 @@
Subproject commit f6071a2cb00286954d803ca28a4dc56749752e17
Subproject commit 42d628f0be7bf2f050f3d60cf6f7a55f92c9ad30