qmldesigner: make DesignerSettings thread save

Change-Id: I07074b35456533e9729644ef3647803d477bd6f1
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Tim Jenssen
2022-09-20 16:32:46 +02:00
parent a6a7ca3688
commit a527ceff60
27 changed files with 107 additions and 111 deletions

View File

@@ -109,7 +109,7 @@ void AssetsLibraryModel::toggleExpandAll(bool expand)
void AssetsLibraryModel::deleteFiles(const QStringList &filePaths) void AssetsLibraryModel::deleteFiles(const QStringList &filePaths)
{ {
bool askBeforeDelete = DesignerSettings::getValue( bool askBeforeDelete = QmlDesignerPlugin::settings().value(
DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET).toBool(); DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET).toBool();
bool assetDelete = true; bool assetDelete = true;
@@ -129,7 +129,7 @@ void AssetsLibraryModel::deleteFiles(const QStringList &filePaths)
assetDelete = false; assetDelete = false;
if (cb.isChecked()) if (cb.isChecked())
DesignerSettings::setValue(DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET, false); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET, false);
} }
if (assetDelete) { if (assetDelete) {

View File

@@ -145,7 +145,7 @@ Utils::CrumblePath *CrumbleBar::crumblePath()
bool CrumbleBar::showSaveDialog() bool CrumbleBar::showSaveDialog()
{ {
bool canceled = false; bool canceled = false;
bool alwaysSave = DesignerSettings::getValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR).toBool(); bool alwaysSave = QmlDesignerPlugin::settings().value(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR).toBool();
if (alwaysSave) { if (alwaysSave) {
Core::DocumentManager::saveModifiedDocumentSilently(currentDesignDocument()->editor()->document()); Core::DocumentManager::saveModifiedDocumentSilently(currentDesignDocument()->editor()->document());
} else { } else {
@@ -155,7 +155,7 @@ bool CrumbleBar::showSaveDialog()
tr("Always save when leaving subcomponent"), tr("Always save when leaving subcomponent"),
&alwaysSave); &alwaysSave);
DesignerSettings::setValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR, alwaysSave); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR, alwaysSave);
} }
return !canceled; return !canceled;
} }

View File

@@ -96,8 +96,6 @@ ConnectionViewWidget::ConnectionViewWidget(QWidget *parent) :
for (auto toolButton : buttons) for (auto toolButton : buttons)
ui->toolBar->addWidget(toolButton); ui->toolBar->addWidget(toolButton);
auto settings = QmlDesignerPlugin::instance()->settings();
if (!QmlProjectManager::QmlProject::isQtDesignStudio()) if (!QmlProjectManager::QmlProject::isQtDesignStudio())
ui->tabBar->addTab(tr("Backends", "Title of dynamic properties view")); ui->tabBar->addTab(tr("Backends", "Title of dynamic properties view"));

View File

@@ -44,13 +44,13 @@ const QString lineBreak = QStringLiteral("<br>");
bool isDebugViewEnabled() bool isDebugViewEnabled()
{ {
return QmlDesigner::DesignerSettings::getValue( return QmlDesigner::QmlDesignerPlugin::settings().value(
QmlDesigner::DesignerSettingsKey::ENABLE_DEBUGVIEW).toBool(); QmlDesigner::DesignerSettingsKey::ENABLE_DEBUGVIEW).toBool();
} }
bool isDebugViewShown() bool isDebugViewShown()
{ {
return QmlDesigner::DesignerSettings::getValue( return QmlDesigner::QmlDesignerPlugin::settings().value(
QmlDesigner::DesignerSettingsKey::SHOW_DEBUGVIEW).toBool(); QmlDesigner::DesignerSettingsKey::SHOW_DEBUGVIEW).toBool();
} }

View File

@@ -100,7 +100,7 @@ void DebugViewWidget::setDebugViewEnabled(bool b)
void DebugViewWidget::enabledCheckBoxToggled(bool b) void DebugViewWidget::enabledCheckBoxToggled(bool b)
{ {
DesignerSettings::setValue(DesignerSettingsKey::WARNING_FOR_FEATURES_IN_DESIGNER, b); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::WARNING_FOR_FEATURES_IN_DESIGNER, b);
} }
} //namespace Internal } //namespace Internal

View File

@@ -535,7 +535,7 @@ void Edit3DView::createEdit3DActions()
m_particlesRestartAction->action()->setEnabled(particlemode); m_particlesRestartAction->action()->setEnabled(particlemode);
if (m_seeker) if (m_seeker)
m_seeker->setEnabled(false); m_seeker->setEnabled(false);
QmlDesigner::DesignerSettings::setValue("particleMode", particlemode); QmlDesignerPlugin::settings().insert("particleMode", particlemode);
setCurrentStateNode(rootModelNode()); setCurrentStateNode(rootModelNode());
resetPuppet(); resetPuppet();
}; };

View File

@@ -40,7 +40,7 @@ class Edit3DViewConfig
public: public:
static QList<QColor> load(const char key[]) static QList<QColor> load(const char key[])
{ {
QVariant var = DesignerSettings::getValue(key); QVariant var = QmlDesignerPlugin::settings().value(key);
if (!var.isValid()) if (!var.isValid())
return {}; return {};
@@ -91,7 +91,7 @@ private:
static void saveVariant(const QByteArray &key, const QVariant &colorConfig) static void saveVariant(const QByteArray &key, const QVariant &colorConfig)
{ {
DesignerSettings::setValue(key, colorConfig); QmlDesignerPlugin::settings().insert(key, colorConfig);
} }
}; };

