33
33
#include "variantproperty.h"
34
34
#include "nodeproperty.h"
35
35
#include <invalidmodelnodeexception.h>
36
#include "qmlmodelview.h"
36
#include "abstractview.h"
37
37
#include "nodeinstance.h"
38
38
#include "nodemetainfo.h"
39
39
#include "bindingproperty.h"
40
40
#include "nodelistproperty.h"
41
#include "nodeinstanceview.h"
42
43
namespace QmlDesigner {
54
55
QmlPropertyChanges changeSet(currentState().propertyChanges(modelNode()));
55
56
Q_ASSERT(changeSet.isValid());
56
changeSet.modelNode().variantProperty(name) = value;
57
changeSet.modelNode().variantProperty(name).setValue(value);
63
64
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
65
66
if (isInBaseState()) {
66
modelNode().bindingProperty(name) = expression; //basestate
67
modelNode().bindingProperty(name).setExpression(expression); //basestate
68
69
modelNode().validId();
70
71
QmlPropertyChanges changeSet(currentState().propertyChanges(modelNode()));
71
72
Q_ASSERT(changeSet.isValid());
72
changeSet.modelNode().bindingProperty(name) = expression;
73
changeSet.modelNode().bindingProperty(name).setExpression(expression);
76
77
QmlModelState QmlObjectNode::currentState() const
79
return qmlModelView()->currentState();
80
return QmlModelState(view()->currentStateNode());
81
82
return QmlModelState();
90
/*! \brief returns the value of a property based on an actual instance
91
The return value is not the value in the model, but the value of a real
92
instanciated instance of this object.
93
\return the value of this property based on the instance
92
Returns the value of the property specified by \name that is based on an
93
actual instance. The return value is not the value in the model, but the
94
value of a real instantiated instance of this object.
96
96
QVariant QmlObjectNode::instanceValue(const PropertyName &name) const
130
130
NodeAbstractProperty QmlObjectNode::nodeAbstractProperty(const PropertyName &name) const
132
return modelNode().nodeAbstractProperty(name);
132
return modelNode().nodeAbstractProperty(name);
135
NodeAbstractProperty QmlObjectNode::defaultNodeAbstractProperty() const
137
return modelNode().defaultNodeAbstractProperty();
135
140
NodeProperty QmlObjectNode::nodeProperty(const PropertyName &name) const
222
227
return propertyChanges.modelNode().bindingProperty(name).expression();
225
/*! \brief returns if ObjectNode is the BaseState
227
\return true if the ObjectNode is in the BaseState
231
Returns \c true if the ObjectNode is in the BaseState.
230
233
bool QmlObjectNode::isInBaseState() const
232
235
return currentState().isBaseState();
235
bool QmlObjectNode::canReparent() const
238
bool QmlObjectNode::instanceCanReparent() const
237
240
return isInBaseState();
254
257
static void removeStateOperationsForChildren(const QmlObjectNode &node)
256
259
if (node.isValid()) {
257
foreach (const QmlModelStateOperation &stateOperation, node.allAffectingStatesOperations()) {
260
foreach (QmlModelStateOperation stateOperation, node.allAffectingStatesOperations()) {
258
261
stateOperation.modelNode().destroy(); //remove of belonging StatesOperations
268
/*! \brief Deletes this objects ModeNode and its dependencies from the model
269
Every thing that belongs to this Object, the ModelNode and ChangeOperations
270
are deleted from the model.
272
Deletes this object's node and its dependencies from the model.
273
Everything that belongs to this Object, the ModelNode, and ChangeOperations
274
is deleted from the model.
273
276
void QmlObjectNode::destroy()
276
279
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
278
foreach (const QmlModelStateOperation &stateOperation, allAffectingStatesOperations()) {
281
foreach (QmlModelStateOperation stateOperation, allAffectingStatesOperations()) {
279
282
stateOperation.modelNode().destroy(); //remove of belonging StatesOperations
281
284
removeStateOperationsForChildren(modelNode());
282
285
modelNode().destroy();
285
/*! \brief Returns a list of all states that are affecting this object.
287
\return list of states affecting this object
289
Returns a list of states the affect this object.
290
292
QList<QmlModelState> QmlObjectNode::allAffectingStates() const
301
303
return returnList;
304
/*! \brief Returns a list of all state operations that are affecting this object.
306
\return list of state operations affecting this object
307
Returns a list of all state operations that affect this object.
309
310
QList<QmlModelStateOperation> QmlObjectNode::allAffectingStatesOperations() const
320
321
return returnList;
323
static QList<QmlItemNode> allFxItemsRecursive(const QmlItemNode &fxNode)
324
static QList<QmlItemNode> allQmlItemsRecursive(const QmlItemNode &qmlItemNode)
325
QList<QmlItemNode> returnList;
327
if (fxNode.isValid()) {
328
returnList.append(fxNode);
329
QList<QmlItemNode> allChildNodes;
330
foreach (const ModelNode &node, fxNode.modelNode().allDirectSubModelNodes()) {
331
if (QmlItemNode(node).isValid())
332
allChildNodes.append(node);
334
foreach (const QmlItemNode &node, allChildNodes) {
335
returnList.append(allFxItemsRecursive(node));
326
QList<QmlItemNode> qmlItemNodeList;
328
if (qmlItemNode.isValid()) {
329
qmlItemNodeList.append(qmlItemNode);
331
foreach (const ModelNode &modelNode, qmlItemNode.modelNode().allDirectSubModelNodes()) {
332
if (QmlItemNode::isValidQmlItemNode(modelNode))
333
qmlItemNodeList.append(allQmlItemsRecursive(modelNode));
337
return qmlItemNodeList;
341
340
QList<QmlModelState> QmlObjectNode::allDefinedStates() const
346
345
QList<QmlModelState> returnList;
348
QList<QmlItemNode> allFxItems;
350
QmlItemNode rootNode(qmlModelView()->rootModelNode());
352
if (rootNode.isValid())
353
allFxItems.append(allFxItemsRecursive(rootNode));
355
foreach (const QmlItemNode &item, allFxItems) {
347
QList<QmlItemNode> allQmlItems;
349
if (QmlItemNode::isValidQmlItemNode(view()->rootModelNode()))
350
allQmlItems.append(allQmlItemsRecursive(view()->rootModelNode()));
352
foreach (const QmlItemNode &item, allQmlItems) {
356
353
returnList.append(item.states().allStates());
363
/*! \brief Removes a variant property of this object from the model
361
Removes a variant property of the object specified by \a name from the
367
void QmlObjectNode::removeVariantProperty(const PropertyName &name)
365
void QmlObjectNode::removeProperty(const PropertyName &name)
370
368
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
381
QList<ModelNode> toModelNodeList(const QList<QmlObjectNode> &fxObjectNodeList)
379
QList<ModelNode> toModelNodeList(const QList<QmlObjectNode> &qmlObjectNodeList)
383
381
QList<ModelNode> modelNodeList;
385
foreach (const QmlObjectNode &fxObjectNode, fxObjectNodeList)
386
modelNodeList.append(fxObjectNode.modelNode());
383
foreach (const QmlObjectNode &qmlObjectNode, qmlObjectNodeList)
384
modelNodeList.append(qmlObjectNode.modelNode());
388
386
return modelNodeList;
393
391
QList<QmlObjectNode> qmlObjectNodeList;
395
393
foreach (const ModelNode &modelNode, modelNodeList) {
396
QmlObjectNode objectNode(modelNode);
397
if (objectNode.isValid())
398
qmlObjectNodeList.append(objectNode);
394
if (QmlObjectNode::isValidQmlObjectNode(modelNode))
395
qmlObjectNodeList.append(modelNode);
401
398
return qmlObjectNodeList;
409
406
QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const PropertyName &name)
411
QmlModelView *modelView = qobject_cast<QmlModelView*>(modelNode.view());
413
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
414
Q_ASSERT(modelView->hasInstanceForModelNode(modelNode));
415
return modelView->instanceForModelNode(modelNode).property(name);
408
Q_ASSERT(modelNode.view()->nodeInstanceView()->hasInstanceForModelNode(modelNode));
409
return modelNode.view()->nodeInstanceView()->instanceForModelNode(modelNode).property(name);
418
412
QString QmlObjectNode::generateTranslatableText(const QString &text)
428
422
bool QmlObjectNode::instanceHasBinding(const PropertyName &name) const
430
QmlModelView *modelView = qobject_cast<QmlModelView*>(modelNode().view());
432
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
434
424
return nodeInstance().hasBindingForProperty(name);
437
427
NodeInstance QmlObjectNode::nodeInstance() const
439
return qmlModelView()->nodeInstanceView()->instanceForNode(modelNode());
429
return nodeInstanceView()->instanceForModelNode(modelNode());
442
432
QmlObjectNode QmlObjectNode::nodeForInstance(const NodeInstance &instance) const
444
return QmlObjectNode(ModelNode(instance.modelNode(), qmlModelView()));
434
return QmlObjectNode(ModelNode(instance.modelNode(), view()));
447
437
QmlItemNode QmlObjectNode::itemForInstance(const NodeInstance &instance) const
449
return QmlItemNode(ModelNode(instance.modelNode(), qmlModelView()));
439
return QmlItemNode(ModelNode(instance.modelNode(), view()));
442
QmlObjectNode::QmlObjectNode()
443
: QmlModelNodeFacade()
447
QmlObjectNode::QmlObjectNode(const ModelNode &modelNode)
448
: QmlModelNodeFacade(modelNode)
452
bool QmlObjectNode::isValidQmlObjectNode(const ModelNode &modelNode)
454
return isValidQmlModelNodeFacade(modelNode);
457
bool QmlObjectNode::isValid() const
459
return isValidQmlObjectNode(modelNode());
452
462
bool QmlObjectNode::hasNodeParent() const
457
467
bool QmlObjectNode::hasInstanceParent() const
459
return nodeInstance().parentId() >= 0 && qmlModelView()->nodeInstanceView()->hasInstanceForId(nodeInstance().parentId());
469
return nodeInstance().parentId() >= 0 && nodeInstanceView()->hasInstanceForId(nodeInstance().parentId());
462
472
bool QmlObjectNode::hasInstanceParentItem() const
464
474
return nodeInstance().parentId() >= 0
465
&& qmlModelView()->nodeInstanceView()->hasInstanceForId(nodeInstance().parentId())
466
&& QmlItemNode::isItemOrWindow(qmlModelView()->modelNodeForInternalId(nodeInstance().parentId()));
475
&& nodeInstanceView()->hasInstanceForId(nodeInstance().parentId())
476
&& QmlItemNode::isItemOrWindow(view()->modelNodeForInternalId(nodeInstance().parentId()));
483
493
QmlItemNode QmlObjectNode::instanceParentItem() const
485
495
if (hasInstanceParentItem())
486
return itemForInstance(qmlModelView()->nodeInstanceView()->instanceForId(nodeInstance().parentId()));
496
return itemForInstance(nodeInstanceView()->instanceForId(nodeInstance().parentId()));
488
498
return QmlItemNode();
503
513
return modelNode().validId();
506
bool QmlObjectNode::hasDefaultProperty() const
516
bool QmlObjectNode::hasDefaultPropertyName() const
508
518
return modelNode().metaInfo().hasDefaultProperty();
511
PropertyName QmlObjectNode::defaultProperty() const
521
PropertyName QmlObjectNode::defaultPropertyName() const
513
523
return modelNode().metaInfo().defaultPropertyName();
516
526
void QmlObjectNode::setParent(QmlObjectNode newParent)
518
if (newParent.hasDefaultProperty())
519
newParent.modelNode().nodeAbstractProperty(newParent.defaultProperty()).reparentHere(modelNode());
528
if (newParent.hasDefaultPropertyName())
529
newParent.modelNode().defaultNodeAbstractProperty().reparentHere(modelNode());
522
532
QmlItemNode QmlObjectNode::toQmlItemNode() const