forked from qt-creator/qt-creator
QmlDesigner: Avoid accidentally changing gradients
The designer was changing gradient stops if the item "selected" in the edit mode has a gradient. The first gradient stop was set to white. There is still an issue with setting up the gradient editor in this case, but the file is not changed anymore. Task-number: QTCREATORBUG-18421 Change-Id: Ifd6829590a8a7b5217c53f49054f8738bdb71563 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -26,6 +26,7 @@
|
|||||||
#include "gradientmodel.h"
|
#include "gradientmodel.h"
|
||||||
|
|
||||||
#include "qmlanchorbindingproxy.h"
|
#include "qmlanchorbindingproxy.h"
|
||||||
|
#include "propertyeditorview.h"
|
||||||
|
|
||||||
#include <nodeproperty.h>
|
#include <nodeproperty.h>
|
||||||
#include <nodelistproperty.h>
|
#include <nodelistproperty.h>
|
||||||
@@ -35,7 +36,7 @@
|
|||||||
#include <rewritertransaction.h>
|
#include <rewritertransaction.h>
|
||||||
|
|
||||||
GradientModel::GradientModel(QObject *parent) :
|
GradientModel::GradientModel(QObject *parent) :
|
||||||
QAbstractListModel(parent), m_lock(false)
|
QAbstractListModel(parent), m_locked(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +94,7 @@ QVariant GradientModel::data(const QModelIndex &index, int role) const
|
|||||||
|
|
||||||
int GradientModel::addStop(qreal position, const QColor &color)
|
int GradientModel::addStop(qreal position, const QColor &color)
|
||||||
{
|
{
|
||||||
if (m_lock)
|
if (m_locked)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!m_itemNode.isValid() || gradientPropertyName().isEmpty())
|
if (!m_itemNode.isValid() || gradientPropertyName().isEmpty())
|
||||||
@@ -131,7 +132,7 @@ int GradientModel::addStop(qreal position, const QColor &color)
|
|||||||
|
|
||||||
void GradientModel::addGradient()
|
void GradientModel::addGradient()
|
||||||
{
|
{
|
||||||
if (m_lock)
|
if (m_locked)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_itemNode.isValid() || gradientPropertyName().isEmpty())
|
if (!m_itemNode.isValid() || gradientPropertyName().isEmpty())
|
||||||
@@ -174,7 +175,7 @@ void GradientModel::addGradient()
|
|||||||
|
|
||||||
void GradientModel::setColor(int index, const QColor &color)
|
void GradientModel::setColor(int index, const QColor &color)
|
||||||
{
|
{
|
||||||
if (m_lock)
|
if (locked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_itemNode.modelNode().isSelected())
|
if (!m_itemNode.modelNode().isSelected())
|
||||||
@@ -191,7 +192,7 @@ void GradientModel::setColor(int index, const QColor &color)
|
|||||||
|
|
||||||
void GradientModel::setPosition(int index, qreal positition)
|
void GradientModel::setPosition(int index, qreal positition)
|
||||||
{
|
{
|
||||||
if (m_lock)
|
if (locked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (index < rowCount()) {
|
if (index < rowCount()) {
|
||||||
@@ -266,12 +267,12 @@ void GradientModel::deleteGradient()
|
|||||||
|
|
||||||
void GradientModel::lock()
|
void GradientModel::lock()
|
||||||
{
|
{
|
||||||
m_lock = true;
|
m_locked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GradientModel::unlock()
|
void GradientModel::unlock()
|
||||||
{
|
{
|
||||||
m_lock = false;
|
m_locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GradientModel::registerDeclarativeType()
|
void GradientModel::registerDeclarativeType()
|
||||||
@@ -281,11 +282,11 @@ void GradientModel::registerDeclarativeType()
|
|||||||
|
|
||||||
void GradientModel::setupModel()
|
void GradientModel::setupModel()
|
||||||
{
|
{
|
||||||
m_lock = true;
|
m_locked = true;
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
m_lock = false;
|
m_locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
|
void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
|
||||||
@@ -300,12 +301,12 @@ void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
|
|||||||
|
|
||||||
setupModel();
|
setupModel();
|
||||||
|
|
||||||
m_lock = true;
|
m_locked = true;
|
||||||
|
|
||||||
emit anchorBackendChanged();
|
emit anchorBackendChanged();
|
||||||
emit hasGradientChanged();
|
emit hasGradientChanged();
|
||||||
|
|
||||||
m_lock = false;
|
m_locked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString GradientModel::gradientPropertyName() const
|
QString GradientModel::gradientPropertyName() const
|
||||||
@@ -323,3 +324,16 @@ bool GradientModel::hasGradient() const
|
|||||||
return m_itemNode.isValid()
|
return m_itemNode.isValid()
|
||||||
&& m_itemNode.modelNode().hasProperty(gradientPropertyName().toUtf8());
|
&& m_itemNode.modelNode().hasProperty(gradientPropertyName().toUtf8());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GradientModel::locked() const
|
||||||
|
{
|
||||||
|
if (m_locked)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
QmlDesigner::PropertyEditorView *view = qobject_cast<QmlDesigner::PropertyEditorView*>(m_itemNode.view());
|
||||||
|
|
||||||
|
if (view && view->locked())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@@ -76,11 +76,12 @@ private:
|
|||||||
QString gradientPropertyName() const;
|
QString gradientPropertyName() const;
|
||||||
void setGradientPropertyName(const QString &name);
|
void setGradientPropertyName(const QString &name);
|
||||||
bool hasGradient() const;
|
bool hasGradient() const;
|
||||||
|
bool locked() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QmlDesigner::QmlItemNode m_itemNode;
|
QmlDesigner::QmlItemNode m_itemNode;
|
||||||
QString m_gradientPropertyName;
|
QString m_gradientPropertyName;
|
||||||
bool m_lock;
|
bool m_locked;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -135,7 +135,7 @@ void PropertyEditorView::changeValue(const QString &name)
|
|||||||
if (propertyName.isNull())
|
if (propertyName.isNull())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_locked)
|
if (locked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (propertyName == "className")
|
if (propertyName == "className")
|
||||||
@@ -231,7 +231,7 @@ void PropertyEditorView::changeExpression(const QString &propertyName)
|
|||||||
if (name.isNull())
|
if (name.isNull())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_locked)
|
if (locked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_selectedNode.isValid())
|
if (!m_selectedNode.isValid())
|
||||||
@@ -306,7 +306,7 @@ void PropertyEditorView::exportPopertyAsAlias(const QString &name)
|
|||||||
if (name.isNull())
|
if (name.isNull())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_locked)
|
if (locked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_selectedNode.isValid())
|
if (!m_selectedNode.isValid())
|
||||||
@@ -340,7 +340,7 @@ void PropertyEditorView::removeAliasExport(const QString &name)
|
|||||||
if (name.isNull())
|
if (name.isNull())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_locked)
|
if (locked())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!m_selectedNode.isValid())
|
if (!m_selectedNode.isValid())
|
||||||
@@ -362,6 +362,11 @@ void PropertyEditorView::removeAliasExport(const QString &name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PropertyEditorView::locked() const
|
||||||
|
{
|
||||||
|
return m_locked;
|
||||||
|
}
|
||||||
|
|
||||||
void PropertyEditorView::updateSize()
|
void PropertyEditorView::updateSize()
|
||||||
{
|
{
|
||||||
if (!m_qmlBackEndForCurrentType)
|
if (!m_qmlBackEndForCurrentType)
|
||||||
@@ -527,7 +532,6 @@ void PropertyEditorView::modelAttached(Model *model)
|
|||||||
|
|
||||||
m_locked = true;
|
m_locked = true;
|
||||||
|
|
||||||
resetView();
|
|
||||||
if (!m_setupCompleted) {
|
if (!m_setupCompleted) {
|
||||||
m_singleShotTimer->setSingleShot(true);
|
m_singleShotTimer->setSingleShot(true);
|
||||||
m_singleShotTimer->setInterval(100);
|
m_singleShotTimer->setInterval(100);
|
||||||
@@ -536,6 +540,8 @@ void PropertyEditorView::modelAttached(Model *model)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_locked = false;
|
m_locked = false;
|
||||||
|
|
||||||
|
resetView();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropertyEditorView::modelAboutToBeDetached(Model *model)
|
void PropertyEditorView::modelAboutToBeDetached(Model *model)
|
||||||
|
@@ -92,6 +92,8 @@ public:
|
|||||||
void exportPopertyAsAlias(const QString &name);
|
void exportPopertyAsAlias(const QString &name);
|
||||||
void removeAliasExport(const QString &name);
|
void removeAliasExport(const QString &name);
|
||||||
|
|
||||||
|
bool locked() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void timerEvent(QTimerEvent *event) override;
|
void timerEvent(QTimerEvent *event) override;
|
||||||
void setupPane(const TypeName &typeName);
|
void setupPane(const TypeName &typeName);
|
||||||
|
Reference in New Issue
Block a user