Beispiel #1
0
        static public int GroupSort(FieldInfo p_field1, FieldInfo p_field2)
        {
            TitledGroupAttribute attribute1 = p_field1.GetCustomAttribute <TitledGroupAttribute>();
            TitledGroupAttribute attribute2 = p_field2.GetCustomAttribute <TitledGroupAttribute>();

            if (attribute1 == null && attribute2 == null)
            {
                return(OrderSort(p_field1, p_field2));
            }

            if (attribute1 != null && attribute2 == null)
            {
                return(1);
            }

            if (attribute1 == null && attribute2 != null)
            {
                return(-1);
            }

            if (attribute1.Group == attribute2.Group)
            {
                return(OrderSort(p_field1, p_field2));
            }

            if (attribute1.Order != attribute2.Order)
            {
                return(attribute1.Order.CompareTo(attribute2.Order));
            }

            return(attribute1.Group.CompareTo(attribute2.Group));
        }
Beispiel #2
0
        protected bool DrawGroupTitle(FieldInfo p_fieldInfo, ref int p_groupIndex, ref string p_lastGroup, bool p_initializeMinimized, GUIStyle p_style)
        {
            TitledGroupAttribute ga = p_fieldInfo?.GetCustomAttribute <TitledGroupAttribute>();
            string currentGroup     = ga != null ? ga.Group : "Properties";

            if (currentGroup != p_lastGroup)
            {
                int groupMask = 1 << p_groupIndex;
                p_groupIndex++;
                if (p_initializeMinimized && ga != null && ga.Minimized && (groupsMinized & groupMask) == 0)
                {
                    groupsMinized += groupMask;
                }

                GUIPropertiesUtils.Separator(16, 2, 4, new Color(0.1f, 0.1f, 0.1f));
                GUILayout.Label(currentGroup, DashEditorCore.Skin.GetStyle("PropertyGroup"));

                Rect lastRect = GUILayoutUtility.GetLastRect();

                bool isMinimized = (groupsMinized & groupMask) != 0;
                if (GUI.Button(new Rect(lastRect.x, lastRect.y - 25, lastRect.width, 20), "", p_style))
                {
                    groupsMinized = isMinimized ? groupsMinized - groupMask : groupsMinized + groupMask;
                }

                GUI.Label(new Rect(lastRect.x + 356 + (isMinimized ? 0 : 2), lastRect.y - 25, 20, 20), isMinimized ? "+" : "-", p_style);

                p_lastGroup = currentGroup;
            }

            return((groupsMinized & (1 << (p_groupIndex - 1))) != 0);
        }
Beispiel #3
0
        public virtual bool DrawInspector()
        {
            bool initializeMinimization = false;

            if (groupsMinized == -1)
            {
                initializeMinimization = true;
                groupsMinized          = 0;
            }

            GUILayout.Space(5);

            GUIStyle minStyle = GUIStyle.none;

            minStyle.normal.textColor = Color.white;
            minStyle.fontSize         = 16;

            var fields = this.GetType().GetFields();

            Array.Sort(fields, GUIPropertiesUtils.GroupSort);
            string lastGroup          = "";
            bool   lastGroupMinimized = false;
            bool   invalidate         = false;
            int    groupIndex         = 0;

            foreach (var field in fields)
            {
                if (field.IsConstant())
                {
                    continue;
                }

                TitledGroupAttribute ga = field.GetCustomAttribute <TitledGroupAttribute>();
                string currentGroup     = ga != null ? ga.Group : "Properties";
                if (currentGroup != lastGroup)
                {
                    int groupMask = (int)Math.Pow(2, groupIndex);
                    groupIndex++;
                    if (initializeMinimization && ga != null && ga.Minimized && (groupsMinized & groupMask) == 0)
                    {
                        groupsMinized += groupMask;
                    }

                    GUIPropertiesUtils.Separator(16, 2, 4, new Color(0.1f, 0.1f, 0.1f));
                    GUILayout.Label(currentGroup, DashEditorCore.Skin.GetStyle("PropertyGroup"),
                                    GUILayout.Width(120));
                    Rect lastRect = GUILayoutUtility.GetLastRect();


                    if (GUI.Button(new Rect(lastRect.x + 302, lastRect.y - 25, 20, 20), (groupsMinized & groupMask) != 0 ? "+" : "-",
                                   minStyle))
                    {
                        groupsMinized = (groupsMinized & groupMask) == 0
                            ? groupsMinized + groupMask
                            : groupsMinized - groupMask;
                    }

                    lastGroup          = currentGroup;
                    lastGroupMinimized = (groupsMinized & groupMask) != 0;
                }

                if (lastGroupMinimized)
                {
                    continue;
                }

                invalidate = invalidate || GUIPropertiesUtils.PropertyField(field, this, null);
            }

            if (invalidate)
            {
                DashEditorCore.SetDirty();
            }

            return(invalidate);
        }