ShowFilterKeyTypeMenu() публичный статический Метод

public static ShowFilterKeyTypeMenu ( string current, Action Selected ) : void
current string
Selected Action
Результат void
Пример #1
0
        private void DoInspectorFilterGUI(NodeGUI node)
        {
            EditorGUILayout.HelpBox("Filter: Filter incoming assets by keywords and types. You can use regular expressions for keyword field.", MessageType.Info);
            UpdateNodeName(node);

            using (new EditorGUILayout.VerticalScope(GUI.skin.box)) {
                GUILayout.Label("Filter Settings:");
                for (int i = 0; i < node.filterContainsKeywords.Count; i++)
                {
                    Action messageAction = null;

                    using (new GUILayout.HorizontalScope()) {
                        if (GUILayout.Button("-", GUILayout.Width(30)))
                        {
                            node.BeforeSave();
                            node.filterContainsKeywords.RemoveAt(i);
                            node.filterContainsKeytypes.RemoveAt(i);
                            node.DeleteFilterOutputPoint(i);
                        }
                        else
                        {
                            var newContainsKeyword = node.filterContainsKeywords[i];

                            /*
                             *                                      generate keyword + keytype string for compare exists setting vs new modifying setting at once.
                             */
                            var currentKeywordsSource = new List <string>(node.filterContainsKeywords);
                            var currentKeytypesSource = new List <string>(node.filterContainsKeytypes);

                            var currentKeytype = currentKeytypesSource[i];

                            for (var j = 0; j < currentKeywordsSource.Count; j++)
                            {
                                currentKeywordsSource[j] = currentKeywordsSource[j] + currentKeytypesSource[j];
                            }

                            // remove current choosing one from compare target.
                            currentKeywordsSource.RemoveAt(i);
                            var currentKeywords = new List <string>(currentKeywordsSource);

                            GUIStyle s = new GUIStyle((GUIStyle)"TextFieldDropDownText");

                            IntegratedGUIFilter.ValidateFilter(
                                newContainsKeyword + currentKeytype,
                                currentKeywords,
                                () => {
                                s.fontStyle = FontStyle.Bold;
                                s.fontSize  = 12;
                            },
                                () => {
                                s.fontStyle = FontStyle.Bold;
                                s.fontSize  = 12;
                            }
                                );

                            using (new EditorGUILayout.HorizontalScope()) {
                                newContainsKeyword = EditorGUILayout.TextField(node.filterContainsKeywords[i], s, GUILayout.Width(120));
                                var currentIndex = i;
                                if (GUILayout.Button(node.filterContainsKeytypes[i], "Popup"))
                                {
                                    NodeGUI.ShowFilterKeyTypeMenu(
                                        node.filterContainsKeytypes[currentIndex],
                                        (string selectedTypeStr) => {
                                        node.BeforeSave();
                                        node.filterContainsKeytypes[currentIndex] = selectedTypeStr;
                                        node.Save();
                                    }
                                        );
                                }
                            }

                            if (newContainsKeyword != node.filterContainsKeywords[i])
                            {
                                node.BeforeSave();
                                node.filterContainsKeywords[i] = newContainsKeyword;
                                node.RenameFilterOutputPointLabel(i, node.filterContainsKeywords[i]);
                            }
                        }
                    }

                    if (messageAction != null)
                    {
                        using (new GUILayout.HorizontalScope()) {
                            messageAction.Invoke();
                        }
                    }
                }

                // add contains keyword interface.
                if (GUILayout.Button("+"))
                {
                    node.BeforeSave();
                    var addingIndex = node.filterContainsKeywords.Count;
                    var newKeyword  = AssetBundleGraphSettings.DEFAULT_FILTER_KEYWORD;

                    node.filterContainsKeywords.Add(newKeyword);
                    node.filterContainsKeytypes.Add(AssetBundleGraphSettings.DEFAULT_FILTER_KEYTYPE);

                    node.AddFilterOutputPoint(addingIndex, AssetBundleGraphSettings.DEFAULT_FILTER_KEYWORD);
                }
            }
        }
        private void DoInspectorFilterGUI(NodeGUI node)
        {
            EditorGUILayout.HelpBox("Filter: Filter incoming assets by keywords and types. You can use regular expressions for keyword field.", MessageType.Info);
            UpdateNodeName(node);

            using (new EditorGUILayout.VerticalScope(GUI.skin.box)) {
                GUILayout.Label("Filter Settings:");
                FilterEntry removing = null;
                for (int i = 0; i < node.Data.FilterConditions.Count; ++i)
                {
                    var cond = node.Data.FilterConditions[i];

                    Action messageAction = null;

                    using (new GUILayout.HorizontalScope()) {
                        if (GUILayout.Button("-", GUILayout.Width(30)))
                        {
                            removing = cond;
                        }
                        else
                        {
                            var newContainsKeyword = cond.FilterKeyword;

                            GUIStyle s = new GUIStyle((GUIStyle)"TextFieldDropDownText");

                            using (new EditorGUILayout.HorizontalScope()) {
                                newContainsKeyword = EditorGUILayout.TextField(cond.FilterKeyword, s, GUILayout.Width(120));
                                if (GUILayout.Button(cond.FilterKeytype, "Popup"))
                                {
                                    var ind = i;                                    // need this because of closure locality bug in unity C#
                                    NodeGUI.ShowFilterKeyTypeMenu(
                                        cond.FilterKeytype,
                                        (string selectedTypeStr) => {
                                        using (new RecordUndoScope("Modify Filter Type", node, true)){
                                            node.Data.FilterConditions[ind].FilterKeytype = selectedTypeStr;
                                        }
                                    }
                                        );
                                }
                            }

                            if (newContainsKeyword != cond.FilterKeyword)
                            {
                                using (new RecordUndoScope("Modify Filter Keyword", node, true)){
                                    cond.FilterKeyword = newContainsKeyword;
                                    // event must raise to propagate change to connection associated with point
                                    NodeGUIUtility.NodeEventHandler(new NodeEvent(NodeEvent.EventType.EVENT_CONNECTIONPOINT_LABELCHANGED, node, Vector2.zero, cond.ConnectionPoint));
                                }
                            }
                        }
                    }

                    if (messageAction != null)
                    {
                        using (new GUILayout.HorizontalScope()) {
                            messageAction.Invoke();
                        }
                    }
                }

                // add contains keyword interface.
                if (GUILayout.Button("+"))
                {
                    using (new RecordUndoScope("Add Filter Condition", node)){
                        node.Data.AddFilterCondition(
                            AssetBundleGraphSettings.DEFAULT_FILTER_KEYWORD,
                            AssetBundleGraphSettings.DEFAULT_FILTER_KEYTYPE);
                    }
                }

                if (removing != null)
                {
                    using (new RecordUndoScope("Remove Filter Condition", node, true)){
                        // event must raise to remove connection associated with point
                        NodeGUIUtility.NodeEventHandler(new NodeEvent(NodeEvent.EventType.EVENT_CONNECTIONPOINT_DELETED, node, Vector2.zero, removing.ConnectionPoint));
                        node.Data.RemoveFilterCondition(removing);
                    }
                }
            }
        }