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);
        }
Example #4
0
        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);
            }
        }
Example #7
0
        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();
        }