@@ -1318,19 +1318,20 @@ void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element
1318
1318
errorstream<< " Invalid textlist element(" << parts.size () << " ): '" << element << " '" << std::endl;
1319
1319
}
1320
1320
1321
-
1322
1321
void GUIFormSpecMenu::parseDropDown (parserData* data, const std::string &element)
1323
1322
{
1324
- std::vector<std::string> parts = split (element,' ;' );
1323
+ std::vector<std::string> parts = split (element, ' ;' );
1325
1324
1326
- if (( parts.size () == 5 ) ||
1327
- (( parts.size () > 5 ) && ( m_formspec_version > FORMSPEC_API_VERSION) ))
1325
+ if (parts.size () == 5 || parts. size () == 6 ||
1326
+ (parts.size () > 6 && m_formspec_version > FORMSPEC_API_VERSION))
1328
1327
{
1329
- std::vector<std::string> v_pos = split (parts[0 ],' ,' );
1328
+ std::vector<std::string> v_pos = split (parts[0 ], ' ,' );
1330
1329
std::string name = parts[2 ];
1331
- std::vector<std::string> items = split (parts[3 ],' ,' );
1332
- std::string str_initial_selection;
1333
- str_initial_selection = parts[4 ];
1330
+ std::vector<std::string> items = split (parts[3 ], ' ,' );
1331
+ std::string str_initial_selection = parts[4 ];
1332
+
1333
+ if (parts.size () >= 6 && is_yes (parts[5 ]))
1334
+ m_dropdown_index_event[name] = true ;
1334
1335
1335
1336
MY_CHECKPOS (" dropdown" ,0 );
1336
1337
@@ -1397,8 +1398,8 @@ void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element
1397
1398
1398
1399
return ;
1399
1400
}
1400
- errorstream << " Invalid dropdown element(" << parts.size () << " ): '"
1401
- << element << " '" << std::endl;
1401
+ errorstream << " Invalid dropdown element(" << parts.size () << " ): '" << element
1402
+ << " '" << std::endl;
1402
1403
}
1403
1404
1404
1405
void GUIFormSpecMenu::parseFieldCloseOnEnter (parserData *data, const std::string &element)
@@ -1414,8 +1415,8 @@ void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element
1414
1415
{
1415
1416
std::vector<std::string> parts = split (element,' ;' );
1416
1417
1417
- if (( parts.size () == 4 ) ||
1418
- (( parts.size () > 4 ) && ( m_formspec_version > FORMSPEC_API_VERSION) ))
1418
+ if (parts.size () == 4 ||
1419
+ (parts.size () > 4 && m_formspec_version > FORMSPEC_API_VERSION))
1419
1420
{
1420
1421
std::vector<std::string> v_pos = split (parts[0 ],' ,' );
1421
1422
std::vector<std::string> v_geom = split (parts[1 ],' ,' );
@@ -2940,6 +2941,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
2940
2941
theme_by_name.clear ();
2941
2942
theme_by_type.clear ();
2942
2943
m_clickthrough_elements.clear ();
2944
+ field_close_on_enter.clear ();
2945
+ m_dropdown_index_event.clear ();
2943
2946
2944
2947
m_bgnonfullscreen = true ;
2945
2948
m_bgfullscreen = false ;
@@ -3727,10 +3730,14 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
3727
3730
}
3728
3731
s32 selected = e->getSelected ();
3729
3732
if (selected >= 0 ) {
3730
- std::vector<std::string> *dropdown_values =
3731
- getDropDownValues (s.fname );
3732
- if (dropdown_values && selected < (s32)dropdown_values->size ()) {
3733
- fields[name] = (*dropdown_values)[selected];
3733
+ if (m_dropdown_index_event.find (s.fname ) !=
3734
+ m_dropdown_index_event.end ()) {
3735
+ fields[name] = std::to_string (selected + 1 );
3736
+ } else {
3737
+ std::vector<std::string> *dropdown_values =
3738
+ getDropDownValues (s.fname );
3739
+ if (dropdown_values && selected < (s32)dropdown_values->size ())
3740
+ fields[name] = (*dropdown_values)[selected];
3734
3741
}
3735
3742
}
3736
3743
} else if (s.ftype == f_TabHeader) {
0 commit comments