diff options
-rw-r--r-- | doc/lua_api.txt | 6 | ||||
-rw-r--r-- | games/minimal/mods/experimental/init.lua | 2 | ||||
-rw-r--r-- | src/guiFormSpecMenu.cpp | 20 | ||||
-rw-r--r-- | src/guiFormSpecMenu.h | 2 |
4 files changed, 23 insertions, 7 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 92da534f2..74ac53d0f 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -719,6 +719,12 @@ image_button[<X>,<Y>;<W>,<H>;<texture name>;<name>;<label>] ^ image is the filename of an image ^ Position and size units are inventory slots +button_exit[<X>,<Y>;<W>,<H>;<name>;<label>] +^ When clicked, fields will be sent and the form will quit. + +image_button_exit[<X>,<Y>;<W>,<H>;<texture name>;<name>;<label>] +^ When clicked, fields will be sent and the form will quit. + Inventory location: - "context": Selected node metadata (deprecated: "current_name") - "current_player": Player to whom the menu is shown diff --git a/games/minimal/mods/experimental/init.lua b/games/minimal/mods/experimental/init.lua index 12aab3b06..17b676f50 100644 --- a/games/minimal/mods/experimental/init.lua +++ b/games/minimal/mods/experimental/init.lua @@ -532,7 +532,7 @@ minetest.register_chatcommand("test1", { "list[current_player;craft;8,0;3,3;]".. "list[current_player;craftpreview;12,1;1,1;]".. "button[0.5,7;2,1;button1;Button 1]".. - "button[2.5,7;2,1;button2;Button 2]" + "button_exit[2.5,7;2,1;button2;Exit Button]" ) minetest.chat_send_player(name, "Done."); end, diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 02a4fcaad..b2fee9c0d 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -149,6 +149,7 @@ GUIFormSpecMenu::~GUIFormSpecMenu() delete m_selected_item; delete m_form_src; + delete m_text_dst; } void GUIFormSpecMenu::removeChildren() @@ -398,7 +399,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) Environment->addStaticText(spec.flabel.c_str(), rect, false, true, this, spec.fid); m_fields.push_back(spec); } - else if(type == "button") + else if(type == "button" || type == "button_exit") { v2s32 pos; pos.X = stof(f.next(",")) * (float)spacing.X; @@ -421,10 +422,12 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) 258+m_fields.size() ); spec.is_button = true; + if(type == "button_exit") + spec.is_exit = true; Environment->addButton(rect, this, spec.fid, spec.flabel.c_str()); m_fields.push_back(spec); } - else if(type == "image_button") + else if(type == "image_button" || type == "image_button_exit") { v2s32 pos; pos.X = stof(f.next(",")) * (float)spacing.X; @@ -448,6 +451,8 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) 258+m_fields.size() ); spec.is_button = true; + if(type == "image_button_exit") + spec.is_exit = true; video::ITexture *texture = m_gamedef->tsrc()->getTextureRaw(fimage); gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, spec.flabel.c_str()); @@ -813,8 +818,6 @@ void GUIFormSpecMenu::acceptInput() } } m_text_dst->gotText(fields); - delete m_text_dst; - m_text_dst = NULL; } } @@ -1152,8 +1155,13 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) { s.send = true; acceptInput(); - quitMenu(); - return true; + if(s.is_exit){ + quitMenu(); + return true; + }else{ + s.send = false; + return true; + } } } } diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index 0830165a5..8e9557566 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -130,6 +130,7 @@ class GUIFormSpecMenu : public GUIModalMenu { send = false; is_button = false; + is_exit = false; } std::wstring fname; std::wstring flabel; @@ -137,6 +138,7 @@ class GUIFormSpecMenu : public GUIModalMenu int fid; bool send; bool is_button; + bool is_exit; }; public: |