aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lua_api.txt6
-rw-r--r--games/minimal/mods/experimental/init.lua2
-rw-r--r--src/guiFormSpecMenu.cpp20
-rw-r--r--src/guiFormSpecMenu.h2
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: