QmlDesigner: Fix for Gradient Stops

Change-Id: I657b92cb00c0eda93b8dd74a2393072cc9ae9287
Fixes: QDS-680
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Aleksei German
2021-04-09 15:32:06 +02:00
parent 574f9888c4
commit 12645efba0
2 changed files with 34 additions and 14 deletions

View File

@@ -37,10 +37,12 @@
#include <abstractview.h>
#include <nodemetainfo.h>
#include <exception.h>
#include <rewritertransaction.h>
#include <utils/qtcassert.h>
#include <QTimer>
#include <QScopeGuard>
GradientModel::GradientModel(QObject *parent) :
QAbstractListModel(parent)
@@ -109,9 +111,9 @@ int GradientModel::addStop(qreal position, const QColor &color)
if (m_itemNode.modelNode().hasNodeProperty(gradientPropertyName().toUtf8())) {
int properPos = 0;
try {
QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode();
try {
QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode();
QmlDesigner::ModelNode gradientStopNode = createGradientStopNode();
@@ -128,6 +130,9 @@ int GradientModel::addStop(qreal position, const QColor &color)
gradientNode.nodeListProperty("stops").slide(stopNodes.count() - 1, properPos);
setupModel();
resetPuppet();
emit gradientCountChanged();
} catch (const QmlDesigner::Exception &e) {
e.showException();
}
@@ -176,6 +181,7 @@ void GradientModel::addGradient()
if (m_gradientTypeName != "Gradient")
resetPuppet(); /*Unfortunately required */
emit hasGradientChanged();
emit gradientTypeChanged();
}
@@ -247,9 +253,15 @@ void GradientModel::removeStop(int index)
if (stop.isValid()) {
stop.destroy();
setupModel();
resetPuppet();
emit gradientCountChanged();
}
});
return;
}
qWarning() << Q_FUNC_INFO << "invalid index";
}
@@ -301,10 +313,10 @@ qreal GradientModel::readGradientProperty(const QString &propertyName) const
void GradientModel::setupModel()
{
m_locked = true;
beginResetModel();
auto guard = qScopeGuard([&] { m_locked = false; });
beginResetModel();
endResetModel();
m_locked = false;
}
void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
@@ -324,12 +336,11 @@ void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
setupModel();
m_locked = true;
auto guard = qScopeGuard([&] { m_locked = false; });
emit anchorBackendChanged();
emit hasGradientChanged();
emit gradientTypeChanged();
m_locked = false;
}
QString GradientModel::gradientPropertyName() const
@@ -482,9 +493,10 @@ void GradientModel::deleteGradientNode(bool saveTransaction)
if (m_itemNode.isInBaseState()) {
if (modelNode.hasProperty(gradientPropertyName().toUtf8())) {
QmlDesigner::RewriterTransaction transaction;
if (saveTransaction)
QmlDesigner::RewriterTransaction transaction = view()->beginRewriterTransaction(
QByteArrayLiteral("GradientModel::deleteGradient"));
transaction = view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::deleteGradient"));
QmlDesigner::ModelNode gradientNode
= modelNode.nodeProperty(gradientPropertyName().toUtf8()).modelNode();
if (QmlDesigner::QmlObjectNode(gradientNode).isValid())
@@ -529,7 +541,8 @@ void GradientModel::setPresetByID(int presetID)
void GradientModel::setPresetByStops(const QList<qreal> &stopsPositions,
const QList<QString> &stopsColors,
int stopsCount)
int stopsCount,
bool saveTransaction)
{
if (m_locked)
return;
@@ -537,8 +550,9 @@ void GradientModel::setPresetByStops(const QList<qreal> &stopsPositions,
if (!m_itemNode.isValid() || gradientPropertyName().isEmpty())
return;
QmlDesigner::RewriterTransaction transaction = view()->beginRewriterTransaction(
QByteArrayLiteral("GradientModel::setCustomPreset"));
QmlDesigner::RewriterTransaction transaction;
if (saveTransaction)
transaction = view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::setCustomPreset"));
deleteGradientNode(false);
@@ -599,6 +613,8 @@ void GradientModel::savePreset()
void GradientModel::updateGradient()
{
beginResetModel();
QList<qreal> stops;
QList<QString> colors;
int stopsCount = rowCount();
@@ -607,5 +623,7 @@ void GradientModel::updateGradient()
colors.append(getColor(i).name(QColor::HexArgb));
}
setPresetByStops(stops, colors, stopsCount);
setPresetByStops(stops, colors, stopsCount, false);
endResetModel();
}

View File

@@ -38,7 +38,7 @@ class GradientModel : public QAbstractListModel
Q_PROPERTY(QVariant anchorBackendProperty READ anchorBackend WRITE setAnchorBackend NOTIFY anchorBackendChanged)
Q_PROPERTY(QString gradientPropertyName READ gradientPropertyName WRITE setGradientPropertyName)
Q_PROPERTY(QString gradientTypeName READ gradientTypeName WRITE setGradientTypeName NOTIFY gradientTypeChanged)
Q_PROPERTY(int count READ rowCount)
Q_PROPERTY(int count READ rowCount NOTIFY gradientCountChanged)
Q_PROPERTY(bool hasGradient READ hasGradient NOTIFY hasGradientChanged)
public:
@@ -73,7 +73,8 @@ public:
Q_INVOKABLE void setPresetByID(int presetID);
Q_INVOKABLE void setPresetByStops(const QList<qreal> &stopsPositions,
const QList<QString> &stopsColors,
int stopsCount);
int stopsCount,
bool saveTransaction = true);
Q_INVOKABLE void savePreset();
@@ -83,6 +84,7 @@ signals:
void anchorBackendChanged();
void hasGradientChanged();
void gradientTypeChanged();
void gradientCountChanged();
private:
void setupModel();