Aragas/Bannerlord.MBOptionScreen

View on GitHub
src/MCM.Abstractions/FluentBuilder/ISettingsBuilder.cs

Summary

Maintainability
A
0 mins
Test Coverage
using MCM.Abstractions.Base;
using MCM.Abstractions.Base.Global;
using MCM.Abstractions.Base.PerCampaign;
using MCM.Abstractions.Base.PerSave;

using System;
using System.ComponentModel;

namespace MCM.Abstractions.FluentBuilder
{
    /// <summary>
    /// An interface that defines the necessary members for implementing a settings builder.
    /// </summary>
#if !BANNERLORDMCM_PUBLIC
    internal
#else
    public
# endif
    interface ISettingsBuilder
    {
        /// <summary>
        /// See <see cref="BaseSettings.FolderName"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder SetFolderName(string value);
        /// <summary>
        /// See <see cref="BaseSettings.SubFolder"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder SetSubFolder(string value);
        /// <summary>
        /// See <see cref="BaseSettings.FormatType"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder SetFormat(string value);
        /// <summary>
        /// See <see cref="BaseSettings.UIVersion"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder SetUIVersion(int value);
        /// <summary>
        /// See <see cref="BaseSettings.SubGroupDelimiter"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder SetSubGroupDelimiter(char value);
        /// <summary>
        /// See <see cref="BaseSettings.OnPropertyChanged"/>.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder SetOnPropertyChanged(PropertyChangedEventHandler value);

        /// <summary>
        /// Creates a property group where you can define your properties.
        /// The default Group name is 'Misc'.
        /// Use the action delegate to configure the property group.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="builder"></param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder CreateGroup(string name, Action<ISettingsPropertyGroupBuilder> builder);

        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        /// <param name="builder"></param>
        /// <returns>The settings builder.</returns>
        ISettingsBuilder CreatePreset(string id, string name, Action<ISettingsPresetBuilder> builder);

        ISettingsBuilder WithoutDefaultPreset();

        /// <summary>
        /// Returns a Global setting instance.
        /// Use Register and Unregister for MCM to use it.
        /// </summary>
        /// <returns></returns>
        FluentGlobalSettings BuildAsGlobal();
        /// <summary>
        /// Returns a PerSave setting instance.
        /// Use Register and Unregister for MCM to use it.
        /// The registered settings will be cleared before and after player joins the campaign, so do the register thing when the campaign was already joined in.
        /// </summary>
        /// <returns></returns>
        FluentPerSaveSettings BuildAsPerSave();
        /// <summary>
        /// Returns a PerCampaign setting instance.
        /// Use Register and Unregister for MCM to use it.
        /// The registered settings will be cleared before and after player joins the campaign, so do the register thing when the campaign was already joined in.
        /// </summary>
        /// <returns></returns>
        FluentPerCampaignSettings BuildAsPerCampaign();
    }
}