Exemple #1
0
        private static bool InspectField(Inspector inspector, string path, ref object data, FieldInfo fieldInfo,
                                         string prefix)
        {
            object    value      = fieldInfo.GetValue(data);
            FieldInfo info       = fieldInfo;
            bool      inwritable = info.IsInitOnly || info.IsLiteral;
            Type      valueType  = value != null?value.GetType() : info.FieldType;

            bool   changed      = false;
            object changedvalue = null;
            var    mark         = TypeTools.GetAttribute <IMark>(info);

            if (inwritable)
            {
                inspector.Inspect(prefix + fieldInfo.Name, path + "." + fieldInfo.Name, value, valueType, mark);
            }
            else
            {
                inspector.Inspect(prefix + fieldInfo.Name, path + "." + fieldInfo.Name, value, valueType, mark, v =>
                {
                    changed      = true;
                    changedvalue = v;
                });
            }

            if (changed)
            {
                info.SetValue(data, changedvalue);
            }
            return(changed);
        }
        public override bool InspectSelf(Inspector inspector, string name, ref object data, Type type)
        {
            var e = data as Enum;

            if (e == null)
            {
                return(false);
            }
            if (TypeTools.GetAttribute <FlagsAttribute>(type) != null)
            {
                return(ApplyValueIfNotEqual(ref data, GUITools.EnumMaskField(name, e)));
            }
            else
            {
                return(ApplyValueIfNotEqual(ref data, GUITools.EnumPopup(name, e)));
            }
        }