/** ********************************************************************************
        * @summary TreeView上で表示するテキスト取得
        ***********************************************************************************/
        public string GetDisplayText(EHeaderColumnId id)
        {
            switch (id)
            {
            case EHeaderColumnId.TextureName:
                return(Texture.name);

            case EHeaderColumnId.TextureType:
                return(TextureImporter.textureType.ToString());

            case EHeaderColumnId.NPot:
                return(TextureImporter.npotScale.ToString());

            case EHeaderColumnId.MaxSize:
                return(TextureImporter.maxTextureSize.ToString());

            case EHeaderColumnId.GenerateMips:
                return(TextureImporter.mipmapEnabled.ToString());

            case EHeaderColumnId.AlphaIsTransparency:
                return(TextureImporter.alphaIsTransparency.ToString());

            case EHeaderColumnId.TextureSize:
                return($"{Texture.width}x{Texture.height}");

            case EHeaderColumnId.DataSize:
                return(textureDataSizeText);

            default:
                return("---");
            }
        }
        /** ********************************************************************************
        * @summary TreeView上で表示するデータ取得
        ***********************************************************************************/
        public object GetDisplayData(EHeaderColumnId id)
        {
            switch (id)
            {
            case EHeaderColumnId.TextureName:
                return(Texture.name);

            case EHeaderColumnId.TextureType:
                return(TextureImporter.textureType);

            case EHeaderColumnId.NPot:
                return(TextureImporter.npotScale);

            case EHeaderColumnId.MaxSize:
                return(TextureImporter.maxTextureSize);

            case EHeaderColumnId.GenerateMips:
                return(TextureImporter.mipmapEnabled);

            case EHeaderColumnId.AlphaIsTransparency:
                return(TextureImporter.alphaIsTransparency);

            case EHeaderColumnId.TextureSize:
                return(new Vector2Int(Texture.width, Texture.height));

            case EHeaderColumnId.DataSize:
                return(TextureByteLength);

            default:
                return(-1);
            }
        }
        private void SortByMultipleColumns()
        {
            var sortedColumns = multiColumnHeader.state.sortedColumns;

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

            //var searchStrings = (multiColumnHeader.state as TextureColumnHeaderState).SearchStrings;
            var searchStates = (multiColumnHeader.state as TextureColumnHeaderState).SearchStates;
            var children     = GetRows() // 現在TreeViewに表示されている行を取得(rootItem.childrenを使うと全行が取得されてしまうので注意)
                               .Cast <TextureTreeViewItem>()
                                         //.Where(l => l.data.DoesItemMatchSearch(searchStrings))
                               .Where(l => l.data.DoesItemMatchSearch(searchStates))
                               .ToArray();

            var orderedQuery = InitialOrder(children, sortedColumns);

            for (int i = 1; i < sortedColumns.Length; i++)
            {
                EHeaderColumnId sortOption = sortOptions[sortedColumns[i]];
                bool            ascending  = multiColumnHeader.IsSortedAscending(sortedColumns[i]);

                var sortSelector = sortSelectors[(int)sortOption];
                orderedQuery = orderedQuery.ThenBy(l => sortSelector(l.data), ascending);
            }

            rootItem.children = orderedQuery
                                .Cast <TreeViewItem>()
                                .ToList();
        }
        private IOrderedEnumerable <TextureTreeViewItem> InitialOrder(IEnumerable <TextureTreeViewItem> elements, int[] history)
        {
            EHeaderColumnId sortOption   = sortOptions[history[0]];
            bool            ascending    = multiColumnHeader.IsSortedAscending(history[0]);
            var             sortSelector = sortSelectors[(int)sortOption];

            return(elements.Order(l => sortSelector(l.data), ascending));
        }
        /** ********************************************************************************
        * @summary フィルタリングにマッチするか判定
        ***********************************************************************************/
        public bool DoesItemMatch(EHeaderColumnId headerId, TextureTreeElement element)
        {
            int typeAsBit       = -1;
            var textureImporter = element.TextureImporter;
            var texture         = element.Texture;

            switch (headerId)
            {
            case EHeaderColumnId.TextureName:
                return(DoesStringMatch(searchString, element.Texture.name));

            case EHeaderColumnId.TextureType:
                typeAsBit = (int)TypeBitConverter.ConvertTextureImpoterType(textureImporter.textureType);
                break;

            case EHeaderColumnId.NPot:
                typeAsBit = (int)TypeBitConverter.ConvertTextureImporterNPOTScale(textureImporter.npotScale);
                break;

            case EHeaderColumnId.MaxSize:
                typeAsBit = (int)TypeBitConverter.ConvertMaxTextureSize(textureImporter.maxTextureSize);
                break;

            case EHeaderColumnId.GenerateMips:
                typeAsBit = (int)TypeBitConverter.ConvertMipMapEnabled(textureImporter.mipmapEnabled);
                break;

            case EHeaderColumnId.AlphaIsTransparency:
                typeAsBit = (int)TypeBitConverter.ConvertAlphaIsTransparency(textureImporter.alphaIsTransparency);
                break;

            case EHeaderColumnId.TextureSize:
                return(DoesStringMatch(searchString, element.Texture.name));

            case EHeaderColumnId.DataSize:
                typeAsBit = (int)TypeBitConverter.ConvertDataSizeUnit(element.TextureByteLength);
                //return DoesSizeMatch(unit, element.TextureByteLength);
                break;

            default:
                return(true);
            }

            return((searchFilter & typeAsBit) > 0);
        }
        } = new List <TextureTreeElement>();                                                // 子の要素

        /** ********************************************************************************
        * @summary TreeView上のラベルのGUIStyle取得
        ***********************************************************************************/
        public GUIStyle GetLabelStyle(EHeaderColumnId id)
        {
            GUIStyle labelStyle = MyStyle.DefaultLabel;

            switch (id)
            {
            case EHeaderColumnId.TextureName:
            case EHeaderColumnId.TextureType:
                break;

            case EHeaderColumnId.NPot:
                if (TextureImporter.npotScale == TextureImporterNPOTScale.None)
                {
                    labelStyle = MyStyle.RedLabel;
                }
                break;

            case EHeaderColumnId.MaxSize:
                if (TextureImporter.maxTextureSize > ToolConfig.RedMaxTextureSize)
                {
                    labelStyle = MyStyle.RedLabel;
                }
                break;

            case EHeaderColumnId.GenerateMips:
                if (TextureImporter.mipmapEnabled == true)
                {
                    labelStyle = MyStyle.RedLabel;
                }
                break;

            case EHeaderColumnId.AlphaIsTransparency:
                break;

            case EHeaderColumnId.TextureSize:
                switch (Mathf.Min(Texture.width, Texture.height))
                {
                case int minSize when minSize > ToolConfig.RedTextureSize:
                    labelStyle = MyStyle.RedLabel;
                    break;

                case int minSize when minSize > ToolConfig.YellowTextureSize:
                    labelStyle = MyStyle.YellowLabel;
                    break;

                default:
                    labelStyle = MyStyle.DefaultLabel;
                    break;
                }
                break;

            case EHeaderColumnId.DataSize:
                switch ((int)TextureByteLength)
                {
                case int len when len > ToolConfig.RedDataSize:
                    labelStyle = MyStyle.RedLabel;
                    break;

                //case int len when len > ToolConfig.YellowDataSize:
                //    labelStyle = MyStyle.YellowLabel;
                //    break;
                default:
                    labelStyle = MyStyle.DefaultLabel;
                    break;
                }
                break;
            }
            return(labelStyle);
        }