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