summaryrefslogtreecommitdiff
path: root/Assets/Plugins/AdvancedInspector/Attributes/Title.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Plugins/AdvancedInspector/Attributes/Title.cs')
-rw-r--r--Assets/Plugins/AdvancedInspector/Attributes/Title.cs111
1 files changed, 111 insertions, 0 deletions
diff --git a/Assets/Plugins/AdvancedInspector/Attributes/Title.cs b/Assets/Plugins/AdvancedInspector/Attributes/Title.cs
new file mode 100644
index 00000000..2330db37
--- /dev/null
+++ b/Assets/Plugins/AdvancedInspector/Attributes/Title.cs
@@ -0,0 +1,111 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Linq;
+using System.Text;
+
+using UnityEngine;
+
+namespace AdvancedInspector
+{
+ /// <summary>
+ /// Similar to Unity "Header" attribute, but can be place on any members and be set at runtime.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method)]
+ public class TitleAttribute : Attribute, IRuntimeAttribute<TitleAttribute>
+ {
+ public delegate TitleAttribute TitleDelegate();
+ public delegate TitleAttribute TitleStaticDelegate(TitleAttribute title, object instance, object value);
+
+ private string message;
+
+ /// <summary>
+ /// The title message
+ /// </summary>
+ public string Message
+ {
+ get { return message; }
+ set { message = value; }
+ }
+
+ private FontStyle style = FontStyle.Bold;
+
+ /// <summary>
+ /// The font style.
+ /// </summary>
+ public FontStyle Style
+ {
+ get { return style; }
+ set { style = value; }
+ }
+
+ #region IRuntime Implementation
+ private string methodName = "";
+
+ public string MethodName
+ {
+ get { return methodName; }
+ }
+
+ public Type Template
+ {
+ get { return typeof(TitleDelegate); }
+ }
+
+ public Type TemplateStatic
+ {
+ get { return typeof(TitleStaticDelegate); }
+ }
+
+ private List<Delegate> delegates = new List<Delegate>();
+
+ public List<Delegate> Delegates
+ {
+ get { return delegates; }
+ set { delegates = value; }
+ }
+
+ public TitleAttribute Invoke(int index, object instance, object value)
+ {
+ if (delegates.Count == 0 || index >= delegates.Count)
+ return this;
+
+ try
+ {
+ if (delegates[index].Target == null)
+ {
+ return delegates[0].DynamicInvoke(this, instance, value) as TitleAttribute;
+ }
+ else
+ {
+ return delegates[0].DynamicInvoke() as TitleAttribute;
+ }
+ }
+ catch (Exception e)
+ {
+ if (e is TargetInvocationException)
+ e = ((TargetInvocationException)e).InnerException;
+
+ Debug.LogError(string.Format("Invoking a method failed while trying to retrieve a Title attribute. The exception was \"{0}\".", e.Message));
+ return null;
+ }
+ }
+ #endregion
+
+ public TitleAttribute(string methodName)
+ {
+ this.methodName = methodName;
+ }
+
+ public TitleAttribute(FontStyle style, string message)
+ {
+ this.style = style;
+ this.message = message;
+ }
+
+ public TitleAttribute(Delegate method)
+ {
+ this.delegates.Add(method);
+ }
+ }
+}