Skip to content

Commit 008b80f

Browse files
p-ouellettesfan5
authored andcommittedAug 24, 2019
Add ItemStack:get_description() to get tooltip (#8847)
1 parent efbac7e commit 008b80f

File tree

6 files changed

+33
-22
lines changed

6 files changed

+33
-22
lines changed
 

Diff for: ‎doc/lua_api.txt

+1
Original file line numberDiff line numberDiff line change
@@ -5254,6 +5254,7 @@ an itemstring, a table or `nil`.
52545254
* `get_metadata()`: (DEPRECATED) Returns metadata (a string attached to an item
52555255
stack).
52565256
* `set_metadata(metadata)`: (DEPRECATED) Returns true.
5257+
* `get_description()`: returns the description shown in inventory list tooltips.
52575258
* `clear()`: removes all items from the stack, making it empty.
52585259
* `replace(item)`: replace the contents of this stack.
52595260
* `item` can also be an itemstring or table.

Diff for: ‎src/gui/guiFormSpecMenu.cpp

+8-22
Original file line numberDiff line numberDiff line change
@@ -2844,37 +2844,23 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int layer,
28442844
}
28452845

28462846
if (layer == 1) {
2847-
// Draw item stack
28482847
if (selected)
28492848
item.takeItem(m_selected_amount);
28502849

28512850
if (!item.empty()) {
2851+
// Draw item stack
28522852
drawItemStack(driver, m_font, item,
28532853
rect, &AbsoluteClippingRect, m_client,
28542854
rotation_kind);
2855-
}
2856-
2857-
// Draw tooltip
2858-
std::wstring tooltip_text;
2859-
if (hovering && !m_selected_item) {
2860-
const std::string &desc = item.metadata.getString("description");
2861-
if (desc.empty())
2862-
tooltip_text =
2863-
utf8_to_wide(item.getDefinition(m_client->idef()).description);
2864-
else
2865-
tooltip_text = utf8_to_wide(desc);
2866-
2867-
if (!item.name.empty()) {
2868-
if (tooltip_text.empty())
2869-
tooltip_text = utf8_to_wide(item.name);
2870-
else if (m_tooltip_append_itemname)
2871-
tooltip_text += utf8_to_wide("\n[" + item.name + "]");
2855+
// Draw tooltip
2856+
if (hovering && !m_selected_item) {
2857+
std::string tooltip = item.getDescription(m_client->idef());
2858+
if (m_tooltip_append_itemname)
2859+
tooltip += "\n[" + item.name + "]";
2860+
showTooltip(utf8_to_wide(tooltip), m_default_tooltip_color,
2861+
m_default_tooltip_bgcolor);
28722862
}
28732863
}
2874-
if (!tooltip_text.empty()) {
2875-
showTooltip(tooltip_text, m_default_tooltip_color,
2876-
m_default_tooltip_bgcolor);
2877-
}
28782864
}
28792865
}
28802866
}

Diff for: ‎src/inventory.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,14 @@ std::string ItemStack::getItemString() const
246246
return os.str();
247247
}
248248

249+
std::string ItemStack::getDescription(IItemDefManager *itemdef) const
250+
{
251+
std::string desc = metadata.getString("description");
252+
if (desc.empty())
253+
desc = getDefinition(itemdef).description;
254+
return desc.empty() ? name : desc;
255+
}
256+
249257

250258
ItemStack ItemStack::addItem(ItemStack newitem, IItemDefManager *itemdef)
251259
{

Diff for: ‎src/inventory.h

+2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ struct ItemStack
4747

4848
// Returns the string used for inventory
4949
std::string getItemString() const;
50+
// Returns the tooltip
51+
std::string getDescription(IItemDefManager *itemdef) const;
5052

5153
/*
5254
Quantity methods

Diff for: ‎src/script/lua_api/l_item.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,16 @@ int LuaItemStack::l_set_metadata(lua_State *L)
175175
return 1;
176176
}
177177

178+
// get_description(self)
179+
int LuaItemStack::l_get_description(lua_State *L)
180+
{
181+
NO_MAP_LOCK_REQUIRED;
182+
LuaItemStack *o = checkobject(L, 1);
183+
std::string desc = o->m_stack.getDescription(getGameDef(L)->idef());
184+
lua_pushstring(L, desc.c_str());
185+
return 1;
186+
}
187+
178188
// clear(self) -> true
179189
int LuaItemStack::l_clear(lua_State *L)
180190
{
@@ -470,6 +480,7 @@ const luaL_Reg LuaItemStack::methods[] = {
470480
luamethod(LuaItemStack, get_meta),
471481
luamethod(LuaItemStack, get_metadata),
472482
luamethod(LuaItemStack, set_metadata),
483+
luamethod(LuaItemStack, get_description),
473484
luamethod(LuaItemStack, clear),
474485
luamethod(LuaItemStack, replace),
475486
luamethod(LuaItemStack, to_string),

Diff for: ‎src/script/lua_api/l_item.h

+3
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ class LuaItemStack : public ModApiBase {
6666
// set_metadata(self, string)
6767
static int l_set_metadata(lua_State *L);
6868

69+
// get_description(self)
70+
static int l_get_description(lua_State *L);
71+
6972
// clear(self) -> true
7073
static int l_clear(lua_State *L);
7174

0 commit comments

Comments
 (0)
Please sign in to comment.