|
@@ -1318,19 +1318,20 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element
|
|
|
errorstream<< "Invalid textlist element(" << parts.size() << "): '" << element << "'" << std::endl;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element)
|
|
|
{
|
|
|
- std::vector<std::string> parts = split(element,';');
|
|
|
+ std::vector<std::string> parts = split(element, ';');
|
|
|
|
|
|
- if ((parts.size() == 5) ||
|
|
|
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
|
|
|
+ if (parts.size() == 5 || parts.size() == 6 ||
|
|
|
+ (parts.size() > 6 && m_formspec_version > FORMSPEC_API_VERSION))
|
|
|
{
|
|
|
- std::vector<std::string> v_pos = split(parts[0],',');
|
|
|
+ std::vector<std::string> v_pos = split(parts[0], ',');
|
|
|
std::string name = parts[2];
|
|
|
- std::vector<std::string> items = split(parts[3],',');
|
|
|
- std::string str_initial_selection;
|
|
|
- str_initial_selection = parts[4];
|
|
|
+ std::vector<std::string> items = split(parts[3], ',');
|
|
|
+ std::string str_initial_selection = parts[4];
|
|
|
+
|
|
|
+ if (parts.size() >= 6 && is_yes(parts[5]))
|
|
|
+ m_dropdown_index_event[name] = true;
|
|
|
|
|
|
MY_CHECKPOS("dropdown",0);
|
|
|
|
|
@@ -1397,8 +1398,8 @@ void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
- errorstream << "Invalid dropdown element(" << parts.size() << "): '"
|
|
|
- << element << "'" << std::endl;
|
|
|
+ errorstream << "Invalid dropdown element(" << parts.size() << "): '" << element
|
|
|
+ << "'" << std::endl;
|
|
|
}
|
|
|
|
|
|
void GUIFormSpecMenu::parseFieldCloseOnEnter(parserData *data, const std::string &element)
|
|
@@ -1414,8 +1415,8 @@ void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element
|
|
|
{
|
|
|
std::vector<std::string> parts = split(element,';');
|
|
|
|
|
|
- if ((parts.size() == 4) ||
|
|
|
- ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION)))
|
|
|
+ if (parts.size() == 4 ||
|
|
|
+ (parts.size() > 4 && m_formspec_version > FORMSPEC_API_VERSION))
|
|
|
{
|
|
|
std::vector<std::string> v_pos = split(parts[0],',');
|
|
|
std::vector<std::string> v_geom = split(parts[1],',');
|
|
@@ -2940,6 +2941,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
|
|
|
theme_by_name.clear();
|
|
|
theme_by_type.clear();
|
|
|
m_clickthrough_elements.clear();
|
|
|
+ field_close_on_enter.clear();
|
|
|
+ m_dropdown_index_event.clear();
|
|
|
|
|
|
m_bgnonfullscreen = true;
|
|
|
m_bgfullscreen = false;
|
|
@@ -3727,10 +3730,14 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
|
|
|
}
|
|
|
s32 selected = e->getSelected();
|
|
|
if (selected >= 0) {
|
|
|
- std::vector<std::string> *dropdown_values =
|
|
|
- getDropDownValues(s.fname);
|
|
|
- if (dropdown_values && selected < (s32)dropdown_values->size()) {
|
|
|
- fields[name] = (*dropdown_values)[selected];
|
|
|
+ if (m_dropdown_index_event.find(s.fname) !=
|
|
|
+ m_dropdown_index_event.end()) {
|
|
|
+ fields[name] = std::to_string(selected + 1);
|
|
|
+ } else {
|
|
|
+ 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) {
|