View File

@@ -95,12 +95,12 @@ FormEditorItem* FormEditorScene::itemForQmlItemNode(const QmlItemNode &qmlItemNo
double FormEditorScene::canvasWidth() const double FormEditorScene::canvasWidth() const
{ {
return DesignerSettings::getValue(DesignerSettingsKey::CANVASWIDTH).toDouble(); return QmlDesignerPlugin::settings().value(DesignerSettingsKey::CANVASWIDTH).toDouble();
} }
double FormEditorScene::canvasHeight() const double FormEditorScene::canvasHeight() const
{ {
return DesignerSettings::getValue(DesignerSettingsKey::CANVASHEIGHT).toDouble(); return QmlDesignerPlugin::settings().value(DesignerSettingsKey::CANVASHEIGHT).toDouble();
} }
QList<FormEditorItem*> FormEditorScene::itemsForQmlItemNodes(const QList<QmlItemNode> &nodeList) const QList<FormEditorItem*> FormEditorScene::itemsForQmlItemNodes(const QList<QmlItemNode> &nodeList) const

View File

@@ -36,6 +36,7 @@
#include "formeditorscene.h" #include "formeditorscene.h"
#include "abstractcustomtool.h" #include "abstractcustomtool.h"
#include <qmldesignerplugin.h>
#include <bindingproperty.h> #include <bindingproperty.h>
#include <variantproperty.h> #include <variantproperty.h>
#include <designersettings.h> #include <designersettings.h>
@@ -685,8 +686,8 @@ void FormEditorView::instancesCompleted(const QVector<ModelNode> &completedNodeL
void FormEditorView::instanceInformationsChanged(const QMultiHash<ModelNode, InformationName> &informationChangedHash) void FormEditorView::instanceInformationsChanged(const QMultiHash<ModelNode, InformationName> &informationChangedHash)
{ {
QList<FormEditorItem*> changedItems; QList<FormEditorItem*> changedItems;
const int rootElementInitWidth = DesignerSettings::getValue(DesignerSettingsKey::ROOT_ELEMENT_INIT_WIDTH).toInt(); const int rootElementInitWidth = QmlDesignerPlugin::settings().value(DesignerSettingsKey::ROOT_ELEMENT_INIT_WIDTH).toInt();
const int rootElementInitHeight = DesignerSettings::getValue(DesignerSettingsKey::ROOT_ELEMENT_INIT_HEIGHT).toInt(); const int rootElementInitHeight = QmlDesignerPlugin::settings().value(DesignerSettingsKey::ROOT_ELEMENT_INIT_HEIGHT).toInt();
QList<ModelNode> informationChangedNodes = Utils::filtered(informationChangedHash.keys(), [](const ModelNode &node) { QList<ModelNode> informationChangedNodes = Utils::filtered(informationChangedHash.keys(), [](const ModelNode &node) {
return QmlItemNode::isValidQmlItemNode(node); return QmlItemNode::isValidQmlItemNode(node);

View File

@@ -479,12 +479,12 @@ ToolBox *FormEditorWidget::toolBox() const
double FormEditorWidget::spacing() const double FormEditorWidget::spacing() const
{ {
return DesignerSettings::getValue(DesignerSettingsKey::ITEMSPACING).toDouble(); return QmlDesignerPlugin::settings().value(DesignerSettingsKey::ITEMSPACING).toDouble();
} }
double FormEditorWidget::containerPadding() const double FormEditorWidget::containerPadding() const
{ {
return DesignerSettings::getValue(DesignerSettingsKey::CONTAINERPADDING).toDouble(); return QmlDesignerPlugin::settings().value(DesignerSettingsKey::CONTAINERPADDING).toDouble();
} }
void FormEditorWidget::contextHelp(const Core::IContext::HelpCallback &callback) const void FormEditorWidget::contextHelp(const Core::IContext::HelpCallback &callback) const

View File

@@ -285,7 +285,7 @@ void ItemLibraryWidget::goIntoComponent(const QString &source)
void ItemLibraryWidget::delayedUpdateModel() void ItemLibraryWidget::delayedUpdateModel()
{ {
static bool disableTimer = DesignerSettings::getValue(DesignerSettingsKey::DISABLE_ITEM_LIBRARY_UPDATE_TIMER).toBool(); static bool disableTimer = QmlDesignerPlugin::settings().value(DesignerSettingsKey::DISABLE_ITEM_LIBRARY_UPDATE_TIMER).toBool();
if (disableTimer) if (disableTimer)
updateModel(); updateModel();
else else

View File

@@ -158,10 +158,10 @@ void NavigatorView::modelAttached(Model *model)
QTimer::singleShot(0, this, [this, treeView]() { QTimer::singleShot(0, this, [this, treeView]() {
m_currentModelInterface->setFilter( m_currentModelInterface->setFilter(
DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS).toBool()); QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS).toBool());
m_currentModelInterface->setOrder( m_currentModelInterface->setOrder(
DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool()); QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool());
// Expand everything to begin with to ensure model node to index cache is populated // Expand everything to begin with to ensure model node to index cache is populated
treeView->expandAll(); treeView->expandAll();
@@ -528,7 +528,7 @@ void NavigatorView::rightButtonClicked()
return; //Semantics are unclear for multi selection. return; //Semantics are unclear for multi selection.
bool blocked = blockSelectionChangedSignal(true); bool blocked = blockSelectionChangedSignal(true);
bool reverse = DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool(); bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool();
for (const ModelNode &node : selectedModelNodes()) { for (const ModelNode &node : selectedModelNodes()) {
if (!node.isRootNode() && node.parentProperty().isNodeListProperty() && node.parentProperty().count() > 1) { if (!node.isRootNode() && node.parentProperty().isNodeListProperty() && node.parentProperty().count() > 1) {
@@ -568,7 +568,7 @@ void NavigatorView::rightButtonClicked()
void NavigatorView::upButtonClicked() void NavigatorView::upButtonClicked()
{ {
bool blocked = blockSelectionChangedSignal(true); bool blocked = blockSelectionChangedSignal(true);
bool reverse = DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool(); bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool();
if (reverse) if (reverse)
moveNodesDown(selectedModelNodes()); moveNodesDown(selectedModelNodes());
@@ -582,7 +582,7 @@ void NavigatorView::upButtonClicked()
void NavigatorView::downButtonClicked() void NavigatorView::downButtonClicked()
{ {
bool blocked = blockSelectionChangedSignal(true); bool blocked = blockSelectionChangedSignal(true);
bool reverse = DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool(); bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool();
if (reverse) if (reverse)
moveNodesUp(selectedModelNodes()); moveNodesUp(selectedModelNodes());
@@ -597,14 +597,14 @@ void NavigatorView::filterToggled(bool flag)
{ {
m_currentModelInterface->setFilter(flag); m_currentModelInterface->setFilter(flag);
treeWidget()->expandAll(); treeWidget()->expandAll();
DesignerSettings::setValue(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, flag); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, flag);
} }
void NavigatorView::reverseOrderToggled(bool flag) void NavigatorView::reverseOrderToggled(bool flag)
{ {
m_currentModelInterface->setOrder(flag); m_currentModelInterface->setOrder(flag);
treeWidget()->expandAll(); treeWidget()->expandAll();
DesignerSettings::setValue(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER, flag); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER, flag);
} }
void NavigatorView::textFilterChanged(const QString &text) void NavigatorView::textFilterChanged(const QString &text)

View File

@@ -138,7 +138,7 @@ QList<QToolButton *> NavigatorWidget::createToolBarWidgets()
auto filterAction = new QAction(tr("Show Only Visible Components"), nullptr); auto filterAction = new QAction(tr("Show Only Visible Components"), nullptr);
filterAction->setCheckable(true); filterAction->setCheckable(true);
bool filterFlag = DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS).toBool(); bool filterFlag = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS).toBool();
filterAction->setChecked(filterFlag); filterAction->setChecked(filterFlag);
connect(filterAction, &QAction::toggled, this, &NavigatorWidget::filterToggled); connect(filterAction, &QAction::toggled, this, &NavigatorWidget::filterToggled);
@@ -147,7 +147,7 @@ QList<QToolButton *> NavigatorWidget::createToolBarWidgets()
auto reverseAction = new QAction(tr("Reverse Component Order"), nullptr); auto reverseAction = new QAction(tr("Reverse Component Order"), nullptr);
reverseAction->setCheckable(true); reverseAction->setCheckable(true);
bool reverseFlag = DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool(); bool reverseFlag = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool();
reverseAction->setChecked(reverseFlag); reverseAction->setChecked(reverseFlag);
connect(reverseAction, &QAction::toggled, this, &NavigatorWidget::reverseOrderToggled); connect(reverseAction, &QAction::toggled, this, &NavigatorWidget::reverseOrderToggled);

View File

@@ -35,6 +35,7 @@
#include <QPixmap> #include <QPixmap>
#include "designersettings.h" #include "designersettings.h"
#include <qmldesignerplugin.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
namespace QmlDesigner { namespace QmlDesigner {
@@ -59,7 +60,7 @@ struct Palette
bool read() bool read()
{ {
QStringList data = QmlDesigner::DesignerSettings::getValue(m_settingsKey).toStringList(); QStringList data = QmlDesignerPlugin::settings().value(m_settingsKey).toStringList();
if (data.isEmpty()) if (data.isEmpty())
return false; return false;
@@ -71,7 +72,7 @@ struct Palette
void write() const void write() const
{ {
QmlDesigner::DesignerSettings::setValue(m_settingsKey, m_colors); QmlDesignerPlugin::settings().insert(m_settingsKey, m_colors);
} }
QByteArray m_settingsKey; QByteArray m_settingsKey;

View File

@@ -266,7 +266,7 @@ void TextEditorView::reformatFile()
// Reformat document if we have a .ui.qml file // Reformat document if we have a .ui.qml file
if (document && document->filePath().toString().endsWith(".ui.qml") if (document && document->filePath().toString().endsWith(".ui.qml")
&& DesignerSettings::getValue(DesignerSettingsKey::REFORMAT_UI_QML_FILES).toBool()) { && QmlDesignerPlugin::settings().value(DesignerSettingsKey::REFORMAT_UI_QML_FILES).toBool()) {
QmlJS::Document::Ptr currentDocument(document->semanticInfo().document); QmlJS::Document::Ptr currentDocument(document->semanticInfo().document);
QmlJS::Snapshot snapshot = QmlJS::ModelManagerInterface::instance()->snapshot(); QmlJS::Snapshot snapshot = QmlJS::ModelManagerInterface::instance()->snapshot();

View File

@@ -91,8 +91,8 @@ bool Exception::shouldAssert()
bool Exception::warnAboutException() bool Exception::warnAboutException()
{ {
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
static bool warnException = !QmlDesignerPlugin::instance()->settings().value( static bool warnException = !QmlDesignerPlugin::settings().value(
DesignerSettingsKey::ENABLE_MODEL_EXCEPTION_OUTPUT).toBool(); DesignerSettingsKey::ENABLE_MODEL_EXCEPTION_OUTPUT).toBool();
return warnException; return warnException;
#else #else
return true; return true;

View File

@@ -50,15 +50,14 @@ void InteractiveConnectionManager::setUp(NodeInstanceServerInterface *nodeInstan
{ {
ConnectionManager::setUp(nodeInstanceServer, qrcMappingString, target, view); ConnectionManager::setUp(nodeInstanceServer, qrcMappingString, target, view);
DesignerSettings settings = QmlDesignerPlugin::instance()->settings(); int timeOutTime = QmlDesignerPlugin::settings()
int timeOutTime = settings.value(DesignerSettingsKey::PUPPET_KILL_TIMEOUT).toInt(); .value(DesignerSettingsKey::PUPPET_KILL_TIMEOUT).toInt();
for (Connection &connection : connections()) { for (Connection &connection : connections()) {
connection.timer.reset(new QTimer); connection.timer.reset(new QTimer);
connection.timer->setInterval(timeOutTime); connection.timer->setInterval(timeOutTime);
} }
if (QmlDesignerPlugin::instance() if (QmlDesignerPlugin::settings()
->settings()
.value(DesignerSettingsKey::DEBUG_PUPPET) .value(DesignerSettingsKey::DEBUG_PUPPET)
.toString() .toString()
.isEmpty()) { .isEmpty()) {

View File

@@ -149,7 +149,7 @@ bool PuppetCreator::useOnlyFallbackPuppet() const
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
if (!m_target || !m_target->kit()->isValid()) if (!m_target || !m_target->kit()->isValid())
qWarning() << "Invalid kit for QML puppet"; qWarning() << "Invalid kit for QML puppet";
return m_designerSettings.value(DesignerSettingsKey::USE_DEFAULT_PUPPET).toBool() return QmlDesignerPlugin::settings().value(DesignerSettingsKey::USE_DEFAULT_PUPPET).toBool()
|| m_target == nullptr || !m_target->kit()->isValid(); || m_target == nullptr || !m_target->kit()->isValid();
#else #else
return true; return true;
@@ -188,9 +188,6 @@ PuppetCreator::PuppetCreator(ProjectExplorer::Target *target, const Model *model
: m_target(target) : m_target(target)
, m_availablePuppetType(FallbackPuppet) , m_availablePuppetType(FallbackPuppet)
, m_model(model) , m_model(model)
#ifndef QMLDESIGNER_TEST
, m_designerSettings(QmlDesignerPlugin::instance()->settings())
#endif
{ {
} }
@@ -232,7 +229,7 @@ QProcessUniquePointer PuppetCreator::puppetProcess(
processFinishCallback); processFinishCallback);
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
QString forwardOutput = m_designerSettings.value(DesignerSettingsKey:: QString forwardOutput = QmlDesignerPlugin::settings().value(DesignerSettingsKey::
FORWARD_PUPPET_OUTPUT).toString(); FORWARD_PUPPET_OUTPUT).toString();
#else #else
QString forwardOutput("all"); QString forwardOutput("all");
@@ -265,7 +262,7 @@ QProcessUniquePointer PuppetCreator::puppetProcess(
} }
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
QString debugPuppet = m_designerSettings.value(DesignerSettingsKey:: QString debugPuppet = QmlDesignerPlugin::settings().value(DesignerSettingsKey::
DEBUG_PUPPET).toString(); DEBUG_PUPPET).toString();
#else #else
QString debugPuppet("all"); QString debugPuppet("all");
@@ -415,7 +412,7 @@ QString PuppetCreator::defaultPuppetToplevelBuildDirectory()
QString PuppetCreator::qmlPuppetToplevelBuildDirectory() const QString PuppetCreator::qmlPuppetToplevelBuildDirectory() const
{ {
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
QString puppetToplevelBuildDirectory = m_designerSettings.value( QString puppetToplevelBuildDirectory = QmlDesignerPlugin::settings().value(
DesignerSettingsKey::PUPPET_TOPLEVEL_BUILD_DIRECTORY).toString(); DesignerSettingsKey::PUPPET_TOPLEVEL_BUILD_DIRECTORY).toString();
if (puppetToplevelBuildDirectory.isEmpty()) if (puppetToplevelBuildDirectory.isEmpty())
return defaultPuppetToplevelBuildDirectory(); return defaultPuppetToplevelBuildDirectory();
@@ -435,7 +432,7 @@ QString PuppetCreator::qmlPuppetDirectory(PuppetType puppetType) const
if (puppetType == BinPathPuppet) if (puppetType == BinPathPuppet)
return pathForBinPuppet(m_target).toFileInfo().absoluteDir().canonicalPath(); return pathForBinPuppet(m_target).toFileInfo().absoluteDir().canonicalPath();
return qmlPuppetFallbackDirectory(m_designerSettings); return qmlPuppetFallbackDirectory(QmlDesignerPlugin::settings());
#else #else
return QString(); return QString();
#endif #endif
@@ -503,10 +500,10 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
environment.set("QT_AUTO_SCREEN_SCALE_FACTOR", "1"); environment.set("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
const QString controlsStyle = m_designerSettings.value(DesignerSettingsKey:: const QString controlsStyle = QmlDesignerPlugin::settings().value(DesignerSettingsKey::
CONTROLS_STYLE).toString(); CONTROLS_STYLE).toString();
const bool smoothRendering = m_designerSettings.value(DesignerSettingsKey::SMOOTH_RENDERING) const bool smoothRendering = QmlDesignerPlugin::settings().value(DesignerSettingsKey::SMOOTH_RENDERING)
.toBool(); .toBool();
if (smoothRendering) if (smoothRendering)
@@ -553,7 +550,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
environment.set("QMLDESIGNER_FORCE_QAPPLICATION", "true"); environment.set("QMLDESIGNER_FORCE_QAPPLICATION", "true");
} }
bool particlemode = QmlDesigner::DesignerSettings::getValue("particleMode").toBool(); bool particlemode = QmlDesigner::QmlDesignerPlugin::settings().value("particleMode").toBool();
if (!particlemode) if (!particlemode)
environment.set("QT_QUICK3D_DISABLE_PARTICLE_SYSTEMS", "1"); environment.set("QT_QUICK3D_DISABLE_PARTICLE_SYSTEMS", "1");
else else

View File

@@ -108,9 +108,6 @@ private:
PuppetType m_availablePuppetType; PuppetType m_availablePuppetType;
static QHash<Utils::Id, PuppetType> m_qml2PuppetForKitPuppetHash; static QHash<Utils::Id, PuppetType> m_qml2PuppetForKitPuppetHash;
const Model *m_model = nullptr; const Model *m_model = nullptr;
#ifndef QMLDESIGNER_TEST
const DesignerSettings m_designerSettings;
#endif
QString m_qrcMapping; QString m_qrcMapping;
}; };

View File

@@ -677,10 +677,10 @@ QString QmlObjectNode::generateTranslatableText(const QString &text)
{ {
#ifndef QMLDESIGNER_TEST #ifndef QMLDESIGNER_TEST
if (QmlDesignerPlugin::instance()->settings().value( if (QmlDesignerPlugin::settings().value(
DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt())
switch (QmlDesignerPlugin::instance()->settings().value( switch (QmlDesignerPlugin::settings().value(
DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) { DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) {
case 0: return QString(QStringLiteral("qsTr(\"%1\")")).arg(text); case 0: return QString(QStringLiteral("qsTr(\"%1\")")).arg(text);
case 1: return QString(QStringLiteral("qsTrId(\"%1\")")).arg(text); case 1: return QString(QStringLiteral("qsTrId(\"%1\")")).arg(text);

View File

@@ -25,8 +25,6 @@
#include "designersettings.h" #include "designersettings.h"
#include <qmldesignerplugin.h>
#include <QSettings> #include <QSettings>
namespace QmlDesigner { namespace QmlDesigner {
@@ -36,11 +34,35 @@ namespace DesignerSettingsGroupKey {
const char QML_DESIGNER_SETTINGS_GROUP[] = "Designer"; const char QML_DESIGNER_SETTINGS_GROUP[] = "Designer";
} }
DesignerSettings::DesignerSettings() = default; DesignerSettings::DesignerSettings(QSettings *settings) :
m_settings(settings)
{
fromSettings(settings);
}
void DesignerSettings::insert(const QByteArray &key, const QVariant &value)
{
QMutexLocker locker(&m_mutex);
m_cache.insert(key, value);
toSettings(m_settings);
}
void DesignerSettings::insert(const QHash<QByteArray, QVariant> &settingsHash)
{
QMutexLocker locker(&m_mutex);
m_cache.insert(settingsHash);
toSettings(m_settings);
}
QVariant DesignerSettings::value(const QByteArray &key, const QVariant &defaultValue) const
{
QMutexLocker locker(&m_mutex);
return m_cache.value(key);
}
void DesignerSettings::restoreValue(QSettings *settings, const QByteArray &key, const QVariant &defaultValue) void DesignerSettings::restoreValue(QSettings *settings, const QByteArray &key, const QVariant &defaultValue)
{ {
insert(key, settings->value(QString::fromLatin1(key), defaultValue)); m_cache.insert(key, settings->value(QString::fromLatin1(key), defaultValue));
} }
void DesignerSettings::fromSettings(QSettings *settings) void DesignerSettings::fromSettings(QSettings *settings)
@@ -80,8 +102,8 @@ void DesignerSettings::fromSettings(QSettings *settings)
restoreValue(settings, DesignerSettingsKey::ALWAYS_DESIGN_MODE, true); restoreValue(settings, DesignerSettingsKey::ALWAYS_DESIGN_MODE, true);
restoreValue(settings, DesignerSettingsKey::DISABLE_ITEM_LIBRARY_UPDATE_TIMER, false); restoreValue(settings, DesignerSettingsKey::DISABLE_ITEM_LIBRARY_UPDATE_TIMER, false);
restoreValue(settings, DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET, true); restoreValue(settings, DesignerSettingsKey::ASK_BEFORE_DELETING_ASSET, true);
const QStringList defaultValue = QStringList() << "#222222" << "#999999"; restoreValue(settings, DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR,
restoreValue(settings, DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR, defaultValue); QStringList{"#222222", "#999999"});
restoreValue(settings, DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR, "#aaaaaa"); restoreValue(settings, DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR, "#aaaaaa");
restoreValue(settings, DesignerSettingsKey::SMOOTH_RENDERING, false); restoreValue(settings, DesignerSettingsKey::SMOOTH_RENDERING, false);
restoreValue(settings, DesignerSettingsKey::SHOW_DEBUG_SETTINGS, false); restoreValue(settings, DesignerSettingsKey::SHOW_DEBUG_SETTINGS, false);
@@ -103,8 +125,8 @@ void DesignerSettings::toSettings(QSettings *settings) const
settings->beginGroup(QLatin1String(DesignerSettingsGroupKey::QML_SETTINGS_GROUP)); settings->beginGroup(QLatin1String(DesignerSettingsGroupKey::QML_SETTINGS_GROUP));
settings->beginGroup(QLatin1String(DesignerSettingsGroupKey::QML_DESIGNER_SETTINGS_GROUP)); settings->beginGroup(QLatin1String(DesignerSettingsGroupKey::QML_DESIGNER_SETTINGS_GROUP));
QHash<QByteArray, QVariant>::const_iterator i = constBegin(); QHash<QByteArray, QVariant>::const_iterator i = m_cache.constBegin();
while (i != constEnd()) { while (i != m_cache.constEnd()) {
storeValue(settings, i.key(), i.value()); storeValue(settings, i.key(), i.value());
++i; ++i;
} }
@@ -113,17 +135,4 @@ void DesignerSettings::toSettings(QSettings *settings) const
settings->endGroup(); settings->endGroup();
} }
QVariant DesignerSettings::getValue(const QByteArray &key)
{
DesignerSettings settings = QmlDesignerPlugin::instance()->settings();
return settings.value(key);
}
void DesignerSettings::setValue(const QByteArray &key, const QVariant &value)
{
DesignerSettings settings = QmlDesignerPlugin::instance()->settings();
settings.insert(key, value);
QmlDesignerPlugin::instance()->setSettings(settings);
}
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -30,6 +30,7 @@
#include <QHash> #include <QHash>
#include <QVariant> #include <QVariant>
#include <QByteArray> #include <QByteArray>
#include <QMutex>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QSettings; class QSettings;
@@ -77,19 +78,25 @@ const char SMOOTH_RENDERING[] = "SmoothRendering";
const char OLD_STATES_EDITOR[] = "OldStatesEditor"; const char OLD_STATES_EDITOR[] = "OldStatesEditor";
} }
class QMLDESIGNERCORE_EXPORT DesignerSettings : public QHash<QByteArray, QVariant> class QMLDESIGNERCORE_EXPORT DesignerSettings
{ {
public: public:
DesignerSettings(); DesignerSettings(QSettings *settings);
void insert(const QByteArray &key, const QVariant &value);
void insert(const QHash<QByteArray, QVariant> &settingsHash);
QVariant value(const QByteArray &key, const QVariant &defaultValue = {}) const;
private:
void fromSettings(QSettings *); void fromSettings(QSettings *);
void toSettings(QSettings *) const; void toSettings(QSettings *) const;
static QVariant getValue(const QByteArray &key);
static void setValue(const QByteArray &key, const QVariant &value);
private:
void restoreValue(QSettings *settings, const QByteArray &key, void restoreValue(QSettings *settings, const QByteArray &key,
const QVariant &defaultValue = QVariant()); const QVariant &defaultValue = QVariant());
void storeValue(QSettings *settings, const QByteArray &key, const QVariant &value) const; void storeValue(QSettings *settings, const QByteArray &key, const QVariant &value) const;
QSettings *m_settings;
QHash<QByteArray, QVariant> m_cache;
mutable QMutex m_mutex;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -200,12 +200,12 @@ void DocumentWarningWidget::emitGotoCodeClicked(const DocumentMessage &message)
bool DocumentWarningWidget::warningsEnabled() const bool DocumentWarningWidget::warningsEnabled() const
{ {
return DesignerSettings::getValue(DesignerSettingsKey::WARNING_FOR_FEATURES_IN_DESIGNER).toBool(); return QmlDesignerPlugin::settings().value(DesignerSettingsKey::WARNING_FOR_FEATURES_IN_DESIGNER).toBool();
} }
void DocumentWarningWidget::ignoreCheckBoxToggled(bool b) void DocumentWarningWidget::ignoreCheckBoxToggled(bool b)
{ {
DesignerSettings::setValue(DesignerSettingsKey::WARNING_FOR_FEATURES_IN_DESIGNER, !b); QmlDesignerPlugin::settings().value(DesignerSettingsKey::WARNING_FOR_FEATURES_IN_DESIGNER, !b);
} }
void DocumentWarningWidget::setErrors(const QList<DocumentMessage> &errors) void DocumentWarningWidget::setErrors(const QList<DocumentMessage> &errors)

View File

@@ -55,9 +55,8 @@ OpenUiQmlFileDialog::OpenUiQmlFileDialog(QWidget *parent) :
close(); close();
}); });
connect(ui->checkBox, &QCheckBox::toggled, this, [](bool b){ connect(ui->checkBox, &QCheckBox::toggled, this, [](bool b){
DesignerSettings settings = QmlDesignerPlugin::instance()->settings(); QmlDesignerPlugin::settings().insert(
settings.insert(DesignerSettingsKey::WARNING_FOR_QML_FILES_INSTEAD_OF_UIQML_FILES, !b); DesignerSettingsKey::WARNING_FOR_QML_FILES_INSTEAD_OF_UIQML_FILES, !b);
QmlDesignerPlugin::instance()->setSettings(settings);
}); });
} }

View File

@@ -124,7 +124,7 @@ QtQuickDesignerFactory::QtQuickDesignerFactory()
setDocumentCreator([this]() { setDocumentCreator([this]() {
auto document = new QmlJSEditor::QmlJSEditorDocument(id()); auto document = new QmlJSEditor::QmlJSEditorDocument(id());
document->setIsDesignModePreferred( document->setIsDesignModePreferred(
QmlDesigner::DesignerSettings::getValue( QmlDesigner::QmlDesignerPlugin::settings().value(
QmlDesigner::DesignerSettingsKey::ALWAYS_DESIGN_MODE).toBool()); QmlDesigner::DesignerSettingsKey::ALWAYS_DESIGN_MODE).toBool());
return document; return document;
}); });
@@ -135,6 +135,7 @@ QtQuickDesignerFactory::QtQuickDesignerFactory()
class QmlDesignerPluginPrivate class QmlDesignerPluginPrivate
{ {
public: public:
DesignerSettings settings{Core::ICore::instance()->settings()};
QmlDesignerProjectManager projectManager; QmlDesignerProjectManager projectManager;
ViewManager viewManager{projectManager.asynchronousImageCache(), ViewManager viewManager{projectManager.asynchronousImageCache(),
projectManager.asynchronousMeshImageCache()}; projectManager.asynchronousMeshImageCache()};
@@ -142,7 +143,6 @@ public:
ShortCutManager shortCutManager; ShortCutManager shortCutManager;
SettingsPage settingsPage; SettingsPage settingsPage;
DesignModeWidget mainWidget; DesignModeWidget mainWidget;
DesignerSettings settings;
QtQuickDesignerFactory m_qtQuickDesignerFactory; QtQuickDesignerFactory m_qtQuickDesignerFactory;
bool blockEditorChange = false; bool blockEditorChange = false;
}; };
@@ -196,7 +196,7 @@ static bool shouldAssertInException()
static bool warningsForQmlFilesInsteadOfUiQmlEnabled() static bool warningsForQmlFilesInsteadOfUiQmlEnabled()
{ {
return DesignerSettings::getValue(DesignerSettingsKey::WARNING_FOR_QML_FILES_INSTEAD_OF_UIQML_FILES).toBool(); return QmlDesignerPlugin::settings().value(DesignerSettingsKey::WARNING_FOR_QML_FILES_INSTEAD_OF_UIQML_FILES).toBool();
} }
QmlDesignerPlugin::QmlDesignerPlugin() QmlDesignerPlugin::QmlDesignerPlugin()
@@ -297,8 +297,6 @@ bool QmlDesignerPlugin::delayedInitialize()
}); });
MetaInfo::setPluginPaths(pluginPaths); MetaInfo::setPluginPaths(pluginPaths);
d->settings.fromSettings(Core::ICore::settings());
d->viewManager.registerView(std::make_unique<QmlDesigner::Internal::ConnectionView>()); d->viewManager.registerView(std::make_unique<QmlDesigner::Internal::ConnectionView>());
auto timelineView = d->viewManager.registerView(std::make_unique<QmlDesigner::TimelineView>()); auto timelineView = d->viewManager.registerView(std::make_unique<QmlDesigner::TimelineView>());
@@ -645,7 +643,7 @@ void QmlDesignerPlugin::emitCurrentTextEditorChanged(Core::IEditor *editor)
double QmlDesignerPlugin::formEditorDevicePixelRatio() double QmlDesignerPlugin::formEditorDevicePixelRatio()
{ {
if (DesignerSettings::getValue(DesignerSettingsKey::IGNORE_DEVICE_PIXEL_RATIO).toBool()) if (QmlDesignerPlugin::settings().value(DesignerSettingsKey::IGNORE_DEVICE_PIXEL_RATIO).toBool())
return 1; return 1;
const QList<QWindow *> topLevelWindows = QApplication::topLevelWindows(); const QList<QWindow *> topLevelWindows = QApplication::topLevelWindows();
@@ -753,18 +751,9 @@ const DesignerActionManager &QmlDesignerPlugin::designerActionManager() const
return d->viewManager.designerActionManager(); return d->viewManager.designerActionManager();
} }
DesignerSettings QmlDesignerPlugin::settings() DesignerSettings& QmlDesignerPlugin::settings()
{ {
d->settings.fromSettings(Core::ICore::settings()); return instance()->d->settings;
return d->settings;
}
void QmlDesignerPlugin::setSettings(const DesignerSettings &s)
{
if (s != d->settings) {
d->settings = s;
d->settings.toSettings(Core::ICore::settings());
}
} }
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -75,8 +75,7 @@ public:
DesignerActionManager &designerActionManager(); DesignerActionManager &designerActionManager();
const DesignerActionManager &designerActionManager() const; const DesignerActionManager &designerActionManager() const;
DesignerSettings settings(); static DesignerSettings& settings();
void setSettings(const DesignerSettings &s);
DesignDocument *currentDesignDocument() const; DesignDocument *currentDesignDocument() const;
Internal::DesignModeWidget *mainWidget() const; Internal::DesignModeWidget *mainWidget() const;

View File

@@ -63,7 +63,7 @@ public:
void apply() final; void apply() final;
DesignerSettings settings() const; QHash<QByteArray, QVariant> newSettings() const;
void setSettings(const DesignerSettings &settings); void setSettings(const DesignerSettings &settings);
private: private:
@@ -108,9 +108,9 @@ SettingsPageWidget::SettingsPageWidget()
setSettings(QmlDesignerPlugin::instance()->settings()); setSettings(QmlDesignerPlugin::instance()->settings());
} }
DesignerSettings SettingsPageWidget::settings() const QHash<QByteArray, QVariant> SettingsPageWidget::newSettings() const
{ {
DesignerSettings settings = QmlDesignerPlugin::instance()->settings(); QHash<QByteArray, QVariant> settings;
settings.insert(DesignerSettingsKey::ITEMSPACING, m_ui.spinItemSpacing->value()); settings.insert(DesignerSettingsKey::ITEMSPACING, m_ui.spinItemSpacing->value());
settings.insert(DesignerSettingsKey::CONTAINERPADDING, m_ui.spinSnapMargin->value()); settings.insert(DesignerSettingsKey::CONTAINERPADDING, m_ui.spinSnapMargin->value());
settings.insert(DesignerSettingsKey::CANVASWIDTH, m_ui.spinCanvasWidth->value()); settings.insert(DesignerSettingsKey::CANVASWIDTH, m_ui.spinCanvasWidth->value());
@@ -154,7 +154,8 @@ DesignerSettings SettingsPageWidget::settings() const
m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText()); m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText());
if (newFallbackPuppetPath.isEmpty()) if (newFallbackPuppetPath.isEmpty())
newFallbackPuppetPath = m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText(); newFallbackPuppetPath = m_ui.fallbackPuppetPathLineEdit->lineEdit()->placeholderText();
QString oldFallbackPuppetPath = PuppetCreator::qmlPuppetFallbackDirectory(settings);
QString oldFallbackPuppetPath = PuppetCreator::qmlPuppetFallbackDirectory(QmlDesignerPlugin::settings());
if (oldFallbackPuppetPath != newFallbackPuppetPath && QFileInfo::exists(newFallbackPuppetPath)) { if (oldFallbackPuppetPath != newFallbackPuppetPath && QFileInfo::exists(newFallbackPuppetPath)) {
if (newFallbackPuppetPath == PuppetCreator::defaultPuppetFallbackDirectory()) if (newFallbackPuppetPath == PuppetCreator::defaultPuppetFallbackDirectory())
@@ -270,8 +271,7 @@ void SettingsPageWidget::setSettings(const DesignerSettings &settings)
void SettingsPageWidget::apply() void SettingsPageWidget::apply()
{ {
DesignerSettings currentSettings(QmlDesignerPlugin::instance()->settings()); auto settings = newSettings();
DesignerSettings newSettings = settings();
const auto restartNecessaryKeys = { const auto restartNecessaryKeys = {
DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY, DesignerSettingsKey::PUPPET_DEFAULT_DIRECTORY,
@@ -285,7 +285,7 @@ void SettingsPageWidget::apply()
}; };
for (const char * const key : restartNecessaryKeys) { for (const char * const key : restartNecessaryKeys) {
if (currentSettings.value(key) != newSettings.value(key)) { if (QmlDesignerPlugin::settings().value(key) != settings.value(key)) {
QMessageBox::information(Core::ICore::dialogParent(), tr("Restart Required"), QMessageBox::information(Core::ICore::dialogParent(), tr("Restart Required"),
tr("The made changes will take effect after a " tr("The made changes will take effect after a "
"restart of the QML Emulation layer or %1.") "restart of the QML Emulation layer or %1.")
@@ -294,7 +294,7 @@ void SettingsPageWidget::apply()
} }
} }
QmlDesignerPlugin::instance()->setSettings(newSettings); QmlDesignerPlugin::settings().insert(settings);
} }
SettingsPage::SettingsPage() SettingsPage::SettingsPage()