#if UNITY_EDITOR && UNITY_INPUT_SYSTEM_PROJECT_WIDE_ACTIONS using CmdEvents = UnityEngine.InputSystem.Editor.InputActionsEditorConstants.CommandEvents; using System.Collections.Generic; using System.Linq; using UnityEngine.UIElements; namespace UnityEngine.InputSystem.Editor { /// /// A list view to display the action maps of the currently opened input actions asset. /// internal class ActionMapsView : ViewBase { public ActionMapsView(VisualElement root, StateContainer stateContainer) : base(root, stateContainer) { m_ListView = root.Q("action-maps-list-view"); m_ListView.selectionType = UIElements.SelectionType.Single; m_ListView.reorderable = true; m_ListViewSelectionChangeFilter = new CollectionViewSelectionChangeFilter(m_ListView); m_ListViewSelectionChangeFilter.selectedIndicesChanged += (selectedIndices) => { Dispatch(Commands.SelectActionMap(((ActionMapData)m_ListView.selectedItem).mapName)); }; m_ListView.bindItem = (element, i) => { var treeViewItem = (InputActionMapsTreeViewItem)element; var mapData = (ActionMapData)m_ListView.itemsSource[i]; treeViewItem.label.text = mapData.mapName; treeViewItem.EditTextFinishedCallback = newName => ChangeActionMapName(i, newName); treeViewItem.EditTextFinished += treeViewItem.EditTextFinishedCallback; treeViewItem.userData = i; element.SetEnabled(!mapData.isDisabled); ContextMenu.GetContextMenuForActionMapItem(this, treeViewItem, i); }; m_ListView.makeItem = () => new InputActionMapsTreeViewItem(); m_ListView.unbindItem = (element, i) => { var treeViewElement = (InputActionMapsTreeViewItem)element; treeViewElement.Reset(); treeViewElement.EditTextFinished -= treeViewElement.EditTextFinishedCallback; }; m_ListView.itemsChosen += objects => { var item = m_ListView.GetRootElementForIndex(m_ListView.selectedIndex).Q(); item.FocusOnRenameTextField(); }; m_ListView.RegisterCallback(OnExecuteCommand); m_ListView.RegisterCallback(OnValidateCommand); m_ListView.RegisterCallback(OnPointerDown, TrickleDown.TrickleDown); // ISXB-748 - Scrolling the view causes a visual glitch with the rename TextField. As a work-around we // need to cancel the rename operation in this scenario. m_ListView.RegisterCallback(e => InputActionMapsTreeViewItem.CancelRename(), TrickleDown.TrickleDown); var treeView = root.Q("actions-tree-view"); m_ListView.AddManipulator(new DropManipulator(OnDroppedHandler, treeView)); m_ListView.itemIndexChanged += OnReorder; CreateSelector(Selectors.GetActionMapNames, Selectors.GetSelectedActionMap, (actionMapNames, actionMap, state) => new ViewState(actionMap, actionMapNames, state.GetDisabledActionMaps(actionMapNames.ToList()))); m_AddActionMapButton = root.Q