From 5423d0b0531d2c1f79188d48742e177ff23477e3 Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Tue, 6 Feb 2018 15:17:10 +0100 Subject: [PATCH] src: use wstring for showing text in QtTextEditDialog --- src/lib/utility/utility.h | 31 ++++++++++------- src/lib/utility/utilityString.cpp | 11 +++++-- src/lib/utility/utilityString.h | 22 +++++++++++++ src/lib_cxx/utility/IncludeDirective.cpp | 4 +-- src/lib_cxx/utility/IncludeDirective.h | 2 +- src/lib_gui/qt/element/QtDirectoryListBox.cpp | 14 ++++---- src/lib_gui/qt/window/QtTextEditDialog.cpp | 14 ++------ src/lib_gui/qt/window/QtTextEditDialog.h | 7 ++-- .../QtProjectWizzardContent.cpp | 15 +++++---- .../project_wizzard/QtProjectWizzardContent.h | 7 ++-- .../QtProjectWizzardContentCDBSource.cpp | 10 +++--- .../QtProjectWizzardContentCDBSource.h | 4 +-- .../QtProjectWizzardContentPath.cpp | 12 +++---- .../QtProjectWizzardContentPath.h | 4 +-- .../QtProjectWizzardContentPaths.cpp | 33 +++++++++---------- .../QtProjectWizzardContentPaths.h | 2 +- 16 files changed, 107 insertions(+), 85 deletions(-) diff --git a/src/lib/utility/utility.h b/src/lib/utility/utility.h index 4e926826..e2bf1d7e 100644 --- a/src/lib/utility/utility.h +++ b/src/lib/utility/utility.h @@ -72,6 +72,11 @@ namespace utility template<> std::vector toStrings(const std::vector& d); + template + std::vector toWStrings(const std::vector& d); + template<> + std::vector toWStrings(const std::vector& d); + template bool isPermutation(const std::vector& a, const std::vector& b) { @@ -237,23 +242,25 @@ std::vector utility::convert(const std::vector& sourceCo template std::vector utility::toStrings(const std::vector& d) { - std::vector v; - for (const T& t : d) - { - v.push_back(std::to_string(t)); - } - return v; + return convert(d, [](T t) { return std::to_string(t); }); } template<> inline std::vector utility::toStrings(const std::vector& d) { - std::vector v; - for (const FilePath& t : d) - { - v.push_back(utility::encodeToUtf8(t.wstr())); - } - return v; + return convert(d, [](const FilePath& fp) { return utility::encodeToUtf8(fp.wstr()); }); +} + +template +std::vector utility::toWStrings(const std::vector& d) +{ + return convert(d, [](T t) { return std::to_wstring(t); }); +} + +template<> +inline std::vector utility::toWStrings(const std::vector& d) +{ + return convert(d, [](const FilePath& fp) { return fp.wstr(); }); } #endif // UTILITY_H diff --git a/src/lib/utility/utilityString.cpp b/src/lib/utility/utilityString.cpp index 46ed7df2..3ea967ea 100644 --- a/src/lib/utility/utilityString.cpp +++ b/src/lib/utility/utilityString.cpp @@ -449,11 +449,18 @@ namespace utility std::string trim(const std::string &str) { - auto wsfront = std::find_if_not(str.begin(), str.end(), [](int c){ return std::isspace(c); }); - auto wsback = std::find_if_not(str.rbegin(), str.rend(), [](int c){ return std::isspace(c); }).base(); + auto wsfront = std::find_if_not(str.begin(), str.end(), [](int c) { return std::isspace(c); }); + auto wsback = std::find_if_not(str.rbegin(), str.rend(), [](int c) { return std::isspace(c); }).base(); return (wsback <= wsfront ? std::string() : std::string(wsfront, wsback)); } + std::wstring trim(const std::wstring &str) + { + auto wsfront = std::find_if_not(str.begin(), str.end(), [](int c) { return std::isspace(c); }); + auto wsback = std::find_if_not(str.rbegin(), str.rend(), [](int c) { return std::isspace(c); }).base(); + return (wsback <= wsfront ? std::wstring() : std::wstring(wsfront, wsback)); + } + std::string elide(const std::string& str, ElideMode mode, size_t size) { if (str.size() <= size || str.size() <= 3) diff --git a/src/lib/utility/utilityString.h b/src/lib/utility/utilityString.h index 424df661..eb2a3871 100644 --- a/src/lib/utility/utilityString.h +++ b/src/lib/utility/utilityString.h @@ -27,6 +27,9 @@ namespace utility template std::string join(const ContainerType& list, const std::string& delimiter); + template + std::wstring join(const ContainerType& list, const std::wstring& delimiter); + std::string join(const std::deque& list, char delimiter); std::string join(const std::deque& list, const std::string& delimiter); std::string join(const std::vector& list, char delimiter); @@ -65,6 +68,7 @@ namespace utility size_t maxLineLength, size_t tabWidth); std::string trim(const std::string &str); + std::wstring trim(const std::wstring &str); enum ElideMode { @@ -127,6 +131,24 @@ namespace utility } return ss.str(); } + + template + std::wstring join(const ContainerType& list, const std::wstring& delimiter) + { + std::wstringstream ss; + bool first = true; + for (const std::wstring& str : list) + { + if (!first) + { + ss << delimiter; + } + first = false; + + ss << str; + } + return ss.str(); + } } #endif // UTILITY_STRING_H diff --git a/src/lib_cxx/utility/IncludeDirective.cpp b/src/lib_cxx/utility/IncludeDirective.cpp index 486ccc9d..442d4f4e 100644 --- a/src/lib_cxx/utility/IncludeDirective.cpp +++ b/src/lib_cxx/utility/IncludeDirective.cpp @@ -23,9 +23,9 @@ FilePath IncludeDirective::getIncludingFile() const return m_includingFilePath; } -std::string IncludeDirective::getDirective() const +std::wstring IncludeDirective::getDirective() const { - return std::string("#include ") + (m_usesBrackets ? "<" : "\"") + m_includedFilePath.str() + (m_usesBrackets ? ">" : "\""); + return std::wstring(L"#include ") + (m_usesBrackets ? L"<" : L"\"") + m_includedFilePath.wstr() + (m_usesBrackets ? L">" : L"\""); } unsigned int IncludeDirective::getLineNumber() const diff --git a/src/lib_cxx/utility/IncludeDirective.h b/src/lib_cxx/utility/IncludeDirective.h index 9f949bcc..1435bf1e 100644 --- a/src/lib_cxx/utility/IncludeDirective.h +++ b/src/lib_cxx/utility/IncludeDirective.h @@ -14,7 +14,7 @@ public: FilePath getIncludedFile() const; FilePath getIncludingFile() const; - std::string getDirective() const; + std::wstring getDirective() const; unsigned int getLineNumber() const; private: diff --git a/src/lib_gui/qt/element/QtDirectoryListBox.cpp b/src/lib_gui/qt/element/QtDirectoryListBox.cpp index 4b1f53ef..746a3e9d 100644 --- a/src/lib_gui/qt/element/QtDirectoryListBox.cpp +++ b/src/lib_gui/qt/element/QtDirectoryListBox.cpp @@ -385,17 +385,17 @@ void QtDirectoryListBox::showEditDialog() m_editDialog = std::make_shared(m_listName, "Edit the list in plain text. Each line is one item."); m_editDialog->setup(); - std::vector list; + std::vector list; for (int i = 0; i < m_list->count(); ++i) { QtListItemWidget* widget = dynamic_cast(m_list->itemWidget(m_list->item(i))); if (!widget->readOnly()) { - list.push_back(widget->getText().toStdString()); + list.push_back(widget->getText().toStdWString()); } } - m_editDialog->setText(utility::join(list, "\n")); + m_editDialog->setText(utility::join(list, L"\n")); connect(m_editDialog.get(), &QtTextEditDialog::canceled, this, &QtDirectoryListBox::canceledEditDialog); connect(m_editDialog.get(), &QtTextEditDialog::finished, this, &QtDirectoryListBox::savedEditDialog); @@ -425,12 +425,12 @@ void QtDirectoryListBox::savedEditDialog() } } - std::vector lines = utility::splitToVector(m_editDialog->getText(), "\n"); + std::vector lines = utility::splitToVector(m_editDialog->getText(), L"\n"); for (size_t i = 0; i < lines.size(); i++) { lines[i] = utility::trim(lines[i]); - if (!lines[i].size()) + if (lines[i].empty()) { lines.erase(lines.begin() + i); i--; @@ -448,9 +448,9 @@ void QtDirectoryListBox::savedEditDialog() itemWidget->setReadOnly(true); } - for (const std::string& str : lines) + for (const std::wstring& line : lines) { - QtListItemWidget* itemWidget = addListBoxItemWithText(QString::fromStdString(str)); + QtListItemWidget* itemWidget = addListBoxItemWithText(QString::fromStdWString(line)); itemWidget->setReadOnly(false); } diff --git a/src/lib_gui/qt/window/QtTextEditDialog.cpp b/src/lib_gui/qt/window/QtTextEditDialog.cpp index 8f59c12a..d81af548 100644 --- a/src/lib_gui/qt/window/QtTextEditDialog.cpp +++ b/src/lib_gui/qt/window/QtTextEditDialog.cpp @@ -15,22 +15,12 @@ QSize QtTextEditDialog::sizeHint() const return QSize(550, 550); } -void QtTextEditDialog::setText(const std::string& text) -{ - m_text->setPlainText(QString::fromStdString(text)); -} - -std::string QtTextEditDialog::getText() -{ - return m_text->toPlainText().toStdString(); -} - -void QtTextEditDialog::setWText(const std::wstring& text) +void QtTextEditDialog::setText(const std::wstring& text) { m_text->setPlainText(QString::fromStdWString(text)); } -std::wstring QtTextEditDialog::getWText() +std::wstring QtTextEditDialog::getText() { return m_text->toPlainText().toStdWString(); } diff --git a/src/lib_gui/qt/window/QtTextEditDialog.h b/src/lib_gui/qt/window/QtTextEditDialog.h index 6d846a70..0048a449 100644 --- a/src/lib_gui/qt/window/QtTextEditDialog.h +++ b/src/lib_gui/qt/window/QtTextEditDialog.h @@ -15,11 +15,8 @@ public: QSize sizeHint() const override; - void setText(const std::string& text); - std::string getText(); - - void setWText(const std::wstring& text); - std::wstring getWText(); + void setText(const std::wstring& text); + std::wstring getText(); void setReadOnly(bool readOnly); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.cpp index 3ad4bba7..d7f6ab23 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.cpp @@ -3,6 +3,7 @@ #include #include "qt/window/QtTextEditDialog.h" +#include "utility/utility.h" #include "utility/utilityString.h" QtProjectWizzardContent::QtProjectWizzardContent(QtProjectWizzardWindow* window) @@ -39,9 +40,9 @@ bool QtProjectWizzardContent::isScrollAble() const return false; } -std::vector QtProjectWizzardContent::getFileNames() const +std::vector QtProjectWizzardContent::getFilePaths() const { - return std::vector(); + return {}; } QString QtProjectWizzardContent::getFileNamesTitle() const @@ -132,20 +133,20 @@ void QtProjectWizzardContent::filesButtonClicked() m_window->saveContent(); std::thread([&](){ - std::vector fileNames = getFileNames(); - m_showFilesFunctor(fileNames); + const std::vector filePaths = getFilePaths(); + m_showFilesFunctor(filePaths); }).detach(); } -void QtProjectWizzardContent::showFilesDialog(const std::vector& fileNames) +void QtProjectWizzardContent::showFilesDialog(const std::vector& filePaths) { if (!m_filesDialog) { m_filesDialog = std::make_shared( - getFileNamesTitle(), QString::number(fileNames.size()) + " " + getFileNamesDescription()); + getFileNamesTitle(), QString::number(filePaths.size()) + " " + getFileNamesDescription()); m_filesDialog->setup(); - m_filesDialog->setText(utility::join(fileNames, "\n")); + m_filesDialog->setText(utility::join(utility::toWStrings(filePaths), L"\n")); m_filesDialog->setCloseVisible(false); m_filesDialog->setReadOnly(true); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.h index d5ab1065..fa8b23df 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContent.h @@ -9,6 +9,7 @@ #include "qt/element/QtHelpButton.h" #include "qt/utility/QtThreadedFunctor.h" #include "qt/window/project_wizzard/QtProjectWizzardWindow.h" +#include "utility/file/FilePath.h" class QtTextEditDialog; @@ -29,7 +30,7 @@ public: virtual bool isScrollAble() const; - virtual std::vector getFileNames() const; + virtual std::vector getFilePaths() const; virtual QString getFileNamesTitle() const; virtual QString getFileNamesDescription() const; @@ -54,10 +55,10 @@ protected slots: void closedFilesDialog(); private: - void showFilesDialog(const std::vector& fileNames); + void showFilesDialog(const std::vector& filePaths); bool m_isInForm; - QtThreadedFunctor> m_showFilesFunctor; + QtThreadedFunctor&> m_showFilesFunctor; }; #endif // QT_PROJECT_WIZZARD_CONTENT_H diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.cpp index 03dfaad0..6624589e 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.cpp @@ -30,7 +30,7 @@ void QtProjectWizzardContentCDBSource::populate(QGridLayout* layout, int& row) void QtProjectWizzardContentCDBSource::load() { - m_fileNames.clear(); + m_filePaths.clear(); const FilePath projectPath = m_settings->getProjectDirectoryPath(); std::vector excludePaths = m_settings->getExcludePathsExpandedAndAbsolute(); @@ -64,22 +64,22 @@ void QtProjectWizzardContentCDBSource::load() path.makeRelativeTo(projectPath); } - m_fileNames.push_back(path.str()); + m_filePaths.push_back(path); } } } if (m_text) { - m_text->setText("" + QString::number(m_fileNames.size()) + " source files were found in the compilation database."); + m_text->setText("" + QString::number(m_filePaths.size()) + " source files were found in the compilation database."); } } -std::vector QtProjectWizzardContentCDBSource::getFileNames() const +std::vector QtProjectWizzardContentCDBSource::getFilePaths() const { const_cast(this)->load(); - return m_fileNames; + return m_filePaths; } QString QtProjectWizzardContentCDBSource::getFileNamesTitle() const diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.h index d0aa1c01..abeb51ee 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentCDBSource.h @@ -18,14 +18,14 @@ public: virtual void load() override; - virtual std::vector getFileNames() const override; + virtual std::vector getFilePaths() const override; virtual QString getFileNamesTitle() const override; virtual QString getFileNamesDescription() const override; private: std::shared_ptr m_settings; QLabel* m_text; - std::vector m_fileNames; + std::vector m_filePaths; }; #endif // QT_PROJECT_WIZZARD_CONTENT_CDB_SOURCE_H diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.cpp index 270ecadb..c1dd55fd 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.cpp @@ -221,14 +221,14 @@ void QtProjectWizzardContentPathSourceMaven::save() } } -std::vector QtProjectWizzardContentPathSourceMaven::getFileNames() const +std::vector QtProjectWizzardContentPathSourceMaven::getFilePaths() const { std::shared_ptr settings = std::dynamic_pointer_cast(m_settings); const FilePath mavenPath = ApplicationSettings::getInstance()->getMavenPath(); const FilePath mavenProjectRoot = settings->getMavenProjectFilePathExpandedAndAbsolute().getParentDirectory(); - std::vector list; + std::vector list; std::shared_ptr dialogView = Application::getInstance()->getDialogView(); ScopedFunctor scopedFunctor([&dialogView](){ @@ -273,7 +273,7 @@ std::vector QtProjectWizzardContentPathSourceMaven::getFileNames() path.makeRelativeTo(projectPath); } - list.push_back(path.str()); + list.push_back(path); } } @@ -366,13 +366,13 @@ void QtProjectWizzardContentPathSourceGradle::save() } } -std::vector QtProjectWizzardContentPathSourceGradle::getFileNames() const +std::vector QtProjectWizzardContentPathSourceGradle::getFilePaths() const { std::shared_ptr settings = std::dynamic_pointer_cast(m_settings); const FilePath gradleProjectRoot = settings->getGradleProjectFilePathExpandedAndAbsolute().getParentDirectory(); - std::vector list; + std::vector list; std::shared_ptr dialogView = Application::getInstance()->getDialogView(); @@ -404,7 +404,7 @@ std::vector QtProjectWizzardContentPathSourceGradle::getFileNames() path.makeRelativeTo(projectPath); } - list.push_back(path.str()); + list.push_back(path); } } diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.h index 3e960bcf..3d57d881 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPath.h @@ -76,7 +76,7 @@ public: virtual void load() override; virtual void save() override; - virtual std::vector getFileNames() const override; + virtual std::vector getFilePaths() const override; private: QCheckBox* m_shouldIndexTests; @@ -109,7 +109,7 @@ public: virtual void load() override; virtual void save() override; - virtual std::vector getFileNames() const override; + virtual std::vector getFilePaths() const override; private: QCheckBox* m_shouldIndexTests; diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp index 74c88c18..6ea63b80 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp @@ -203,7 +203,7 @@ void QtProjectWizzardContentPathsSource::save() m_settings->setSourcePaths(m_list->getList()); } -std::vector QtProjectWizzardContentPathsSource::getFileNames() const +std::vector QtProjectWizzardContentPathsSource::getFilePaths() const { std::shared_ptr dialogView = Application::getInstance()->getDialogView(); @@ -223,11 +223,7 @@ std::vector QtProjectWizzardContentPathsSource::getFileNames() cons const std::set filePaths = fileManager.getAllSourceFilePathsRelative(m_settings->getProjectDirectoryPath()); - std::vector list; - list.resize(filePaths.size()); - std::transform(filePaths.begin(), filePaths.end(), list.begin(), [](const FilePath& p){ return p.str(); }); - - return list; + return utility::toVector(filePaths); } QString QtProjectWizzardContentPathsSource::getFileNamesTitle() const @@ -648,7 +644,7 @@ void QtProjectWizzardContentPathsHeaderSearch::finishedSelectDetectIncludesRootP void QtProjectWizzardContentPathsHeaderSearch::finishedAcceptDetectedIncludePathsDialog() { - const std::vector detectedPaths = utility::split>(m_filesDialog->getWText(), L"\n"); + const std::vector detectedPaths = utility::split>(m_filesDialog->getText(), L"\n"); closedFilesDialog(); std::vector headerSearchPaths = m_list->getWStringList(); @@ -694,7 +690,7 @@ void QtProjectWizzardContentPathsHeaderSearch::showDetectedIncludesResult(const } else { - std::string detailedText = ""; + std::wstring detailedText = L""; FilePath relativeRoot = m_list->getRelativeRootDirectory(); for (const FilePath& path : additionalHeaderSearchPaths) { @@ -703,12 +699,13 @@ void QtProjectWizzardContentPathsHeaderSearch::showDetectedIncludesResult(const const FilePath relPath = path.getRelativeTo(relativeRoot); if (relPath.str().size() < path.str().size()) { - detailedText += relPath.str() + "\n"; - continue; + detailedText += relPath.wstr() + L"\n"; + } + else + { + detailedText += path.wstr() + L"\n"; } } - - detailedText += path.str() + "\n"; } m_filesDialog = std::make_shared( @@ -742,24 +739,24 @@ void QtProjectWizzardContentPathsHeaderSearch::showValidationResult(const std::v } else { - std::map> orderedIncludes; + std::map> orderedIncludes; for (const IncludeDirective& unresolvedInclude: unresolvedIncludes) { - orderedIncludes[unresolvedInclude.getIncludingFile().str()].emplace( + orderedIncludes[unresolvedInclude.getIncludingFile().wstr()].emplace( unresolvedInclude.getLineNumber(), unresolvedInclude.getDirective()); } - std::string detailedText = ""; + std::wstring detailedText = L""; for (const auto& p: orderedIncludes) { - detailedText += p.first + "\n"; + detailedText += p.first + L"\n"; for (const auto& p2: p.second) { - detailedText += std::to_string(p2.first) + ":\t" + p2.second + "\n"; + detailedText += std::to_wstring(p2.first) + L":\t" + p2.second + L"\n"; } - detailedText += "\n"; + detailedText += L"\n"; } m_filesDialog = std::make_shared("Unresolved Include Directives", diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h index b67bea19..c433a26c 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.h @@ -68,7 +68,7 @@ public: virtual void load() override; virtual void save() override; - virtual std::vector getFileNames() const override; + virtual std::vector getFilePaths() const override; virtual QString getFileNamesTitle() const override; virtual QString getFileNamesDescription() const override; };