Implement browser tabs.
This commit is contained in:
@@ -1,13 +1,31 @@
|
||||
using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
[RequireComponent(typeof(BrowserTabLayout))]
|
||||
[RequireComponent(typeof(CanvasGroup))]
|
||||
internal class BrowserTab : MonoBehaviour, IPointerClickHandler {
|
||||
[SerializeField]
|
||||
Image m_icon;
|
||||
[SerializeField]
|
||||
TextMeshProUGUI m_text;
|
||||
[SerializeField]
|
||||
float m_deselectedAlpha = 0.6f;
|
||||
|
||||
public event Action<BrowserTab> Clicked;
|
||||
|
||||
public Sprite Icon {
|
||||
get { return m_icon.sprite; }
|
||||
set { m_icon.sprite = value; }
|
||||
}
|
||||
public string Text {
|
||||
get { return m_text.text; }
|
||||
set { m_text.text = value; }
|
||||
}
|
||||
|
||||
bool m_selected;
|
||||
public bool Selected {
|
||||
get { return m_selected; }
|
||||
@@ -31,7 +49,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
||||
}
|
||||
|
||||
public void OnPointerClick(PointerEventData eventData) {
|
||||
throw new System.NotImplementedException();
|
||||
Clicked?.Invoke(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,6 +2,10 @@ using UnityEngine;
|
||||
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
public abstract class ResourceBrowser : MonoBehaviour {
|
||||
[SerializeField]
|
||||
Sprite m_icon;
|
||||
public Sprite Icon { get { return m_icon; } }
|
||||
|
||||
protected ResourceBrowserMaster Master { get; private set; }
|
||||
protected virtual void Awake() {
|
||||
Master = GetComponentInParent<ResourceBrowserMaster>();
|
||||
|
@@ -8,22 +8,48 @@ using UnityEngine.UI;
|
||||
namespace Cryville.Crtr.Browsing.UI {
|
||||
public class ResourceBrowserMaster : MonoBehaviour {
|
||||
[SerializeField]
|
||||
private Button m_playButton;
|
||||
Button m_playButton;
|
||||
[SerializeField]
|
||||
private Button m_configButton;
|
||||
Button m_configButton;
|
||||
[SerializeField]
|
||||
private ConfigPanelMaster m_configPanel;
|
||||
ConfigPanelMaster m_configPanel;
|
||||
[SerializeField]
|
||||
private PathedResourceBrowser m_mainBrowser;
|
||||
Transform m_tabContainer;
|
||||
[SerializeField]
|
||||
private DetailPanel m_detailPanel;
|
||||
GameObject m_tabPrefab;
|
||||
[SerializeField]
|
||||
PathedResourceBrowser m_mainBrowser;
|
||||
[SerializeField]
|
||||
DetailPanel m_detailPanel;
|
||||
|
||||
readonly List<ResourceBrowser> _units = new List<ResourceBrowser>();
|
||||
BrowserTab _currentTab;
|
||||
readonly Dictionary<BrowserTab, ResourceBrowser> _tabs = new Dictionary<BrowserTab, ResourceBrowser>();
|
||||
|
||||
void Awake() {
|
||||
m_mainBrowser.ResourceManager = new LegacyResourceManager(Settings.Default.GameDataPath);
|
||||
_units.Add(m_mainBrowser);
|
||||
// _units.Add(m_detailPanel);
|
||||
OnTabClicked(AddTab("Local", m_mainBrowser));
|
||||
}
|
||||
|
||||
BrowserTab AddTab(string name, ResourceBrowser browser) {
|
||||
var tab = Instantiate(m_tabPrefab, m_tabContainer, false).GetComponent<BrowserTab>();
|
||||
tab.Icon = browser.Icon;
|
||||
tab.Text = name;
|
||||
tab.Clicked += OnTabClicked;
|
||||
_tabs.Add(tab, browser);
|
||||
return tab;
|
||||
}
|
||||
|
||||
void OnTabClicked(BrowserTab tab) {
|
||||
if (tab == _currentTab) return;
|
||||
if (_currentTab != null) {
|
||||
_currentTab.Selected = false;
|
||||
_tabs[_currentTab].gameObject.SetActive(false);
|
||||
}
|
||||
_currentTab = tab;
|
||||
if (_currentTab != null) {
|
||||
_currentTab.Selected = true;
|
||||
_tabs[_currentTab].gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void ShowDetail(int id, ChartDetail detail) {
|
||||
|
Reference in New Issue
Block a user