summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/bgfx/chainmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/render/bgfx/chainmanager.cpp')
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
index c3aeb586136..70d678d1f2b 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -59,9 +59,9 @@ chain_manager::~chain_manager()
void chain_manager::refresh_available_chains()
{
m_available_chains.clear();
- m_available_chains.push_back("none");
+ m_available_chains.push_back(chain_desc("none", ""));
- find_available_chains(std::string(m_options.bgfx_path()) + "/chains");
+ find_available_chains(std::string(m_options.bgfx_path()) + "/chains", "");
destroy_unloaded_chains();
}
@@ -74,9 +74,9 @@ void chain_manager::destroy_unloaded_chains()
std::string name = m_chain_names[i];
if (name.length() > 0)
{
- for (std::string available_name : m_available_chains)
+ for (chain_desc desc : m_available_chains)
{
- if (available_name == name)
+ if (desc.m_name == name)
{
delete m_screen_chains[i];
m_chain_names[i] = "";
@@ -88,9 +88,9 @@ void chain_manager::destroy_unloaded_chains()
}
}
-void chain_manager::find_available_chains(std::string path)
+void chain_manager::find_available_chains(std::string root, std::string path)
{
- osd_directory *directory = osd_opendir(path.c_str());
+ osd_directory *directory = osd_opendir((root + path).c_str());
if (directory != nullptr)
{
for (const osd_directory_entry *entry = osd_readdir(directory); entry != nullptr; entry = osd_readdir(directory))
@@ -109,7 +109,7 @@ void chain_manager::find_available_chains(std::string path)
// Does it end in .json?
if (test_segment == extension)
{
- m_available_chains.push_back(name.substr(0, start));
+ m_available_chains.push_back(chain_desc(name.substr(0, start), path));
}
}
}
@@ -118,7 +118,12 @@ void chain_manager::find_available_chains(std::string path)
std::string name = entry->name;
if (!(name == "." || name == ".."))
{
- find_available_chains(path + PATH_SEPARATOR + name);
+ std::string appended_path = path + "/" + name;
+ if (path.length() == 0)
+ {
+ appended_path = name;
+ }
+ find_available_chains(root, path + "/" + name);
}
}
}
@@ -189,7 +194,7 @@ void chain_manager::parse_chain_selections(std::string chain_str)
size_t chain_index = 0;
for (chain_index = 0; chain_index < m_available_chains.size(); chain_index++)
{
- if (m_available_chains[chain_index] == chain_names[index])
+ if (m_available_chains[chain_index].m_name == chain_names[index])
{
break;
}
@@ -198,7 +203,7 @@ void chain_manager::parse_chain_selections(std::string chain_str)
if (chain_index < m_available_chains.size())
{
m_current_chain[index] = chain_index;
- m_chain_names[index] = m_available_chains[chain_index];
+ m_chain_names[index] = m_available_chains[chain_index].m_name;
}
else
{
@@ -240,8 +245,9 @@ void chain_manager::load_chains()
{
if (m_current_chain[chain] != CHAIN_NONE)
{
- m_chain_names[chain] = m_available_chains[m_current_chain[chain]];
- m_screen_chains[chain] = load_chain(m_chain_names[chain], uint32_t(chain));
+ chain_desc& desc = m_available_chains[m_current_chain[chain]];
+ m_chain_names[chain] = desc.m_name;
+ m_screen_chains[chain] = load_chain(desc.m_path + "/" + desc.m_name, uint32_t(chain));
}
}
}
@@ -369,7 +375,7 @@ int32_t chain_manager::chain_changed(int32_t id, std::string *str, int32_t newva
if (str != nullptr)
{
- *str = string_format("%s", m_available_chains[m_current_chain[id]].c_str());
+ *str = string_format("%s", m_available_chains[m_current_chain[id]].m_name.c_str());
}
return m_current_chain[id];