TabsController.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. public class TabsController : MonoBehaviour
  7. {
  8. VisualElement root;
  9. private void OnEnable()
  10. {
  11. UIDocument menu = GetComponent<UIDocument>();
  12. root = menu.rootVisualElement;
  13. GetAllTabButtons().ForEach(RegisterButtonCallbacks);
  14. GetAllTabContents().ForEach(SetupContentRoot);
  15. }
  16. private void SetupContentRoot(VisualElement element)
  17. {
  18. BroadcastMessage("SetupTabContentRoot", element);
  19. }
  20. private void RegisterButtonCallbacks(Button b)
  21. {
  22. b.RegisterCallback<ClickEvent>(SetTabVisibleViaButton);
  23. }
  24. private void SetTabVisibleViaButton(ClickEvent evt)
  25. {
  26. Button b = evt.currentTarget as Button;
  27. VisualElement tabContent = GetAllTabContents().Where((VisualElement tabContent) => tabContent.name.Contains(b.name[..^3])).First();
  28. SetTabVisible(tabContent);
  29. BroadcastMessage("TabSelected", tabContent);
  30. }
  31. private void SetTabVisible(VisualElement tabToActivate)
  32. {
  33. UQueryBuilder<VisualElement> tabs = GetAllTabContents();
  34. tabs.Where((tab) => tab != tabToActivate).ForEach(t => t.style.display = DisplayStyle.None);
  35. tabToActivate.style.display = DisplayStyle.Flex;
  36. }
  37. private UQueryBuilder<VisualElement> GetAllTabContents()
  38. {
  39. return root.Query<VisualElement>(className: "tabContent");
  40. }
  41. private UQueryBuilder<Button> GetAllTabButtons()
  42. {
  43. return root.Query<Button>(className: "tabButton");
  44. }
  45. }