void ParseActionMap(ActionMapTreeItem actionMapItem, InputActionMap actionMap, SerializedProperty actionMapProperty) { var bindingsArrayProperty = actionMapItem.bindingsProperty; var actionsArrayProperty = actionMapItem.actionsProperty; for (var i = 0; i < actionsArrayProperty.arraySize; i++) { var action = actionMap.actions[i]; var actionItem = new ActionTreeItem(actionMapProperty, action, actionsArrayProperty, i); var actionName = action.name; var bindingsCount = InputActionSerializationHelpers.GetBindingCount(bindingsArrayProperty, actionName); bool actionSearchMatched = IsSearching() && actionName.ToLower().Contains(m_NameFilter.ToLower()); CompositeGroupTreeItem compositeGroupTreeItem = null; for (var j = 0; j < bindingsCount; j++) { var bindingProperty = InputActionSerializationHelpers.GetBinding(bindingsArrayProperty, actionName, j); var binding = action.bindings[j]; if (!string.IsNullOrEmpty(m_GroupFilter) && !binding.groups.Split(';').Contains(m_GroupFilter)) { continue; } if (binding.isComposite) { compositeGroupTreeItem = new CompositeGroupTreeItem(actionMap.name, binding, bindingProperty, j); actionItem.AddChild(compositeGroupTreeItem); continue; } if (binding.isPartOfComposite) { var compositeItem = new CompositeTreeItem(actionMap.name, binding, bindingProperty, j); if (compositeGroupTreeItem != null) { compositeGroupTreeItem.AddChild(compositeItem); } continue; } compositeGroupTreeItem = null; var bindingsItem = new BindingTreeItem(actionMap.name, binding, bindingProperty, j); if (!actionSearchMatched && IsSearching() && !binding.path.ToLower().Contains(m_NameFilter.ToLower())) { continue; } actionItem.AddChild(bindingsItem); } if (actionSearchMatched || IsSearching() && actionItem.children != null && actionItem.children.Any()) { actionMapItem.AddChild(actionItem); } else if (!IsSearching()) { actionMapItem.AddChild(actionItem); } } }
public static ActionTreeItem AddTo(TreeViewItem parent, SerializedProperty actionMapProperty, SerializedProperty actionProperty) { var item = new ActionTreeItem(actionMapProperty, actionProperty); item.depth = parent.depth + 1; item.displayName = item.name; parent.AddChild(item); return(item); }
TreeViewItem BuildFromActionSerializedProperty() { var bindingsArrayProperty = m_ActionSerializedProperty.FindPropertyRelative("m_SingletonActionBindings"); var actionName = m_ActionSerializedProperty.FindPropertyRelative("m_Name").stringValue; var actionItem = new ActionTreeItem(null, m_ActionSerializedProperty, 0); actionItem.children = new List <TreeViewItem>(); actionItem.depth = -1; ParseBindings(actionItem, "", actionName, bindingsArrayProperty, 0); return(actionItem); }
private void ParseAction(TreeViewItem parentTreeItem, SerializedProperty actionMapProperty, SerializedProperty actionsArrayProperty, int index, int depth) { var bindingsArrayProperty = actionMapProperty.FindPropertyRelative("m_Bindings"); var actionMapName = actionMapProperty.FindPropertyRelative("m_Name").stringValue; var actionProperty = actionsArrayProperty.GetArrayElementAtIndex(index); var actionItem = new ActionTreeItem(actionMapProperty, actionProperty, index); actionItem.depth = depth; var actionName = actionItem.actionName; ParseBindings(actionItem, actionMapName, actionName, bindingsArrayProperty, depth + 1); parentTreeItem.AddChild(actionItem); }
private void AddActionsTo(TreeViewItem parent, bool addBindings) { var actionsArrayProperty = this.actionsArrayProperty; Debug.Assert(actionsArrayProperty != null, $"Cannot find m_Actions in {property}"); for (var i = 0; i < actionsArrayProperty.arraySize; i++) { var actionProperty = actionsArrayProperty.GetArrayElementAtIndex(i); var actionItem = ActionTreeItem.AddTo(parent, property, actionProperty); if (addBindings) { actionItem.AddBindingsTo(actionItem); } } }
private void ParseAction(TreeViewItem parentTreeItem, SerializedProperty actionMapProperty, SerializedProperty actionsArrayProperty, int index, int depth) { var bindingsArrayProperty = actionMapProperty.FindPropertyRelative("m_Bindings"); var actionMapName = actionMapProperty.FindPropertyRelative("m_Name").stringValue; var actionProperty = actionsArrayProperty.GetArrayElementAtIndex(index); var actionItem = new ActionTreeItem(actionMapProperty, actionProperty, index); actionItem.depth = depth; var actionName = actionItem.actionName; ParseBindings(actionItem, actionMapName, actionName, bindingsArrayProperty, depth + 1); bool actionSearchMatched = IsSearching() && actionName.ToLower().Contains(m_NameFilter.ToLower()); if (actionSearchMatched || IsSearching() && actionItem.children != null && actionItem.children.Any()) { parentTreeItem.AddChild(actionItem); } else if (!IsSearching()) { parentTreeItem.AddChild(actionItem); } }
public void SelectNewBindingRow(ActionTreeItem actionLine) { // Since the tree is rebuilt, we need to find action line with matching id of the current tree ActionTreeItem action = (ActionTreeItem)FindItem(actionLine.id, rootItem); var newRow = action.children.Last(); if (newRow.hasChildren) { newRow = newRow.children.First(); } SetSelection(new List <int>() { newRow.id }); var selectedRow = FindItem(newRow.id, rootItem); while (selectedRow.parent != null) { SetExpanded(selectedRow.id, true); selectedRow = selectedRow.parent; } OnSelectionChanged(); }