Formspec button_exit[] and image_button_exit[]
authorPerttu Ahola <celeron55@gmail.com>
Sun, 22 Jul 2012 14:28:09 +0000 (17:28 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 22 Jul 2012 14:40:48 +0000 (17:40 +0300)
doc/lua_api.txt
games/minimal/mods/experimental/init.lua
src/guiFormSpecMenu.cpp
src/guiFormSpecMenu.h

index 92da534f28c4b3c3e683a309a3eb1b4e391bae8f..74ac53d0ff6c2949225543571488684584c6534d 100644 (file)
@@ -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
index 12aab3b0617d700438b2bc94f4c833895c061ec9..17b676f5044208c6e77262780402a30d930d3c0f 100644 (file)
@@ -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,
index 02a4fcaad7ff10d7997219500f499d121217abbb..b2fee9c0dd9789a8d5730d0fec56fa7ab6944e2f 100644 (file)
@@ -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;
+                                       }
                                }
                        }
                }
index 0830165a502bcf4f507ba7cbcd25369eee809997..8e9557566e3b86bc9d5a2fc4c851c72fe9494934 100644 (file)
@@ -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: