using System; using Unity.Cloud.Collaborate.UserInterface; using UnityEditor; using UnityEngine; using UnityEngine.UIElements; namespace Unity.Cloud.Collaborate.Components.Menus { internal class FloatingMenuItem : VisualElement { const string k_UssClassName = "unity-floating-menu-item"; /// /// Location the uss file for this element is stored. /// static readonly string k_StylePath = $"{CollaborateWindow.StylePath}/{nameof(FloatingMenuItem)}.uss"; public override bool canGrabFocus { get; } = true; readonly Action m_Action; public FloatingMenuItem(string text, Action action, bool enabled, float height) { AddToClassList(k_UssClassName); styleSheets.Add(AssetDatabase.LoadAssetAtPath(k_StylePath)); m_Action = action; focusable = true; this.AddManipulator(new Clickable(OnExec)); SetEnabled(enabled); Add(new Label(text)); style.height = height; } void OnExec() { m_Action(); } /// /// Catch the enter key event to allow for tab & enter UI navigation. /// /// Event to check. protected override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); // Catch enter key being pressed. if (!(evt is KeyDownEvent downEvent)) return; if (downEvent.keyCode != KeyCode.KeypadEnter && downEvent.keyCode != KeyCode.Return) return; OnExec(); downEvent.StopPropagation(); } } }