Example #1
0
        static ReorderableListStyles()
        {
            Title                   = new GUIStyle();
            Title.border            = new RectOffset(2, 2, 2, 1);
            Title.margin            = new RectOffset(5, 5, 5, 0);
            Title.padding           = new RectOffset(5, 5, 3, 3);
            Title.alignment         = TextAnchor.MiddleLeft;
            Title.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.TitleBackground);
            Title.normal.textColor  = EditorGUIUtility.isProSkin
                ? new Color(0.8f, 0.8f, 0.8f)
                : new Color(0.2f, 0.2f, 0.2f);

            Container                   = new GUIStyle();
            Container.border            = new RectOffset(2, 2, 2, 2);
            Container.margin            = new RectOffset(5, 5, 0, 0);
            Container.padding           = new RectOffset(2, 2, 2, 2);
            Container.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.ContainerBackground);

            Container2 = new GUIStyle(Container);
            Container2.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.Container2Background);

            FooterButton                   = new GUIStyle();
            FooterButton.fixedHeight       = 18;
            FooterButton.alignment         = TextAnchor.MiddleCenter;
            FooterButton.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button_Normal);
            FooterButton.active.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button_Active);
            FooterButton.border            = new RectOffset(3, 3, 1, 3);
            FooterButton.padding           = new RectOffset(2, 2, 0, 2);
            FooterButton.clipping          = TextClipping.Overflow;

            FooterButton2                   = new GUIStyle();
            FooterButton2.fixedHeight       = 18;
            FooterButton2.alignment         = TextAnchor.MiddleCenter;
            FooterButton2.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button2_Normal);
            FooterButton2.active.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button2_Active);
            FooterButton2.border            = new RectOffset(3, 3, 3, 3);
            FooterButton2.padding           = new RectOffset(2, 2, 2, 2);
            FooterButton2.clipping          = TextClipping.Overflow;

            ItemButton = new GUIStyle();

            string name = $"{EmbeddedResourceProvider.VISUAL_SCRIPTING_PACKAGE}.Dark Pixel (List GUI)";

            Texture2D background = EmbeddedResourceProvider.CreatePixelTexture(name, new Color32(18, 18, 18, 255), 1, 1);

            ItemButton.active.background = background;
            ItemButton.imagePosition     = ImagePosition.ImageOnly;
            ItemButton.alignment         = TextAnchor.MiddleCenter;
            ItemButton.overflow          = new RectOffset(0, 0, -1, 0);
            ItemButton.padding           = new RectOffset(0, 0, 1, 0);
            ItemButton.contentOffset     = new Vector2(0, -1f);

            SelectedItem = new GUIStyle();
            SelectedItem.normal.background = ReorderableListResources.texHighlightColor;
            SelectedItem.normal.textColor  = Color.white;
            SelectedItem.fontSize          = 12;
        }
        static ReorderableListStyles()
        {
            Title                   = new GUIStyle();
            Title.border            = new RectOffset(2, 2, 2, 1);
            Title.margin            = new RectOffset(5, 5, 5, 0);
            Title.padding           = new RectOffset(5, 5, 0, 0);
            Title.alignment         = TextAnchor.MiddleLeft;
            Title.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.TitleBackground);
            Title.normal.textColor  = EditorGUIUtility.isProSkin
                                ? new Color(0.8f, 0.8f, 0.8f)
                                : new Color(0.2f, 0.2f, 0.2f);

            Container                   = new GUIStyle();
            Container.border            = new RectOffset(2, 2, 1, 2);
            Container.margin            = new RectOffset(5, 5, 5, 5);
            Container.padding           = new RectOffset(1, 1, 2, 2);
            Container.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.ContainerBackground);

            Container2 = new GUIStyle(Container);
            Container2.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.Container2Background);

            FooterButton                   = new GUIStyle();
            FooterButton.fixedHeight       = 16;
            FooterButton.alignment         = TextAnchor.MiddleCenter;
            FooterButton.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button_Normal);
            FooterButton.active.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button_Active);
            FooterButton.border            = new RectOffset(3, 3, 1, 3);
            FooterButton.padding           = new RectOffset(2, 2, 0, 2);
            FooterButton.clipping          = TextClipping.Overflow;

            FooterButton2                   = new GUIStyle();
            FooterButton2.fixedHeight       = 18;
            FooterButton2.alignment         = TextAnchor.MiddleCenter;
            FooterButton2.normal.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button2_Normal);
            FooterButton2.active.background = ReorderableListResources.GetTexture(ReorderableListTexture.Button2_Active);
            FooterButton2.border            = new RectOffset(3, 3, 3, 3);
            FooterButton2.padding           = new RectOffset(2, 2, 2, 2);
            FooterButton2.clipping          = TextClipping.Overflow;

            ItemButton = new GUIStyle();
            ItemButton.active.background = ReorderableListResources.CreatePixelTexture("Dark Pixel (List GUI)", new Color32(18, 18, 18, 255));
            ItemButton.imagePosition     = ImagePosition.ImageOnly;
            ItemButton.alignment         = TextAnchor.MiddleCenter;

            SelectedItem = new GUIStyle();
            SelectedItem.normal.background = ReorderableListResources.texHighlightColor;
            SelectedItem.normal.textColor  = Color.white;
            SelectedItem.fontSize          = 12;
        }
        public void Draw(string label, IList list, System.Action onAdd, System.Action <object> onEach = null, bool addButton = true, bool removeButton = true, int maxCount = -1, int minCount = -1)
        {
            var backStyle = ME.Utilities.CacheStyle("UI.Windows.ABTesting.Back", "Back", (name) => {
                var _style        = new GUIStyle("LargeButtonLeft");
                _style.fixedWidth = 0f;
                return(_style);
            });
            var removeButtonStyle = ME.Utilities.CacheStyle("UI.Windows.ABTesting.RemoveButton", "Remove", (name) => {
                var _style         = new GUIStyle("LargeButtonRight");
                _style.fixedWidth  = 30f;
                _style.fixedHeight = 30f;
                return(_style);
            });
            var addButtonStyle = ME.Utilities.CacheStyle("UI.Windows.ABTesting.AddButton", "Add", (name) => {
                var _style        = new GUIStyle("Button");
                _style.fixedWidth = 30f;
                return(_style);
            });
            var centeredLabel = ME.Utilities.CacheStyle("UI.Windows.ABTesting.CenteredLabel", "CenteredLabel", (name) => {
                var _style    = new GUIStyle(EditorStyles.centeredGreyMiniLabel);
                _style.margin = new RectOffset(0, 30, 0, 0);
                return(_style);
            });


            GUILayout.BeginVertical();
            {
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Label(label, EditorStyles.boldLabel);

                    GUILayout.FlexibleSpace();

                    if (addButton == true)
                    {
                        var iconAddNormal = ReorderableListResources.GetTexture(ReorderableListTexture.Icon_Add_Normal);
                        if (GUILayout.Button(iconAddNormal, addButtonStyle) == true)
                        {
                            onAdd();
                        }
                    }
                }
                GUILayout.EndHorizontal();

                if (maxCount >= 0)
                {
                    if (list.Count > maxCount)
                    {
                        list.RemoveAt(list.Count - 1);
                    }
                }

                if (minCount >= 0)
                {
                    if (list.Count < minCount)
                    {
                        onAdd();
                    }
                }

                for (int i = 0; i < list.Count; ++i)
                {
                    var item = list[i];
                    if (onEach != null)
                    {
                        onEach(item);
                    }

                    GUILayout.BeginHorizontal();
                    {
                        GUILayout.BeginVertical(backStyle);
                        {
                            (item as IBaseCondition).OnGUI();
                        }
                        GUILayout.EndVertical();

                        if (removeButton == true)
                        {
                            var iconNormal = ReorderableListResources.GetTexture(ReorderableListTexture.Icon_Remove_Normal);
                            if (GUILayout.Button(iconNormal, removeButtonStyle) == true)
                            {
                                list.RemoveAt(i);
                                break;
                            }
                        }
                    }
                    GUILayout.EndHorizontal();

                    if (i < list.Count - 1)
                    {
                        GUILayout.Label("- OR -", centeredLabel);
                    }
                }
            }
            GUILayout.EndHorizontal();
        }