void UpdateSpriteLibrary()
        {
            m_SpriteLibSelection.Clear();
            int categoryHash = SpriteResolver.ConvertFloatToInt(m_SpriteCategoryHash.floatValue);
            int labelHash    = SpriteResolver.ConvertFloatToInt(m_SpritelabelHash.floatValue);
            var spriteLib    = spriteResolver.GetComponentInParent <SpriteLibrary>();

            if (spriteLib != null)
            {
                foreach (var labels in spriteLib.labels)
                {
                    if (!m_SpriteLibSelection.ContainsKey(labels.hash))
                    {
                        var nameHash = labels.categoryList.Select(x => x.hash).Distinct().ToArray();
                        if (nameHash.Length > 0)
                        {
                            var selectionList = new SpriteCategorySelectionList()
                            {
                                names = nameHash.Select(x =>
                                {
                                    var v = labels.categoryList.FirstOrDefault(y => y.hash == x);
                                    return(v.name);
                                }).ToArray(),
                                nameHash = nameHash,
                                sprites  = nameHash.Select(x =>
                                {
                                    var v = labels.categoryList.FirstOrDefault(y => y.hash == x);
                                    return(v.sprite);
                                }).ToArray(),
                                categoryName     = labels.name,
                                categoryNameHash = labels.hash
                            };

                            m_SpriteLibSelection.Add(labels.hash, selectionList);
                        }
                    }
                }
            }
            m_CategorySelection        = new string[1 + m_SpriteLibSelection.Keys.Count];
            m_CategorySelection[0]     = TextContent.none;
            m_CategorySelectionHash    = new int[1 + m_SpriteLibSelection.Keys.Count];
            m_CategorySelectionHash[0] = SpriteLibraryAsset.GetStringHash(TextContent.none);
            for (int i = 0; i < m_SpriteLibSelection.Keys.Count; ++i)
            {
                var selection = m_SpriteLibSelection[m_SpriteLibSelection.Keys.ElementAt(i)];
                m_CategorySelection[i + 1]     = selection.categoryName;
                m_CategorySelectionHash[i + 1] = selection.categoryNameHash;
                if (selection.categoryNameHash == categoryHash)
                {
                    m_CategorySelectionIndex = i + 1;
                }
            }
            ValidateCategorySelectionIndexValue();
            if (m_CategorySelectionIndex > 0)
            {
                m_SpriteSelectorWidget.UpdateContents(m_SpriteLibSelection[m_CategorySelectionHash[m_CategorySelectionIndex]].sprites);
                if (m_SpriteLibSelection.ContainsKey(categoryHash))
                {
                    m_labelSelectionIndex = Array.FindIndex(m_SpriteLibSelection[categoryHash].nameHash, x => x == labelHash);
                }
            }
            spriteResolver.spriteLibChanged = false;
        }
        void UpdateSpriteLibrary()
        {
            m_SpriteLibSelection.Clear();

            var    spriteLib = spriteResolver.spriteLibrary;
            string categoryName = "", labelName = "";

            if (spriteLib != null)
            {
                GetCategoryAndLabelStringValue(out categoryName, out labelName);
                var enumerator = spriteLib.categoryNames;
                foreach (var category in spriteLib.categoryNames)
                {
                    if (!m_SpriteLibSelection.ContainsKey(category))
                    {
                        var entries = spriteLib.GetEntryNames(category);
                        if (entries == null)
                        {
                            entries = new string[0];
                        }

                        var selectionList = new SpriteCategorySelectionList()
                        {
                            entryNames = entries.ToArray(),
                            sprites    = entries.Select(x =>
                            {
                                return(spriteLib.GetSprite(category, x));
                            }).ToArray(),
                            categoryName = category,
                        };

                        m_SpriteLibSelection.Add(category, selectionList);
                    }
                }
            }
            m_CategorySelection    = new string[1 + m_SpriteLibSelection.Keys.Count];
            m_CategorySelection[0] = Style.noCategory.text;
            for (int i = 0; i < m_SpriteLibSelection.Keys.Count; ++i)
            {
                var selection = m_SpriteLibSelection[m_SpriteLibSelection.Keys.ElementAt(i)];
                m_CategorySelection[i + 1] = selection.categoryName;
                if (selection.categoryName == categoryName)
                {
                    m_CategorySelectionIndex = i + 1;
                }
            }
            ValidateCategorySelectionIndexValue();
            if (m_CategorySelectionIndex > 0)
            {
                categoryName = m_CategorySelection[m_CategorySelectionIndex];
                m_SpriteSelectorWidget.UpdateContents(
                    m_SpriteLibSelection[m_CategorySelection[m_CategorySelectionIndex]].sprites);
                if (m_SpriteLibSelection.ContainsKey(categoryName))
                {
                    m_LabelSelectionIndex = Array.FindIndex(m_SpriteLibSelection[categoryName].entryNames,
                                                            x => x == labelName);
                }
            }
            else
            {
                m_SpriteSelectorWidget.UpdateContents(new Sprite[0]);
            }
            spriteResolver.spriteLibChanged = false;
        }