AssetBundleGraph.NodeGUIEditor.DoInspectorFilterGUI C# (CSharp) Method

DoInspectorFilterGUI() private method

private DoInspectorFilterGUI ( NodeGUI node ) : void
node NodeGUI
return void
        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);
                    }
                }
            }
        }