diff --git a/GUI/v1a/ViewModels/ModSettingsScreenVM.cs b/GUI/v1a/ViewModels/ModSettingsScreenVM.cs index 638bad28..cd89020c 100644 --- a/GUI/v1a/ViewModels/ModSettingsScreenVM.cs +++ b/GUI/v1a/ViewModels/ModSettingsScreenVM.cs @@ -235,7 +235,7 @@ private void ExecuteRevert() tuple => { //Do action - tuple.SettingsInstance = SettingsDatabase.ResetSettingsInstance(SelectedMod.SettingsInstance); + tuple.SettingsInstance = SettingsDatabase.ResetSettings(SelectedMod.SettingsInstance.Id); tuple.VM.RefreshValues(); ExecuteSelect(null); ExecuteSelect(tuple.VM); @@ -243,7 +243,7 @@ private void ExecuteRevert() tuple => { //Undo action - SettingsDatabase.OverrideSettingsWithId(tuple.SettingsInstance, tuple.SettingsInstance.Id); + SettingsDatabase.OverrideSettings(tuple.SettingsInstance); tuple.VM.SettingsInstance = tuple.SettingsInstance; tuple.VM.RefreshValues(); if (SelectedMod == tuple.VM) diff --git a/GUI/v1a/ViewModels/ModSettingsVM.cs b/GUI/v1a/ViewModels/ModSettingsVM.cs index a1cab33b..7d67927a 100644 --- a/GUI/v1a/ViewModels/ModSettingsVM.cs +++ b/GUI/v1a/ViewModels/ModSettingsVM.cs @@ -21,7 +21,11 @@ public SettingsBase SettingsInstance set => ModSettingsDefinition.SettingsInstance = value; } public UndoRedoStack URS { get; } = new UndoRedoStack(); - + /// <summary> + /// XSLT? + /// </summary> + [DataSourceProperty] + public int UIVersion => SettingsInstance.UIVersion; [DataSourceProperty] public string ModName => SettingsInstance.ModName; [DataSourceProperty] diff --git a/Interfaces/ISettingsProvider.cs b/Interfaces/ISettingsProvider.cs index d70601dd..5053d35a 100644 --- a/Interfaces/ISettingsProvider.cs +++ b/Interfaces/ISettingsProvider.cs @@ -11,7 +11,7 @@ public interface ISettingsProvider bool RegisterSettings(SettingsBase settingsClass); SettingsBase? GetSettings(string uniqueId); void SaveSettings(SettingsBase settingsInstance); - bool OverrideSettingsWithId(SettingsBase settings, string Id); - SettingsBase ResetSettingsInstance(SettingsBase settingsInstance); + bool OverrideSettings(SettingsBase settings); + SettingsBase ResetSettings(string id); } } \ No newline at end of file diff --git a/MBOptionScreen.csproj b/MBOptionScreen.csproj index f376a941..f7ca4b52 100644 --- a/MBOptionScreen.csproj +++ b/MBOptionScreen.csproj @@ -14,7 +14,7 @@ <PackageId>Bannerlord.MBOptionScreen</PackageId> <IncludeSymbols>true</IncludeSymbols> <SymbolPackageFormat>snupkg</SymbolPackageFormat> - <Version>1.1.0</Version> + <Version>1.1.1</Version> </PropertyGroup> <ItemGroup> diff --git a/Settings/AttributeSettingsBase.cs b/Settings/AttributeSettingsBase.cs index fa61903d..0e92e3f0 100644 --- a/Settings/AttributeSettingsBase.cs +++ b/Settings/AttributeSettingsBase.cs @@ -9,6 +9,8 @@ namespace MBOptionScreen.Settings { public abstract class AttributeSettings<T> : SettingsBase<T> where T : SettingsBase, new() { + protected override char SubGroupDelimiter => '/'; + public override List<SettingPropertyGroupDefinition> GetSettingPropertyGroups() { var groups = new List<SettingPropertyGroupDefinition>(); diff --git a/Settings/SettingsBase.cs b/Settings/SettingsBase.cs index 3099d9ef..73dac5a1 100644 --- a/Settings/SettingsBase.cs +++ b/Settings/SettingsBase.cs @@ -27,6 +27,7 @@ public abstract class SettingsBase public abstract string Id { get; set; } public abstract string ModuleFolderName { get; } public abstract string ModName { get; } + public virtual int UIVersion => 1; public virtual string SubFolder => ""; protected virtual char SubGroupDelimiter => '/'; diff --git a/Settings/SettingsDatabase.cs b/Settings/SettingsDatabase.cs index 9037928d..a48287f4 100644 --- a/Settings/SettingsDatabase.cs +++ b/Settings/SettingsDatabase.cs @@ -16,8 +16,8 @@ internal static class SettingsDatabase public static void SaveSettings(SettingsBase settingsInstance) => SettingsStorage.SaveSettings(settingsInstance); - public static bool OverrideSettingsWithId(SettingsBase settings, string Id) => SettingsStorage.OverrideSettingsWithId(settings, Id); + public static bool OverrideSettings(SettingsBase settings) => SettingsStorage.OverrideSettings(settings); - public static SettingsBase ResetSettingsInstance(SettingsBase settingsInstance) => SettingsStorage.ResetSettingsInstance(settingsInstance); + public static SettingsBase ResetSettings(string id) => SettingsStorage.ResetSettings(id); } } \ No newline at end of file diff --git a/Settings/SimpleJsonSettingsProvider.cs b/Settings/SimpleJsonSettingsProvider.cs index 71d618e3..c5ac0174 100644 --- a/Settings/SimpleJsonSettingsProvider.cs +++ b/Settings/SimpleJsonSettingsProvider.cs @@ -59,8 +59,7 @@ public bool RegisterSettings(SettingsBase settingsInstance) LoadedSettings.Add(settingsInstance.Id, settingsInstance); - var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, - $"{settingsInstance.Id}.json"); + var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, settingsInstance.SubFolder ?? "", $"{settingsInstance.Id}.json"); var file = new FileInfo(path); if (file.Exists) { @@ -88,7 +87,7 @@ public void SaveSettings(SettingsBase settingsInstance) if (settingsInstance == null || !LoadedSettings.ContainsKey(settingsInstance.Id)) return; - var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, $"{settingsInstance.Id}.json"); + var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, settingsInstance.SubFolder ?? "", $"{settingsInstance.Id}.json"); var file = new FileInfo(path); var content = JsonConvert.SerializeObject(settingsInstance, _jsonSerializerSettings); @@ -97,22 +96,24 @@ public void SaveSettings(SettingsBase settingsInstance) writer.Write(content); } - public bool OverrideSettingsWithId(SettingsBase newSettingsInstance, string id) + public bool OverrideSettings(SettingsBase newSettingsInstance) { if (newSettingsInstance == null || !LoadedSettings.ContainsKey(newSettingsInstance.Id)) return false; - LoadedSettings[id] = newSettingsInstance; + LoadedSettings[newSettingsInstance.Id] = newSettingsInstance; + SaveSettings(newSettingsInstance); return true; } - public SettingsBase ResetSettingsInstance(SettingsBase settingsInstance) + public SettingsBase ResetSettings(string id) { - if (settingsInstance == null || !LoadedSettings.ContainsKey(settingsInstance.Id)) + if (!LoadedSettings.ContainsKey(id)) return null; - var defaultSettingsInstance = (SettingsBase) Activator.CreateInstance(settingsInstance.GetType()); - LoadedSettings[settingsInstance.Id] = defaultSettingsInstance; + var defaultSettingsInstance = (SettingsBase) Activator.CreateInstance(LoadedSettings[id].GetType()); + LoadedSettings[id] = defaultSettingsInstance; + SaveSettings(defaultSettingsInstance); return defaultSettingsInstance; } diff --git a/Settings/Wrapper/WrapperSettings.cs b/Settings/Wrapper/WrapperSettings.cs index 7b359d6b..48953223 100644 --- a/Settings/Wrapper/WrapperSettings.cs +++ b/Settings/Wrapper/WrapperSettings.cs @@ -17,11 +17,17 @@ internal class WrapperSettings : SettingsBase private PropertyInfo IdProperty { get; } private PropertyInfo ModuleFolderNameProperty { get; } private PropertyInfo ModNameProperty { get; } + private PropertyInfo UIVersionProperty { get; } + private PropertyInfo SubFolderProperty { get; } + private PropertyInfo SubGroupDelimiterProperty { get; } public override string Id { get => (string) IdProperty.GetValue(_object); set => IdProperty.SetValue(_object, value); } public override string ModuleFolderName => (string) ModuleFolderNameProperty.GetValue(_object); public override string ModName => (string) ModNameProperty.GetValue(_object); + public override int UIVersion => UIVersionProperty.GetValue(_object) as int? ?? 1; + public override string SubFolder => SubFolderProperty.GetValue(_object) as string ?? ""; + protected override char SubGroupDelimiter => SubGroupDelimiterProperty.GetValue(_object) as char? ?? '/'; public WrapperSettings(object @object) { @@ -31,6 +37,9 @@ public WrapperSettings(object @object) type.GetProperty("ID", BindingFlags.Instance | BindingFlags.Public); ModuleFolderNameProperty = type.GetProperty("ModuleFolderName", BindingFlags.Instance | BindingFlags.Public); ModNameProperty = type.GetProperty("ModName", BindingFlags.Instance | BindingFlags.Public); + UIVersionProperty = type.GetProperty("UIVersion", BindingFlags.Instance | BindingFlags.Public); + SubFolderProperty = type.GetProperty("SubFolder", BindingFlags.Instance | BindingFlags.Public); + SubGroupDelimiterProperty = type.GetProperty("SubGroupDelimiter", BindingFlags.Instance | BindingFlags.Public); } public override List<SettingPropertyGroupDefinition> GetSettingPropertyGroups()