static bool cleverColorCompare(QVariant value1, QVariant value2) { if ((value1.type() == QVariant::Color) && (value2.type() == QVariant::Color)) { QColor c1 = value1.value<QColor>(); QColor c2 = value2.value<QColor>(); QString a = c1.name(); QString b = c2.name(); if (a != b) return false; return (c1.alpha() == c2.alpha()); } if ((value1.type() == QVariant::String) && (value2.type() == QVariant::Color)) return cleverColorCompare(QVariant(QColor(value1.toString())), value2); if ((value1.type() == QVariant::Color) && (value2.type() == QVariant::String)) return cleverColorCompare(value1, QVariant(QColor(value2.toString()))); return false; }
void PropertyEditorValue::setValue(const QVariant &value) { if (!compareVariants(m_value, value) && !cleverDoubleCompare(value, m_value) && !cleverColorCompare(value, m_value)) m_value = value; fixAmbigousColorNames(modelNode(), name(), &m_value); fixUrl(modelNode(), name(), &m_value); if (m_value.isValid()) emit valueChangedQml(); emit isBoundChanged(); }
void PropertyEditorValue::setValueWithEmit(const QVariant &value) { if (m_value != value || isBound()) { QVariant newValue = value; if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name())) if (modelNode().metaInfo().propertyTypeName(name()) == "QUrl") newValue = QUrl(newValue.toString()); if (cleverDoubleCompare(newValue, m_value)) return; if (cleverColorCompare(newValue, m_value)) return; setValue(newValue); m_isBound = false; emit valueChanged(name(), value); emit valueChangedQml(); emit isBoundChanged(); } }