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);
}
}
}
}