Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Make dropdowns show the string that was their argument.
This makes it work even if it contains escape sequences,
which didn't work before.
  • Loading branch information
Ekdohibs committed May 7, 2016
1 parent bb92547 commit d5c3db9
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
24 changes: 22 additions & 2 deletions src/guiFormSpecMenu.cpp
Expand Up @@ -240,6 +240,15 @@ GUITable* GUIFormSpecMenu::getTable(const std::string &tablename)
return 0;
}

std::vector<std::string>* GUIFormSpecMenu::getDropDownValues(const std::string &name)
{
for (u32 i = 0; i < m_dropdowns.size(); ++i) {
if (name == m_dropdowns[i].first.fname)
return &m_dropdowns[i].second;
}
return NULL;
}

static std::vector<std::string> split(const std::string &s, char delim)
{
std::vector<std::string> tokens;
Expand Down Expand Up @@ -894,6 +903,14 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element)
e->setSelected(stoi(str_initial_selection.c_str())-1);

m_fields.push_back(spec);

m_dropdowns.push_back(std::pair<FieldSpec,
std::vector<std::string> >(spec, std::vector<std::string>()));
std::vector<std::string> &values = m_dropdowns.back().second;
for (unsigned int i = 0; i < items.size(); i++) {
values.push_back(unescape_string(items[i]));
}

return;
}
errorstream << "Invalid dropdown element(" << parts.size() << "): '"
Expand Down Expand Up @@ -2725,8 +2742,11 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
}
s32 selected = e->getSelected();
if (selected >= 0) {
fields[name] =
wide_to_utf8(e->getItem(selected));
std::vector<std::string> *dropdown_values =
getDropDownValues(s.fname);
if (dropdown_values && selected < (s32)dropdown_values->size()) {
fields[name] = (*dropdown_values)[selected];
}
}
}
else if (s.ftype == f_TabHeader) {
Expand Down
2 changes: 2 additions & 0 deletions src/guiFormSpecMenu.h
Expand Up @@ -357,6 +357,7 @@ class GUIFormSpecMenu : public GUIModalMenu
bool pausesGame() { return doPause; }

GUITable* getTable(const std::string &tablename);
std::vector<std::string>* getDropDownValues(const std::string &name);

#ifdef __ANDROID__
bool getAndroidUIInput();
Expand Down Expand Up @@ -395,6 +396,7 @@ class GUIFormSpecMenu : public GUIModalMenu
std::vector<std::pair<FieldSpec,gui::IGUICheckBox*> > m_checkboxes;
std::map<std::string, TooltipSpec> m_tooltips;
std::vector<std::pair<FieldSpec,gui::IGUIScrollBar*> > m_scrollbars;
std::vector<std::pair<FieldSpec, std::vector<std::string> > > m_dropdowns;

ItemSpec *m_selected_item;
f32 m_timer1;
Expand Down

0 comments on commit d5c3db9

Please sign in to comment.