Implement closable tab.
This commit is contained in:
@@ -13,9 +13,12 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
TextMeshProUGUI m_text;
|
TextMeshProUGUI m_text;
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
|
Button m_closeButton;
|
||||||
|
[SerializeField]
|
||||||
float m_deselectedAlpha = 0.6f;
|
float m_deselectedAlpha = 0.6f;
|
||||||
|
|
||||||
public event Action<BrowserTab> Clicked;
|
public event Action<BrowserTab> Clicked;
|
||||||
|
public event Action<BrowserTab> Closed;
|
||||||
|
|
||||||
public Sprite Icon {
|
public Sprite Icon {
|
||||||
get { return m_icon.sprite; }
|
get { return m_icon.sprite; }
|
||||||
@@ -25,6 +28,10 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
get { return m_text.text; }
|
get { return m_text.text; }
|
||||||
set { m_text.text = value; }
|
set { m_text.text = value; }
|
||||||
}
|
}
|
||||||
|
public bool Closable {
|
||||||
|
get { return m_closeButton.gameObject.activeSelf; }
|
||||||
|
set { m_closeButton.gameObject.SetActive(value); }
|
||||||
|
}
|
||||||
|
|
||||||
bool m_selected;
|
bool m_selected;
|
||||||
public bool Selected {
|
public bool Selected {
|
||||||
@@ -45,11 +52,15 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
void Awake() {
|
void Awake() {
|
||||||
_group = GetComponent<CanvasGroup>();
|
_group = GetComponent<CanvasGroup>();
|
||||||
_layout = GetComponent<BrowserTabLayout>();
|
_layout = GetComponent<BrowserTabLayout>();
|
||||||
|
m_closeButton.onClick.AddListener(OnCloseClicked);
|
||||||
UpdateSelected();
|
UpdateSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPointerClick(PointerEventData eventData) {
|
public void OnPointerClick(PointerEventData eventData) {
|
||||||
Clicked?.Invoke(this);
|
Clicked?.Invoke(this);
|
||||||
}
|
}
|
||||||
|
public void OnCloseClicked() {
|
||||||
|
Closed?.Invoke(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
tab.Icon = browser.Icon;
|
tab.Icon = browser.Icon;
|
||||||
tab.Text = name;
|
tab.Text = name;
|
||||||
tab.Clicked += OnTabClicked;
|
tab.Clicked += OnTabClicked;
|
||||||
|
tab.Closed += OnTabClosed;
|
||||||
browser.gameObject.SetActive(false);
|
browser.gameObject.SetActive(false);
|
||||||
_tabs.Add(tab, browser);
|
_tabs.Add(tab, browser);
|
||||||
return tab;
|
return tab;
|
||||||
@@ -64,6 +65,12 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
_tabs[_currentTab].gameObject.SetActive(true);
|
_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() {
|
void OnActionsChanged() {
|
||||||
foreach (var tab in _tabs) {
|
foreach (var tab in _tabs) {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user