예제 #1
0
        public FieldGUIBase(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
        {
            this.data      = data;
            this.fieldInfo = fieldInfo;
            this.guiInfo   = guiInfo;

            this.Sync = guiInfo.Sync;

            InitializeGUI();
            Load();
        }
예제 #2
0
        private FieldGUIInfo GenerateAttribute(FieldInfo info)
        {
            FieldGUIInfo attribute = Attribute.GetCustomAttribute(info, typeof(FieldGUIInfo)) as FieldGUIInfo;

            if (attribute == null)
            {
                attribute       = new FieldGUIInfo();
                attribute.Title = FieldGUI.ToTitleCase(info.Name);

                return(attribute);
            }

            if (attribute.Title == null)
            {
                attribute.Title = FieldGUI.ToTitleCase(info.Name);
            }

            return(attribute);
        }
예제 #3
0
        private static FieldGUIInfo GetFieldGUIInfo(FieldInfo fieldInfo)
        {
            FieldGUIInfo guiInfo = Attribute.GetCustomAttribute
                                       (fieldInfo, typeof(FieldGUIInfo)) as FieldGUIInfo;

            if (guiInfo == null)
            {
                guiInfo       = new FieldGUIInfo();
                guiInfo.Title = FieldGUI.GetTitleCase(fieldInfo.Name);

                return(guiInfo);
            }

            if (guiInfo.Title == null)
            {
                guiInfo.Title = FieldGUI.GetTitleCase(fieldInfo.Name);
            }

            return(guiInfo);
        }
예제 #4
0
        private void GenerateGUIs(object data)
        {
            // NOTE:
            // Must be reset first.

            if (this.fieldGUIGroups.Count > 1)
            {
                this.fieldGUIGroups.RemoveRange(1, this.fieldGUIGroups.Count);
            }
            this.fieldGUIGroups[0].GUIs.Clear();

            FieldInfo[] fieldInfos = data.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);

            if (fieldInfos.Length == 0)
            {
                return;
            }

            for (var i = 0; i < fieldInfos.Length; i++)
            {
                FieldInfo    fieldInfo  = fieldInfos[i];
                FieldGUIInfo guiInfo    = GetFieldGUIInfo(fieldInfo);
                string       headerInfo = GetFieldHeaderInfo(fieldInfo);

                if (guiInfo.Hide)
                {
                    continue;
                }

                if (headerInfo != null)
                {
                    FieldGUIGroup fieldGUIGroup = new FieldGUIGroup();
                    fieldGUIGroup.Panel.Title = headerInfo;
                    this.fieldGUIGroups.Add(fieldGUIGroup);
                }

                this.fieldGUIGroups[this.fieldGUIGroups.Count - 1].GUIs
                .Add(GenerateGUI(data, fieldInfo, guiInfo));
            }
        }
