aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2020-06-22 19:38:36 +0200
committerTim Jenssen <tim.jenssen@qt.io>2020-07-15 21:37:50 +0000
commite95a95cdfeffb63ea73acd63c7f5b1743df76ed0 (patch)
treec41d9dbcb03764147b5ea1533463737b5c6a2e34
parent1cb1298a6d336810cfda86c97b4a785e37466dbb (diff)
projectexplorer: add availableQmlPreviewTranslations()
Preparation for a test translations feature. Change-Id: I1a7ccecab803f5838cd765b7dca99bcf5bb9e8a1 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/projectexplorer/project.cpp15
-rw-r--r--src/plugins/projectexplorer/project.h2
-rw-r--r--src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp32
-rw-r--r--src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.h3
4 files changed, 28 insertions, 24 deletions
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index e7e6599ed9..254ac123bf 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -983,6 +983,21 @@ QVariant Project::extraData(const QString &key) const
return d->m_extraData.value(key);
}
+QStringList Project::availableQmlPreviewTranslations(QString *errorMessage)
+{
+ const auto projectDirectory = rootProjectDirectory().toFileInfo().absoluteFilePath();
+ const QDir languageDirectory(projectDirectory + "/i18n");
+ const auto qmFiles = languageDirectory.entryList({"qml_*.qm"});
+ if (qmFiles.isEmpty() && errorMessage)
+ errorMessage->append(tr("Could not find any qml_*.qm file at '%1'").arg(languageDirectory.absolutePath()));
+ return Utils::transform(qmFiles, [](const QString &qmFile) {
+ const int localeStartPosition = qmFile.lastIndexOf("_") + 1;
+ const int localeEndPosition = qmFile.size() - QString(".qm").size();
+ const QString locale = qmFile.left(localeEndPosition).mid(localeStartPosition);
+ return locale;
+ });
+}
+
#if defined(WITH_TESTS)
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index b6b65e6889..58d6a914b8 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -173,6 +173,8 @@ public:
void setExtraData(const QString &key, const QVariant &data);
QVariant extraData(const QString &key) const;
+ QStringList availableQmlPreviewTranslations(QString *errorMessage);
+
signals:
void projectFileIsDirty(const Utils::FilePath &path);
diff --git a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp
index 190d52b349..966466e3b0 100644
--- a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp
+++ b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.cpp
@@ -221,15 +221,21 @@ SwitchLanguageComboboxAction::SwitchLanguageComboboxAction(QObject *parent)
QWidget *SwitchLanguageComboboxAction::createWidget(QWidget *parent)
{
QPointer<QComboBox> comboBox = new QComboBox(parent);
- comboBox->setToolTip(tr("Switch the language used by preview."));
+ const QString toolTip(tr("Switch the language used by preview."));
+ comboBox->setToolTip(toolTip);
comboBox->addItem(tr("Default"));
- auto refreshComboBoxFunction = [this, comboBox] (ProjectExplorer::Project *project) {
+ auto refreshComboBoxFunction = [this, comboBox, toolTip] (ProjectExplorer::Project *project) {
if (comboBox) {
- if (updateProjectLocales(project)) {
+ QString errorMessage;
+ auto locales = project->availableQmlPreviewTranslations(&errorMessage);
+ if (!errorMessage.isEmpty())
+ comboBox->setToolTip(QString("%1<br/>(%2)").arg(toolTip, errorMessage));
+ if (m_previousLocales != locales) {
comboBox->clear();
comboBox->addItem(tr("Default"));
- comboBox->addItems(m_localeStrings);
+ comboBox->addItems(locales);
+ m_previousLocales = locales;
}
}
};
@@ -250,24 +256,6 @@ QWidget *SwitchLanguageComboboxAction::createWidget(QWidget *parent)
return comboBox;
}
-bool SwitchLanguageComboboxAction::updateProjectLocales(Project *project)
-{
- if (!project)
- return false;
- auto previousLocales = m_localeStrings;
- m_localeStrings.clear();
- const auto projectDirectory = project->rootProjectDirectory().toFileInfo().absoluteFilePath();
- const QDir languageDirectory(projectDirectory + "/i18n");
- const auto qmFiles = languageDirectory.entryList({"qml_*.qm"});
- m_localeStrings = Utils::transform(qmFiles, [](const QString &qmFile) {
- const int localeStartPosition = qmFile.lastIndexOf("_") + 1;
- const int localeEndPosition = qmFile.size() - QString(".qm").size();
- const QString locale = qmFile.left(localeEndPosition).mid(localeStartPosition);
- return locale;
- });
- return previousLocales != m_localeStrings;
-}
-
SwitchLanguageAction::SwitchLanguageAction()
: m_switchLanguageAction(new SwitchLanguageComboboxAction(nullptr))
{
diff --git a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.h b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.h
index a23f125ca1..8bbbc453d6 100644
--- a/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.h
+++ b/src/plugins/qmldesigner/qmlpreviewplugin/qmlpreviewactions.h
@@ -113,8 +113,7 @@ signals:
protected:
QWidget *createWidget(QWidget *parent) override;
private:
- bool updateProjectLocales(ProjectExplorer::Project *project);
- QStringList m_localeStrings;
+ QStringList m_previousLocales;
};
class SwitchLanguageAction : public ActionInterface