UnityVariableDrawer.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System;
  2. using System.Reflection;
  3. using Chronos.Controls.Editor;
  4. using UnityEditor;
  5. namespace Chronos.Reflection.Editor
  6. {
  7. [CustomPropertyDrawer(typeof(UnityVariable))]
  8. public class UnityVariableDrawer : UnityMemberDrawer<UnityVariable>
  9. {
  10. #region Filtering
  11. /// <inheritdoc />
  12. protected override FilterAttribute DefaultFilter()
  13. {
  14. FilterAttribute filter = base.DefaultFilter();
  15. // Override defaults here
  16. return filter;
  17. }
  18. /// <inheritdoc />
  19. protected override MemberTypes validMemberTypes
  20. {
  21. get
  22. {
  23. return MemberTypes.Field | MemberTypes.Property;
  24. }
  25. }
  26. /// <inheritdoc />
  27. protected override bool ValidateMember(MemberInfo member)
  28. {
  29. bool valid = base.ValidateMember(member);
  30. FieldInfo field = member as FieldInfo;
  31. PropertyInfo property = member as PropertyInfo;
  32. if (field != null) // Member is a field
  33. {
  34. valid &= UnityMemberDrawerHelper.ValidateField(filter, field);
  35. }
  36. else if (property != null) // Member is a property
  37. {
  38. valid &= UnityMemberDrawerHelper.ValidateProperty(filter, property);
  39. }
  40. return valid;
  41. }
  42. // Do not edit below
  43. #endregion
  44. #region Value
  45. /// <inheritdoc />
  46. protected override UnityVariable BuildValue(string component, string name)
  47. {
  48. return new UnityVariable(component, name);
  49. }
  50. #endregion
  51. #region Reflection
  52. protected override DropdownOption<UnityVariable> GetMemberOption(MemberInfo member, string component, bool inherited)
  53. {
  54. UnityVariable value;
  55. string label;
  56. if (member is FieldInfo)
  57. {
  58. FieldInfo field = (FieldInfo)member;
  59. value = new UnityVariable(component, field.Name);
  60. label = string.Format("{0} {1}", field.FieldType.PrettyName(), field.Name);
  61. }
  62. else if (member is PropertyInfo)
  63. {
  64. PropertyInfo property = (PropertyInfo)member;
  65. value = new UnityVariable(component, property.Name);
  66. label = string.Format("{0} {1}", property.PropertyType.PrettyName(), property.Name);
  67. }
  68. else
  69. {
  70. throw new ArgumentException("Invalid member information type.");
  71. }
  72. if (inherited)
  73. {
  74. label = "Inherited/" + label;
  75. }
  76. return new DropdownOption<UnityVariable>(value, label);
  77. }
  78. #endregion
  79. /// <inheritdoc />
  80. protected override string memberLabel
  81. {
  82. get
  83. {
  84. return "Variable";
  85. }
  86. }
  87. }
  88. }