예제 #5
0
 public FieldGUIBase(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
 {
     this.Data      = data;
     this.FieldInfo = fieldInfo;
     this.GUIInfo   = guiInfo;
 }
예제 #6
0
        private static FieldGUIBase GenerateGUI(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
        {
            FieldGUI.GetFieldGUIType(data, fieldInfo, out Type type, out bool typeIsIList);

            if (data == null || typeIsIList)
            {
                return(new FieldGUIs.UnSupportedGUI(data, fieldInfo, guiInfo));
            }

            if (type == typeof(bool))
            {
                return(new FieldGUIs.BoolGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(int))
            {
                return(new FieldGUIs.IntGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(float))
            {
                return(new FieldGUIs.FloatGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Vector2))
            {
                return(new FieldGUIs.Vector2GUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Vector3))
            {
                return(new FieldGUIs.Vector3GUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Vector4))
            {
                return(new FieldGUIs.Vector4GUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Vector2Int))
            {
                return(new FieldGUIs.Vector2IntGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Vector3Int))
            {
                return(new FieldGUIs.Vector3IntGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Color))
            {
                return(new FieldGUIs.ColorGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(Matrix4x4))
            {
                return(new FieldGUIs.Matrix4x4GUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(bool))
            {
                return(new FieldGUIs.BoolGUI(data, fieldInfo, guiInfo));
            }
            if (type == typeof(string))
            {
                if (guiInfo.IPv4)
                {
                    return(new FieldGUIs.IPv4GUI(data, fieldInfo, guiInfo));
                }
                else
                {
                    return(new FieldGUIs.StringGUI(data, fieldInfo, guiInfo));
                }
            }
            if (type.IsEnum)
            {
                return((FieldGUIBase)Activator.CreateInstance
                           (typeof(FieldGUIs.EnumGUI <>).MakeGenericType(fieldInfo.FieldType), data, fieldInfo, guiInfo));
            }
            //if (type.IsValueType) // Means any other struct.
            //{
            //    return new FieldGUIs.UnSupportedGUI(data, fieldInfo, guiInfo);
            //}

            return(new FieldGUIs.FieldGUI(data, fieldInfo, guiInfo));
        }
예제 #7
0
 public FieldGUIComponents(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
     : base(data, fieldInfo, guiInfo)
 {
 }
예제 #8
0
        protected static FieldGUIType GetFieldGUIType(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
        {
            Type type = fieldInfo.FieldType;

            if (type.IsPrimitive)
            {
                if (type == typeof(bool))
                {
                    return(FieldGUIType.Bool);
                }
                if (type == typeof(int))
                {
                    return(FieldGUIType.Int);
                }
                if (type == typeof(float))
                {
                    return(FieldGUIType.Float);
                }
            }

            if (type.IsValueType)
            {
                if (type == typeof(Vector2))
                {
                    return(FieldGUIType.Vector2);
                }
                if (type == typeof(Vector3))
                {
                    return(FieldGUIType.Vector3);
                }
                if (type == typeof(Vector4))
                {
                    return(FieldGUIType.Vector4);
                }
                if (type == typeof(Color))
                {
                    return(FieldGUIType.Color);
                }
            }

            if (type == typeof(string))
            {
                return(FieldGUIType.String);
            }
            if (type.IsEnum)
            {
                return(FieldGUIType.Enum);
            }

            if (fieldInfo.GetValue(data) is IList)
            {
                if (type.IsArray)
                {
                    type = type.GetElementType();
                }
                else
                {
                    Type[] types = type.GetGenericArguments();

                    if (types.Length == 1)
                    {
                        type = types[0];
                    }
                }

                if (type.IsPrimitive)
                {
                    if (type == typeof(int))
                    {
                        return(FieldGUIType.Ints);
                    }
                    if (type == typeof(float))
                    {
                        return(FieldGUIType.Floats);
                    }
                    if (type == typeof(bool))
                    {
                        return(FieldGUIType.Bools);
                    }
                }

                if (type.IsValueType)
                {
                    if (type == typeof(Vector2))
                    {
                        return(FieldGUIType.Vector2s);
                    }
                    if (type == typeof(Vector3))
                    {
                        return(FieldGUIType.Vector3s);
                    }
                    if (type == typeof(Vector4))
                    {
                        return(FieldGUIType.Vector4s);
                    }
                    if (type == typeof(Color))
                    {
                        return(FieldGUIType.Colors);
                    }
                }

                if (type == typeof(string))
                {
                    return(FieldGUIType.Strings);
                }
                if (type.IsEnum)
                {
                    return(FieldGUIType.Enums);
                }
            }

            return(FieldGUIType.Unsupported);
        }
예제 #9
0
        private FieldGUIBase GenerateGUI(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
        {
            Type guiType;
            Type genericType;

            FieldGUIType fieldGUIType = GetFieldGUIType(data, fieldInfo, guiInfo);

            switch (fieldGUIType)
            {
            case FieldGUIType.Bool:     return(new FieldGUIs.BoolGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Bools:    return(new FieldGUIs.BoolsGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Int:      return(new FieldGUIs.IntGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Ints:     return(new FieldGUIs.IntsGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Float:    return(new FieldGUIs.FloatGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Floats:   return(new FieldGUIs.FloatsGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Vector2:  return(new FieldGUIs.Vector2GUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Vector2s: return(new FieldGUIs.Vector2sGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Vector3:  return(new FieldGUIs.Vector3GUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Vector3s: return(new FieldGUIs.Vector3sGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Vector4:  return(new FieldGUIs.Vector4GUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Vector4s: return(new FieldGUIs.Vector4sGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Color:    return(new FieldGUIs.ColorGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.Colors:   return(new FieldGUIs.ColorsGUI(data, fieldInfo, guiInfo));

            case FieldGUIType.String:
                if (guiInfo.IPv4)
                {
                    return(new FieldGUIs.IPv4GUI(data, fieldInfo, guiInfo));
                }
                else
                {
                    return(new FieldGUIs.StringGUI(data, fieldInfo, guiInfo));
                }

            case FieldGUIType.Strings:
                if (guiInfo.IPv4)
                {
                    return(new FieldGUIs.IPv4sGUI(data, fieldInfo, guiInfo));
                }
                else
                {
                    return(new FieldGUIs.StringsGUI(data, fieldInfo, guiInfo));
                }

            case FieldGUIType.Enum:
                guiType     = typeof(FieldGUIs.EnumGUI <>);
                genericType = guiType.MakeGenericType(fieldInfo.FieldType);
                return((FieldGUIBase)Activator.CreateInstance(genericType, data, fieldInfo, guiInfo));

            case FieldGUIType.Enums:
                guiType     = typeof(FieldGUIs.EnumsGUI <>);
                genericType = guiType.MakeGenericType(fieldInfo.FieldType.GetGenericArguments()[0]);
                return((FieldGUIBase)Activator.CreateInstance(genericType, data, fieldInfo, guiInfo));

            default: return(new FieldGUIs.UnSupportedGUI(data, fieldInfo, guiInfo));
            }
        }
예제 #10
0
 public FieldGUIElement(object data, FieldInfo fieldInfo, FieldGUIInfo guiInfo)
     : base(data, fieldInfo, guiInfo)
 {
 }