void GradientModel::addStop(qreal position, const QColor &color) { if (m_lock) return; if (!m_itemNode.isValid() || gradientPropertyName().isEmpty()) return; if (m_itemNode.modelNode().hasNodeProperty(gradientPropertyName().toUtf8())) { //QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(); //### TODO does not work QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::ModelNode gradientStopNode = m_itemNode.modelNode().view()->createModelNode("QtQuick.GradientStop", m_itemNode.modelNode().view()->majorQtQuickVersion(), 0); gradientStopNode.variantProperty("position").setValue(position); gradientStopNode.variantProperty("color").setValue(color); gradientNode.nodeListProperty("stops").reparentHere(gradientStopNode); const QList<QmlDesigner::ModelNode> stopNodes = gradientNode.nodeListProperty("stops").toModelNodeList(); int properPos = 0; for (int i = 0; i < stopNodes.count(); i++) { if (QmlDesigner::QmlObjectNode(stopNodes.at(i)).modelValue("position").toReal() < position) properPos = i + 1; } gradientNode.nodeListProperty("stops").slide(stopNodes.count() - 1, properPos); setupModel(); } }
void GradientModel::addGradient() { if (m_locked) return; if (!m_itemNode.isValid() || gradientPropertyName().isEmpty()) return; if (!m_itemNode.modelNode().hasNodeProperty(gradientPropertyName().toUtf8())) { QColor color = m_itemNode.instanceValue("color").value<QColor>(); if (!color.isValid()) color = QColor(Qt::white); QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::addGradient")); QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().view()->createModelNode("QtQuick.Gradient", m_itemNode.modelNode().view()->majorQtQuickVersion(), 0); m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).reparentHere(gradientNode); QmlDesigner::ModelNode gradientStopNode = m_itemNode.modelNode().view()->createModelNode("QtQuick.GradientStop", m_itemNode.modelNode().view()->majorQtQuickVersion(), 0); gradientStopNode.variantProperty("position").setValue(0.0); gradientStopNode.variantProperty("color").setValue(color); gradientNode.nodeListProperty("stops").reparentHere(gradientStopNode); gradientStopNode = m_itemNode.modelNode().view()->createModelNode( "QtQuick.GradientStop", m_itemNode.modelNode().view()->majorQtQuickVersion(), 0); gradientStopNode.variantProperty("position").setValue(1.0); gradientStopNode.variantProperty("color").setValue(QColor(Qt::black)); gradientNode.nodeListProperty("stops").reparentHere(gradientStopNode); } setupModel(); emit hasGradientChanged(); }
qreal GradientModel::getPosition(int index) const { if (index < rowCount()) { QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); if (stop.isValid()) return stop.modelValue("position").toReal(); } qWarning() << Q_FUNC_INFO << "invalid position index"; return 0.0; }
QColor GradientModel::getColor(int index) const { if (index < rowCount()) { QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); if (stop.isValid()) return stop.modelValue("color").value<QColor>(); } qWarning() << Q_FUNC_INFO << "invalid color index"; return QColor(); }
void GradientModel::removeStop(int index) { if (index < rowCount() - 1 && index != 0) { QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::removeStop")); QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); if (stop.isValid()) { stop.destroy(); setupModel(); } } qWarning() << Q_FUNC_INFO << "invalid index"; }
void GradientModel::setPosition(int index, qreal positition) { if (locked()) return; if (index < rowCount()) { QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); if (stop.isValid()) stop.setVariantProperty("position", positition); setupModel(); } }
int GradientModel::rowCount(const QModelIndex & /*parent*/) const { if (m_itemNode.isValid()) { if (m_itemNode.modelNode().hasNodeProperty(gradientPropertyName().toUtf8())) { QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); if (gradientNode.isValid() && gradientNode.hasNodeListProperty("stops")) return gradientNode.nodeListProperty("stops").toModelNodeList().count(); } } return 0; }
void GradientModel::setColor(int index, const QColor &color) { if (locked()) return; if (!m_itemNode.modelNode().isSelected()) return; if (index < rowCount()) { QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); if (stop.isValid()) stop.setVariantProperty("color", color); setupModel(); } }