public override void  OnInspectorGUI()
    {
        EditorGUI.BeginChangeCheck();

        InstantGuiElement script = (InstantGuiElement)target;

        Undo.RecordObject(script, "InstantGui Change");

        //EditorGUIUtility.LookLikeInspector ();
        //DrawDefaultInspector ();

        //text
        string newText = EditorGUILayout.TextField("Text:", script.text);

        script.guiLinkText = EditorGUILayout.Toggle("Use Object Name:", script.guiLinkText);
        if (script.guiLinkText && !EditorApplication.isPlayingOrWillChangePlaymode && script.GetType() != typeof(InstantGuiTextArea))
        {
            if (script.text != newText)             //if text changed
            {
                if (newText.Length != 0)
                {
                    script.gameObject.name = newText;
                }
                else
                {
                    script.gameObject.name = "GuiElement";
                }
                script.text = newText;
            }
            if (script.text != script.gameObject.name && newText.Length != 0)
            {
                script.text = script.gameObject.name;
            }
        }
        else
        {
            script.text = newText;
        }

        //setting style
        script.guiStyle = EditorGUILayout.Foldout(script.guiStyle, "Style");
        if (script.guiStyle)
        {
            EditorGUI.indentLevel = 1;

            script.styleSet = (InstantGuiStyleSet)EditorGUILayout.ObjectField("Style Set:", script.styleSet, typeof(InstantGuiStyleSet), false);
            bool customStyle = EditorGUILayout.Toggle("Custom Style:", script.customStyle);

            //custom style
            if (customStyle)
            {
                if (!script.customStyle)
                {
                    if (script.style != null)
                    {
                        script.style = script.style.Clone();
                    }
                    else
                    {
                        script.style = new InstantGuiStyle();
                    }
                }
                script.style.name = EditorGUILayout.TextField("Name:", script.style.name);
                script.styleName  = script.style.name;

                InstantGuiInspector.DrawStyle(script.style, false);

                EditorGUILayout.Space();
                if (script.styleSet != null && script.style != null && script.style.name.Length > 0)
                {
                    InstantGuiInspector.DrawSaveToStyleButton("Add to StyleSet", script, true, false);
                }
            }

            //else
            if (!customStyle && script.styleSet != null)
            {
                string[] styleNames    = new string[script.styleSet.styles.Length];
                int      selectedStyle = -1;            //default if style could not be found

                //compiling popup array
                for (int i = 0; i < script.styleSet.styles.Length; i++)
                {
                    styleNames[i] = script.styleSet.styles[i].name;
                }

                //finding popup selected
                if (script.style == null)
                {
                    selectedStyle = 0;
                }
                else
                {
                    for (int i = 0; i < styleNames.Length; i++)
                    {
                        if (styleNames[i] == script.styleName)
                        {
                            selectedStyle = i;
                        }
                    }
                }

                styleNames[0] = "None";

                int newSelected = EditorGUILayout.Popup("Style:", selectedStyle, styleNames);
                if (newSelected != selectedStyle)
                {
                    script.style     = script.styleSet.styles[newSelected];
                    script.styleName = script.style.name;
                    //script.styleNum = newSelected;
                }
            }

            script.customStyle = customStyle;

            EditorGUI.indentLevel = 0;
        }

        //position
        script.guiPosition = EditorGUILayout.Foldout(script.guiPosition, "Position");
        if (script.guiPosition)
        {
            EditorGUI.indentLevel = 1;

            script.useStylePlacement = EditorGUILayout.ToggleLeft("Use Style Placement", script.useStylePlacement);

            if (!script.useStylePlacement)
            {
                int preset = EditorGUILayout.Popup("Preset:", -1, positionPresets);
                switch (preset)
                {
                //case 0: if (script.style!=null) { script.relative.Set(script.style.relative); script.offset.Set(script.style.offset); script.layerOffset = script.style.layerOffset; } break;
                case 0: script.relative.Set(0, 100, 0, 100); script.offset.Set(0, 0, 0, 0); break;

                case 1: script.relative.Set(10, 90, 10, 90); script.offset.Set(10, -10, 10, -10); break;

                case 2: script.offset.right = -script.offset.left; script.offset.bottom = -script.offset.top; break;

                case 3: script.relative.Set(50, 50, 50, 50); script.offset.Set(20, -20, 20, -20); break;

                case 4: if (script.style != null)
                    {
                        script.offset.left = (int)(-script.style.fixedWidthSize * 0.5f); script.offset.right = (int)(script.style.fixedWidthSize * 0.5f);
                    }
                    break;

                case 5: if (script.style != null)
                    {
                        script.offset.top = (int)(-script.style.fixedHeightSize * 0.5f); script.offset.bottom = (int)(script.style.fixedHeightSize * 0.5f);
                    }
                    break;
                }

                InstantGuiInspector.DrawElementPosLabels("", "Left", "Right", "Top", "Bottom");
                script.relative = InstantGuiInspector.DrawElementPos("Relative:", script.relative);
                script.offset   = InstantGuiInspector.DrawElementPos("Offset:", script.offset);
                InstantGuiInspector.DrawElementPosLabels("Absolute:", script.absolute.left.ToString(), script.absolute.right.ToString(), script.absolute.top.ToString(), script.absolute.bottom.ToString());
                script.layerOffset = InstantGuiInspector.DrawLayerOffset("Layer Offset:", script.layerOffset);

                script.lockPosition = EditorGUILayout.Toggle("Lock Position", script.lockPosition);

                if (script.styleSet != null && script.style != null && script.style.name != null && script.style.name.Length > 0)
                {
                    InstantGuiInspector.DrawSaveToStyleButton("Set as Default in Style", script, false, true);
                }
            }
            EditorGUI.indentLevel = 0;
        }

        script.guiAttributes = EditorGUILayout.Foldout(script.guiAttributes, "Attributes");
        if (script.guiAttributes)
        {
            EditorGUI.indentLevel = 1;

            //EditorGUI.indentLevel = 20;
            script.dynamic   = EditorGUILayout.Toggle("Dynamic", script.dynamic);
            script.editable  = EditorGUILayout.Toggle("Editable", script.editable);
            script.pointed   = EditorGUILayout.Toggle("Pointed", script.pointed);
            script.disabled  = EditorGUILayout.Toggle("Disabled", script.disabled);
            script.activated = EditorGUILayout.Toggle("Activated", script.activated);
            script.pressed   = EditorGUILayout.Toggle("Pressed", script.pressed);
            //script.checkbutton = EditorGUILayout.Toggle("\tCheckbutton", script.checkbutton);
            script.check    = EditorGUILayout.Toggle("Checked", script.check);
            script.instant  = EditorGUILayout.Toggle("Instant", script.instant);
            script.password = EditorGUILayout.Toggle("Password", script.password);

            EditorGUI.indentLevel = 0;
        }

        if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetDirty(script);
            InstantGui.instance.Update();
        }
        else
        {
            Undo.ClearUndo(script);
        }
    }
예제 #2
0
    public override void  OnInspectorGUI()
    {
        InstantGuiStyleSet script = (InstantGuiStyleSet)target;

        if (script.styles == null)
        {
            script.styles = new InstantGuiStyle[1]; script.styles[0] = new InstantGuiStyle();
        }

        EditorGUI.BeginChangeCheck();

        Undo.RecordObject(script, "InstantGui Style Change");

        Rect rect = new Rect(0, 0, 0, 0);

        if (script.styles != null)
        {
            for (int i = 1; i < script.styles.Length; i++)
            {
                //if (script.styles[i]==null) script.styles[i] = new InstantGuiStyle();

                EditorGUI.indentLevel = 0;
                rect = GUILayoutUtility.GetRect(50, 18, "TextField");

                //name
                rect.x += 10; rect.width -= 90;
                script.styles[i].name = EditorGUI.TextField(rect, script.styles[i].name);

                //move up
                rect.x = rect.width + 30; rect.width = 23;
                if (GUI.Button(rect, "∧ ") && i != 1)
                {
                    InstantGuiStyle tmp = script.styles[i - 1];
                    script.styles[i - 1] = script.styles[i];
                    script.styles[i]     = tmp;
                    EditorUtility.SetDirty(script);
                }

                //move down
                rect.x += 25;
                if (GUI.Button(rect, "∨ ") && i != script.styles.Length - 1)
                {
                    InstantGuiStyle tmp = script.styles[i + 1];
                    script.styles[i + 1] = script.styles[i];
                    script.styles[i]     = tmp;
                    EditorUtility.SetDirty(script);
                }

                //delete
                rect.x += 25;
                if (GUI.Button(rect, "✕ ") && EditorUtility.DisplayDialog("Remove Style?",
                                                                          "Are you sure you want to remove style?",
                                                                          "OK", "Cancel"))
                {
                    InstantGuiStyle[] newStyles = new InstantGuiStyle[script.styles.Length - 1];
                    int counter = 0;
                    for (int j = 0; j < script.styles.Length; j++)
                    {
                        if (j != i)
                        {
                            newStyles[counter] = script.styles[j];
                            counter++;
                        }
                    }
                    script.styles = newStyles;
                    EditorUtility.SetDirty(script);
                }
                if (i == script.styles.Length)
                {
                    break;
                }

                //foldout
                rect.x = 20; rect.width = 20;
                script.styles[i].show = EditorGUI.Foldout(rect, script.styles[i].show, "");


                //display style
                if (script.styles[i].show)
                {
                    InstantGuiInspector.DrawStyle(script.styles[i], true);
                }
            }
        }

        //adding
        rect   = GUILayoutUtility.GetRect(50, 18, "TextField");
        rect.x = rect.width - 70; rect.width = 73;
        if (GUI.Button(rect, "Add"))
        {
            InstantGuiStyle[] newStyles = new InstantGuiStyle[script.styles.Length + 1];
            for (int j = 0; j < script.styles.Length; j++)
            {
                newStyles[j] = script.styles[j];
            }
            newStyles[newStyles.Length - 1] = new InstantGuiStyle();
            script.styles = newStyles;
            EditorUtility.SetDirty(script);
        }

        if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetDirty(target);
            if (InstantGui.instance != null)
            {
                InstantGui.instance.Update();
            }
        }
        //else Undo.ClearUndo(script);
    }