summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Ouellette <oue.paul18@gmail.com>2019-08-24 12:38:02 -0400
committersfan5 <sfan5@live.de>2019-08-24 18:38:02 +0200
commit008b80fe1ca9d46610b8971e2ac92fb56da8e69f (patch)
tree581fb878e5b5afe163c12dfc926158b9f0e5b0a8
parentefbac7e4466ebc576b2cc64b5b782c61136cde66 (diff)
downloadminetest-008b80fe1ca9d46610b8971e2ac92fb56da8e69f.tar.gz
minetest-008b80fe1ca9d46610b8971e2ac92fb56da8e69f.tar.bz2
minetest-008b80fe1ca9d46610b8971e2ac92fb56da8e69f.zip
Add ItemStack:get_description() to get tooltip (#8847)
-rw-r--r--doc/lua_api.txt1
-rw-r--r--src/gui/guiFormSpecMenu.cpp30
-rw-r--r--src/inventory.cpp8
-rw-r--r--src/inventory.h2
-rw-r--r--src/script/lua_api/l_item.cpp11
-rw-r--r--src/script/lua_api/l_item.h3
6 files changed, 33 insertions, 22 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index c7f6908ad..eaca09fe9 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -5254,6 +5254,7 @@ an itemstring, a table or `nil`.
* `get_metadata()`: (DEPRECATED) Returns metadata (a string attached to an item
stack).
* `set_metadata(metadata)`: (DEPRECATED) Returns true.
+* `get_description()`: returns the description shown in inventory list tooltips.
* `clear()`: removes all items from the stack, making it empty.
* `replace(item)`: replace the contents of this stack.
* `item` can also be an itemstring or table.
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index e7eaefd75..c0fa2470b 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -2844,37 +2844,23 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int layer,
}
if (layer == 1) {
- // Draw item stack
if (selected)
item.takeItem(m_selected_amount);
if (!item.empty()) {
+ // Draw item stack
drawItemStack(driver, m_font, item,
rect, &AbsoluteClippingRect, m_client,
rotation_kind);
- }
-
- // Draw tooltip
- std::wstring tooltip_text;
- if (hovering && !m_selected_item) {
- const std::string &desc = item.metadata.getString("description");
- if (desc.empty())
- tooltip_text =
- utf8_to_wide(item.getDefinition(m_client->idef()).description);
- else
- tooltip_text = utf8_to_wide(desc);
-
- if (!item.name.empty()) {
- if (tooltip_text.empty())
- tooltip_text = utf8_to_wide(item.name);
- else if (m_tooltip_append_itemname)
- tooltip_text += utf8_to_wide("\n[" + item.name + "]");
+ // Draw tooltip
+ if (hovering && !m_selected_item) {
+ std::string tooltip = item.getDescription(m_client->idef());
+ if (m_tooltip_append_itemname)
+ tooltip += "\n[" + item.name + "]";
+ showTooltip(utf8_to_wide(tooltip), m_default_tooltip_color,
+ m_default_tooltip_bgcolor);
}
}
- if (!tooltip_text.empty()) {
- showTooltip(tooltip_text, m_default_tooltip_color,
- m_default_tooltip_bgcolor);
- }
}
}
}
diff --git a/src/inventory.cpp b/src/inventory.cpp
index 40dc602d0..f2cc2ede3 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -246,6 +246,14 @@ std::string ItemStack::getItemString() const
return os.str();
}
+std::string ItemStack::getDescription(IItemDefManager *itemdef) const
+{
+ std::string desc = metadata.getString("description");
+ if (desc.empty())
+ desc = getDefinition(itemdef).description;
+ return desc.empty() ? name : desc;
+}
+
ItemStack ItemStack::addItem(ItemStack newitem, IItemDefManager *itemdef)
{
diff --git a/src/inventory.h b/src/inventory.h
index 95a0bb43e..3f299993a 100644
--- a/src/inventory.h
+++ b/src/inventory.h
@@ -47,6 +47,8 @@ struct ItemStack
// Returns the string used for inventory
std::string getItemString() const;
+ // Returns the tooltip
+ std::string getDescription(IItemDefManager *itemdef) const;
/*
Quantity methods
diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp
index e41d23fd1..f9708b560 100644
--- a/src/script/lua_api/l_item.cpp
+++ b/src/script/lua_api/l_item.cpp
@@ -175,6 +175,16 @@ int LuaItemStack::l_set_metadata(lua_State *L)
return 1;
}
+// get_description(self)
+int LuaItemStack::l_get_description(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ LuaItemStack *o = checkobject(L, 1);
+ std::string desc = o->m_stack.getDescription(getGameDef(L)->idef());
+ lua_pushstring(L, desc.c_str());
+ return 1;
+}
+
// clear(self) -> true
int LuaItemStack::l_clear(lua_State *L)
{
@@ -470,6 +480,7 @@ const luaL_Reg LuaItemStack::methods[] = {
luamethod(LuaItemStack, get_meta),
luamethod(LuaItemStack, get_metadata),
luamethod(LuaItemStack, set_metadata),
+ luamethod(LuaItemStack, get_description),
luamethod(LuaItemStack, clear),
luamethod(LuaItemStack, replace),
luamethod(LuaItemStack, to_string),
diff --git a/src/script/lua_api/l_item.h b/src/script/lua_api/l_item.h
index 5ff715b2a..6fab58045 100644
--- a/src/script/lua_api/l_item.h
+++ b/src/script/lua_api/l_item.h
@@ -66,6 +66,9 @@ private:
// set_metadata(self, string)
static int l_set_metadata(lua_State *L);
+ // get_description(self)
+ static int l_get_description(lua_State *L);
+
// clear(self) -> true
static int l_clear(lua_State *L);