mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 23:09:42 +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;
|
auto flags = std::regex_constants::icase;
|
||||||
std::regex filterRegex(filter, flags);
|
std::regex filterRegex(filter, flags);
|
||||||
|
|
||||||
auto scriptSettings = LuaUi::scriptSettingsPages();
|
for (size_t i = 0; i < LuaUi::scriptSettingsPageCount(); ++i)
|
||||||
for (size_t i = 0; i < scriptSettings.size(); ++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))
|
if (std::regex_match(page.mName, filterRegex) || std::regex_match(page.mDescription, filterRegex))
|
||||||
mScriptList->addItem(page.mName, i);
|
mScriptList->addItem(page.mName, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide script settings tab when the game world isn't loaded and scripts couldn't add their settings
|
// 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);
|
mScriptDisabled->setVisible(disabled);
|
||||||
mScriptFilter->setVisible(!disabled);
|
mScriptFilter->setVisible(!disabled);
|
||||||
mScriptList->setVisible(!disabled);
|
mScriptList->setVisible(!disabled);
|
||||||
|
@ -793,7 +792,7 @@ namespace MWGui
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
size_t page = *mScriptList->getItemDataAt<size_t>(index);
|
size_t page = *mScriptList->getItemDataAt<size_t>(index);
|
||||||
mScriptDescription->setCaption(LuaUi::scriptSettingsPages()[page].mDescription);
|
mScriptDescription->setCaption(LuaUi::scriptSettingsPageAt(page).mDescription);
|
||||||
mScriptDescription->setVisible(true);
|
mScriptDescription->setVisible(true);
|
||||||
mScriptView->setVisible(false);
|
mScriptView->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,16 +241,7 @@ namespace MWLua
|
||||||
|
|
||||||
api["registerSettingsPage"] = [](sol::table options)
|
api["registerSettingsPage"] = [](sol::table options)
|
||||||
{
|
{
|
||||||
LuaUi::ScriptSettingsPage page;
|
LuaUi::registerSettingsPage(options);
|
||||||
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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return LuaUtil::makeReadOnly(api);
|
return LuaUtil::makeReadOnly(api);
|
||||||
|
|
|
@ -8,17 +8,35 @@ namespace LuaUi
|
||||||
{
|
{
|
||||||
namespace
|
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()
|
void clearSettings()
|
||||||
|
@ -29,6 +47,10 @@ namespace LuaUi
|
||||||
void attachToWidget(size_t index, MyGUI::Widget* widget)
|
void attachToWidget(size_t index, MyGUI::Widget* widget)
|
||||||
{
|
{
|
||||||
if (index < allPages.size())
|
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;
|
std::string mDescription;
|
||||||
Element* mElement; // TODO: figure out if this can lead to use after free
|
Element* mElement; // TODO: figure out if this can lead to use after free
|
||||||
};
|
};
|
||||||
const std::vector<ScriptSettingsPage>& scriptSettingsPages();
|
size_t scriptSettingsPageCount();
|
||||||
void registerSettingsPage(const ScriptSettingsPage& page);
|
ScriptSettingsPage scriptSettingsPageAt(size_t index);
|
||||||
|
void registerSettingsPage(const sol::table& options);
|
||||||
void clearSettings();
|
void clearSettings();
|
||||||
void attachToWidget(size_t index, MyGUI::Widget* widget = nullptr);
|
void attachToWidget(size_t index, MyGUI::Widget* widget = nullptr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue