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 }