Implement closable tab.

This commit is contained in:
2023-11-30 15:10:44 +08:00
parent 048a9f54fb
commit d8048b1d89
3 changed files with 313 additions and 6 deletions

View File

@@ -13,9 +13,12 @@ namespace Cryville.Crtr.Browsing.UI {
[SerializeField]
TextMeshProUGUI m_text;
[SerializeField]
Button m_closeButton;
[SerializeField]
float m_deselectedAlpha = 0.6f;
public event Action<BrowserTab> Clicked;
public event Action<BrowserTab> Closed;
public Sprite Icon {
get { return m_icon.sprite; }
@@ -25,6 +28,10 @@ namespace Cryville.Crtr.Browsing.UI {
get { return m_text.text; }
set { m_text.text = value; }
}
public bool Closable {
get { return m_closeButton.gameObject.activeSelf; }
set { m_closeButton.gameObject.SetActive(value); }
}
bool m_selected;
public bool Selected {
@@ -45,11 +52,15 @@ namespace Cryville.Crtr.Browsing.UI {
void Awake() {
_group = GetComponent<CanvasGroup>();
_layout = GetComponent<BrowserTabLayout>();
m_closeButton.onClick.AddListener(OnCloseClicked);
UpdateSelected();
}
public void OnPointerClick(PointerEventData eventData) {
Clicked?.Invoke(this);
}
public void OnCloseClicked() {
Closed?.Invoke(this);
}
}
}

View File

@@ -47,6 +47,7 @@ namespace Cryville.Crtr.Browsing.UI {
tab.Icon = browser.Icon;
tab.Text = name;
tab.Clicked += OnTabClicked;
tab.Closed += OnTabClosed;
browser.gameObject.SetActive(false);
_tabs.Add(tab, browser);
return tab;
@@ -64,6 +65,12 @@ namespace Cryville.Crtr.Browsing.UI {
_tabs[_currentTab].gameObject.SetActive(true);
}
}
void OnTabClosed(BrowserTab tab) {
Destroy(tab.gameObject);
Destroy(_tabs[tab].gameObject);
_tabs.Remove(tab);
if (_currentTab == tab) _currentTab = null;
}
void OnActionsChanged() {
foreach (var tab in _tabs) {