void OnGUI()
    {
        if (isAtlasDirty)
        {
            EditorUtility.SetDirty(uftAtlas);
            isAtlasDirty = false;
        }
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) });
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Atlas:");
        string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName);

        if (newName != uftAtlas.atlasName)
        {
            uftAtlas.atlasName = newName;
        }

        UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false);

        if (newMeta != atlasMetadata)
        {
            if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel")))
            {
                if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null)
                {
                    UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta);
                }
                atlasMetadata = newMeta;
            }
        }

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("new"))
        {
            if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel")))
            {
                onClickNew();
            }
        }
        if (GUILayout.Button("save"))
        {
            onClickSave();
        }
        EditorGUILayout.EndHorizontal();
        UFTAtlasSize newWidth  = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth);
        UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight);



        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Allign:");

        uftAtlas.borderSize = EditorGUILayout.IntField("border size", uftAtlas.borderSize);
        if (GUILayout.Button("allign") && uftAtlas != null && uftAtlas.atlasEntries.Count > 0)
        {
            uftAtlas.arrangeEntriesUsingUnityPackager();
        }



        if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight)
        {
            uftAtlas.atlasWidth  = newWidth;
            uftAtlas.atlasHeight = newHeight;

            if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null)
            {
                UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight);
            }
        }

        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:");
        if (uftAtlas.atlasEntries.Count > 0)
        {
            if (GUILayout.Button("trim alpha"))
            {
                uftAtlas.trimAllEntries();
            }
        }
        atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition);

        if (uftAtlas.atlasEntries.Count > 0)
        {
            List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString));
            names.Sort();
            foreach (string name in names)
            {
                EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f));
            }
        }
        EditorGUILayout.EndScrollView();
        EditorGUILayout.Separator();
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);


        GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight);
        uftAtlas.OnGUI();

        EditorGUILayout.EndScrollView();
        EditorGUILayout.Separator();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();


        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform)
        {
            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;     // show a drag-add icon on the mouse cursor
            if (Event.current.type == EventType.dragPerform)
            {
                HandleDroppedObjects(DragAndDrop.objectReferences);
            }

            DragAndDrop.AcceptDrag();
            Event.current.Use();
        }
    }