void BindingProperty::setExpression(const QString &expression) { Internal::WriteLocker locker(model()); if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (name() == "id") { // the ID for a node is independent of the state, so it has to be set with ModelNode::setId throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, name()); } if (expression.isEmpty()) throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name()); if (internalNode()->hasProperty(name())) { //check if oldValue != value Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name()); if (internalProperty->isBindingProperty() && internalProperty->toBindingProperty()->expression() == expression) return; } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isBindingProperty()) model()->d->removeProperty(internalNode()->property(name())); model()->d->setBindingProperty(internalNode(), name(), expression); }
void VariantProperty::setValue(const QVariant &value) { Internal::WriteLocker locker(model()); if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (isDynamic()) qWarning() << "Calling VariantProperty::setValue on dynamic property."; if (value.isNull()) throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name()); if (internalNode()->hasProperty(name())) { //check if oldValue != value Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name()); if (internalProperty->isVariantProperty() && internalProperty->toVariantProperty()->value() == value && dynamicTypeName().isEmpty()) return; } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isVariantProperty()) model()->d->removeProperty(internalNode()->property(name())); model()->d->setVariantProperty(internalNode(), name(), value); }
void VariantProperty::setDynamicTypeNameAndValue(const QString &type, const QVariant &value) { Internal::WriteLocker locker(model()); if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (type.isEmpty()) { throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name()); } if (internalNode()->hasProperty(name())) { //check if oldValue != value Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name()); if (internalProperty->isVariantProperty() && internalProperty->toVariantProperty()->value() == value && internalProperty->toVariantProperty()->dynamicTypeName() == type) return; } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isVariantProperty()) model()->d->removeProperty(internalNode()->property(name())); model()->d->setDynamicVariantProperty(internalNode(), name(), type, value); }
void SignalHandlerProperty::setSource(const QString &source) { Internal::WriteLocker locker(model()); if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (name() == "id") { // the ID for a node is independent of the state, so it has to be set with ModelNode::setId throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, name()); } if (source.isEmpty()) throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name()); if (internalNode()->hasProperty(name())) { //check if oldValue != value Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name()); if (internalProperty->isSignalHandlerProperty() && internalProperty->toSignalHandlerProperty()->source() == source) return; } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isSignalHandlerProperty()) model()->d->removeProperty(internalNode()->property(name())); model()->d->setSignalHandlerProperty(internalNode(), name(), source); }
ModelNode NodeProperty::modelNode() const { if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (internalNode()->hasProperty(name())) { //check if oldValue != value Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name()); if (internalProperty->isNodeProperty()) return ModelNode(internalProperty->toNodeProperty()->node(), model(), view()); } return ModelNode(); }
void NodeProperty::setModelNode(const ModelNode &modelNode) { if (!isValid()) throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); if (!modelNode.isValid()) throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, name()); if (internalNode()->hasProperty(name())) { //check if oldValue != value Internal::InternalProperty::Pointer internalProperty = internalNode()->property(name()); if (internalProperty->isNodeProperty() && internalProperty->toNodeProperty()->node() == modelNode.internalNode()) return; } if (internalNode()->hasProperty(name()) && !internalNode()->property(name())->isNodeProperty()) model()->d->removeProperty(internalNode()->property(name())); model()->d->reparentNode(internalNode(), name(), modelNode.internalNode(), false); //### we have to add a flag that this is not a list }