Prevents duplicate ruleset config tabs.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using Cryville.Crtr.Browsing.UI;
|
using Cryville.Crtr.Browsing.UI;
|
||||||
using Cryville.Crtr.UI;
|
using Cryville.Crtr.UI;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Object = UnityEngine.Object;
|
using Object = UnityEngine.Object;
|
||||||
|
|
||||||
namespace Cryville.Crtr.Browsing.Actions {
|
namespace Cryville.Crtr.Browsing.Actions {
|
||||||
@@ -9,18 +10,25 @@ namespace Cryville.Crtr.Browsing.Actions {
|
|||||||
|
|
||||||
public override int Priority { get { return -50; } }
|
public override int Priority { get { return -50; } }
|
||||||
|
|
||||||
|
static Dictionary<string, int> _rulesetTabs = new Dictionary<string, int>();
|
||||||
|
|
||||||
public override void Invoke(Uri uri, ChartDetail resource) {
|
public override void Invoke(Uri uri, ChartDetail resource) {
|
||||||
var master = ResourceBrowserMaster.Instance;
|
var master = ResourceBrowserMaster.Instance;
|
||||||
|
var ruleset = resource.Meta.ruleset;
|
||||||
|
int tabId;
|
||||||
|
if (_rulesetTabs.TryGetValue(ruleset, out tabId) && master.TryOpenTab(tabId))
|
||||||
|
return;
|
||||||
var browser = Object.Instantiate(master.m_configBrowserPrefab).GetComponent<RulesetConfigBrowser>();
|
var browser = Object.Instantiate(master.m_configBrowserPrefab).GetComponent<RulesetConfigBrowser>();
|
||||||
try {
|
try {
|
||||||
browser.Load(resource.Meta.ruleset);
|
browser.Load(ruleset);
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
Dialog.Show(null, ex.Message);
|
Dialog.Show(null, ex.Message);
|
||||||
Game.MainLogger.Log(4, "Config", "An error occurred while loading the config: {0}", ex);
|
Game.MainLogger.Log(4, "Config", "An error occurred while loading the config: {0}", ex);
|
||||||
|
Object.Destroy(browser.gameObject);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
master.AddAndOpenTab(string.Format("Config: {0}", resource.Meta.ruleset), browser);
|
_rulesetTabs[ruleset] = master.AddAndOpenTab(string.Format("Config: {0}", ruleset), browser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
internal GameObject m_configBrowserPrefab;
|
internal GameObject m_configBrowserPrefab;
|
||||||
|
|
||||||
BrowserTab _currentTab;
|
BrowserTab _currentTab;
|
||||||
|
readonly Dictionary<int, BrowserTab> _tabMap = new Dictionary<int, BrowserTab>();
|
||||||
readonly Dictionary<BrowserTab, ResourceBrowser> _tabs = new Dictionary<BrowserTab, ResourceBrowser>();
|
readonly Dictionary<BrowserTab, ResourceBrowser> _tabs = new Dictionary<BrowserTab, ResourceBrowser>();
|
||||||
|
|
||||||
public ActionManager Actions { get; private set; }
|
public ActionManager Actions { get; private set; }
|
||||||
@@ -52,14 +53,25 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
tab.Closed += OnTabClosed;
|
tab.Closed += OnTabClosed;
|
||||||
browser.gameObject.SetActive(false);
|
browser.gameObject.SetActive(false);
|
||||||
_tabs.Add(tab, browser);
|
_tabs.Add(tab, browser);
|
||||||
|
_tabMap.Add(tab.GetHashCode(), tab);
|
||||||
return tab;
|
return tab;
|
||||||
}
|
}
|
||||||
T InitBrowser<T>(T browser) where T : ResourceBrowser { browser.Init(this); return browser; }
|
T InitBrowser<T>(T browser) where T : ResourceBrowser { browser.Init(this); return browser; }
|
||||||
|
|
||||||
public void AddAndOpenTab(string name, ResourceBrowser browser) {
|
public int AddAndOpenTab(string name, ResourceBrowser browser) {
|
||||||
InitBrowser(browser);
|
InitBrowser(browser);
|
||||||
browser.transform.SetParent(m_browserContainer, false);
|
browser.transform.SetParent(m_browserContainer, false);
|
||||||
OnTabClicked(AddTab(name, browser, _currentTab.transform.GetSiblingIndex() + 1, true));
|
var tab = AddTab(name, browser, _currentTab.transform.GetSiblingIndex() + 1, true);
|
||||||
|
OnTabClicked(tab);
|
||||||
|
return tab.GetHashCode();
|
||||||
|
}
|
||||||
|
public bool TryOpenTab(int id) {
|
||||||
|
BrowserTab tab;
|
||||||
|
if (_tabMap.TryGetValue(id, out tab)) {
|
||||||
|
OnTabClicked(tab);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnTabClicked(BrowserTab tab) {
|
void OnTabClicked(BrowserTab tab) {
|
||||||
@@ -78,6 +90,7 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
Destroy(tab.gameObject);
|
Destroy(tab.gameObject);
|
||||||
Destroy(_tabs[tab].gameObject);
|
Destroy(_tabs[tab].gameObject);
|
||||||
_tabs.Remove(tab);
|
_tabs.Remove(tab);
|
||||||
|
_tabMap.Remove(tab.GetHashCode());
|
||||||
if (_currentTab == tab) _currentTab = null;
|
if (_currentTab == tab) _currentTab = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user