123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- using System;
- using UnityEngine;
- namespace UnityEditor.SettingsManagement
- {
- [Flags]
- enum SettingVisibility
- {
- None = 0 << 0,
-
-
-
-
-
-
- Visible = 1 << 0,
-
-
-
-
-
-
-
-
- Hidden = 1 << 1,
-
-
-
-
-
-
-
- Unlisted = 1 << 2,
-
-
-
-
-
-
- Unregistered = 1 << 3,
- All = Visible | Hidden | Unlisted | Unregistered
- }
-
-
-
-
- public interface IUserSetting
- {
-
-
-
- string key { get; }
-
-
-
- Type type { get; }
-
-
-
- SettingsScope scope { get; }
-
-
-
-
- string settingsRepositoryName { get; }
-
-
-
- Settings settings { get; }
-
-
-
-
-
-
-
- object GetValue();
-
-
-
-
-
-
- object GetDefaultValue();
-
-
-
-
-
-
-
-
- void SetValue(object value, bool saveProjectSettingsImmediately = false);
-
-
-
-
- void ApplyModifiedProperties();
-
-
-
-
- void Reset(bool saveProjectSettingsImmediately = false);
-
-
-
-
-
- void Delete(bool saveProjectSettingsImmediately = false);
- }
-
-
-
-
-
-
-
- public class UserSetting<T> : IUserSetting
- {
- bool m_Initialized;
- string m_Key;
- string m_Repository;
- T m_Value;
- T m_DefaultValue;
- SettingsScope m_Scope;
- Settings m_Settings;
- UserSetting() {}
-
-
-
-
-
-
-
- public UserSetting(Settings settings, string key, T value, SettingsScope scope = SettingsScope.Project)
- {
- m_Key = key;
- m_Repository = null;
- m_Value = value;
- m_Scope = scope;
- m_Initialized = false;
- m_Settings = settings;
- }
-
-
-
-
-
-
-
-
- public UserSetting(Settings settings, string repository, string key, T value, SettingsScope scope = SettingsScope.Project)
- {
- m_Key = key;
- m_Repository = repository;
- m_Value = value;
- m_Scope = scope;
- m_Initialized = false;
- m_Settings = settings;
- }
-
-
-
-
- public string key
- {
- get { return m_Key; }
- }
-
-
-
-
- public string settingsRepositoryName
- {
- get { return m_Repository; }
- }
-
-
-
-
- public Type type
- {
- get { return typeof(T); }
- }
-
-
-
-
-
-
-
- public object GetDefaultValue()
- {
- return defaultValue;
- }
-
-
-
-
-
-
-
- public object GetValue()
- {
- return value;
- }
-
-
-
-
-
-
-
-
- public SettingsScope scope
- {
- get { return m_Scope; }
- }
-
-
-
-
- public Settings settings
- {
- get { return m_Settings; }
- }
-
-
-
-
-
-
-
-
-
- public void SetValue(object value, bool saveProjectSettingsImmediately = false)
- {
-
- if (value != null && !(value is T))
- throw new ArgumentException("Value must be of type " + typeof(T) + "\n" + key + " expecting value of type " + type + ", received " + value.GetType());
- SetValue((T)value, saveProjectSettingsImmediately);
- }
-
-
-
-
-
-
-
-
- public void SetValue(T value, bool saveProjectSettingsImmediately = false)
- {
- Init();
- m_Value = value;
- settings.Set<T>(key, m_Value, m_Scope);
- if (saveProjectSettingsImmediately)
- settings.Save();
- }
-
-
-
-
-
-
- public void Delete(bool saveProjectSettingsImmediately = false)
- {
- settings.DeleteKey<T>(key, scope);
-
-
- m_Value = ValueWrapper<T>.DeepCopy(m_DefaultValue);
- m_Initialized = false;
- }
-
-
-
-
-
- public void ApplyModifiedProperties()
- {
- settings.Set<T>(key, m_Value, m_Scope);
- settings.Save();
- }
-
-
-
-
-
- public void Reset(bool saveProjectSettingsImmediately = false)
- {
- SetValue(defaultValue, saveProjectSettingsImmediately);
- }
- void Init()
- {
- if (!m_Initialized)
- {
- if (m_Scope == SettingsScope.Project && settings == null)
- throw new Exception("UserSetting \"" + m_Key + "\" is attempting to access SettingsScope.Project setting with no Settings instance!");
- m_Initialized = true;
-
- m_DefaultValue = ValueWrapper<T>.DeepCopy(m_Value);
- if (settings.ContainsKey<T>(m_Key, m_Scope))
- m_Value = settings.Get<T>(m_Key, m_Scope);
- else
- settings.Set<T>(m_Key, m_Value, m_Scope);
- }
- }
-
-
-
- public T defaultValue
- {
- get
- {
- Init();
- return ValueWrapper<T>.DeepCopy(m_DefaultValue);
- }
- }
-
-
-
- public T value
- {
- get
- {
- Init();
- return m_Value;
- }
- set { SetValue(value); }
- }
-
-
-
-
-
-
-
- public static implicit operator T(UserSetting<T> pref)
- {
- return pref.value;
- }
-
-
-
-
- public override string ToString()
- {
- return string.Format("{0} setting. Key: {1} Value: {2}", scope, key, value);
- }
- }
- }
|