namespace UIWidgets { using UIWidgets.l10n; using UIWidgets.Styles; using UnityEngine; /// /// NotifyInfoBase. /// public class NotifyInfoBase : MonoBehaviour, IStylable { /// /// Localization support. /// [SerializeField] public bool LocalizationSupport; /// /// The message. /// [SerializeField] public TextAdapter MessageAdapter; /// /// Content. /// [SerializeField] public RectTransform ContentRoot; /// /// Current message. /// protected string CurrentMessage = null; /// /// Current message arguments. /// protected object[] CurrentMessageArgs = Compatibility.EmptyArray(); /// /// Process enable event. /// protected virtual void OnEnable() { Localization.OnLocaleChanged += UpdateText; } /// /// Process disable event. /// protected virtual void OnDisable() { Localization.OnLocaleChanged -= UpdateText; } /// /// Update text. /// protected virtual void UpdateText() { if ((MessageAdapter != null) && (CurrentMessage != null)) { var message = LocalizationSupport ? Localization.GetTranslation(CurrentMessage) : CurrentMessage; MessageAdapter.text = string.Format(message, CurrentMessageArgs); } } /// /// Sets the info. /// /// Message. public virtual void SetInfo(string message) { SetInfo(message, Compatibility.EmptyArray()); } /// /// Sets the info. /// /// Message. /// An object array that contains zero or more objects to message format. public virtual void SetInfo(string message, params object[] args) { SaveDefaultValues(); if (message != null) { CurrentMessage = message; } CurrentMessageArgs = (args != null) ? args : Compatibility.EmptyArray(); UpdateText(); } /// /// Set content. /// /// Content. public virtual void SetContent(RectTransform content) { if (content == null) { return; } if (ContentRoot == null) { Debug.LogWarning("ContentRoot not specified.", this); return; } content.SetParent(ContentRoot, false); } bool defaultSaved; string defaultMessage; /// /// Save default values. /// public virtual void SaveDefaultValues() { if (defaultSaved) { return; } defaultSaved = true; if (MessageAdapter != null) { defaultMessage = MessageAdapter.text; } } /// /// Restore default values. /// public virtual void RestoreDefaultValues() { if (defaultSaved) { SetInfo(defaultMessage, null); } } #region IStylable implementation /// public virtual bool SetStyle(Style style) { if (MessageAdapter != null) { style.Notify.Text.ApplyTo(MessageAdapter.gameObject); } return true; } /// public virtual bool GetStyle(Style style) { if (MessageAdapter != null) { style.Notify.Text.GetFrom(MessageAdapter.gameObject); } return true; } #endregion } }