#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