forked from qt-creator/qt-creator
QmlJsEditor: Merge LS settings files into main settings file
Collecting relevant pieces in preparation of settings aspectification. Change-Id: Ia221de3babf301f4f5d3583d346eeb9f91046aa4 Reviewed-by: Sami Shalayel <sami.shalayel@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -9,10 +9,15 @@
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <qmljs/qmljscheck.h>
|
||||
#include <qmljs/qmljsmodelmanagerinterface.h>
|
||||
#include <qmljs/qmljsstaticanalysismessage.h>
|
||||
|
||||
#include <qmljstools/qmljstoolsconstants.h>
|
||||
|
||||
#include <qtsupport/qtversionmanager.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/hostosinfo.h>
|
||||
#include <utils/layoutbuilder.h>
|
||||
#include <utils/macroexpander.h>
|
||||
#include <utils/qtcsettings.h>
|
||||
@@ -24,10 +29,23 @@
|
||||
#include <QGroupBox>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QLoggingCategory>
|
||||
#include <QMenu>
|
||||
#include <QTextStream>
|
||||
#include <QTreeView>
|
||||
|
||||
#include <nanotrace/nanotrace.h>
|
||||
|
||||
#include <limits>
|
||||
|
||||
using namespace QmlJSEditor::Internal;
|
||||
using namespace QtSupport;
|
||||
using namespace Utils;
|
||||
|
||||
namespace QmlJSEditor::Internal {
|
||||
|
||||
static Q_LOGGING_CATEGORY(qmllsLog, "qtc.qmlls.settings", QtWarningMsg)
|
||||
|
||||
const char AUTO_FORMAT_ON_SAVE[] = "QmlJSEditor.AutoFormatOnSave";
|
||||
const char AUTO_FORMAT_ONLY_CURRENT_PROJECT[] = "QmlJSEditor.AutoFormatOnlyCurrentProject";
|
||||
const char QML_CONTEXTPANE_KEY[] = "QmlJSEditor.ContextPaneEnabled";
|
||||
@@ -47,17 +65,107 @@ const char DISABLED_MESSAGES[] = "QmlJSEditor.disabledMessages";
|
||||
const char DISABLED_MESSAGES_NONQUICKUI[] = "QmlJSEditor.disabledMessagesNonQuickUI";
|
||||
const char DEFAULT_CUSTOM_FORMAT_COMMAND[] = "%{CurrentDocument:Project:QT_HOST_BINS}/qmlformat";
|
||||
|
||||
using namespace QmlJSEditor::Internal;
|
||||
using namespace Utils;
|
||||
|
||||
namespace QmlJSEditor::Internal {
|
||||
|
||||
QmlJsEditingSettings &settings()
|
||||
{
|
||||
static QmlJsEditingSettings settings;
|
||||
return settings;
|
||||
}
|
||||
|
||||
static FilePath evaluateLatestQmlls()
|
||||
{
|
||||
// find latest qmlls, i.e. vals
|
||||
if (!QtVersionManager::isLoaded())
|
||||
return {};
|
||||
const QtVersions versions = QtVersionManager::versions();
|
||||
FilePath latestQmlls;
|
||||
QVersionNumber latestVersion;
|
||||
FilePath latestQmakeFilePath;
|
||||
int latestUniqueId = std::numeric_limits<int>::min();
|
||||
for (QtVersion *v : versions) {
|
||||
// check if we find qmlls
|
||||
QVersionNumber vNow = v->qtVersion();
|
||||
FilePath qmllsNow = QmlJS::ModelManagerInterface::qmllsForBinPath(v->hostBinPath(), vNow);
|
||||
if (!qmllsNow.isExecutableFile())
|
||||
continue;
|
||||
if (latestVersion > vNow)
|
||||
continue;
|
||||
FilePath qmakeNow = v->qmakeFilePath();
|
||||
int uniqueIdNow = v->uniqueId();
|
||||
if (latestVersion == vNow) {
|
||||
if (latestQmakeFilePath > qmakeNow)
|
||||
continue;
|
||||
if (latestQmakeFilePath == qmakeNow && latestUniqueId >= v->uniqueId())
|
||||
continue;
|
||||
}
|
||||
latestVersion = vNow;
|
||||
latestQmlls = qmllsNow;
|
||||
latestQmakeFilePath = qmakeNow;
|
||||
latestUniqueId = uniqueIdNow;
|
||||
}
|
||||
return latestQmlls;
|
||||
}
|
||||
|
||||
QmllsSettingsManager *QmllsSettingsManager::instance()
|
||||
{
|
||||
static QmllsSettingsManager *manager = new QmllsSettingsManager;
|
||||
return manager;
|
||||
}
|
||||
|
||||
FilePath QmllsSettingsManager::latestQmlls()
|
||||
{
|
||||
QMutexLocker l(&m_mutex);
|
||||
return m_latestQmlls;
|
||||
}
|
||||
|
||||
void QmllsSettingsManager::setupAutoupdate()
|
||||
{
|
||||
QObject::connect(QtVersionManager::instance(),
|
||||
&QtVersionManager::qtVersionsChanged,
|
||||
this,
|
||||
&QmllsSettingsManager::checkForChanges);
|
||||
if (QtVersionManager::isLoaded())
|
||||
checkForChanges();
|
||||
else
|
||||
QObject::connect(QtVersionManager::instance(),
|
||||
&QtVersionManager::qtVersionsLoaded,
|
||||
this,
|
||||
&QmllsSettingsManager::checkForChanges);
|
||||
}
|
||||
|
||||
void QmllsSettingsManager::checkForChanges()
|
||||
{
|
||||
const QmlJsEditingSettings &newSettings = settings();
|
||||
FilePath newLatest = newSettings.useLatestQmlls() && newSettings.useQmlls()
|
||||
? evaluateLatestQmlls() : m_latestQmlls;
|
||||
if (m_useQmlls == newSettings.useQmlls()
|
||||
&& m_useLatestQmlls == newSettings.useLatestQmlls()
|
||||
&& m_disableBuiltinCodemodel == newSettings.disableBuiltinCodemodel()
|
||||
&& m_generateQmllsIniFiles == newSettings.generateQmllsIniFiles()
|
||||
&& newLatest == m_latestQmlls)
|
||||
return;
|
||||
qCDebug(qmllsLog) << "qmlls settings changed:" << newSettings.useQmlls()
|
||||
<< newSettings.useLatestQmlls() << newLatest;
|
||||
{
|
||||
QMutexLocker l(&m_mutex);
|
||||
m_latestQmlls = newLatest;
|
||||
m_useQmlls = newSettings.useQmlls();
|
||||
m_useLatestQmlls = newSettings.useLatestQmlls();
|
||||
m_disableBuiltinCodemodel = newSettings.disableBuiltinCodemodel();
|
||||
m_generateQmllsIniFiles = newSettings.generateQmllsIniFiles();
|
||||
}
|
||||
emit settingsChanged();
|
||||
}
|
||||
|
||||
bool QmllsSettingsManager::useLatestQmlls() const
|
||||
{
|
||||
return m_useLatestQmlls;
|
||||
}
|
||||
|
||||
bool QmllsSettingsManager::useQmlls() const
|
||||
{
|
||||
return m_useQmlls;
|
||||
}
|
||||
|
||||
static QList<int> defaultDisabledMessages()
|
||||
{
|
||||
static const QList<int> disabledByDefault = Utils::transform(
|
||||
@@ -452,7 +560,7 @@ public:
|
||||
|
||||
ignoreMinimumQmllsVersion = new QCheckBox(
|
||||
Tr::tr("Allow versions below Qt %1")
|
||||
.arg(QmllsSettingsManager::mininumQmllsVersion.toString()));
|
||||
.arg(QmlJsEditingSettings::mininumQmllsVersion.toString()));
|
||||
ignoreMinimumQmllsVersion->setChecked(s.ignoreMinimumQmllsVersion());
|
||||
ignoreMinimumQmllsVersion->setEnabled(s.useQmlls());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user