diff --git a/MBS.Framework/Setting.cs b/MBS.Framework/Setting.cs index 33d01e3..c3d4789 100644 --- a/MBS.Framework/Setting.cs +++ b/MBS.Framework/Setting.cs @@ -23,7 +23,7 @@ using System.Collections.Generic; namespace MBS.Framework { - public abstract class Setting + public abstract class Setting : ICloneable { public Setting(string name, string title, object defaultValue = null, bool enabled = true, bool visible = true) { @@ -168,10 +168,13 @@ namespace MBS.Framework return defaultValue; } } + public void SetValue(T value) { mvarValue = value; _valueSet = true; } + + public abstract object Clone(); } } diff --git a/MBS.Framework/Settings/BooleanSetting.cs b/MBS.Framework/Settings/BooleanSetting.cs index a96897f..5392fdd 100644 --- a/MBS.Framework/Settings/BooleanSetting.cs +++ b/MBS.Framework/Settings/BooleanSetting.cs @@ -36,5 +36,18 @@ namespace MBS.Framework.Settings } base.SetValue(val); } + + public override object Clone() + { + BooleanSetting clone = new BooleanSetting(Name, Title, (bool)DefaultValue, Enabled, Visible); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/ChoiceSetting.cs b/MBS.Framework/Settings/ChoiceSetting.cs index 61a23e0..cd07201 100644 --- a/MBS.Framework/Settings/ChoiceSetting.cs +++ b/MBS.Framework/Settings/ChoiceSetting.cs @@ -82,5 +82,20 @@ namespace MBS.Framework.Settings public bool RequireSelectionFromList { get; set; } = true; public bool MultipleSelect { get; set; } = false; + + public override object Clone() + { + ChoiceSetting clone = new ChoiceSetting(Name, Title, DefaultValue); + clone.SelectedValue = SelectedValue; + clone.Required = Required; + clone.Prefix = Prefix; + clone.RequireSelectionFromList = RequireSelectionFromList; + clone.MultipleSelect = MultipleSelect; + clone.Suffix = Suffix; + clone.Description = Description; + + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/CollectionSetting.cs b/MBS.Framework/Settings/CollectionSetting.cs index 7e3758b..bef116a 100644 --- a/MBS.Framework/Settings/CollectionSetting.cs +++ b/MBS.Framework/Settings/CollectionSetting.cs @@ -28,13 +28,32 @@ namespace MBS.Framework.Settings public string SingularItemTitle { get; set; } = null; - public CollectionSetting(string name, string title, SettingsGroup group, string singularItemTitle = null) : base(name, title, null) + public CollectionSetting(string name, string title, SettingsGroup group = null, string singularItemTitle = null) : base(name, title, null) { - for (int i = 0; i < group.Settings.Count; i++) + if (group != null) { - Settings.Add(group.Settings[i]); + for (int i = 0; i < group.Settings.Count; i++) + { + Settings.Add(group.Settings[i]); + } } SingularItemTitle = singularItemTitle; } + + public override object Clone() + { + CollectionSetting clone = new CollectionSetting(Name, Title); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + foreach (Setting setting in Settings) + { + clone.Settings.Add(setting.Clone() as Setting); + } + return clone; + } } } diff --git a/MBS.Framework/Settings/CommandSetting.cs b/MBS.Framework/Settings/CommandSetting.cs index 019872e..745e479 100644 --- a/MBS.Framework/Settings/CommandSetting.cs +++ b/MBS.Framework/Settings/CommandSetting.cs @@ -30,5 +30,17 @@ namespace MBS.Framework.Settings { CommandID = commandID; } + + public override object Clone() + { + CommandSetting clone = new CommandSetting(Name, Title, CommandID) { StylePreset = StylePreset }; + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + return clone; + } } } diff --git a/MBS.Framework/Settings/CustomSetting.cs b/MBS.Framework/Settings/CustomSetting.cs index 9e9b04a..a535da0 100644 --- a/MBS.Framework/Settings/CustomSetting.cs +++ b/MBS.Framework/Settings/CustomSetting.cs @@ -33,5 +33,18 @@ namespace MBS.Framework.Settings { base.SetValue(value); } + + public override object Clone() + { + CustomSetting clone = new CustomSetting(Name, Title, ControlTypeName); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/FileSetting.cs b/MBS.Framework/Settings/FileSetting.cs index 0b70671..e1ef07c 100644 --- a/MBS.Framework/Settings/FileSetting.cs +++ b/MBS.Framework/Settings/FileSetting.cs @@ -51,5 +51,18 @@ namespace MBS.Framework.Settings RequireExistingFile = requireExistingFile; FileNameFilter = fileNameFilter; } + + public override object Clone() + { + FileSetting clone = new FileSetting(Name, Title, (string)DefaultValue, RequireExistingFile, FileNameFilter); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/GroupSetting.cs b/MBS.Framework/Settings/GroupSetting.cs index 8718887..de962f3 100644 --- a/MBS.Framework/Settings/GroupSetting.cs +++ b/MBS.Framework/Settings/GroupSetting.cs @@ -69,5 +69,26 @@ namespace MBS.Framework.Settings } return null; } + + public override object Clone() + { + GroupSetting clone = new GroupSetting(Name, Title); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + foreach (Setting setting in HeaderSettings) + { + clone.HeaderSettings.Add(setting.Clone() as Setting); + } + foreach (Setting setting in Options) + { + clone.Options.Add(setting.Clone() as Setting); + } + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/RangeSetting.cs b/MBS.Framework/Settings/RangeSetting.cs index 21518a3..bf21342 100644 --- a/MBS.Framework/Settings/RangeSetting.cs +++ b/MBS.Framework/Settings/RangeSetting.cs @@ -29,8 +29,22 @@ namespace MBS.Framework.Settings public RangeSetting(string name, string title, decimal defaultValue = 0.0M, decimal? minimumValue = null, decimal? maximumValue = null) : base(name, title, defaultValue) { + DefaultValue = defaultValue; MinimumValue = minimumValue; MaximumValue = maximumValue; } + + public override object Clone() + { + RangeSetting clone = new RangeSetting(Name, Title, (decimal)DefaultValue, MinimumValue, MaximumValue); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/TextSetting.cs b/MBS.Framework/Settings/TextSetting.cs index 8968b8b..12d7601 100644 --- a/MBS.Framework/Settings/TextSetting.cs +++ b/MBS.Framework/Settings/TextSetting.cs @@ -29,5 +29,18 @@ namespace MBS.Framework.Settings { MaximumLength = maxLength; } + + public override object Clone() + { + TextSetting clone = new TextSetting(Name, Title, (string)DefaultValue, MaximumLength); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/Settings/VersionSetting.cs b/MBS.Framework/Settings/VersionSetting.cs index df48c56..3db5740 100644 --- a/MBS.Framework/Settings/VersionSetting.cs +++ b/MBS.Framework/Settings/VersionSetting.cs @@ -29,5 +29,18 @@ namespace MBS.Framework.Settings { ComponentCount = componentCount; } + + public override object Clone() + { + VersionSetting clone = new VersionSetting(Name, Title, (Version)DefaultValue, ComponentCount); + clone.Required = Required; + clone.Prefix = Prefix; + clone.Description = Description; + clone.Enabled = Enabled; + clone.Visible = Visible; + clone.Suffix = Suffix; + clone.SetValue(GetValue()); + return clone; + } } } diff --git a/MBS.Framework/SettingsGroup.cs b/MBS.Framework/SettingsGroup.cs index a0b0d04..6e73054 100644 --- a/MBS.Framework/SettingsGroup.cs +++ b/MBS.Framework/SettingsGroup.cs @@ -24,7 +24,7 @@ using MBS.Framework.Settings; namespace MBS.Framework { - public class SettingsGroup : IComparable + public class SettingsGroup : IComparable, ICloneable { public class SettingsGroupCollection : System.Collections.ObjectModel.Collection @@ -166,5 +166,18 @@ namespace MBS.Framework { return String.Join (":", Path); } + + public object Clone() + { + SettingsGroup clone = new SettingsGroup(); + clone.ID = ID; + clone.Path = Path?.Clone() as string[]; + clone.Priority = Priority; + foreach (Setting setting in Settings) + { + clone.Settings.Add(setting.Clone() as Setting); + } + return clone; + } } } diff --git a/MBS.Framework/SettingsProvider.cs b/MBS.Framework/SettingsProvider.cs index 05a388e..bab9a5b 100644 --- a/MBS.Framework/SettingsProvider.cs +++ b/MBS.Framework/SettingsProvider.cs @@ -111,5 +111,13 @@ namespace MBS.Framework return count; } } + + public void CopyTo(SettingsProvider other) + { + foreach (SettingsGroup group in SettingsGroups) + { + other.SettingsGroups.Add(group.Clone() as SettingsGroup); + } + } } }