A game about forced loneliness, made by TACStudios
1#if UNITY_EDITOR
2using System.Collections.Generic;
3
4namespace UnityEngine.InputSystem.Editor
5{
6 internal abstract class AdvancedDropdown
7 {
8 protected Vector2 minimumSize { get; set; }
9 protected Vector2 maximumSize { get; set; }
10
11 internal AdvancedDropdownWindow m_WindowInstance;
12 internal AdvancedDropdownState m_State;
13 internal AdvancedDropdownDataSource m_DataSource;
14 internal AdvancedDropdownGUI m_Gui;
15
16 public AdvancedDropdown(AdvancedDropdownState state)
17 {
18 m_State = state;
19 }
20
21 public void Show(Rect rect)
22 {
23 if (m_WindowInstance != null)
24 {
25 m_WindowInstance.Close();
26 m_WindowInstance = null;
27 }
28 if (m_DataSource == null)
29 {
30 m_DataSource = new CallbackDataSource(BuildRoot, BuildCustomSearch);
31 }
32 if (m_Gui == null)
33 {
34 m_Gui = new AdvancedDropdownGUI();
35 }
36
37 m_WindowInstance = ScriptableObject.CreateInstance<AdvancedDropdownWindow>();
38 if (minimumSize != Vector2.zero)
39 m_WindowInstance.minSize = minimumSize;
40 if (maximumSize != Vector2.zero)
41 m_WindowInstance.maxSize = maximumSize;
42 m_WindowInstance.state = m_State;
43 m_WindowInstance.dataSource = m_DataSource;
44 m_WindowInstance.gui = m_Gui;
45 m_WindowInstance.windowClosed +=
46 w => { ItemSelected(w.GetSelectedItem()); };
47 m_WindowInstance.windowDestroyed += OnDestroy;
48 m_WindowInstance.Init(rect);
49 }
50
51 public void Reload()
52 {
53 m_WindowInstance?.ReloadData();
54 }
55
56 public void Repaint()
57 {
58 m_WindowInstance?.Repaint();
59 }
60
61 protected abstract AdvancedDropdownItem BuildRoot();
62
63 protected virtual AdvancedDropdownItem BuildCustomSearch(string searchString,
64 IEnumerable<AdvancedDropdownItem> elements)
65 {
66 return null;
67 }
68
69 protected virtual void ItemSelected(AdvancedDropdownItem item)
70 {
71 }
72
73 protected virtual void OnDestroy()
74 {
75 }
76 }
77}
78#endif