Use string_view in more UI code

simplify_debugging
Evil Eye 2 years ago
parent 5491512905
commit 492e336c0c

@ -47,7 +47,7 @@ namespace MWGui
playerModel->update();
ItemModel::ModelIndex newIndex = -1;
for (unsigned int i = 0; i < playerModel->getItemCount(); ++i)
for (size_t i = 0; i < playerModel->getItemCount(); ++i)
{
if (playerModel->getItem(i).mBase == item)
{

@ -779,7 +779,7 @@ namespace MWGui
if (selected != -1)
lastId = model.getItem(selected).mBase.getCellRef().getRefId();
ItemModel::ModelIndex cycled = selected;
for (unsigned int i = 0; i < model.getItemCount(); ++i)
for (size_t i = 0; i < model.getItemCount(); ++i)
{
cycled += incr;
cycled = (cycled + model.getItemCount()) % model.getItemCount();

@ -116,7 +116,7 @@ namespace MWGui
std::string link = utf8text.substr(pos_begin + 1, pos_end - pos_begin - 1);
const char specialPseudoAsteriskCharacter = 127;
std::replace(link.begin(), link.end(), specialPseudoAsteriskCharacter, '*');
std::string topicName = MWBase::Environment::get()
std::string_view topicName = MWBase::Environment::get()
.getWindowManager()
->getTranslationDataStorage()
.topicStandardForm(link);

@ -472,7 +472,7 @@ namespace MWGui
void SettingsWindow::onResolutionAccept()
{
std::string resStr = mResolutionList->getItemNameAt(mResolutionList->getIndexSelected());
const std::string& resStr = mResolutionList->getItemNameAt(mResolutionList->getIndexSelected());
int resX, resY;
parseResolution(resX, resY, resStr);
@ -844,7 +844,7 @@ namespace MWGui
// check if this resolution is supported in fullscreen
if (mResolutionList->getIndexSelected() != MyGUI::ITEM_NONE)
{
std::string resStr = mResolutionList->getItemNameAt(mResolutionList->getIndexSelected());
const std::string& resStr = mResolutionList->getItemNameAt(mResolutionList->getIndexSelected());
int resX, resY;
parseResolution(resX, resY, resStr);
Settings::Manager::setInt("resolution x", "Video", resX);
@ -853,9 +853,9 @@ namespace MWGui
bool supported = false;
int fallbackX = 0, fallbackY = 0;
for (unsigned int i = 0; i < mResolutionList->getItemCount(); ++i)
for (size_t i = 0; i < mResolutionList->getItemCount(); ++i)
{
std::string resStr = mResolutionList->getItemNameAt(i);
const std::string& resStr = mResolutionList->getItemNameAt(i);
int resX, resY;
parseResolution(resX, resY, resStr);

@ -162,7 +162,7 @@ namespace MWGui
// match model against line
// if don't match, then major change has happened, so do a full update
if (mModel->getItemCount() <= static_cast<unsigned>(spellIndex))
if (mModel->getItemCount() <= static_cast<size_t>(spellIndex))
{
fullUpdateRequired = true;
break;

@ -1096,26 +1096,25 @@ namespace MWGui
void WindowManager::onRetrieveTag(const MyGUI::UString& _tag, MyGUI::UString& _result)
{
std::string tag(_tag);
std::string_view tag = _tag.asUTF8();
std::string MyGuiPrefix = "setting=";
size_t MyGuiPrefixLength = MyGuiPrefix.length();
std::string_view MyGuiPrefix = "setting=";
std::string tokenToFind = "sCell=";
size_t tokenLength = tokenToFind.length();
std::string_view tokenToFind = "sCell=";
if (tag.compare(0, MyGuiPrefixLength, MyGuiPrefix) == 0)
if (tag.starts_with(MyGuiPrefix))
{
tag = tag.substr(MyGuiPrefixLength, tag.length());
tag = tag.substr(MyGuiPrefix.length());
size_t comma_pos = tag.find(',');
std::string settingSection = tag.substr(0, comma_pos);
std::string settingTag = tag.substr(comma_pos + 1, tag.length());
std::string_view settingSection = tag.substr(0, comma_pos);
std::string_view settingTag = tag.substr(comma_pos + 1, tag.length());
_result = Settings::Manager::getString(settingTag, settingSection);
}
else if (tag.compare(0, tokenLength, tokenToFind) == 0)
else if (tag.starts_with(tokenToFind))
{
_result = mTranslationDataStorage.translateCellName(tag.substr(tokenLength));
std::string_view cellName = mTranslationDataStorage.translateCellName(tag.substr(tokenToFind.length()));
_result.assign(cellName.data(), cellName.size());
_result = MyGUI::TextIterator::toTagsString(_result);
}
else if (Gui::replaceTag(tag, _result))
@ -1125,7 +1124,7 @@ namespace MWGui
else
{
std::vector<std::string> split;
Misc::StringUtils::split(tag, split, ":");
Misc::StringUtils::split(std::string{ tag }, split, ":");
l10n::Manager& l10nManager = *MWBase::Environment::get().getL10nManager();
@ -1141,7 +1140,7 @@ namespace MWGui
{
Log(Debug::Error) << "Error: WindowManager::onRetrieveTag: no Store set up yet, can not replace '"
<< tag << "'";
_result = tag;
_result.assign(tag.data(), tag.size());
return;
}
const ESM::GameSetting* setting = mStore->get<ESM::GameSetting>().search(tag);
@ -1149,7 +1148,7 @@ namespace MWGui
if (setting && setting->mValue.getType() == ESM::VT_String)
_result = setting->mValue.getString();
else
_result = tag;
_result.assign(tag.data(), tag.size());
}
}

@ -9,7 +9,7 @@ namespace Translation
{
}
void Storage::loadTranslationData(const Files::Collections& dataFileCollections, const std::string& esmFileName)
void Storage::loadTranslationData(const Files::Collections& dataFileCollections, std::string_view esmFileName)
{
std::string esmNameNoExtension(Misc::StringUtils::lowerCase(esmFileName));
// changing the extension
@ -64,9 +64,9 @@ namespace Translation
}
}
std::string Storage::translateCellName(const std::string& cellName) const
std::string_view Storage::translateCellName(std::string_view cellName) const
{
std::map<std::string, std::string>::const_iterator entry = mCellNamesTranslations.find(cellName);
auto entry = mCellNamesTranslations.find(cellName);
if (entry == mCellNamesTranslations.end())
return cellName;
@ -74,12 +74,12 @@ namespace Translation
return entry->second;
}
std::string Storage::topicID(const std::string& phrase) const
std::string_view Storage::topicID(std::string_view phrase) const
{
std::string result = topicStandardForm(phrase);
std::string_view result = topicStandardForm(phrase);
// seeking for the topic ID
std::map<std::string, std::string>::const_iterator topicIDIterator = mTopicIDs.find(result);
auto topicIDIterator = mTopicIDs.find(result);
if (topicIDIterator != mTopicIDs.end())
result = topicIDIterator->second;
@ -87,9 +87,9 @@ namespace Translation
return result;
}
std::string Storage::topicStandardForm(const std::string& phrase) const
std::string_view Storage::topicStandardForm(std::string_view phrase) const
{
std::map<std::string, std::string>::const_iterator phraseFormsIterator = mPhraseForms.find(phrase);
auto phraseFormsIterator = mPhraseForms.find(phrase);
if (phraseFormsIterator != mPhraseForms.end())
return phraseFormsIterator->second;

@ -11,20 +11,20 @@ namespace Translation
public:
Storage();
void loadTranslationData(const Files::Collections& dataFileCollections, const std::string& esmFileName);
void loadTranslationData(const Files::Collections& dataFileCollections, std::string_view esmFileName);
std::string translateCellName(const std::string& cellName) const;
std::string topicID(const std::string& phrase) const;
std::string_view translateCellName(std::string_view cellName) const;
std::string_view topicID(std::string_view phrase) const;
// Standard form usually means nominative case
std::string topicStandardForm(const std::string& phrase) const;
std::string_view topicStandardForm(std::string_view phrase) const;
void setEncoder(ToUTF8::Utf8Encoder* encoder);
bool hasTranslation() const;
private:
typedef std::map<std::string, std::string> ContainerType;
typedef std::map<std::string, std::string, std::less<>> ContainerType;
void loadData(ContainerType& container, const std::string& fileNameNoExtension, const std::string& extension,
const Files::Collections& dataFileCollections);

@ -36,7 +36,7 @@ namespace Gui
void MWList::addSeparator()
{
mItems.emplace_back("");
mItems.emplace_back(std::string{});
}
void MWList::adjustSize()
@ -46,9 +46,9 @@ namespace Gui
void MWList::redraw(bool scrollbarShown)
{
const int _scrollBarWidth = 20; // fetch this from skin?
constexpr int _scrollBarWidth = 20; // fetch this from skin?
const int scrollBarWidth = scrollbarShown ? _scrollBarWidth : 0;
const int spacing = 3;
constexpr int spacing = 3;
int viewPosition = -mScrollView->getViewOffset().top;
while (mScrollView->getChildCount())
@ -58,16 +58,16 @@ namespace Gui
mItemHeight = 0;
int i = 0;
for (std::vector<std::string>::const_iterator it = mItems.begin(); it != mItems.end(); ++it)
for (const auto& item : mItems)
{
if (*it != "")
if (!item.empty())
{
if (mListItemSkin.empty())
return;
MyGUI::Button* button = mScrollView->createWidget<MyGUI::Button>(mListItemSkin,
MyGUI::IntCoord(0, mItemHeight, mScrollView->getSize().width - scrollBarWidth - 2, 24),
MyGUI::Align::Left | MyGUI::Align::Top, getName() + "_item_" + (*it));
button->setCaption((*it));
MyGUI::Align::Left | MyGUI::Align::Top, getName() + "_item_" + item);
button->setCaption(item);
button->getSubWidgetText()->setWordWrap(true);
button->getSubWidgetText()->setTextAlign(MyGUI::Align::Left);
button->eventMouseWheel += MyGUI::newDelegate(this, &MWList::onMouseWheelMoved);
@ -115,12 +115,12 @@ namespace Gui
Base::setPropertyOverride(_key, _value);
}
unsigned int MWList::getItemCount()
size_t MWList::getItemCount()
{
return static_cast<unsigned int>(mItems.size());
return mItems.size();
}
std::string MWList::getItemNameAt(unsigned int at)
const std::string& MWList::getItemNameAt(size_t at)
{
assert(at < mItems.size() && "List item out of bounds");
return mItems[at];
@ -134,8 +134,9 @@ namespace Gui
void MWList::removeItem(const std::string& name)
{
assert(std::find(mItems.begin(), mItems.end(), name) != mItems.end());
mItems.erase(std::find(mItems.begin(), mItems.end(), name));
auto it = std::find(mItems.begin(), mItems.end(), name);
assert(it != mItems.end());
mItems.erase(it);
}
void MWList::clear()

@ -39,8 +39,8 @@ namespace Gui
void addItem(std::string_view name);
void addSeparator(); ///< add a seperator between the current and the next item.
void removeItem(const std::string& name);
unsigned int getItemCount();
std::string getItemNameAt(unsigned int at); ///< \attention if there are separators, this method will return ""
size_t getItemCount();
const std::string& getItemNameAt(size_t at); ///< \attention if there are separators, this method will return ""
///< at the place where the separator is
void clear();

@ -7,17 +7,16 @@
namespace Gui
{
bool replaceTag(const MyGUI::UString& tag, MyGUI::UString& out)
bool replaceTag(std::string_view tag, MyGUI::UString& out)
{
std::string fontcolour = "fontcolour=";
size_t fontcolourLength = fontcolour.length();
std::string_view fontcolour = "fontcolour=";
std::string fontcolourhtml = "fontcolourhtml=";
size_t fontcolourhtmlLength = fontcolourhtml.length();
std::string_view fontcolourhtml = "fontcolourhtml=";
if (tag.compare(0, fontcolourLength, fontcolour) == 0)
if (tag.starts_with(fontcolour))
{
std::string fallbackName = "FontColor_color_" + tag.substr(fontcolourLength);
std::string fallbackName = "FontColor_color_";
fallbackName += tag.substr(fontcolour.length());
std::string_view str = Fallback::Map::getString(fallbackName);
if (str.empty())
throw std::runtime_error("Unknown fallback name: " + fallbackName);
@ -36,9 +35,10 @@ namespace Gui
out = col.print();
return true;
}
else if (tag.compare(0, fontcolourhtmlLength, fontcolourhtml) == 0)
else if (tag.starts_with(fontcolourhtml))
{
std::string fallbackName = "FontColor_color_" + tag.substr(fontcolourhtmlLength);
std::string fallbackName = "FontColor_color_";
fallbackName += tag.substr(fontcolourhtml.length());
std::string_view str = Fallback::Map::getString(fallbackName);
if (str.empty())
throw std::runtime_error("Unknown fallback name: " + fallbackName);

@ -2,14 +2,13 @@
#define OPENMW_WIDGETS_TAGS_H
#include <MyGUI_UString.h>
#include <map>
#include <string>
#include <string_view>
namespace Gui
{
/// Try to replace a tag. Returns true on success and writes the result to \a out.
bool replaceTag(const MyGUI::UString& tag, MyGUI::UString& out);
bool replaceTag(std::string_view tag, MyGUI::UString& out);
}

Loading…
Cancel
Save