Maze / Library /PackageCache /com.unity.inputsystem@1.6.1 /InputSystem /Editor /Internal /AdvancedDropdown /AdvancedDropdownState.cs
| using System; | |
| using System.Linq; | |
| namespace UnityEngine.InputSystem.Editor | |
| { | |
| [] | |
| internal class AdvancedDropdownState | |
| { | |
| [] | |
| private class AdvancedDropdownItemState | |
| { | |
| public AdvancedDropdownItemState(AdvancedDropdownItem item) | |
| { | |
| itemId = item.id; | |
| } | |
| public int itemId; | |
| public int selectedIndex = -1; | |
| public Vector2 scroll; | |
| } | |
| [] | |
| private AdvancedDropdownItemState[] states = new AdvancedDropdownItemState[0]; | |
| private AdvancedDropdownItemState m_LastSelectedState; | |
| private AdvancedDropdownItemState GetStateForItem(AdvancedDropdownItem item) | |
| { | |
| if (m_LastSelectedState != null && m_LastSelectedState.itemId == item.id) | |
| return m_LastSelectedState; | |
| for (int i = 0; i < states.Length; i++) | |
| { | |
| if (states[i].itemId == item.id) | |
| { | |
| m_LastSelectedState = states[i]; | |
| return m_LastSelectedState; | |
| } | |
| } | |
| Array.Resize(ref states, states.Length + 1); | |
| states[states.Length - 1] = new AdvancedDropdownItemState(item); | |
| m_LastSelectedState = states[states.Length - 1]; | |
| return states[states.Length - 1]; | |
| } | |
| internal void MoveDownSelection(AdvancedDropdownItem item) | |
| { | |
| var state = GetStateForItem(item); | |
| var selectedIndex = state.selectedIndex; | |
| do | |
| { | |
| ++selectedIndex; | |
| } | |
| while (selectedIndex < item.children.Count() && item.children.ElementAt(selectedIndex).IsSeparator()); | |
| if (selectedIndex >= item.children.Count()) | |
| selectedIndex = 0; | |
| if (selectedIndex < item.children.Count()) | |
| SetSelectionOnItem(item, selectedIndex); | |
| } | |
| internal void MoveUpSelection(AdvancedDropdownItem item) | |
| { | |
| var state = GetStateForItem(item); | |
| var selectedIndex = state.selectedIndex; | |
| do | |
| { | |
| --selectedIndex; | |
| } | |
| while (selectedIndex >= 0 && item.children.ElementAt(selectedIndex).IsSeparator()); | |
| if (selectedIndex < 0) | |
| selectedIndex = item.children.Count() - 1; | |
| if (selectedIndex >= 0) | |
| SetSelectionOnItem(item, selectedIndex); | |
| } | |
| internal void SetSelectionOnItem(AdvancedDropdownItem item, int selectedIndex) | |
| { | |
| var state = GetStateForItem(item); | |
| if (selectedIndex < 0) | |
| { | |
| state.selectedIndex = 0; | |
| } | |
| else if (selectedIndex >= item.children.Count()) | |
| { | |
| state.selectedIndex = item.children.Count() - 1; | |
| } | |
| else | |
| { | |
| state.selectedIndex = selectedIndex; | |
| } | |
| } | |
| internal void ClearSelectionOnItem(AdvancedDropdownItem item) | |
| { | |
| GetStateForItem(item).selectedIndex = -1; | |
| } | |
| internal int GetSelectedIndex(AdvancedDropdownItem item) | |
| { | |
| return GetStateForItem(item).selectedIndex; | |
| } | |
| internal void SetSelectedIndex(AdvancedDropdownItem item, int index) | |
| { | |
| GetStateForItem(item).selectedIndex = index; | |
| } | |
| internal AdvancedDropdownItem GetSelectedChild(AdvancedDropdownItem item) | |
| { | |
| var index = GetSelectedIndex(item); | |
| if (!item.children.Any() || index < 0 || index >= item.children.Count()) | |
| return null; | |
| return item.children.ElementAt(index); | |
| } | |
| internal Vector2 GetScrollState(AdvancedDropdownItem item) | |
| { | |
| return GetStateForItem(item).scroll; | |
| } | |
| internal void SetScrollState(AdvancedDropdownItem item, Vector2 scrollState) | |
| { | |
| GetStateForItem(item).scroll = scrollState; | |
| } | |
| } | |
| } | |