1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #if UNITY_EDITOR
- using System.Collections.Generic;
- using System.Linq;
-
- namespace UnityEngine.InputSystem.Editor
- {
- internal class MultiLevelDataSource : AdvancedDropdownDataSource
- {
- private string[] m_DisplayedOptions;
- internal string[] displayedOptions
- {
- set { m_DisplayedOptions = value; }
- }
-
- private string m_Label = "";
- internal string label
- {
- set { m_Label = value; }
- }
-
- internal MultiLevelDataSource()
- {
- }
-
- public MultiLevelDataSource(string[] displayOptions)
- {
- m_DisplayedOptions = displayOptions;
- }
-
- protected override AdvancedDropdownItem FetchData()
- {
- var rootGroup = new AdvancedDropdownItem(m_Label);
- m_SearchableElements = new List<AdvancedDropdownItem>();
-
- for (int i = 0; i < m_DisplayedOptions.Length; i++)
- {
- var menuPath = m_DisplayedOptions[i];
- var paths = menuPath.Split('/');
-
- AdvancedDropdownItem parent = rootGroup;
- for (var j = 0; j < paths.Length; j++)
- {
- var path = paths[j];
- if (j == paths.Length - 1)
- {
- var element = new MultiLevelItem(path, menuPath);
- element.elementIndex = i;
- parent.AddChild(element);
- m_SearchableElements.Add(element);
- continue;
- }
-
- var groupPathId = paths[0];
- for (int k = 1; k <= j; k++)
- groupPathId += "/" + paths[k];
-
- var group = parent.children.SingleOrDefault(c => ((MultiLevelItem)c).stringId == groupPathId);
- if (group == null)
- {
- group = new MultiLevelItem(path, groupPathId);
- parent.AddChild(group);
- }
- parent = group;
- }
- }
- return rootGroup;
- }
-
- class MultiLevelItem : AdvancedDropdownItem
- {
- internal string stringId;
- public MultiLevelItem(string path, string menuPath) : base(path)
- {
- stringId = menuPath;
- id = menuPath.GetHashCode();
- }
-
- public override string ToString()
- {
- return stringId;
- }
- }
- }
- }
-
- #endif // UNITY_EDITOR
|