예제 #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);
                        }
                    }
                }
            }
        }
예제 #2
0
        public void DrawHeaderGUI()
        {
            var groupManageInfos = assetManageManager.GroupInfos.ToArray();

            var groupNames = groupManageInfos.Select(x => x.groupName).ToArray();

            var selection = selectionGroupInfo != null?
                            groupManageInfos.IndexOf(x => x.groupName == selectionGroupInfo.groupName) :
                                -1;

            if (nameEditMode != NameEditMode.None)
            {
                GUILayout.FlexibleSpace();

                EditorGUI.BeginChangeCheck();

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

                if (EditorGUI.EndChangeCheck())
                {
                    if (!string.IsNullOrEmpty(editGroupName))
                    {
                        switch (nameEditMode)
                        {
                        case NameEditMode.New:
                            var groupManageInfo = new GroupInfo(editGroupName);
                            assetManageManager.AddGroupInfo(groupManageInfo);
                            selectionGroupInfo = groupManageInfo;
                            break;

                        case NameEditMode.Rename:

                            if (selectionGroupInfo.groupName != editGroupName)
                            {
                                assetManageManager.RenameGroupInfo(selectionGroupInfo.groupName, editGroupName);

                                selectionGroupInfo = assetManageManager.GroupInfos.FirstOrDefault(x => x.groupName == editGroupName);

                                var groupAssetPaths = assetManageManager.GetGroupAssetPaths(selectionGroupInfo);

                                UpdateAssetInfo(groupAssetPaths);
                            }
                            break;
                        }

                        BuildManageInfoViews();
                    }

                    nameEditMode = NameEditMode.None;

                    editGroupName = null;

                    assetManageModel.RequestRepaint();
                }
            }
            else
            {
                if (GUILayout.Button("追加", EditorStyles.toolbarButton))
                {
                    nameEditMode = NameEditMode.New;
                }

                if (selectionGroupInfo != null)
                {
                    if (GUILayout.Button("削除", EditorStyles.toolbarButton))
                    {
                        if (EditorUtility.DisplayDialog("確認", "グループを削除します", "実行", "中止"))
                        {
                            var assetPaths = assetManageManager.GetGroupAssetPaths(selectionGroupInfo);

                            assetManageManager.DeleteGroupInfo(selectionGroupInfo);

                            selectionGroupInfo = assetManageManager.GroupInfos.First();

                            UpdateAssetInfo(assetPaths);

                            BuildManageInfoViews();

                            assetManageModel.RequestRepaint();

                            return;
                        }
                    }

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

                        editGroupName = selectionGroupInfo.groupName;

                        assetManageModel.RequestRepaint();

                        return;
                    }
                }

                GUILayout.FlexibleSpace();

                EditorGUI.BeginChangeCheck();

                selection = EditorGUILayout.Popup(string.Empty, selection, groupNames, EditorStyles.toolbarDropDown, GUILayout.Width(180f));

                if (EditorGUI.EndChangeCheck())
                {
                    selectionGroupInfo = groupManageInfos[selection];

                    BuildManageInfoViews();
                }
            }
        }