forked from qt-creator/qt-creator
QmlJsEditor: Simplify structure of QmlJS settings handling
Not the intended final state, but more uniform. Change-Id: I406d53032ff76631ddd542df8e3afa232d93a7fc Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -105,11 +105,11 @@ void QmlJsEditingSettings::fromSettings(QtcSettings *settings)
|
||||
= settings->value(AUTO_FORMAT_ONLY_CURRENT_PROJECT, QVariant(false)).toBool();
|
||||
m_foldAuxData = settings->value(FOLD_AUX_DATA, QVariant(true)).toBool();
|
||||
m_uiQmlOpenMode = settings->value(UIQML_OPEN_MODE, "").toString();
|
||||
m_qmllsSettings.useQmlls = settings->value(USE_QMLLS, QVariant(true)).toBool();
|
||||
m_qmllsSettings.useLatestQmlls = settings->value(USE_LATEST_QMLLS, QVariant(false)).toBool();
|
||||
m_qmllsSettings.disableBuiltinCodemodel
|
||||
m_useQmlls = settings->value(USE_QMLLS, QVariant(true)).toBool();
|
||||
m_useLatestQmlls = settings->value(USE_LATEST_QMLLS, QVariant(false)).toBool();
|
||||
m_disableBuiltinCodemodel
|
||||
= settings->value(DISABLE_BUILTIN_CODEMODEL, QVariant(false)).toBool();
|
||||
m_qmllsSettings.generateQmllsIniFiles
|
||||
m_generateQmllsIniFiles
|
||||
= settings->value(GENERATE_QMLLS_INI_FILES, QVariant(false)).toBool();
|
||||
m_formatCommand = settings->value(FORMAT_COMMAND, {}).toString();
|
||||
m_formatCommandOptions = settings->value(FORMAT_COMMAND_OPTIONS, {}).toString();
|
||||
@@ -136,10 +136,10 @@ void QmlJsEditingSettings::toSettings(QtcSettings *settings) const
|
||||
settings->setValue(AUTO_FORMAT_ONLY_CURRENT_PROJECT, m_autoFormatOnlyCurrentProject);
|
||||
settings->setValue(FOLD_AUX_DATA, m_foldAuxData);
|
||||
settings->setValue(UIQML_OPEN_MODE, m_uiQmlOpenMode);
|
||||
settings->setValue(USE_QMLLS, m_qmllsSettings.useQmlls);
|
||||
settings->setValue(USE_LATEST_QMLLS, m_qmllsSettings.useLatestQmlls);
|
||||
settings->setValue(DISABLE_BUILTIN_CODEMODEL, m_qmllsSettings.disableBuiltinCodemodel);
|
||||
settings->setValue(GENERATE_QMLLS_INI_FILES, m_qmllsSettings.generateQmllsIniFiles);
|
||||
settings->setValue(USE_QMLLS, m_useQmlls);
|
||||
settings->setValue(USE_LATEST_QMLLS, m_useLatestQmlls);
|
||||
settings->setValue(DISABLE_BUILTIN_CODEMODEL, m_disableBuiltinCodemodel);
|
||||
settings->setValue(GENERATE_QMLLS_INI_FILES, m_generateQmllsIniFiles);
|
||||
settings->setValueWithDefault(FORMAT_COMMAND, m_formatCommand, {});
|
||||
settings->setValueWithDefault(FORMAT_COMMAND_OPTIONS, m_formatCommandOptions, {});
|
||||
settings->setValueWithDefault(CUSTOM_COMMAND, m_useCustomFormatCommand, false);
|
||||
@@ -160,8 +160,13 @@ bool QmlJsEditingSettings::equals(const QmlJsEditingSettings &other) const
|
||||
&& m_pinContextPane == other.m_pinContextPane
|
||||
&& m_autoFormatOnSave == other.m_autoFormatOnSave
|
||||
&& m_autoFormatOnlyCurrentProject == other.m_autoFormatOnlyCurrentProject
|
||||
&& m_foldAuxData == other.m_foldAuxData && m_qmllsSettings == other.m_qmllsSettings
|
||||
&& m_uiQmlOpenMode == other.m_uiQmlOpenMode && m_formatCommand == other.m_formatCommand
|
||||
&& m_foldAuxData == other.m_foldAuxData
|
||||
&& m_useQmlls == other.m_useQmlls
|
||||
&& m_useLatestQmlls == other.m_useLatestQmlls
|
||||
&& m_disableBuiltinCodemodel == other.m_disableBuiltinCodemodel
|
||||
&& m_generateQmllsIniFiles == other.m_generateQmllsIniFiles
|
||||
&& m_uiQmlOpenMode == other.m_uiQmlOpenMode
|
||||
&& m_formatCommand == other.m_formatCommand
|
||||
&& m_formatCommandOptions == other.m_formatCommandOptions
|
||||
&& m_useCustomFormatCommand == other.m_useCustomFormatCommand
|
||||
&& m_useCustomAnalyzer == other.m_useCustomAnalyzer
|
||||
@@ -254,16 +259,6 @@ void QmlJsEditingSettings::setUseCustomFormatCommand(bool customCommand)
|
||||
m_useCustomFormatCommand = customCommand;
|
||||
}
|
||||
|
||||
QmllsSettings &QmlJsEditingSettings::qmllsSettings()
|
||||
{
|
||||
return m_qmllsSettings;
|
||||
}
|
||||
|
||||
const QmllsSettings &QmlJsEditingSettings::qmllsSettings() const
|
||||
{
|
||||
return m_qmllsSettings;
|
||||
}
|
||||
|
||||
const QString QmlJsEditingSettings::uiQmlOpenMode() const
|
||||
{
|
||||
return m_uiQmlOpenMode;
|
||||
@@ -304,6 +299,46 @@ void QmlJsEditingSettings::setDisabledMessagesForNonQuickUi(const QSet<int> &dis
|
||||
m_disabledMessagesForNonQuickUi = disabled;
|
||||
}
|
||||
|
||||
bool QmlJsEditingSettings::generateQmllsIniFiles() const
|
||||
{
|
||||
return m_generateQmllsIniFiles;
|
||||
}
|
||||
|
||||
void QmlJsEditingSettings::setGenerateQmllsIniFiles(bool newGenerateQmllsIniFiles)
|
||||
{
|
||||
m_generateQmllsIniFiles = newGenerateQmllsIniFiles;
|
||||
}
|
||||
|
||||
bool QmlJsEditingSettings::disableBuiltinCodemodel() const
|
||||
{
|
||||
return m_disableBuiltinCodemodel;
|
||||
}
|
||||
|
||||
void QmlJsEditingSettings::setDisableBuiltinCodemodel(bool newDisableBuiltinCodemodel)
|
||||
{
|
||||
m_disableBuiltinCodemodel = newDisableBuiltinCodemodel;
|
||||
}
|
||||
|
||||
bool QmlJsEditingSettings::useLatestQmlls() const
|
||||
{
|
||||
return m_useLatestQmlls;
|
||||
}
|
||||
|
||||
void QmlJsEditingSettings::setUseLatestQmlls(bool newUseLatestQmlls)
|
||||
{
|
||||
m_useLatestQmlls = newUseLatestQmlls;
|
||||
}
|
||||
|
||||
bool QmlJsEditingSettings::useQmlls() const
|
||||
{
|
||||
return m_useQmlls;
|
||||
}
|
||||
|
||||
void QmlJsEditingSettings::setUseQmlls(bool newUseQmlls)
|
||||
{
|
||||
m_useQmlls = newUseQmlls;
|
||||
}
|
||||
|
||||
class AnalyzerMessageItem final : public Utils::TreeItem
|
||||
{
|
||||
public:
|
||||
@@ -398,19 +433,19 @@ public:
|
||||
uiQmlOpenComboBox->setSizeAdjustPolicy(QComboBox::QComboBox::AdjustToContents);
|
||||
|
||||
useQmlls = new QCheckBox(Tr::tr("Enable QML Language Server"));
|
||||
useQmlls->setChecked(s.qmllsSettings().useQmlls);
|
||||
useQmlls->setChecked(s.useQmlls());
|
||||
disableBuiltInCodemodel = new QCheckBox(
|
||||
Tr::tr("Use QML Language Server advanced features (renaming, find usages and co.) "
|
||||
"(EXPERIMENTAL!)"));
|
||||
disableBuiltInCodemodel->setChecked(s.qmllsSettings().disableBuiltinCodemodel);
|
||||
disableBuiltInCodemodel->setEnabled(s.qmllsSettings().useQmlls);
|
||||
disableBuiltInCodemodel->setChecked(s.disableBuiltinCodemodel());
|
||||
disableBuiltInCodemodel->setEnabled(s.useQmlls());
|
||||
useLatestQmlls = new QCheckBox(Tr::tr("Use QML Language Server from latest Qt version"));
|
||||
useLatestQmlls->setChecked(s.qmllsSettings().useLatestQmlls);
|
||||
useLatestQmlls->setEnabled(s.qmllsSettings().useQmlls);
|
||||
useLatestQmlls->setChecked(s.useLatestQmlls());
|
||||
useLatestQmlls->setEnabled(s.useQmlls());
|
||||
generateQmllsIniFiles = new QCheckBox(
|
||||
Tr::tr("Generate QML Language Server .qmlls.ini configurations for new projects."));
|
||||
generateQmllsIniFiles->setChecked(s.qmllsSettings().generateQmllsIniFiles);
|
||||
generateQmllsIniFiles->setEnabled(s.qmllsSettings().useQmlls);
|
||||
generateQmllsIniFiles->setChecked(s.generateQmllsIniFiles());
|
||||
generateQmllsIniFiles->setEnabled(s.useQmlls());
|
||||
QObject::connect(useQmlls, &QCheckBox::stateChanged, this, [this](int checked) {
|
||||
useLatestQmlls->setEnabled(checked != Qt::Unchecked);
|
||||
disableBuiltInCodemodel->setEnabled(checked != Qt::Unchecked);
|
||||
@@ -510,10 +545,10 @@ public:
|
||||
s.setFormatCommandOptions(formatCommandOptions->text());
|
||||
s.setFoldAuxData(foldAuxData->isChecked());
|
||||
s.setUiQmlOpenMode(uiQmlOpenComboBox->currentData().toString());
|
||||
s.qmllsSettings().useQmlls = useQmlls->isChecked();
|
||||
s.qmllsSettings().disableBuiltinCodemodel = disableBuiltInCodemodel->isChecked();
|
||||
s.qmllsSettings().useLatestQmlls = useLatestQmlls->isChecked();
|
||||
s.qmllsSettings().generateQmllsIniFiles = generateQmllsIniFiles->isChecked();
|
||||
s.setUseQmlls(useQmlls->isChecked());
|
||||
s.setDisableBuiltinCodemodel(disableBuiltInCodemodel->isChecked());
|
||||
s.setUseLatestQmlls(useLatestQmlls->isChecked());
|
||||
s.setGenerateQmllsIniFiles(generateQmllsIniFiles->isChecked());
|
||||
s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked());
|
||||
QSet<int> disabled;
|
||||
QSet<int> disabledForNonQuickUi;
|
||||
|
@@ -50,9 +50,6 @@ public:
|
||||
bool useCustomFormatCommand() const;
|
||||
void setUseCustomFormatCommand(bool customCommand);
|
||||
|
||||
QmllsSettings &qmllsSettings();
|
||||
const QmllsSettings &qmllsSettings() const;
|
||||
|
||||
const QString uiQmlOpenMode() const;
|
||||
void setUiQmlOpenMode(const QString &mode);
|
||||
|
||||
@@ -65,6 +62,18 @@ public:
|
||||
QSet<int> disabledMessagesForNonQuickUi() const;
|
||||
void setDisabledMessagesForNonQuickUi(const QSet<int> &disabled);
|
||||
|
||||
bool useQmlls() const;
|
||||
void setUseQmlls(bool newUseQmlls);
|
||||
|
||||
bool useLatestQmlls() const;
|
||||
void setUseLatestQmlls(bool newUseLatestQmlls);
|
||||
|
||||
bool disableBuiltinCodemodel() const;
|
||||
void setDisableBuiltinCodemodel(bool newDisableBuiltinCodemodel);
|
||||
|
||||
bool generateQmllsIniFiles() const;
|
||||
void setGenerateQmllsIniFiles(bool newGenerateQmllsIniFiles);
|
||||
|
||||
friend bool operator==(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
|
||||
{ return s1.equals(s2); }
|
||||
friend bool operator!=(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
|
||||
@@ -78,7 +87,10 @@ private:
|
||||
bool m_foldAuxData = true;
|
||||
bool m_useCustomFormatCommand = false;
|
||||
bool m_useCustomAnalyzer = false;
|
||||
QmllsSettings m_qmllsSettings;
|
||||
bool m_useQmlls = true;
|
||||
bool m_useLatestQmlls = false;
|
||||
bool m_disableBuiltinCodemodel = false;
|
||||
bool m_generateQmllsIniFiles = false;
|
||||
QString m_uiQmlOpenMode;
|
||||
QString m_formatCommand;
|
||||
QString m_formatCommandOptions;
|
||||
|
@@ -97,8 +97,8 @@ namespace QmlJSEditor {
|
||||
static LanguageClient::Client *getQmllsClient(const Utils::FilePath &fileName)
|
||||
{
|
||||
// the value in disableBuiltinCodemodel is only valid when useQmlls is enabled
|
||||
if (QmlJsEditingSettings::get().qmllsSettings().useQmlls
|
||||
&& !QmlJsEditingSettings::get().qmllsSettings().disableBuiltinCodemodel)
|
||||
if (QmlJsEditingSettings::get().useQmlls()
|
||||
&& !QmlJsEditingSettings::get().disableBuiltinCodemodel())
|
||||
return nullptr;
|
||||
|
||||
auto client = LanguageClient::LanguageClientManager::clientForFilePath(fileName);
|
||||
|
@@ -738,11 +738,10 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file,
|
||||
QmlJS::ModelManagerInterface *modelManager)
|
||||
{
|
||||
QmllsSettingsManager *settingsManager = QmllsSettingsManager::instance();
|
||||
QmllsSettings settings = settingsManager->lastSettings();
|
||||
bool enabled = settings.useQmlls;
|
||||
bool enabled = settingsManager->useQmlls();
|
||||
if (!enabled)
|
||||
return {};
|
||||
if (settings.useLatestQmlls)
|
||||
if (settingsManager->useLatestQmlls())
|
||||
return settingsManager->latestQmlls();
|
||||
QmlJS::ModelManagerInterface::ProjectInfo pInfo = modelManager->projectInfoForPath(file);
|
||||
return pInfo.qmllsPath;
|
||||
|
@@ -375,7 +375,7 @@ void QmlJSHoverHandler::reset()
|
||||
void QmlJSHoverHandler::operateTooltip(TextEditorWidget *editorWidget, const QPoint &point)
|
||||
{
|
||||
// disable hoverhandling in case qmlls is enabled
|
||||
if (QmlJsEditingSettings::get().qmllsSettings().useQmlls) {
|
||||
if (QmlJsEditingSettings::get().useQmlls()) {
|
||||
BaseHoverHandler::operateTooltip(editorWidget, point);
|
||||
return;
|
||||
}
|
||||
|
@@ -63,12 +63,6 @@ QmllsSettingsManager *QmllsSettingsManager::instance()
|
||||
return manager;
|
||||
}
|
||||
|
||||
QmllsSettings QmllsSettingsManager::lastSettings()
|
||||
{
|
||||
QMutexLocker l(&m_mutex);
|
||||
return m_lastSettings;
|
||||
}
|
||||
|
||||
FilePath QmllsSettingsManager::latestQmlls()
|
||||
{
|
||||
QMutexLocker l(&m_mutex);
|
||||
@@ -92,19 +86,36 @@ void QmllsSettingsManager::setupAutoupdate()
|
||||
|
||||
void QmllsSettingsManager::checkForChanges()
|
||||
{
|
||||
QmllsSettings newSettings = QmlJsEditingSettings::get().qmllsSettings();
|
||||
FilePath newLatest = newSettings.useLatestQmlls && newSettings.useQmlls ? evaluateLatestQmlls()
|
||||
: m_latestQmlls;
|
||||
if (m_lastSettings == newSettings && newLatest == m_latestQmlls)
|
||||
const QmlJsEditingSettings &newSettings = QmlJsEditingSettings::get();
|
||||
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;
|
||||
qCDebug(qmllsLog) << "qmlls settings changed:" << newSettings.useQmlls()
|
||||
<< newSettings.useLatestQmlls() << newLatest;
|
||||
{
|
||||
QMutexLocker l(&m_mutex);
|
||||
m_latestQmlls = newLatest;
|
||||
m_lastSettings = newSettings;
|
||||
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;
|
||||
}
|
||||
|
||||
} // namespace QmlJSEditor
|
||||
|
@@ -11,30 +11,19 @@
|
||||
|
||||
namespace QmlJSEditor {
|
||||
|
||||
struct QmllsSettings
|
||||
{
|
||||
bool useQmlls = true;
|
||||
bool useLatestQmlls = false;
|
||||
bool disableBuiltinCodemodel = false;
|
||||
bool generateQmllsIniFiles = false;
|
||||
|
||||
friend bool operator==(const QmllsSettings &s1, const QmllsSettings &s2)
|
||||
{
|
||||
return s1.useQmlls == s2.useQmlls && s1.useLatestQmlls == s2.useLatestQmlls
|
||||
&& s1.disableBuiltinCodemodel == s2.disableBuiltinCodemodel
|
||||
&& s1.generateQmllsIniFiles == s2.generateQmllsIniFiles;
|
||||
}
|
||||
friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); }
|
||||
};
|
||||
|
||||
class QMLJSEDITOR_EXPORT QmllsSettingsManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static QmllsSettingsManager *instance();
|
||||
QmllsSettings lastSettings();
|
||||
|
||||
Utils::FilePath latestQmlls();
|
||||
void setupAutoupdate();
|
||||
|
||||
bool useQmlls() const;
|
||||
bool useLatestQmlls() const;
|
||||
|
||||
public slots:
|
||||
void checkForChanges();
|
||||
signals:
|
||||
@@ -42,7 +31,10 @@ signals:
|
||||
|
||||
private:
|
||||
QMutex m_mutex;
|
||||
QmllsSettings m_lastSettings;
|
||||
bool m_useQmlls = true;
|
||||
bool m_useLatestQmlls = false;
|
||||
bool m_disableBuiltinCodemodel = false;
|
||||
bool m_generateQmllsIniFiles = false;
|
||||
Utils::FilePath m_latestQmlls;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user