diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp index ca331a7d4e733..0e1eb5905ffc5 100644 --- a/src/gui/guiKeyChangeMenu.cpp +++ b/src/gui/guiKeyChangeMenu.cpp @@ -40,6 +40,7 @@ extern MainGameCallback *g_gamecallback; enum { GUI_ID_BACK_BUTTON = 101, GUI_ID_ABORT_BUTTON, GUI_ID_SCROLL_BAR, + GUI_ID_RESET_BUTTON, // buttons GUI_ID_KEY_FORWARD_BUTTON, GUI_ID_KEY_BACKWARD_BUTTON, @@ -129,17 +130,6 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize) v2s32 size = DesiredRect.getSize(); v2s32 topleft(0, 0); - { - core::rect rect(0, 0, 600 * s, 40 * s); - rect += topleft + v2s32(25 * s, 3 * s); - //gui::IGUIStaticText *t = - const wchar_t *text = wgettext("Keybindings. (If this menu screws up, remove stuff from minetest.conf)"); - Environment->addStaticText(text, - rect, false, true, this, -1); - delete[] text; - //t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT); - } - // Build buttons v2s32 offset(25 * s, 60 * s); @@ -229,6 +219,15 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize) text); delete[] text; } + + { + core::rect rect(0, 0, 100 * s, 30 * s); + rect += topleft + v2s32(10 * s, size.Y - 40 * s); + const wchar_t *text = wgettext("Reset keys"); + Environment->addButton(rect, this, GUI_ID_RESET_BUTTON, + text); + delete[] text; + } } void GUIKeyChangeMenu::drawMenu() @@ -273,6 +272,35 @@ bool GUIKeyChangeMenu::acceptInput() return true; } +bool GUIKeyChangeMenu::resetInput() +{ + for (key_setting *k : key_settings) { + g_settings->remove(k->setting_name); + } + + { + gui::IGUIElement *e = getElementFromId(GUI_ID_CB_AUX1_DESCENDS); + if(e && e->getType() == gui::EGUIET_CHECK_BOX) + g_settings->setBool("aux1_descends", ((gui::IGUICheckBox*)e)->isChecked()); + } + { + gui::IGUIElement *e = getElementFromId(GUI_ID_CB_DOUBLETAP_JUMP); + if(e && e->getType() == gui::EGUIET_CHECK_BOX) + g_settings->setBool("doubletap_jump", ((gui::IGUICheckBox*)e)->isChecked()); + } + { + gui::IGUIElement *e = getElementFromId(GUI_ID_CB_AUTOJUMP); + if(e && e->getType() == gui::EGUIET_CHECK_BOX) + g_settings->setBool("autojump", ((gui::IGUICheckBox*)e)->isChecked()); + } + + clearKeyCache(); + + g_gamecallback->signalKeyConfigChange(); + + return true; +} + bool GUIKeyChangeMenu::resetMenu() { if (activeKey >= 0) @@ -377,6 +405,13 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event) case GUI_ID_ABORT_BUTTON: //abort quitMenu(); return true; + case GUI_ID_RESET_BUTTON: //reset + resetInput(); + regenerateGui(m_screensize_old); + key_settings.clear(); + init_keys(); + //quitMenu(); + return true; default: key_setting *k = NULL; diff --git a/src/gui/guiKeyChangeMenu.h b/src/gui/guiKeyChangeMenu.h index 0aaa05e1830c4..1c0b759dd5f0b 100644 --- a/src/gui/guiKeyChangeMenu.h +++ b/src/gui/guiKeyChangeMenu.h @@ -54,6 +54,8 @@ class GUIKeyChangeMenu : public GUIModalMenu bool acceptInput(); + bool resetInput(); + bool OnEvent(const SEvent &event); bool pausesGame() { return true; }