diff --git a/client/windows/GUIClasses.cpp b/client/windows/GUIClasses.cpp index 1d0f4de49..6c6275b0e 100644 --- a/client/windows/GUIClasses.cpp +++ b/client/windows/GUIClasses.cpp @@ -1596,7 +1596,7 @@ CObjectListWindow::CObjectListWindow(const std::vector & _items, std::share for(int id : _items) { std::string objectName = GAME->interface()->cb->getObjInstance(ObjectInstanceID(id))->getObjectName(); - trimTextIfTooWide(objectName); + trimTextIfTooWide(objectName, false); items.emplace_back(id, objectName); } itemsVisible = items; @@ -1620,7 +1620,7 @@ CObjectListWindow::CObjectListWindow(const std::vector & _items, st for(size_t i = 0; i < _items.size(); i++) { std::string objectName = _items[i]; - trimTextIfTooWide(objectName); + trimTextIfTooWide(objectName, true); items.emplace_back(static_cast(i), objectName); } itemsVisible = items; @@ -1664,16 +1664,24 @@ void CObjectListWindow::init(std::shared_ptr titleWidget_, std::stri searchBox->setCallback(std::bind(&CObjectListWindow::itemsSearchCallback, this, std::placeholders::_1)); } -void CObjectListWindow::trimTextIfTooWide(std::string & text) const +void CObjectListWindow::trimTextIfTooWide(std::string & text, bool preserveCountSuffix) const { + std::string suffix = "..."; int maxWidth = pos.w - 60; // 60 px for scrollbar and borders - auto posBrace = text.find('('); - auto posClosing = text.find(')'); - std::string objCount = text.substr(posBrace, posClosing - posBrace) + ')'; + if(text[0] == '{') - objCount = '}' + objCount; + suffix += "}"; + + if (preserveCountSuffix) + { + auto posBrace = text.find_last_of("("); + auto posClosing = text.find_last_of(")"); + std::string objCount = text.substr(posBrace, posClosing - posBrace) + ')'; + suffix += " "; + suffix += objCount; + } + const auto & font = ENGINE->renderHandler().loadFont(FONT_SMALL); - std::string suffix = "... " + objCount; if(font->getStringWidth(text) >= maxWidth) { diff --git a/client/windows/GUIClasses.h b/client/windows/GUIClasses.h index 6eae917e0..6a59a8c1b 100644 --- a/client/windows/GUIClasses.h +++ b/client/windows/GUIClasses.h @@ -206,7 +206,7 @@ class CObjectListWindow : public CWindowObject std::vector< std::pair > itemsVisible; //visible items present in list void init(std::shared_ptr titleWidget_, std::string _title, std::string _descr, bool searchBoxEnabled); - void trimTextIfTooWide(std::string & text) const; // trim item's text to fit within window's width + void trimTextIfTooWide(std::string & text, bool preserveCountSuffix) const; // trim item's text to fit within window's width void itemsSearchCallback(const std::string & text); void exitPressed(); public: