2018-01-08 19:55:28 +04:00
|
|
|
//! \file ResourceSettings.cs
|
|
|
|
//! \date 2018 Jan 08
|
|
|
|
//! \brief Persistent resource settings implementation.
|
|
|
|
//
|
|
|
|
// Copyright (C) 2018 by morkt
|
|
|
|
//
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
// of this software and associated documentation files (the "Software"), to
|
|
|
|
// deal in the Software without restriction, including without limitation the
|
|
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
|
|
|
// furnished to do so, subject to the following conditions:
|
|
|
|
//
|
|
|
|
// The above copyright notice and this permission notice shall be included in
|
|
|
|
// all copies or substantial portions of the Software.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
|
|
// IN THE SOFTWARE.
|
|
|
|
//
|
|
|
|
|
2018-06-06 00:35:39 +04:00
|
|
|
using System.Collections;
|
2018-04-13 19:46:17 +04:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Configuration;
|
|
|
|
|
2018-01-08 19:55:28 +04:00
|
|
|
namespace GameRes
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Interface to assembly app.config settings.
|
|
|
|
/// </summary>
|
|
|
|
public interface IResourceSetting
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Internal setting name, should match the name defined in app.config.
|
|
|
|
/// </summary>
|
|
|
|
string Name { get; }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Short text description of the setting (suitable for use in GUI dialog).
|
|
|
|
/// </summary>
|
|
|
|
string Text { get; }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// More elaborate setting description.
|
|
|
|
/// </summary>
|
|
|
|
string Description { get; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Actual setting value.
|
|
|
|
/// </summary>
|
|
|
|
object Value { get; set; }
|
|
|
|
}
|
|
|
|
|
2018-01-11 18:38:33 +04:00
|
|
|
/// <summary>
|
|
|
|
/// Manage assembly settings during application session. Implementations of this interface are made
|
|
|
|
/// available to GameRes library by means of MEF.
|
|
|
|
/// </summary>
|
|
|
|
public interface ISettingsManager
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Called on application startup to check if settings need upgrading after assembly version change.
|
|
|
|
/// </summary>
|
|
|
|
void UpgradeSettings ();
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Called on application exit.
|
|
|
|
/// </summary>
|
|
|
|
void SaveSettings ();
|
|
|
|
}
|
|
|
|
|
2018-01-08 19:55:28 +04:00
|
|
|
public abstract class ResourceSettingBase : IResourceSetting
|
|
|
|
{
|
|
|
|
public string Name { get; set; }
|
|
|
|
public string Text { get; set; }
|
|
|
|
public string Description { get; set; }
|
|
|
|
|
|
|
|
public abstract object Value { get; set; }
|
|
|
|
|
|
|
|
public TValue Get<TValue> ()
|
|
|
|
{
|
|
|
|
var value = this.Value;
|
|
|
|
if (null == value || !(value is TValue))
|
|
|
|
return default(TValue);
|
|
|
|
return (TValue)value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-13 19:46:17 +04:00
|
|
|
public class ApplicationSetting : ResourceSettingBase
|
2018-01-08 19:55:28 +04:00
|
|
|
{
|
2018-04-13 19:46:17 +04:00
|
|
|
public ApplicationSetting (ApplicationSettingsBase settings)
|
|
|
|
{
|
|
|
|
Settings = settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ApplicationSettingsBase Settings { get; set; }
|
|
|
|
|
2018-01-08 19:55:28 +04:00
|
|
|
public override object Value {
|
2018-04-13 19:46:17 +04:00
|
|
|
get { return Settings[Name]; }
|
|
|
|
set { Settings[Name] = value; }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
internal class LocalResourceSetting : ApplicationSetting
|
|
|
|
{
|
|
|
|
public LocalResourceSetting () : base (GameRes.Properties.Settings.Default) { }
|
|
|
|
}
|
|
|
|
|
2018-06-06 00:35:39 +04:00
|
|
|
/// <summary>
|
|
|
|
/// Application setting represented by integer range.
|
|
|
|
/// </summary>
|
2018-04-13 19:46:17 +04:00
|
|
|
public class FixedGaugeSetting : ApplicationSetting
|
|
|
|
{
|
|
|
|
public int Min { get; set; }
|
|
|
|
public int Max { get; set; }
|
|
|
|
public IEnumerable<int> ValuesSet { get; set; }
|
|
|
|
|
|
|
|
public FixedGaugeSetting (ApplicationSettingsBase settings) : base (settings)
|
|
|
|
{
|
2018-01-08 19:55:28 +04:00
|
|
|
}
|
|
|
|
}
|
2018-06-06 00:35:39 +04:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Application setting that has limited set of possible values.
|
|
|
|
/// </summary>
|
|
|
|
public class FixedSetSetting : ApplicationSetting
|
|
|
|
{
|
|
|
|
public IEnumerable ValuesSet { get; set; }
|
|
|
|
|
|
|
|
public FixedSetSetting (ApplicationSettingsBase settings) : base (settings)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
2018-01-08 19:55:28 +04:00
|
|
|
}
|