Make elem.free rebuild menus (fixes #649)

Also make sure removed elements don't stay selected.
This commit is contained in:
Tamás Bálint Misius 2019-06-11 21:12:14 +02:00
parent 75e6ece184
commit 8897c6daea
No known key found for this signature in database
GPG Key ID: 5B472A12F6ECA9F2
3 changed files with 28 additions and 26 deletions

View File

@ -353,21 +353,20 @@ void GameModel::BuildMenus()
decoToolset[2] = GetToolFromIdentifier("DEFAULT_UI_SAMPLE");
decoToolset[3] = GetToolFromIdentifier("DEFAULT_PT_NONE");
regularToolset[0] = GetToolFromIdentifier(activeToolIdentifiers[0]);
regularToolset[1] = GetToolFromIdentifier(activeToolIdentifiers[1]);
regularToolset[2] = GetToolFromIdentifier(activeToolIdentifiers[2]);
regularToolset[3] = GetToolFromIdentifier(activeToolIdentifiers[3]);
//Set default tools
regularToolset[0] = GetToolFromIdentifier("DEFAULT_PT_DUST");
regularToolset[1] = GetToolFromIdentifier("DEFAULT_PT_NONE");
regularToolset[2] = GetToolFromIdentifier("DEFAULT_UI_SAMPLE");
regularToolset[3] = GetToolFromIdentifier("DEFAULT_PT_NONE");
if(activeToolIdentifiers[0].length())
regularToolset[0] = GetToolFromIdentifier(activeToolIdentifiers[0]);
if(activeToolIdentifiers[1].length())
regularToolset[1] = GetToolFromIdentifier(activeToolIdentifiers[1]);
if(activeToolIdentifiers[2].length())
regularToolset[2] = GetToolFromIdentifier(activeToolIdentifiers[2]);
if(activeToolIdentifiers[3].length())
regularToolset[3] = GetToolFromIdentifier(activeToolIdentifiers[3]);
if (!regularToolset[0])
regularToolset[0] = GetToolFromIdentifier("DEFAULT_PT_DUST");
if (!regularToolset[1])
regularToolset[1] = GetToolFromIdentifier("DEFAULT_PT_NONE");
if (!regularToolset[2])
regularToolset[2] = GetToolFromIdentifier("DEFAULT_UI_SAMPLE");
if (!regularToolset[3])
regularToolset[3] = GetToolFromIdentifier("DEFAULT_PT_NONE");
lastTool = activeTools[0];
@ -412,24 +411,26 @@ void GameModel::BuildFavoritesMenu()
notifyLastToolChanged();
}
Tool * GameModel::GetToolFromIdentifier(ByteString identifier)
Tool *GameModel::GetToolFromIdentifier(ByteString const &identifier)
{
for (std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
for (auto *menu : menuList)
{
std::vector<Tool*> menuTools = (*iter)->GetToolList();
for (std::vector<Tool*>::iterator titer = menuTools.begin(), tend = menuTools.end(); titer != tend; ++titer)
for (auto *tool : menu->GetToolList())
{
if (identifier == (*titer)->GetIdentifier())
return *titer;
if (identifier == tool->GetIdentifier())
{
return tool;
}
}
}
for (std::vector<Tool*>::iterator iter = extraElementTools.begin(), end = extraElementTools.end(); iter != end; ++iter)
for (auto *extra : extraElementTools)
{
if (identifier == (*iter)->GetIdentifier())
return *iter;
if (identifier == extra->GetIdentifier())
{
return extra;
}
}
return NULL;
return nullptr;
}
void GameModel::SetEdgeMode(int edgeMode)

View File

@ -147,7 +147,7 @@ public:
float GetToolStrength();
Tool * GetLastTool();
void SetLastTool(Tool * newTool);
Tool * GetToolFromIdentifier(ByteString identifier);
Tool *GetToolFromIdentifier(ByteString const &identifier);
Tool * GetElementTool(int elementID);
std::vector<Tool*> GetToolList();
std::vector<Tool*> GetUnlistedTools();

View File

@ -2876,6 +2876,7 @@ int LuaScriptInterface::elements_free(lua_State * l)
}
luacon_sim->elements[id].Enabled = false;
luacon_model->BuildMenus();
lua_getglobal(l, "elements");
lua_pushnil(l);