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

View File

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

View File

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