You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.2 KiB
C#
120 lines
3.2 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;
|
|
}
|
|
}
|
|
}
|
|
}
|