DebuggerTabController.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. namespace SRDebugger.Scripts
  2. {
  3. using System;
  4. using System.Linq;
  5. using SRF;
  6. using UI.Other;
  7. using UnityEngine;
  8. public class DebuggerTabController : SRMonoBehaviourEx
  9. {
  10. private SRTab _aboutTabInstance;
  11. private DefaultTabs? _activeTab;
  12. private bool _hasStarted;
  13. public SRTab AboutTab;
  14. [RequiredField] public SRTabController TabController;
  15. public DefaultTabs? ActiveTab
  16. {
  17. get
  18. {
  19. var key = TabController.ActiveTab.Key;
  20. if (string.IsNullOrEmpty(key))
  21. {
  22. return null;
  23. }
  24. var t = Enum.Parse(typeof (DefaultTabs), key);
  25. if (!Enum.IsDefined(typeof (DefaultTabs), t))
  26. {
  27. return null;
  28. }
  29. return (DefaultTabs) t;
  30. }
  31. }
  32. protected override void Start()
  33. {
  34. base.Start();
  35. _hasStarted = true;
  36. // Loads all available tabs from resources
  37. var tabs = Resources.LoadAll<SRTab>("SRDebugger/UI/Prefabs/Tabs");
  38. var defaultTabs = Enum.GetNames(typeof (DefaultTabs));
  39. foreach (var srTab in tabs)
  40. {
  41. var enabler = srTab.GetComponent(typeof (IEnableTab)) as IEnableTab;
  42. if (enabler != null && !enabler.IsEnabled)
  43. {
  44. continue;
  45. }
  46. if (defaultTabs.Contains(srTab.Key))
  47. {
  48. var tabValue = Enum.Parse(typeof (DefaultTabs), srTab.Key);
  49. if (Enum.IsDefined(typeof (DefaultTabs), tabValue) &&
  50. Settings.Instance.DisabledTabs.Contains((DefaultTabs) tabValue))
  51. {
  52. continue;
  53. }
  54. }
  55. TabController.AddTab(SRInstantiate.Instantiate(srTab));
  56. }
  57. // Add about tab (has no button, accessed via "Stompy" logo
  58. if (AboutTab != null)
  59. {
  60. _aboutTabInstance = SRInstantiate.Instantiate(AboutTab);
  61. TabController.AddTab(_aboutTabInstance, false);
  62. }
  63. // Open active tab (set before panel loaded), or default tab from settings
  64. var defaultTab = _activeTab ?? Settings.Instance.DefaultTab;
  65. if (!OpenTab(defaultTab))
  66. {
  67. TabController.ActiveTab = TabController.Tabs.FirstOrDefault();
  68. }
  69. }
  70. public bool OpenTab(DefaultTabs tab)
  71. {
  72. if (!_hasStarted)
  73. {
  74. _activeTab = tab;
  75. return true;
  76. }
  77. var tabName = tab.ToString();
  78. foreach (var t in TabController.Tabs)
  79. {
  80. if (t.Key == tabName)
  81. {
  82. TabController.ActiveTab = t;
  83. return true;
  84. }
  85. }
  86. return false;
  87. }
  88. public void ShowAboutTab()
  89. {
  90. if (_aboutTabInstance != null)
  91. {
  92. TabController.ActiveTab = _aboutTabInstance;
  93. }
  94. }
  95. }
  96. }