Preserving editBoxes on regenerate()

This commit is contained in:
sonicx 2014-10-14 23:22:13 +02:00
parent 417a09b799
commit 97f26846d8
2 changed files with 18 additions and 6 deletions

View File

@ -1076,11 +1076,13 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data,
label = unescape_string(label);
std::wstring wlabel = narrow_to_wide(label.c_str());
std::wstring wtext = narrow_to_wide(default_val.c_str());
if(!data->editbox_dyndata[narrow_to_wide(name.c_str())].empty())
wtext = data->editbox_dyndata[narrow_to_wide(name.c_str())];
FieldSpec spec(
narrow_to_wide(name.c_str()),
wlabel,
narrow_to_wide(default_val.c_str()),
wtext,
258+m_fields.size()
);
@ -1165,11 +1167,14 @@ void GUIFormSpecMenu::parseTextArea(parserData* data,
label = unescape_string(label);
std::wstring wlabel = narrow_to_wide(label.c_str());
std::wstring wtext = narrow_to_wide(default_val.c_str());
if(!data->editbox_dyndata[narrow_to_wide(name.c_str())].empty())
wtext = data->editbox_dyndata[narrow_to_wide(name.c_str())];
FieldSpec spec(
narrow_to_wide(name.c_str()),
wlabel,
narrow_to_wide(default_val.c_str()),
wtext,
258+m_fields.size()
);
@ -1218,18 +1223,17 @@ void GUIFormSpecMenu::parseField(parserData* data,std::string element,
std::string type)
{
std::vector<std::string> parts = split(element,';');
if (parts.size() == 3 || parts.size() == 4) {
parseSimpleField(data,parts);
return;
}
if ((parts.size() == 5) ||
((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
{
parseTextArea(data,parts,type);
return;
}
errorstream<< "Invalid field element(" << parts.size() << "): '" << element << "'" << std::endl;
}
@ -1938,6 +1942,12 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
GUITable *table = m_tables[i].second;
mydata.table_dyndata[tablename] = table->getDynamicData();
}
//preserve editboxes
for (u32 i=0; i<m_fields.size(); i++) {
if(getElementFromId(m_fields[i].fid)->getTypeName() != std::string("editBox")) continue;
mydata.editbox_dyndata[m_fields[i].fname] = getElementFromId(m_fields[i].fid)->getText();
}
//preserve focus
gui::IGUIElement *focused_element = Environment->getFocus();

View File

@ -363,6 +363,8 @@ private:
GUITable::TableColumns table_columns;
// used to restore table selection/scroll/treeview state
std::map<std::wstring,GUITable::DynamicData> table_dyndata;
// used to restore editbox content
std::map<std::wstring,std::wstring> editbox_dyndata;
} parserData;
typedef struct {