1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmlmultilanguageaspect.h"
#include "qmlprojectmanagertr.h"
#include <extensionsystem/pluginmanager.h>
#include <extensionsystem/pluginspec.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectmanager.h>
#include <projectexplorer/runcontrol.h>
#include <projectexplorer/target.h>
using namespace ProjectExplorer;
using namespace Utils;
namespace QmlProjectManager {
static bool isMultilanguagePresent()
{
const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins();
return std::find_if(specs.cbegin(), specs.cend(),
[](ExtensionSystem::PluginSpec *spec) {
return spec->id() == "multilanguage";
})
!= specs.cend();
}
static QObject *getPlugin(const QString &pluginId)
{
const ExtensionSystem::PluginSpecs &specs = ExtensionSystem::PluginManager::plugins();
const auto pluginIt = std::find_if(
specs.cbegin(), specs.cend(), [pluginId](const ExtensionSystem::PluginSpec *p) {
return p->id() == pluginId;
});
if (pluginIt != specs.cend())
return (*pluginIt)->plugin();
return nullptr;
}
QmlMultiLanguageAspect::QmlMultiLanguageAspect(AspectContainer *container)
: BoolAspect(container)
{
setVisible(isMultilanguagePresent());
setSettingsKey(Constants::USE_MULTILANGUAGE_KEY);
setLabel(Tr::tr("Use MultiLanguage in 2D view"), BoolAspect::LabelPlacement::AtCheckBox);
setToolTip(Tr::tr("Reads translations from MultiLanguage plugin."));
setDefaultValue(!databaseFilePath().isEmpty());
Store getDefaultValues;
fromMap(getDefaultValues);
addDataExtractor(this, &QmlMultiLanguageAspect::origin, &Data::origin);
connect(this, &BoolAspect::changed, this, [this] {
for (RunControl *runControl : ProjectExplorerPlugin::allRunControls()) {
if (auto aspect = runControl->aspectData<QmlMultiLanguageAspect>()) {
if (auto origin = aspect->origin; origin == this)
runControl->initiateStop();
}
}
});
}
QmlMultiLanguageAspect::~QmlMultiLanguageAspect()
{
}
void QmlMultiLanguageAspect::setTarget(Target *target)
{
m_target = target;
}
void QmlMultiLanguageAspect::setCurrentLocale(const QString &locale)
{
if (m_currentLocale == locale)
return;
m_currentLocale = locale;
if (auto previewPlugin = getPlugin("qmlpreview"))
previewPlugin->setProperty("localeIsoCode", locale);
}
QString QmlMultiLanguageAspect::currentLocale() const
{
return m_currentLocale;
}
Utils::FilePath QmlMultiLanguageAspect::databaseFilePath() const
{
if (auto previewPlugin = getPlugin("multilanguage")) {
const auto multilanguageDatabaseFilePath = previewPlugin->property("multilanguageDatabaseFilePath");
return Utils::FilePath::fromString(multilanguageDatabaseFilePath.toString());
}
return {};
}
void QmlMultiLanguageAspect::toMap(Store &map) const
{
BoolAspect::toMap(map);
if (!m_currentLocale.isEmpty())
map.insert(Constants::LAST_USED_LANGUAGE, m_currentLocale);
}
void QmlMultiLanguageAspect::fromMap(const Store &map)
{
BoolAspect::fromMap(map);
setCurrentLocale(map.value(Constants::LAST_USED_LANGUAGE, "en").toString());
}
QmlMultiLanguageAspect *QmlMultiLanguageAspect::current()
{
if (auto project = ProjectManager::startupProject())
return current(project);
return {};
}
QmlMultiLanguageAspect *QmlMultiLanguageAspect::current(Project *project)
{
if (auto target = project->activeTarget())
return current(target);
return {};
}
QmlMultiLanguageAspect *QmlMultiLanguageAspect::current(Target *target)
{
if (!target)
return {};
if (auto runConfiguration = target->activeRunConfiguration()) {
if (auto multiLanguageAspect = runConfiguration->aspect<QmlProjectManager::QmlMultiLanguageAspect>())
return multiLanguageAspect;
}
return {};
}
} // namespace QmlProjectManager
|