public static void ExportToPresets()
        {
            var activeObject = (Swatch)Selection.activeObject;

            SwatchPresetExporter.ExportToColorPresetLibrary(activeObject);
        }
        public override void OnInspectorGUI()
        {
            Swatch swatch = (Swatch)target;

            // Swatch
            {
                EditorGUILayout.LabelField("Swatch", EditorStyles.boldLabel);
                // if (swatch.colors != null && swatch.colors.Length > 0) {
                var startingRect = GUILayoutUtility.GetLastRect();
                if (SwatchrPaletteDrawer.DrawColorPallete(swatch, ref colorRef, true))
                {
                    Repaint();
                }

                if (swatch.numColors > 0)
                {
                    var   selectedColor    = swatch.GetColor(colorRef);
                    int   selectedColorRow = colorRef / SwatchrPaletteDrawer.itemsPerRow;
                    float selectedColorY   = selectedColorRow * EditorGUIUtility.singleLineHeight + EditorGUIUtility.singleLineHeight;
                    // EditorGUI.LabelField(colorKeyRect, ""+colorRef);
                    var changeColorRect = new Rect(startingRect.x + SwatchrPaletteDrawer.itemsPerRow * EditorGUIUtility.singleLineHeight + 30, startingRect.y + selectedColorY, 64, EditorGUIUtility.singleLineHeight);

                    EditorGUI.BeginChangeCheck();
                    var newColor = EditorGUI.ColorField(changeColorRect, selectedColor);
                    if (EditorGUI.EndChangeCheck())
                    {
                        swatch.colors[colorRef] = newColor;
                        swatch.SignalChange();
                        GameViewRepaint();
                    }
                    int x = (int)(changeColorRect.x + changeColorRect.width + 2);
                    int y = (int)(changeColorRect.y + changeColorRect.height - EditorGUIUtility.singleLineHeight);
                    if (SwatchrPaletteDrawer.DrawDeleteButton(x, y))
                    {
                        if (colorRef + 1 < swatch.colors.Length)
                        {
                            Array.Copy(swatch.colors, colorRef + 1, swatch.colors, colorRef, swatch.colors.Length - colorRef - 1);
                        }
                        Array.Resize <Color>(ref swatch.colors, swatch.colors.Length - 1);
                        if (colorRef >= swatch.colors.Length)
                        {
                            colorRef = swatch.colors.Length - 1;
                            if (colorRef < 0)
                            {
                                colorRef = 0;
                            }
                        }
                        swatch.SignalChange();
                        GameViewRepaint();
                    }
                }
                //}
            }

            // Add
            {
                EditorGUILayout.LabelField("Add", EditorStyles.boldLabel);
                if (GUILayout.Button("Add .ASE"))
                {
                    var path = EditorUtility.OpenFilePanel("Swatchr Import", "", "ase");
                    if (path != null && path != string.Empty)
                    {
                        Debug.Log("[SwatchEditorGUI] path " + path);
                        SwatchASEFile aseFile = new SwatchASEFile(path);
                        swatch.AddColorsFromASEFile(aseFile);
                        GameViewRepaint();
                    }
                }

                if (GUILayout.Button("Add .ASE Folder"))
                {
                    var path = EditorUtility.OpenFolderPanel("Swatchr Folder Import", "", "");
                    //var path = EditorUtility.OpenFilePanel("Import", "", "ase");
                    if (path != null && path != string.Empty)
                    {
                        var files = Directory.GetFiles(path);
                        for (int i = 0; i < files.Length; i++)
                        {
                            string file = files[i];
                            if (file.EndsWith(".ase"))
                            {
                                SwatchASEFile aseFile = new SwatchASEFile(file);
                                swatch.AddColorsFromASEFile(aseFile);
                                GameViewRepaint();
                            }
                        }
                    }
                }

                if (GUILayout.Button("Add Texture"))
                {
                    var path = EditorUtility.OpenFilePanel("Swatchr Import Texture", "", "png");
                    if (path != null && path != string.Empty)
                    {
                        Debug.Log("[SwatchEditorGUI] importing texture at path " + path);

                        var bytes = File.ReadAllBytes(path);
                        var tex   = new Texture2D(1, 1);
                        tex.LoadImage(bytes);
                        var pixels = tex.GetPixels();
                        if (pixels != null && pixels.Length > 0)
                        {
                            //int i = swatch.colors.Length;
                            int i = 0;
                            Array.Resize <Color>(ref swatch.colors, pixels.Length);
                            for (int j = 0; j < pixels.Length; j++)
                            {
                                swatch.colors[i++] = pixels[j];
                            }
                            swatch.SignalChange();
                            GameViewRepaint();
                        }
                    }
                }
            }

            // Replace
            {
                EditorGUILayout.LabelField("Replace", EditorStyles.boldLabel);
                if (replace)
                {
                    // Object Field
                    replaceObject = (Swatch)EditorGUILayout.ObjectField(replaceObject, typeof(Swatch), false);
                    // Confirm
                    EditorGUI.BeginDisabledGroup(replaceObject == null);
                    if (GUILayout.Button("Replace"))
                    {
                        swatch.ReplaceSelfWithOtherSwatch(replaceObject);
                        GameViewRepaint();
                        replaceObject = null;
                        //replace = false;
                    }
                    EditorGUI.EndDisabledGroup();
                }
                // Start & Cancel
                if (GUILayout.Button(replace ? "Cancel" : "Replace"))
                {
                    replace       = !replace;
                    replaceObject = null;
                }
            }

            // Merge
            {
                EditorGUILayout.LabelField("Merge", EditorStyles.boldLabel);
                if (merge)
                {
                    // Object Field
                    mergeObject = (Swatch)EditorGUILayout.ObjectField(mergeObject, typeof(Swatch), false);
                    // Confirm
                    EditorGUI.BeginDisabledGroup(mergeObject == null);
                    if (GUILayout.Button("Merge"))
                    {
                        swatch.AddColorsFromOtherSwatch(mergeObject);
                        GameViewRepaint();
                        mergeObject = null;
                        merge       = false;
                    }
                    EditorGUI.EndDisabledGroup();
                }
                // Start & Cancel
                if (GUILayout.Button(merge ? "Cancel" : "Merge"))
                {
                    mergeObject = null;
                    merge       = !merge;
                }
            }

            // Export
            {
                EditorGUILayout.LabelField("Export", EditorStyles.boldLabel);
                if (GUILayout.Button("Export To Color Picker Presets"))
                {
                    SwatchPresetExporter.ExportToColorPresetLibrary(swatch);
                }
                if (GUILayout.Button("Export To Texture"))
                {
                    SwatchCreator.ExportSwatchToTexture();
                }
                EditorGUILayout.Space();
            }

            // Save
            if (GUILayout.Button("Save"))
            {
                EditorUtility.SetDirty(swatch);
                AssetDatabase.SaveAssets();
            }
        }