QmlDesigner: Refactor QmlModelState

Change-Id: Idd1aac53bafda25a2334fdd84b064f1204755764
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
Marco Bubke
2013-07-30 13:07:03 +02:00
parent 8143031599
commit 99b9299f16

View File

@@ -53,11 +53,7 @@ QmlModelState::QmlModelState(const ModelNode &modelNode)
QmlPropertyChanges QmlModelState::propertyChanges(const ModelNode &node) QmlPropertyChanges QmlModelState::propertyChanges(const ModelNode &node)
{ {
//### exception if not valid if (!isBaseState()) {
if (isBaseState())
return QmlPropertyChanges();
addChangeSetIfNotExists(node); addChangeSetIfNotExists(node);
foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
//### exception if not valid QmlModelStateOperation //### exception if not valid QmlModelStateOperation
@@ -66,22 +62,16 @@ QmlPropertyChanges QmlModelState::propertyChanges(const ModelNode &node)
&& QmlPropertyChanges(childNode).target() == node) && QmlPropertyChanges(childNode).target() == node)
return QmlPropertyChanges(childNode); //### exception if not valid(childNode); return QmlPropertyChanges(childNode); //### exception if not valid(childNode);
} }
}
return QmlPropertyChanges(); //not found return QmlPropertyChanges(); //not found
} }
QList<QmlModelStateOperation> QmlModelState::stateOperations(const ModelNode &node) const QList<QmlModelStateOperation> QmlModelState::stateOperations(const ModelNode &node) const
{ {
QList<QmlModelStateOperation> returnList; QList<QmlModelStateOperation> returnList;
//### exception if not valid
if (isBaseState())
return returnList;
if (!modelNode().hasProperty("changes"))
return returnList;
Q_ASSERT(modelNode().property("changes").isNodeListProperty());
if (!isBaseState() && modelNode().hasNodeListProperty("changes")) {
foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode)) { if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode)) {
QmlModelStateOperation stateOperation(childNode); QmlModelStateOperation stateOperation(childNode);
@@ -90,57 +80,47 @@ QList<QmlModelStateOperation> QmlModelState::stateOperations(const ModelNode &no
returnList.append(stateOperation); //### exception if not valid(childNode); returnList.append(stateOperation); //### exception if not valid(childNode);
} }
} }
}
return returnList; //not found return returnList; //not found
} }
QList<QmlPropertyChanges> QmlModelState::propertyChanges() const QList<QmlPropertyChanges> QmlModelState::propertyChanges() const
{ {
//### exception if not valid
QList<QmlPropertyChanges> returnList; QList<QmlPropertyChanges> returnList;
if (isBaseState()) if (!isBaseState() && modelNode().hasNodeListProperty("changes")) {
return returnList;
if (!modelNode().hasProperty("changes"))
return returnList;
Q_ASSERT(modelNode().property("changes").isNodeListProperty());
foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
//### exception if not valid QmlModelStateOperation //### exception if not valid QmlModelStateOperation
if (QmlPropertyChanges(childNode).isValid()) if (QmlPropertyChanges::isValidQmlPropertyChanges(childNode))
returnList.append(QmlPropertyChanges(childNode)); returnList.append(QmlPropertyChanges(childNode));
} }
}
return returnList; return returnList;
} }
bool QmlModelState::hasPropertyChanges(const ModelNode &node) const bool QmlModelState::hasPropertyChanges(const ModelNode &node) const
{ {
//### exception if not valid if (!isBaseState() && modelNode().hasNodeListProperty("changes")) {
if (isBaseState())
return false;
foreach (const QmlPropertyChanges &changeSet, propertyChanges()) { foreach (const QmlPropertyChanges &changeSet, propertyChanges()) {
if (changeSet.target().isValid() && changeSet.target() == node) if (changeSet.target().isValid() && changeSet.target() == node)
return true; return true;
} }
}
return false; return false;
} }
bool QmlModelState::hasStateOperation(const ModelNode &node) const bool QmlModelState::hasStateOperation(const ModelNode &node) const
{ {
//### exception if not valid if (!isBaseState()) {
if (isBaseState())
return false;
foreach (const QmlModelStateOperation &stateOperation, stateOperations()) { foreach (const QmlModelStateOperation &stateOperation, stateOperations()) {
if (stateOperation.target() == node) if (stateOperation.target() == node)
return true; return true;
} }
}
return false; return false;
} }
@@ -149,19 +129,14 @@ QList<QmlModelStateOperation> QmlModelState::stateOperations() const
//### exception if not valid //### exception if not valid
QList<QmlModelStateOperation> returnList; QList<QmlModelStateOperation> returnList;
if (isBaseState()) if (!isBaseState() && modelNode().hasNodeListProperty("changes")) {
return returnList;
if (!modelNode().hasProperty("changes"))
return returnList;
Q_ASSERT(modelNode().property("changes").isNodeListProperty());
foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
//### exception if not valid QmlModelStateOperation //### exception if not valid QmlModelStateOperation
if (QmlModelStateOperation(childNode).isValid()) if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode))
returnList.append(QmlModelStateOperation(childNode)); returnList.append(QmlModelStateOperation(childNode));
} }
}
return returnList; return returnList;
} }
@@ -173,14 +148,10 @@ QList<QmlModelStateOperation> QmlModelState::stateOperations() const
void QmlModelState::addChangeSetIfNotExists(const ModelNode &node) void QmlModelState::addChangeSetIfNotExists(const ModelNode &node)
{ {
//### exception if not valid
if (!isValid()) if (!isValid())
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
if (hasPropertyChanges(node)) if (!hasPropertyChanges(node)) {
return; //changeSet already there
ModelNode newChangeSet; ModelNode newChangeSet;
if (view()->majorQtQuickVersion() > 1) if (view()->majorQtQuickVersion() > 1)
newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 2, 0); newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 2, 0);
@@ -190,7 +161,8 @@ void QmlModelState::addChangeSetIfNotExists(const ModelNode &node)
modelNode().nodeListProperty("changes").reparentHere(newChangeSet); modelNode().nodeListProperty("changes").reparentHere(newChangeSet);
QmlPropertyChanges(newChangeSet).setTarget(node); QmlPropertyChanges(newChangeSet).setTarget(node);
Q_ASSERT(QmlPropertyChanges(newChangeSet).isValid()); Q_ASSERT(QmlPropertyChanges::isValidQmlPropertyChanges(newChangeSet));
}
} }
void QmlModelState::removePropertyChanges(const ModelNode &node) void QmlModelState::removePropertyChanges(const ModelNode &node)
@@ -200,12 +172,11 @@ void QmlModelState::removePropertyChanges(const ModelNode &node)
if (!isValid()) if (!isValid())
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
if (isBaseState()) if (!isBaseState()) {
return; QmlPropertyChanges changeSet(propertyChanges(node));
if (changeSet.isValid())
QmlPropertyChanges theChangeSet(propertyChanges(node)); changeSet.modelNode().destroy();
if (theChangeSet.isValid()) }
theChangeSet.modelNode().destroy();
} }
@@ -227,11 +198,11 @@ QList<QmlObjectNode> QmlModelState::allAffectedNodes() const
QList<QmlObjectNode> returnList; QList<QmlObjectNode> returnList;
foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) { foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
//### exception if not valid QmlModelStateOperation if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode) &&
if (QmlModelStateOperation(childNode).isValid() &&
!returnList.contains(QmlModelStateOperation(childNode).target())) !returnList.contains(QmlModelStateOperation(childNode).target()))
returnList.append(QmlModelStateOperation(childNode).target()); returnList.append(QmlModelStateOperation(childNode).target());
} }
return returnList; return returnList;
} }
@@ -290,8 +261,7 @@ QmlModelState QmlModelState::duplicate(const QString &name) const
if (!isValid()) if (!isValid())
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
QmlItemNode parentNode(modelNode().parentProperty().parentModelNode()); if (!QmlItemNode::isValidQmlItemNode(modelNode().parentProperty().parentModelNode()))
if (!parentNode.isValid())
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
// QmlModelState newState(stateGroup().addState(name)); // QmlModelState newState(stateGroup().addState(name));