mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-19 10:09:43 +00:00
Allow changing script settings pages after registering them
This commit is contained in:
parent
5f7ab49880
commit
1455aa3e02
4 changed files with 36 additions and 23 deletions
|
@ -744,16 +744,15 @@ namespace MWGui
|
|||
auto flags = std::regex_constants::icase;
|
||||
std::regex filterRegex(filter, flags);
|
||||
|
||||
auto scriptSettings = LuaUi::scriptSettingsPages();
|
||||
for (size_t i = 0; i < scriptSettings.size(); ++i)
|
||||
for (size_t i = 0; i < LuaUi::scriptSettingsPageCount(); ++i)
|
||||
{
|
||||
LuaUi::ScriptSettingsPage page = scriptSettings[i];
|
||||
LuaUi::ScriptSettingsPage page = LuaUi::scriptSettingsPageAt(i);
|
||||
if (std::regex_match(page.mName, filterRegex) || std::regex_match(page.mDescription, filterRegex))
|
||||
mScriptList->addItem(page.mName, i);
|
||||
}
|
||||
|
||||
// Hide script settings tab when the game world isn't loaded and scripts couldn't add their settings
|
||||
bool disabled = scriptSettings.empty();
|
||||
bool disabled = LuaUi::scriptSettingsPageCount() == 0;
|
||||
mScriptDisabled->setVisible(disabled);
|
||||
mScriptFilter->setVisible(!disabled);
|
||||
mScriptList->setVisible(!disabled);
|
||||
|
@ -793,7 +792,7 @@ namespace MWGui
|
|||
return;
|
||||
}
|
||||
size_t page = *mScriptList->getItemDataAt<size_t>(index);
|
||||
mScriptDescription->setCaption(LuaUi::scriptSettingsPages()[page].mDescription);
|
||||
mScriptDescription->setCaption(LuaUi::scriptSettingsPageAt(page).mDescription);
|
||||
mScriptDescription->setVisible(true);
|
||||
mScriptView->setVisible(false);
|
||||
}
|
||||
|
|
|
@ -241,16 +241,7 @@ namespace MWLua
|
|||
|
||||
api["registerSettingsPage"] = [](sol::table options)
|
||||
{
|
||||
LuaUi::ScriptSettingsPage page;
|
||||
page.mName = options.get_or("name", std::string());
|
||||
if (page.mName.empty())
|
||||
throw std::logic_error("No name provided for the settings page");
|
||||
page.mDescription = options.get_or("description", std::string());
|
||||
auto element = options.get_or<std::shared_ptr<LuaUi::Element>>("element", nullptr);
|
||||
if (!element)
|
||||
throw std::logic_error("No UI element provided for the settings page");
|
||||
page.mElement = element.get();
|
||||
LuaUi::registerSettingsPage(page);
|
||||
LuaUi::registerSettingsPage(options);
|
||||
};
|
||||
|
||||
return LuaUtil::makeReadOnly(api);
|
||||
|
|
|
@ -8,17 +8,35 @@ namespace LuaUi
|
|||
{
|
||||
namespace
|
||||
{
|
||||
std::vector<ScriptSettingsPage> allPages;
|
||||
std::vector<sol::table> allPages;
|
||||
ScriptSettingsPage parse(const sol::table& options)
|
||||
{
|
||||
auto name = options.get_or("name", std::string());
|
||||
auto description = options.get_or("description", std::string());
|
||||
auto element = options.get_or<std::shared_ptr<LuaUi::Element>>("element", nullptr);
|
||||
if (name.empty())
|
||||
Log(Debug::Warning) << "A script settings page has an empty name";
|
||||
if (!element.get())
|
||||
Log(Debug::Warning) << "A script settings page has no UI element assigned";
|
||||
return {
|
||||
name, description, element.get()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const std::vector<ScriptSettingsPage>& scriptSettingsPages()
|
||||
size_t scriptSettingsPageCount()
|
||||
{
|
||||
return allPages;
|
||||
return allPages.size();
|
||||
}
|
||||
|
||||
void registerSettingsPage(const ScriptSettingsPage& page)
|
||||
ScriptSettingsPage scriptSettingsPageAt(size_t index)
|
||||
{
|
||||
allPages.push_back(page);
|
||||
return parse(allPages[index]);
|
||||
}
|
||||
|
||||
void registerSettingsPage(const sol::table& options)
|
||||
{
|
||||
allPages.push_back(options);
|
||||
}
|
||||
|
||||
void clearSettings()
|
||||
|
@ -29,6 +47,10 @@ namespace LuaUi
|
|||
void attachToWidget(size_t index, MyGUI::Widget* widget)
|
||||
{
|
||||
if (index < allPages.size())
|
||||
allPages[index].mElement->attachToWidget(widget);
|
||||
{
|
||||
ScriptSettingsPage page = parse(allPages[index]);
|
||||
if (page.mElement)
|
||||
page.mElement->attachToWidget(widget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,8 +16,9 @@ namespace LuaUi
|
|||
std::string mDescription;
|
||||
Element* mElement; // TODO: figure out if this can lead to use after free
|
||||
};
|
||||
const std::vector<ScriptSettingsPage>& scriptSettingsPages();
|
||||
void registerSettingsPage(const ScriptSettingsPage& page);
|
||||
size_t scriptSettingsPageCount();
|
||||
ScriptSettingsPage scriptSettingsPageAt(size_t index);
|
||||
void registerSettingsPage(const sol::table& options);
|
||||
void clearSettings();
|
||||
void attachToWidget(size_t index, MyGUI::Widget* widget = nullptr);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue