NodeAbstractProperty NodeAbstractProperty::parentProperty() const { if (!isValid()) { Q_ASSERT_X(isValid(), Q_FUNC_INFO, "property is invalid"); throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, name()); } if (internalNode()->parentProperty().isNull()) { Q_ASSERT_X(internalNode()->parentProperty(), Q_FUNC_INFO, "parentProperty is invalid"); throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, "parent"); } return NodeAbstractProperty(internalNode()->parentProperty()->name(), internalNode()->parentProperty()->propertyOwner(), model(), view()); }
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 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); }
/*! \brief AbstractProperty is a value holder for a property \return the value of the property The QVariant is null if the property doesn't exists. */ PropertyName AbstractProperty::name() const { if (m_propertyName == "id") { // the ID for a node is independent of the state, so it has to be set with ModelNode::setId Q_ASSERT_X(0, Q_FUNC_INFO, "id is not a property in the model"); throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, name()); } return m_propertyName; }
TypeName AbstractProperty::dynamicTypeName() const { if (!isValid()) throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName); if (internalNode()->hasProperty(name())) return internalNode()->property(name())->dynamicTypeName(); return TypeName(); }
bool AbstractProperty::isBindingProperty() const { if (!isValid()) throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName); if (internalNode()->hasProperty(name())) { Q_ASSERT(internalNode()->property(name())); return internalNode()->property(name())->isBindingProperty(); } return false; }
BindingProperty AbstractProperty::toBindingProperty() const { if (!isValid()) throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName); BindingProperty propertyBinding(name(), internalNode(), model(), view()); if (propertyBinding.isBindingProperty()) return propertyBinding; return BindingProperty(); }
NodeAbstractProperty AbstractProperty::toNodeAbstractProperty() const { if (!isValid()) throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName); NodeAbstractProperty propertyNodeAbstract(name(), internalNode(), model(), view()); if (propertyNodeAbstract.isNodeAbstractProperty()) return propertyNodeAbstract; return NodeAbstractProperty(); }
SignalHandlerProperty AbstractProperty::toSignalHandlerProperty() const { if (!isValid()) throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, m_propertyName); SignalHandlerProperty propertyNode(name(), internalNode(), model(), view()); if (propertyNode.isSignalHandlerProperty()) return propertyNode; return SignalHandlerProperty(); }
/*! \brief Returns the property containing this node The NodeAbstractProperty is invalid if this ModelNode has no parent. NodeAbstractProperty can be a NodeProperty containing a single ModelNode, or a NodeListProperty. \return the property containing this ModelNode */ NodeAbstractProperty ModelNode::parentProperty() const { if (!isValid()) { Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid"); throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); } if (m_internalNode->parentProperty().isNull()) { Q_ASSERT_X(m_internalNode->parentProperty(), Q_FUNC_INFO, "parentProperty is invalid"); throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, "parent"); } return NodeAbstractProperty(m_internalNode->parentProperty()->name(), m_internalNode->parentProperty()->propertyOwner(), m_model.data(), view()); }