diff --git a/library/include/modules/Items.h b/library/include/modules/Items.h index e232bc953..838104bfe 100644 --- a/library/include/modules/Items.h +++ b/library/include/modules/Items.h @@ -162,7 +162,7 @@ DFHACK_EXPORT df::coord getPosition(df::item *item); /// Returns the title of a codex or "tool", either as the codex title or as the title of the /// first page or writing it has that has a non blank title. An empty string is returned if /// no title is found (which is the casee for everything that isn't a "book"). -DFHACK_EXPORT std::string getTitle(df::item *item); +DFHACK_EXPORT std::string getBookTitle(df::item *item); /// Returns the description string of the item. DFHACK_EXPORT std::string getDescription(df::item *item, int type = 0, bool decorate = false); diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp index f102bcc78..14700f9e7 100644 --- a/library/modules/Items.cpp +++ b/library/modules/Items.cpp @@ -688,7 +688,7 @@ static void addQuality(std::string &tmp, int quality) } // It's not impossible the functionality of this operation is provided by one of the unmapped item functions. -std::string Items::getTitle(df::item *item) +std::string Items::getBookTitle(df::item *item) { CHECK_NULL_POINTER(item); @@ -696,30 +696,32 @@ std::string Items::getTitle(df::item *item) if (item->getType() == df::item_type::BOOK) { - if (virtual_cast(item)->title != "") + auto book = virtual_cast(item); + + if (book->title != "") { - return virtual_cast(item)->title; + return book->title; } else { - for (size_t i = 0; i < virtual_cast(item)->improvements.size(); i++) + for (size_t i = 0; i < book->improvements.size(); i++) { - if (virtual_cast(item)->improvements[i]->getType() == df::improvement_type::PAGES) + if (auto page = virtual_cast(book->improvements[i])) { - for (size_t k = 0; k < virtual_cast(virtual_cast(item)->improvements[i])->contents.size(); k++) + for (size_t k = 0; k < page->contents.size(); k++) { - df::written_content *contents = world->written_contents.all[virtual_cast(virtual_cast(item)->improvements[i])->contents[k]]; + df::written_content *contents = world->written_contents.all[page->contents[k]]; if (contents->title != "") { return contents->title; } } } - else if (virtual_cast(item)->improvements[i]->getType() == df::improvement_type::WRITING) + else if (auto writing = virtual_cast(book->improvements[i])) { - for (size_t k = 0; k < virtual_cast(virtual_cast(item)->improvements[i])->contents.size(); k++) + for (size_t k = 0; k < writing->contents.size(); k++) { - df::written_content *contents = world->written_contents.all[virtual_cast(virtual_cast(item)->improvements[i])->contents[k]]; + df::written_content *contents = world->written_contents.all[writing->contents[k]]; if (contents->title != "") { return contents->title; @@ -729,30 +731,34 @@ std::string Items::getTitle(df::item *item) } } } - else if (item->getType() == df::item_type::TOOL && - virtual_cast(item)->hasToolUse(df::tool_uses::CONTAIN_WRITING)) + else if (item->getType() == df::item_type::TOOL) { - for (size_t i = 0; i < virtual_cast(item)->improvements.size(); i++) + auto book = virtual_cast(item); + + if (book->hasToolUse(df::tool_uses::CONTAIN_WRITING)) { - if (virtual_cast(item)->improvements[i]->getType() == df::improvement_type::PAGES) + for (size_t i = 0; i < book->improvements.size(); i++) { - for (size_t k = 0; k < virtual_cast(virtual_cast(item)->improvements[i])->contents.size(); k++) + if (auto page = virtual_cast(book->improvements[i])) { - df::written_content *contents = world->written_contents.all[virtual_cast(virtual_cast(item)->improvements[i])->contents[k]]; - if (contents->title != "") + for (size_t k = 0; k < page->contents.size(); k++) { - return contents->title; + df::written_content *contents = world->written_contents.all[page->contents[k]]; + if (contents->title != "") + { + return contents->title; + } } } - } - else if (virtual_cast(item)->improvements[i]->getType() == df::improvement_type::WRITING) - { - for (size_t k = 0; k < virtual_cast(virtual_cast(item)->improvements[i])->contents.size(); k++) + else if (auto writing = virtual_cast(book->improvements[i])) { - df::written_content *contents = world->written_contents.all[virtual_cast(virtual_cast(item)->improvements[i])->contents[k]]; - if (contents->title != "") + for (size_t k = 0; k < writing->contents.size(); k++) { - return contents->title; + df::written_content *contents = world->written_contents.all[writing->contents[k]]; + if (contents->title != "") + { + return contents->title; + } } } } diff --git a/plugins/stocks.cpp b/plugins/stocks.cpp index e44cbb431..4439d820a 100644 --- a/plugins/stocks.cpp +++ b/plugins/stocks.cpp @@ -248,7 +248,7 @@ static string get_keywords(df::item *item) static string get_item_label(df::item *item, bool trim = false) { - auto label = Items::getTitle(item); + auto label = Items::getBookTitle(item); if (label == "") { label = Items::getDescription(item, 0, false); @@ -566,7 +566,7 @@ class StockListColumn : public ListColumn if (!ListColumn::showEntry(entry, search_tokens)) return false; - string item_name = toLower(Items::getTitle(entry->elem->entries[0])); + string item_name = toLower(Items::getBookTitle(entry->elem->entries[0])); if (item_name == "") { item_name = toLower(Items::getDescription(entry->elem->entries[0], 0, false));