Example #1
0
        public void DrawGUI()
        {
            var selection = categoryNames != null?categoryNames.IndexOf(x => x == currentCategory) : -1;

            using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
            {
                if (nameEditMode != NameEditMode.None)
                {
                    GUILayout.FlexibleSpace();

                    EditorGUI.BeginChangeCheck();

                    editCategoryName = EditorGUILayout.DelayedTextField(editCategoryName, GUILayout.Width(250f));

                    if (EditorGUI.EndChangeCheck())
                    {
                        if (editCategoryName == ExternalResources.ShareCategoryName)
                        {
                            EditorUtility.DisplayDialog("Error", "This name is reserved and cannot be used..", "Close");
                        }
                        else if (!string.IsNullOrEmpty(editCategoryName))
                        {
                            switch (nameEditMode)
                            {
                            case NameEditMode.New:
                            {
                                categoryNames.Add(editCategoryName);

                                currentCategory = editCategoryName;
                            }
                            break;

                            case NameEditMode.Rename:
                            {
                                if (currentCategory != editCategoryName)
                                {
                                    assetManagement.RenameCategory(currentCategory, editCategoryName);

                                    currentCategory = editCategoryName;

                                    categoryNames = assetManagement.GetAllCategoryNames().ToList();
                                }
                            }
                            break;
                            }
                        }

                        nameEditMode = NameEditMode.None;

                        editCategoryName = null;

                        if (onChangeSelectCategory != null)
                        {
                            onChangeSelectCategory.OnNext(Unit.Default);
                        }

                        if (onRequestRepaint != null)
                        {
                            onRequestRepaint.OnNext(Unit.Default);
                        }
                    }

                    if (GUILayout.Button("Cancel", EditorStyles.toolbarButton))
                    {
                        nameEditMode = NameEditMode.None;

                        editCategoryName = null;
                    }
                }
                else
                {
                    if (currentCategory != ExternalResources.ShareCategoryName)
                    {
                        if (GUILayout.Button("Add", EditorStyles.toolbarButton))
                        {
                            nameEditMode = NameEditMode.New;
                        }

                        if (!string.IsNullOrEmpty(currentCategory))
                        {
                            if (GUILayout.Button("Delete", EditorStyles.toolbarButton))
                            {
                                if (EditorUtility.DisplayDialog("Confirm", "Remove selection category.", "Apply", "Cancel"))
                                {
                                    assetManagement.DeleteCategory(currentCategory);

                                    categoryNames = assetManagement.GetAllCategoryNames().ToList();

                                    if (onChangeSelectCategory != null)
                                    {
                                        onChangeSelectCategory.OnNext(Unit.Default);
                                    }

                                    if (onRequestRepaint != null)
                                    {
                                        onRequestRepaint.OnNext(Unit.Default);
                                    }

                                    return;
                                }
                            }

                            if (GUILayout.Button("Rename", EditorStyles.toolbarButton))
                            {
                                nameEditMode = NameEditMode.Rename;

                                editCategoryName = currentCategory;

                                if (onRequestRepaint != null)
                                {
                                    onRequestRepaint.OnNext(Unit.Default);
                                }

                                return;
                            }
                        }
                    }

                    GUILayout.FlexibleSpace();

                    // 検索.

                    Action <string> onChangeSearchText = x =>
                    {
                        searchText = x;
                    };

                    Action onSearchCancel = () =>
                    {
                        searchText = string.Empty;
                    };

                    EditorLayoutTools.DrawToolbarSearchTextField(searchText, onChangeSearchText, onSearchCancel, GUILayout.Width(200f));

                    // カテゴリー選択.

                    EditorGUI.BeginChangeCheck();

                    var categoryName = categoryNames.ElementAtOrDefault(selection);

                    var displayCategoryNames = GetDisplayCategoryNames();

                    displayCategoryNames = displayCategoryNames.OrderBy(x => x, new NaturalComparer()).ToList();

                    var index = displayCategoryNames.IndexOf(x => x == categoryName);

                    var displayLabels = displayCategoryNames.Select(x => ConvertSlashToUnicodeSlash(x)).ToArray();

                    index = EditorGUILayout.Popup(string.Empty, index, displayLabels, EditorStyles.toolbarDropDown, GUILayout.Width(250f));

                    if (EditorGUI.EndChangeCheck())
                    {
                        selection = categoryNames.IndexOf(x => x == displayCategoryNames[index]);

                        currentCategory = categoryNames[selection];

                        if (onChangeSelectCategory != null)
                        {
                            onChangeSelectCategory.OnNext(Unit.Default);
                        }
                    }
                }
            }
        }