Implement closable tab.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user