src: use wstring for showing text in QtTextEditDialog

This commit is contained in:
mlangkabel
2018-02-06 15:17:10 +01:00
parent adb9542c31
commit 5423d0b053
16 changed files with 107 additions and 85 deletions
+19 -12
View File
@@ -72,6 +72,11 @@ namespace utility
template<>
std::vector<std::string> toStrings(const std::vector<FilePath>& d);
template<typename T>
std::vector<std::wstring> toWStrings(const std::vector<T>& d);
template<>
std::vector<std::wstring> toWStrings(const std::vector<FilePath>& d);
template<typename T>
bool isPermutation(const std::vector<T>& a, const std::vector<T>& b)
{
@@ -237,23 +242,25 @@ std::vector<TargetType> utility::convert(const std::vector<SourceType>& sourceCo
template<typename T>
std::vector<std::string> utility::toStrings(const std::vector<T>& d)
{
std::vector<std::string> v;
for (const T& t : d)
{
v.push_back(std::to_string(t));
}
return v;
return convert<T, std::string>(d, [](T t) { return std::to_string(t); });
}
template<>
inline std::vector<std::string> utility::toStrings<FilePath>(const std::vector<FilePath>& d)
{
std::vector<std::string> v;
for (const FilePath& t : d)
{
v.push_back(utility::encodeToUtf8(t.wstr()));
}
return v;
return convert<FilePath, std::string>(d, [](const FilePath& fp) { return utility::encodeToUtf8(fp.wstr()); });
}
template<typename T>
std::vector<std::wstring> utility::toWStrings(const std::vector<T>& d)
{
return convert(d, [](T t) { return std::to_wstring(t); });
}
template<>
inline std::vector<std::wstring> utility::toWStrings<FilePath>(const std::vector<FilePath>& d)
{
return convert<FilePath, std::wstring>(d, [](const FilePath& fp) { return fp.wstr(); });
}
#endif // UTILITY_H
+9 -2
View File
@@ -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)
+22
View File
@@ -27,6 +27,9 @@ namespace utility
template <typename ContainerType>
std::string join(const ContainerType& list, const std::string& delimiter);
template <typename ContainerType>
std::wstring join(const ContainerType& list, const std::wstring& delimiter);
std::string join(const std::deque<std::string>& list, char delimiter);
std::string join(const std::deque<std::string>& list, const std::string& delimiter);
std::string join(const std::vector<std::string>& 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 <typename ContainerType>
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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -14,7 +14,7 @@ public:
FilePath getIncludedFile() const;
FilePath getIncludingFile() const;
std::string getDirective() const;
std::wstring getDirective() const;
unsigned int getLineNumber() const;
private:
@@ -385,17 +385,17 @@ void QtDirectoryListBox::showEditDialog()
m_editDialog = std::make_shared<QtTextEditDialog>(m_listName, "Edit the list in plain text. Each line is one item.");
m_editDialog->setup();
std::vector<std::string> list;
std::vector<std::wstring> list;
for (int i = 0; i < m_list->count(); ++i)
{
QtListItemWidget* widget = dynamic_cast<QtListItemWidget*>(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<std::string> lines = utility::splitToVector(m_editDialog->getText(), "\n");
std::vector<std::wstring> 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);
}
+2 -12
View File
@@ -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();
}
+2 -5
View File
@@ -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);
@@ -3,6 +3,7 @@
#include <thread>
#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<std::string> QtProjectWizzardContent::getFileNames() const
std::vector<FilePath> QtProjectWizzardContent::getFilePaths() const
{
return std::vector<std::string>();
return {};
}
QString QtProjectWizzardContent::getFileNamesTitle() const
@@ -132,20 +133,20 @@ void QtProjectWizzardContent::filesButtonClicked()
m_window->saveContent();
std::thread([&](){
std::vector<std::string> fileNames = getFileNames();
m_showFilesFunctor(fileNames);
const std::vector<FilePath> filePaths = getFilePaths();
m_showFilesFunctor(filePaths);
}).detach();
}
void QtProjectWizzardContent::showFilesDialog(const std::vector<std::string>& fileNames)
void QtProjectWizzardContent::showFilesDialog(const std::vector<FilePath>& filePaths)
{
if (!m_filesDialog)
{
m_filesDialog = std::make_shared<QtTextEditDialog>(
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);
@@ -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<std::string> getFileNames() const;
virtual std::vector<FilePath> getFilePaths() const;
virtual QString getFileNamesTitle() const;
virtual QString getFileNamesDescription() const;
@@ -54,10 +55,10 @@ protected slots:
void closedFilesDialog();
private:
void showFilesDialog(const std::vector<std::string>& fileNames);
void showFilesDialog(const std::vector<FilePath>& filePaths);
bool m_isInForm;
QtThreadedFunctor<std::vector<std::string>> m_showFilesFunctor;
QtThreadedFunctor<const std::vector<FilePath>&> m_showFilesFunctor;
};
#endif // QT_PROJECT_WIZZARD_CONTENT_H
@@ -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<FilePath> 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("<b>" + QString::number(m_fileNames.size()) + "</b> source files were found in the compilation database.");
m_text->setText("<b>" + QString::number(m_filePaths.size()) + "</b> source files were found in the compilation database.");
}
}
std::vector<std::string> QtProjectWizzardContentCDBSource::getFileNames() const
std::vector<FilePath> QtProjectWizzardContentCDBSource::getFilePaths() const
{
const_cast<QtProjectWizzardContentCDBSource*>(this)->load();
return m_fileNames;
return m_filePaths;
}
QString QtProjectWizzardContentCDBSource::getFileNamesTitle() const
@@ -18,14 +18,14 @@ public:
virtual void load() override;
virtual std::vector<std::string> getFileNames() const override;
virtual std::vector<FilePath> getFilePaths() const override;
virtual QString getFileNamesTitle() const override;
virtual QString getFileNamesDescription() const override;
private:
std::shared_ptr<SourceGroupSettings> m_settings;
QLabel* m_text;
std::vector<std::string> m_fileNames;
std::vector<FilePath> m_filePaths;
};
#endif // QT_PROJECT_WIZZARD_CONTENT_CDB_SOURCE_H
@@ -221,14 +221,14 @@ void QtProjectWizzardContentPathSourceMaven::save()
}
}
std::vector<std::string> QtProjectWizzardContentPathSourceMaven::getFileNames() const
std::vector<FilePath> QtProjectWizzardContentPathSourceMaven::getFilePaths() const
{
std::shared_ptr<SourceGroupSettingsJavaMaven> settings = std::dynamic_pointer_cast<SourceGroupSettingsJavaMaven>(m_settings);
const FilePath mavenPath = ApplicationSettings::getInstance()->getMavenPath();
const FilePath mavenProjectRoot = settings->getMavenProjectFilePathExpandedAndAbsolute().getParentDirectory();
std::vector<std::string> list;
std::vector<FilePath> list;
std::shared_ptr<DialogView> dialogView = Application::getInstance()->getDialogView();
ScopedFunctor scopedFunctor([&dialogView](){
@@ -273,7 +273,7 @@ std::vector<std::string> QtProjectWizzardContentPathSourceMaven::getFileNames()
path.makeRelativeTo(projectPath);
}
list.push_back(path.str());
list.push_back(path);
}
}
@@ -366,13 +366,13 @@ void QtProjectWizzardContentPathSourceGradle::save()
}
}
std::vector<std::string> QtProjectWizzardContentPathSourceGradle::getFileNames() const
std::vector<FilePath> QtProjectWizzardContentPathSourceGradle::getFilePaths() const
{
std::shared_ptr<SourceGroupSettingsJavaGradle> settings = std::dynamic_pointer_cast<SourceGroupSettingsJavaGradle>(m_settings);
const FilePath gradleProjectRoot = settings->getGradleProjectFilePathExpandedAndAbsolute().getParentDirectory();
std::vector<std::string> list;
std::vector<FilePath> list;
std::shared_ptr<DialogView> dialogView = Application::getInstance()->getDialogView();
@@ -404,7 +404,7 @@ std::vector<std::string> QtProjectWizzardContentPathSourceGradle::getFileNames()
path.makeRelativeTo(projectPath);
}
list.push_back(path.str());
list.push_back(path);
}
}
@@ -76,7 +76,7 @@ public:
virtual void load() override;
virtual void save() override;
virtual std::vector<std::string> getFileNames() const override;
virtual std::vector<FilePath> getFilePaths() const override;
private:
QCheckBox* m_shouldIndexTests;
@@ -109,7 +109,7 @@ public:
virtual void load() override;
virtual void save() override;
virtual std::vector<std::string> getFileNames() const override;
virtual std::vector<FilePath> getFilePaths() const override;
private:
QCheckBox* m_shouldIndexTests;
@@ -203,7 +203,7 @@ void QtProjectWizzardContentPathsSource::save()
m_settings->setSourcePaths(m_list->getList());
}
std::vector<std::string> QtProjectWizzardContentPathsSource::getFileNames() const
std::vector<FilePath> QtProjectWizzardContentPathsSource::getFilePaths() const
{
std::shared_ptr<DialogView> dialogView = Application::getInstance()->getDialogView();
@@ -223,11 +223,7 @@ std::vector<std::string> QtProjectWizzardContentPathsSource::getFileNames() cons
const std::set<FilePath> filePaths = fileManager.getAllSourceFilePathsRelative(m_settings->getProjectDirectoryPath());
std::vector<std::string> 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<std::wstring> detectedPaths = utility::split<std::vector<std::wstring>>(m_filesDialog->getWText(), L"\n");
const std::vector<std::wstring> detectedPaths = utility::split<std::vector<std::wstring>>(m_filesDialog->getText(), L"\n");
closedFilesDialog();
std::vector<std::wstring> 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<QtTextEditDialog>(
@@ -742,24 +739,24 @@ void QtProjectWizzardContentPathsHeaderSearch::showValidationResult(const std::v
}
else
{
std::map<std::string, std::map<size_t, std::string>> orderedIncludes;
std::map<std::wstring, std::map<size_t, std::wstring>> 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<QtTextEditDialog>("Unresolved Include Directives",
@@ -68,7 +68,7 @@ public:
virtual void load() override;
virtual void save() override;
virtual std::vector<std::string> getFileNames() const override;
virtual std::vector<FilePath> getFilePaths() const override;
virtual QString getFileNamesTitle() const override;
virtual QString getFileNamesDescription() const override;
};