120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| namespace SRDebugger.Scripts
 | |
| {
 | |
|     using System;
 | |
|     using System.Linq;
 | |
|     using SRF;
 | |
|     using UI.Other;
 | |
|     using UnityEngine;
 | |
| 
 | |
|     public class DebuggerTabController : SRMonoBehaviourEx
 | |
|     {
 | |
|         private SRTab _aboutTabInstance;
 | |
|         private DefaultTabs? _activeTab;
 | |
|         private bool _hasStarted;
 | |
|         public SRTab AboutTab;
 | |
| 
 | |
|         [RequiredField] public SRTabController TabController;
 | |
| 
 | |
|         public DefaultTabs? ActiveTab
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 var key = TabController.ActiveTab.Key;
 | |
| 
 | |
|                 if (string.IsNullOrEmpty(key))
 | |
|                 {
 | |
|                     return null;
 | |
|                 }
 | |
| 
 | |
|                 var t = Enum.Parse(typeof (DefaultTabs), key);
 | |
| 
 | |
|                 if (!Enum.IsDefined(typeof (DefaultTabs), t))
 | |
|                 {
 | |
|                     return null;
 | |
|                 }
 | |
| 
 | |
|                 return (DefaultTabs) t;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void Start()
 | |
|         {
 | |
|             base.Start();
 | |
| 
 | |
|             _hasStarted = true;
 | |
| 
 | |
|             // Loads all available tabs from resources
 | |
|             var tabs = Resources.LoadAll<SRTab>("SRDebugger/UI/Prefabs/Tabs");
 | |
|             var defaultTabs = Enum.GetNames(typeof (DefaultTabs));
 | |
| 
 | |
|             foreach (var srTab in tabs)
 | |
|             {
 | |
|                 var enabler = srTab.GetComponent(typeof (IEnableTab)) as IEnableTab;
 | |
| 
 | |
|                 if (enabler != null && !enabler.IsEnabled)
 | |
|                 {
 | |
|                     continue;
 | |
|                 }
 | |
| 
 | |
|                 if (defaultTabs.Contains(srTab.Key))
 | |
|                 {
 | |
|                     var tabValue = Enum.Parse(typeof (DefaultTabs), srTab.Key);
 | |
| 
 | |
|                     if (Enum.IsDefined(typeof (DefaultTabs), tabValue) &&
 | |
|                         Settings.Instance.DisabledTabs.Contains((DefaultTabs) tabValue))
 | |
|                     {
 | |
|                         continue;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 TabController.AddTab(SRInstantiate.Instantiate(srTab));
 | |
|             }
 | |
| 
 | |
|             // Add about tab (has no button, accessed via "Stompy" logo
 | |
|             if (AboutTab != null)
 | |
|             {
 | |
|                 _aboutTabInstance = SRInstantiate.Instantiate(AboutTab);
 | |
|                 TabController.AddTab(_aboutTabInstance, false);
 | |
|             }
 | |
| 
 | |
|             // Open active tab (set before panel loaded), or default tab from settings
 | |
|             var defaultTab = _activeTab ?? Settings.Instance.DefaultTab;
 | |
| 
 | |
|             if (!OpenTab(defaultTab))
 | |
|             {
 | |
|                 TabController.ActiveTab = TabController.Tabs.FirstOrDefault();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public bool OpenTab(DefaultTabs tab)
 | |
|         {
 | |
|             if (!_hasStarted)
 | |
|             {
 | |
|                 _activeTab = tab;
 | |
|                 return true;
 | |
|             }
 | |
| 
 | |
|             var tabName = tab.ToString();
 | |
| 
 | |
|             foreach (var t in TabController.Tabs)
 | |
|             {
 | |
|                 if (t.Key == tabName)
 | |
|                 {
 | |
|                     TabController.ActiveTab = t;
 | |
|                     return true;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         public void ShowAboutTab()
 | |
|         {
 | |
|             if (_aboutTabInstance != null)
 | |
|             {
 | |
|                 TabController.ActiveTab = _aboutTabInstance;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |