QmlDesigner: Simplify InternalNode

Before we add new members the simple getter and setter without value are
removed because the model provides capsulation.

To  remove the weak pointer workaround std::enable_shared_from_this is
used which makes the class aware of its shared pointer. For that we
change to std::shared_ptr

Task-number: QDS-7343
Change-Id: Ic5f14ba8c1fd7af7633b8decb413538ee01c90d6
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Marco Bubke
2022-07-28 14:40:25 +02:00
parent eb8192ce98
commit 00ef718664
15 changed files with 164 additions and 340 deletions

View File

@@ -29,6 +29,8 @@
#include <QSharedPointer>
#include "qmldesignercorelib_global.h"
#include <memory>
QT_BEGIN_NAMESPACE
class QTextStream;
QT_END_NAMESPACE
@@ -38,7 +40,7 @@ namespace QmlDesigner {
class InternalNode;
class InternalProperty;
using InternalNodePointer = QSharedPointer<InternalNode>;
using InternalNodePointer = std::shared_ptr<InternalNode>;
using InternalPropertyPointer = QSharedPointer<InternalProperty>;
}
@@ -122,7 +124,7 @@ public:
friend auto qHash(const AbstractProperty &property)
{
return ::qHash(property.m_internalNode.data()) ^ ::qHash(property.m_propertyName);
return ::qHash(property.m_internalNode.get()) ^ ::qHash(property.m_propertyName);
}
protected:

View File

@@ -40,6 +40,7 @@
#include <QPointer>
#include <functional>
#include <memory>
QT_BEGIN_NAMESPACE
class QStyle;
@@ -50,8 +51,8 @@ QT_END_NAMESPACE
namespace QmlDesigner {
namespace Internal {
class InternalNode;
using InternalNodePointer = QSharedPointer<InternalNode>;
class InternalNode;
using InternalNodePointer = std::shared_ptr<InternalNode>;
}
}

View File

@@ -31,6 +31,8 @@
#include <QVector>
#include <QVariant>
#include <memory>
QT_BEGIN_NAMESPACE
class QTextStream;
QT_END_NAMESPACE
@@ -43,7 +45,7 @@ namespace Internal {
class InternalNode;
class InternalProperty;
using InternalNodePointer = QSharedPointer<InternalNode>;
using InternalNodePointer = std::shared_ptr<InternalNode>;
using InternalPropertyPointer = QSharedPointer<InternalProperty>;
}
class NodeMetaInfo;
@@ -251,7 +253,7 @@ public:
swap(first.m_view, second.m_view);
}
friend auto qHash(const ModelNode &node) { return ::qHash(node.m_internalNode.data()); }
friend auto qHash(const ModelNode &node) { return ::qHash(node.m_internalNode.get()); }
private: // functions
Internal::InternalNodePointer internalNode() const;

View File

@@ -37,14 +37,14 @@ namespace QmlDesigner {
class NodeState;
namespace Internal {
class InternalNode;
using InternalNodePointer = QSharedPointer<InternalNode>;
using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
class InternalNode;
using InternalNodePointer = std::shared_ptr<InternalNode>;
using InternalNodeWeakPointer = QWeakPointer<InternalNode>;
class InternalNodeState;
using InternalNodeStatePointer = QSharedPointer<InternalNodeState>;
class InternalNodeState;
using InternalNodeStatePointer = QSharedPointer<InternalNodeState>;
class TextToModelMerger;
class TextToModelMerger;
}
}

View File

@@ -126,12 +126,8 @@ PropertyName AbstractProperty::name() const
*/
bool AbstractProperty::isValid() const
{
return !m_internalNode.isNull() &&
!m_model.isNull() &&
m_internalNode->isValid() &&
!m_propertyName.isEmpty() &&
!m_propertyName.contains(' ') &&
m_propertyName != "id";
return m_internalNode && !m_model.isNull() && m_internalNode->isValid
&& !m_propertyName.isEmpty() && !m_propertyName.contains(' ') && m_propertyName != "id";
}
bool AbstractProperty::exists() const

View File

@@ -35,89 +35,6 @@
namespace QmlDesigner {
namespace Internal {
/*!
\class QmlDesigner::Internal::InternalNode
Represents one XML element.
*/
InternalNode::InternalNode() :
m_majorVersion(0),
m_minorVersion(0),
m_valid(false),
m_internalId(-1)
{
}
InternalNode::InternalNode(const TypeName &typeName,int majorVersion, int minorVersion, qint32 internalId):
m_typeName(typeName),
m_majorVersion(majorVersion),
m_minorVersion(minorVersion),
m_valid(true),
m_internalId(internalId)
{
}
InternalNode::Pointer InternalNode::create(const TypeName &type,int majorVersion, int minorVersion, qint32 internalId)
{
auto newPointer(new InternalNode(type, majorVersion, minorVersion, internalId));
InternalNode::Pointer smartPointer(newPointer);
newPointer->setInternalWeakPointer(smartPointer);
return smartPointer;
}
InternalNode::Pointer InternalNode::internalPointer() const
{
return m_internalPointer.toStrongRef();
}
void InternalNode::setInternalWeakPointer(const Pointer &pointer)
{
m_internalPointer = pointer;
}
TypeName InternalNode::type() const
{
return m_typeName;
}
void InternalNode::setType(const TypeName &newType)
{
m_typeName = newType;
}
int InternalNode::minorVersion() const
{
return m_minorVersion;
}
int InternalNode::majorVersion() const
{
return m_majorVersion;
}
void InternalNode::setMinorVersion(int number)
{
m_minorVersion = number;
}
void InternalNode::setMajorVersion(int number)
{
m_majorVersion = number;
}
bool InternalNode::isValid() const
{
return m_valid;
}
void InternalNode::setValid(bool valid)
{
m_valid = valid;
}
InternalNodeAbstractProperty::Pointer InternalNode::parentProperty() const
{
return m_parentProperty;
@@ -126,47 +43,23 @@ void InternalNode::setParentProperty(const InternalNodeAbstractProperty::Pointer
{
InternalNodeAbstractProperty::Pointer parentProperty = m_parentProperty.toStrongRef();
if (parentProperty)
parentProperty->remove(internalPointer());
parentProperty->remove(shared_from_this());
Q_ASSERT(parent && parent->isValid());
m_parentProperty = parent;
parent->add(internalPointer());
parent->add(shared_from_this());
}
void InternalNode::resetParentProperty()
{
InternalNodeAbstractProperty::Pointer parentProperty = m_parentProperty.toStrongRef();
if (parentProperty)
parentProperty->remove(internalPointer());
parentProperty->remove(shared_from_this());
m_parentProperty.clear();
}
QString InternalNode::id() const
{
return m_id;
}
void InternalNode::setId(const QString& id)
{
m_id = id;
}
bool InternalNode::hasId() const
{
return !m_id.isEmpty();
}
size_t qHash(const InternalNodePointer& node)
{
if (node.isNull())
return ::qHash(-1);
return ::qHash(node->internalId());
}
QVariant InternalNode::auxiliaryData(const PropertyName &name) const
{
return m_auxiliaryDataHash.value(name);
@@ -235,19 +128,21 @@ InternalVariantProperty::Pointer InternalNode::variantProperty(const PropertyNam
void InternalNode::addBindingProperty(const PropertyName &name)
{
InternalProperty::Pointer newProperty(InternalBindingProperty::create(name, internalPointer()));
InternalProperty::Pointer newProperty(InternalBindingProperty::create(name, shared_from_this()));
m_namePropertyHash.insert(name, newProperty);
}
void InternalNode::addSignalHandlerProperty(const PropertyName &name)
{
InternalProperty::Pointer newProperty(InternalSignalHandlerProperty::create(name, internalPointer()));
InternalProperty::Pointer newProperty(
InternalSignalHandlerProperty::create(name, shared_from_this()));
m_namePropertyHash.insert(name, newProperty);
}
void InternalNode::addSignalDeclarationProperty(const PropertyName &name)
{
InternalProperty::Pointer newProperty(InternalSignalDeclarationProperty::create(name, internalPointer()));
InternalProperty::Pointer newProperty(
InternalSignalDeclarationProperty::create(name, shared_from_this()));
m_namePropertyHash.insert(name, newProperty);
}
@@ -280,20 +175,20 @@ InternalNodeProperty::Pointer InternalNode::nodeProperty(const PropertyName &nam
void InternalNode::addVariantProperty(const PropertyName &name)
{
InternalProperty::Pointer newProperty(InternalVariantProperty::create(name, internalPointer()));
InternalProperty::Pointer newProperty(InternalVariantProperty::create(name, shared_from_this()));
m_namePropertyHash.insert(name, newProperty);
}
void InternalNode::addNodeProperty(const PropertyName &name, const TypeName &dynamicTypeName)
{
InternalNodeProperty::Pointer newProperty(InternalNodeProperty::create(name, internalPointer()));
InternalNodeProperty::Pointer newProperty(InternalNodeProperty::create(name, shared_from_this()));
newProperty->setDynamicTypeName(dynamicTypeName);
m_namePropertyHash.insert(name, newProperty);
}
void InternalNode::addNodeListProperty(const PropertyName &name)
{
InternalProperty::Pointer newProperty(InternalNodeListProperty::create(name, internalPointer()));
InternalProperty::Pointer newProperty(InternalNodeListProperty::create(name, shared_from_this()));
m_namePropertyHash.insert(name, newProperty);
}
@@ -358,61 +253,5 @@ QList<InternalNode::Pointer> InternalNode::allDirectSubNodes() const
return nodeList;
}
bool operator <(const InternalNode::Pointer &firstNode, const InternalNode::Pointer &secondNode)
{
if (firstNode.isNull())
return true;
if (secondNode.isNull())
return false;
return firstNode->internalId() < secondNode->internalId();
}
void InternalNode::setScriptFunctions(const QStringList &scriptFunctionList)
{
m_scriptFunctionList = scriptFunctionList;
}
QStringList InternalNode::scriptFunctions() const
{
return m_scriptFunctionList;
}
qint32 InternalNode::internalId() const
{
return m_internalId;
}
void InternalNode::setNodeSource(const QString &nodeSource)
{
m_nodeSource = nodeSource;
}
QString InternalNode::nodeSource() const
{
return m_nodeSource;
}
int InternalNode::nodeSourceType() const
{
return m_nodeSourceType;
}
void InternalNode::setNodeSourceType(int i)
{
m_nodeSourceType = i;
}
QString InternalNode::behaviorPropertyName() const
{
return m_behaviorPropertyName;
}
void InternalNode::setBehaviorPropertyName(const QString &name)
{
m_behaviorPropertyName = name;
}
}
} // namespace Internal
}

View File

@@ -38,6 +38,8 @@
#include "internalnodeproperty.h"
#include "internalnodeabstractproperty.h"
#include <memory>
namespace QmlDesigner {
namespace Internal {
@@ -45,31 +47,26 @@ namespace Internal {
class InternalProperty;
class InternalNode;
using InternalNodePointer = QSharedPointer<InternalNode>;
using InternalNodePointer = std::shared_ptr<InternalNode>;
using InternalPropertyPointer = QSharedPointer<InternalProperty>;
class InternalNode
class InternalNode : public std::enable_shared_from_this<InternalNode>
{
friend InternalProperty;
public:
using Pointer = QSharedPointer<InternalNode>;
using WeakPointer = QWeakPointer<InternalNode>;
using Pointer = std::shared_ptr<InternalNode>;
using WeakPointer = std::weak_ptr<InternalNode>;
explicit InternalNode();
explicit InternalNode() = default;
static Pointer create(const TypeName &typeName, int majorVersion, int minorVersion, qint32 internalId);
TypeName type() const;
void setType(const TypeName &newType);
int minorVersion() const;
int majorVersion() const;
void setMinorVersion(int number);
void setMajorVersion(int number);
bool isValid() const;
void setValid(bool valid);
explicit InternalNode(TypeName typeName, int majorVersion, int minorVersion, qint32 internalId)
: typeName(std::move(typeName))
, majorVersion(majorVersion)
, minorVersion(minorVersion)
, isValid(true)
, internalId(internalId)
{}
InternalNodeAbstractProperty::Pointer parentProperty() const;
@@ -77,10 +74,6 @@ public:
void setParentProperty(const InternalNodeAbstractProperty::Pointer &parent);
void resetParentProperty();
QString id() const;
void setId(const QString& id);
bool hasId() const;
QVariant auxiliaryData(const PropertyName &name) const;
void setAuxiliaryData(const PropertyName &name, const QVariant &data);
void removeAuxiliaryData(const PropertyName &name);
@@ -113,51 +106,46 @@ public:
QList<InternalNode::Pointer> allSubNodes() const;
QList<InternalNode::Pointer> allDirectSubNodes() const;
void setScriptFunctions(const QStringList &scriptFunctionList);
QStringList scriptFunctions() const;
friend bool operator<(const InternalNode::Pointer &firstNode,
const InternalNode::Pointer &secondNode)
{
if (!firstNode)
return true;
qint32 internalId() const;
if (!secondNode)
return false;
void setNodeSource(const QString&);
QString nodeSource() const;
return firstNode->internalId < secondNode->internalId;
}
int nodeSourceType() const;
void setNodeSourceType(int i);
friend size_t qHash(const InternalNodePointer &node)
{
if (!node)
return ::qHash(-1);
QString behaviorPropertyName() const;
void setBehaviorPropertyName(const QString &name);
return ::qHash(node->internalId);
}
protected:
Pointer internalPointer() const;
void setInternalWeakPointer(const Pointer &pointer);
void removeProperty(const PropertyName &name);
explicit InternalNode(const TypeName &type, int majorVersion, int minorVersion, qint32 internalId);
public:
TypeName typeName;
QString id;
int majorVersion = 0;
int minorVersion = 0;
bool isValid = false;
qint32 internalId = -1;
QString nodeSource;
int nodeSourceType = 0;
QString behaviorPropertyName;
QStringList scriptFunctions;
private:
TypeName m_typeName;
QString m_id;
QHash<PropertyName, QVariant> m_auxiliaryDataHash;
InternalNodeAbstractProperty::WeakPointer m_parentProperty;
WeakPointer m_internalPointer;
int m_majorVersion;
int m_minorVersion;
bool m_valid;
qint32 m_internalId;
QHash<PropertyName, InternalPropertyPointer> m_namePropertyHash;
QStringList m_scriptFunctionList;
QString m_nodeSource;
int m_nodeSourceType = 0;
QString m_behaviorPropertyName;
};
size_t qHash(const InternalNodePointer& node);
bool operator <(const InternalNodePointer &firstNode, const InternalNodePointer &secondNode);
} // Internal
} // QtQmlDesigner

View File

@@ -62,7 +62,7 @@ int InternalNodeListProperty::count() const
int InternalNodeListProperty::indexOf(const InternalNode::Pointer &node) const
{
if (node.isNull())
if (!node)
return -1;
return m_nodeList.indexOf(node);

View File

@@ -46,7 +46,7 @@ InternalNodeProperty::Pointer InternalNodeProperty::create(const PropertyName &n
bool InternalNodeProperty::isEmpty() const
{
return m_node.isNull();
return !m_node;
}
int InternalNodeProperty::count() const
@@ -59,7 +59,7 @@ int InternalNodeProperty::count() const
int InternalNodeProperty::indexOf(const InternalNode::Pointer &node) const
{
if (!node.isNull() && node == m_node)
if (node && node == m_node)
return 0;
return -1;
@@ -83,8 +83,7 @@ InternalNode::Pointer InternalNodeProperty::node() const
void InternalNodeProperty::remove([[maybe_unused]] const InternalNode::Pointer &node)
{
Q_ASSERT(m_node == node);
m_node.clear();
m_node.reset();
}
void InternalNodeProperty::add(const InternalNode::Pointer &node)

View File

@@ -62,7 +62,7 @@ void InternalProperty::setInternalWeakPointer(const Pointer &pointer)
bool InternalProperty::isValid() const
{
return m_propertyOwner && !m_name.isEmpty();
return !m_propertyOwner.expired() && !m_name.isEmpty();
}
PropertyName InternalProperty::name() const
@@ -121,7 +121,7 @@ QSharedPointer<InternalVariantProperty> InternalProperty::toVariantProperty() co
InternalNode::Pointer InternalProperty::propertyOwner() const
{
return m_propertyOwner.toStrongRef();
return m_propertyOwner.lock();
}
QSharedPointer<InternalNodeListProperty> InternalProperty::toNodeListProperty() const
@@ -157,7 +157,7 @@ QSharedPointer<InternalSignalDeclarationProperty> InternalProperty::toSignalDecl
void InternalProperty::remove()
{
propertyOwner()->removeProperty(name());
m_propertyOwner.clear();
m_propertyOwner.reset();
}
TypeName InternalProperty::dynamicTypeName() const

View File

@@ -30,6 +30,8 @@
#include <QVariant>
#include <QSharedPointer>
#include <memory>
namespace QmlDesigner {
namespace Internal {
@@ -43,7 +45,7 @@ class InternalNodeProperty;
class InternalNodeAbstractProperty;
class InternalNode;
using InternalNodePointer = QSharedPointer<InternalNode>;
using InternalNodePointer = std::shared_ptr<InternalNode>;
class QMLDESIGNERCORE_EXPORT InternalProperty
{
@@ -90,8 +92,7 @@ private:
QWeakPointer<InternalProperty> m_internalPointer;
PropertyName m_name;
TypeName m_dynamicType;
QWeakPointer<InternalNode> m_propertyOwner;
std::weak_ptr<InternalNode> m_propertyOwner;
};
} // namespace Internal

View File

@@ -243,9 +243,9 @@ void ModelPrivate::setFileUrl(const QUrl &fileUrl)
void ModelPrivate::changeNodeType(const InternalNodePointer &node, const TypeName &typeName,
int majorVersion, int minorVersion)
{
node->setType(typeName);
node->setMajorVersion(majorVersion);
node->setMinorVersion(minorVersion);
node->typeName = typeName;
node->majorVersion = majorVersion;
node->minorVersion = minorVersion;
try {
notifyNodeTypeChanged(node, typeName, majorVersion, minorVersion);
@@ -272,10 +272,10 @@ InternalNodePointer ModelPrivate::createNode(const TypeName &typeName,
if (!isRootNode)
internalId = m_internalIdCounter++;
InternalNodePointer newNode = InternalNode::create(typeName, majorVersion, minorVersion, internalId);
newNode->setNodeSourceType(nodeSourceType);
auto newNode = std::make_shared<InternalNode>(typeName, majorVersion, minorVersion, internalId);
newNode->nodeSourceType = nodeSourceType;
newNode->setBehaviorPropertyName(behaviorPropertyName);
newNode->behaviorPropertyName = behaviorPropertyName;
using PropertyPair = QPair<PropertyName, QVariant>;
@@ -288,10 +288,10 @@ InternalNodePointer ModelPrivate::createNode(const TypeName &typeName,
newNode->setAuxiliaryData(propertyPair.first, propertyPair.second);
m_nodeSet.insert(newNode);
m_internalIdNodeHash.insert(newNode->internalId(), newNode);
m_internalIdNodeHash.insert(newNode->internalId, newNode);
if (!nodeSource.isNull())
newNode->setNodeSource(nodeSource);
newNode->nodeSource = nodeSource;
notifyNodeCreated(newNode);
@@ -303,16 +303,16 @@ InternalNodePointer ModelPrivate::createNode(const TypeName &typeName,
void ModelPrivate::removeNodeFromModel(const InternalNodePointer &node)
{
Q_ASSERT(!node.isNull());
Q_ASSERT(node);
node->resetParentProperty();
m_selectedInternalNodeList.removeAll(node);
if (!node->id().isEmpty())
m_idNodeHash.remove(node->id());
node->setValid(false);
if (!node->id.isEmpty())
m_idNodeHash.remove(node->id);
node->isValid = false;
m_nodeSet.remove(node);
m_internalIdNodeHash.remove(node->internalId());
m_internalIdNodeHash.remove(node->internalId);
}
const QList<QPointer<AbstractView>> ModelPrivate::enabledViews() const
@@ -328,7 +328,7 @@ void ModelPrivate::removeAllSubNodes(const InternalNodePointer &node)
void ModelPrivate::removeNode(const InternalNodePointer &node)
{
Q_ASSERT(!node.isNull());
Q_ASSERT(node);
AbstractView::PropertyChangeFlags propertyChangeFlags = AbstractView::NoAdditionalChanges;
@@ -372,9 +372,9 @@ void ModelPrivate::setMetaInfo(const MetaInfo &metaInfo)
void ModelPrivate::changeNodeId(const InternalNodePointer &node, const QString &id)
{
const QString oldId = node->id();
const QString oldId = node->id;
node->setId(id);
node->id = id;
if (!oldId.isEmpty())
m_idNodeHash.remove(oldId);
if (!id.isEmpty())
@@ -901,7 +901,7 @@ void ModelPrivate::notifyNodeAboutToBeReparent(const InternalNodePointer &node,
NodeAbstractProperty newProperty;
NodeAbstractProperty oldProperty;
if (!oldPropertyName.isEmpty() && oldParent->isValid())
if (!oldPropertyName.isEmpty() && oldParent->isValid)
oldProperty = NodeAbstractProperty(oldPropertyName, oldParent, m_model, view);
if (!newPropertyParent.isNull())
@@ -922,7 +922,7 @@ void ModelPrivate::notifyNodeReparent(const InternalNodePointer &node,
NodeAbstractProperty newProperty;
NodeAbstractProperty oldProperty;
if (!oldPropertyName.isEmpty() && oldParent->isValid())
if (!oldPropertyName.isEmpty() && oldParent->isValid)
oldProperty = NodeAbstractProperty(oldPropertyName, oldParent, m_model, view);
if (!newPropertyParent.isNull())
@@ -953,8 +953,8 @@ void ModelPrivate::notifyNodeOrderChanged(const InternalNodeListPropertyPointer
void ModelPrivate::setSelectedNodes(const QList<InternalNodePointer> &selectedNodeList)
{
QList<InternalNodePointer> sortedSelectedList = Utils::filtered(selectedNodeList,
&InternalNode::isValid);
auto sortedSelectedList = Utils::filtered(selectedNodeList,
[](const auto &node) { return node->isValid; });
sortedSelectedList = Utils::toList(Utils::toSet(sortedSelectedList));
Utils::sort(sortedSelectedList);
@@ -1039,7 +1039,7 @@ void ModelPrivate::changeSelectedNodes(const QList<InternalNodePointer> &newSele
QList<InternalNodePointer> ModelPrivate::selectedNodes() const
{
for (const InternalNodePointer &node : std::as_const(m_selectedInternalNodeList)) {
if (!node->isValid())
if (!node->isValid)
throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
@@ -1239,23 +1239,23 @@ void ModelPrivate::clearParent(const InternalNodePointer &node)
void ModelPrivate::changeRootNodeType(const TypeName &type, int majorVersion, int minorVersion)
{
Q_ASSERT(!rootNode().isNull());
rootNode()->setType(type);
rootNode()->setMajorVersion(majorVersion);
rootNode()->setMinorVersion(minorVersion);
Q_ASSERT(rootNode());
rootNode()->typeName = type;
rootNode()->majorVersion = majorVersion;
rootNode()->minorVersion = minorVersion;
notifyRootNodeTypeChanged(QString::fromUtf8(type), majorVersion, minorVersion);
}
void ModelPrivate::setScriptFunctions(const InternalNodePointer &node, const QStringList &scriptFunctionList)
{
node->setScriptFunctions(scriptFunctionList);
node->scriptFunctions = scriptFunctionList;
notifyScriptFunctionsChanged(node, scriptFunctionList);
}
void ModelPrivate::setNodeSource(const InternalNodePointer &node, const QString &nodeSource)
{
node->setNodeSource(nodeSource);
node->nodeSource = nodeSource;
notifyNodeSourceChanged(node, nodeSource);
}
@@ -1343,7 +1343,7 @@ bool ModelPrivate::hasNodeForInternalId(qint32 internalId) const
QList<InternalNodePointer> ModelPrivate::allNodes() const
{
if (m_rootInternalNode.isNull() || !m_rootInternalNode->isValid())
if (!m_rootInternalNode || !m_rootInternalNode->isValid)
return {};
// the nodes must be ordered.

View File

@@ -59,7 +59,7 @@ class InternalVariantProperty;
class InternalNodeAbstractProperty;
class InternalNodeListProperty;
using InternalNodePointer = QSharedPointer<InternalNode>;
using InternalNodePointer = std::shared_ptr<InternalNode>;
using InternalPropertyPointer = QSharedPointer<InternalProperty>;
using InternalBindingPropertyPointer = QSharedPointer<InternalBindingProperty>;
using InternalSignalHandlerPropertyPointer = QSharedPointer<InternalSignalHandlerProperty>;

View File

@@ -137,7 +137,7 @@ QString ModelNode::id() const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return m_internalNode->id();
return m_internalNode->id;
}
QString ModelNode::validId()
@@ -243,15 +243,14 @@ bool ModelNode::hasId() const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return m_internalNode->hasId();
return !m_internalNode->id.isEmpty();
}
void ModelNode::setIdWithRefactoring(const QString& id)
{
if (model()->rewriterView()
&& !id.isEmpty()
&& !m_internalNode->id().isEmpty()) { // refactor the id if they are not empty
model()->rewriterView()->renameId(m_internalNode->id(), id);
if (model()->rewriterView() && !id.isEmpty()
&& !m_internalNode->id.isEmpty()) { // refactor the id if they are not empty
model()->rewriterView()->renameId(m_internalNode->id, id);
} else {
setIdWithoutRefactoring(id);
}
@@ -268,14 +267,14 @@ void ModelNode::setIdWithoutRefactoring(const QString &id)
if (!isValidId(id))
throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id.toUtf8(), InvalidIdException::InvalidCharacters);
if (id == m_internalNode->id())
if (id == m_internalNode->id)
return;
if (model()->hasId(id))
throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id.toUtf8(), InvalidIdException::DuplicateId);
m_model.data()->d->changeNodeId(internalNode(), id);
m_model.data()->d->changeNodeId(m_internalNode, id);
}
/*! \brief the fully-qualified type name of the node is represented as string
@@ -287,7 +286,7 @@ TypeName ModelNode::type() const
Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
return m_internalNode->type();
return m_internalNode->typeName;
}
/*! \brief minor number of the QML type
@@ -299,7 +298,7 @@ int ModelNode::minorVersion() const
Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
return m_internalNode->minorVersion();
return m_internalNode->minorVersion;
}
/*! \brief major number of the QML type
@@ -311,7 +310,7 @@ int ModelNode::majorVersion() const
Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
return m_internalNode->majorVersion();
return m_internalNode->majorVersion;
}
/*! \return the short-hand type name of the node. */
@@ -343,7 +342,7 @@ A node might become invalid if e.g. it or one of its ancestors is deleted.
*/
bool ModelNode::isValid() const
{
return !m_model.isNull() && !m_view.isNull() && m_internalNode && m_internalNode->isValid();
return !m_model.isNull() && !m_view.isNull() && m_internalNode && m_internalNode->isValid;
}
/*!
@@ -435,8 +434,7 @@ void ModelNode::changeType(const TypeName &typeName, int majorVersion, int minor
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
model()->d->changeNodeType(internalNode(), typeName, majorVersion, minorVersion);
model()->d->changeNodeType(m_internalNode, typeName, majorVersion, minorVersion);
}
void ModelNode::setParentProperty(const ModelNode &newParentNode, const PropertyName &propertyName)
@@ -603,9 +601,9 @@ QList<AbstractProperty> ModelNode::properties() const
QList<AbstractProperty> propertyList;
const QList<PropertyName> propertyNames = internalNode()->propertyNameList();
const QList<PropertyName> propertyNames = m_internalNode->propertyNameList();
for (const PropertyName &propertyName : propertyNames) {
AbstractProperty property(propertyName, internalNode(), model(), view());
AbstractProperty property(propertyName, m_internalNode, model(), view());
propertyList.append(property);
}
@@ -707,8 +705,8 @@ void ModelNode::removeProperty(const PropertyName &name) const
model()->d->checkPropertyName(name);
if (internalNode()->hasProperty(name))
model()->d->removeProperty(internalNode()->property(name));
if (m_internalNode->hasProperty(name))
model()->d->removeProperty(m_internalNode->property(name));
}
/*! \brief removes this node from the node tree
@@ -750,7 +748,7 @@ void ModelNode::destroy()
throw InvalidArgumentException(__LINE__, __FUNCTION__, __FILE__, "rootNode");
removeModelNodeFromSelection(*this);
model()->d->removeNode(internalNode());
model()->d->removeNode(m_internalNode);
}
//\}
@@ -814,7 +812,7 @@ properties.
*/
QList<ModelNode> ModelNode::directSubModelNodes() const
{
return toModelNodeList(internalNode()->allDirectSubNodes(), view());
return toModelNodeList(m_internalNode->allDirectSubNodes(), view());
}
QList<ModelNode> ModelNode::directSubModelNodesOfType(const TypeName &typeName) const
@@ -917,7 +915,7 @@ PropertyNameList ModelNode::propertyNames() const
{
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return internalNode()->propertyNameList();
return m_internalNode->propertyNameList();
}
/*! \brief test a if a property is set for this node
@@ -928,47 +926,50 @@ bool ModelNode::hasProperty(const PropertyName &name) const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return internalNode()->hasProperty(name);
return m_internalNode->hasProperty(name);
}
bool ModelNode::hasVariantProperty(const PropertyName &name) const
{
return hasProperty(name) && internalNode()->property(name)->isVariantProperty();
return hasProperty(name) && m_internalNode->property(name)->isVariantProperty();
}
bool ModelNode::hasBindingProperty(const PropertyName &name) const
{
return hasProperty(name) && internalNode()->property(name)->isBindingProperty();
return hasProperty(name) && m_internalNode->property(name)->isBindingProperty();
}
bool ModelNode::hasNodeAbstractProperty(const PropertyName &name) const
{
return hasProperty(name) && internalNode()->property(name)->isNodeAbstractProperty();
return hasProperty(name) && m_internalNode->property(name)->isNodeAbstractProperty();
}
bool ModelNode::hasDefaultNodeAbstractProperty() const
{
return hasProperty(metaInfo().defaultPropertyName()) && internalNode()->property(metaInfo().defaultPropertyName())->isNodeAbstractProperty();
return hasProperty(metaInfo().defaultPropertyName())
&& m_internalNode->property(metaInfo().defaultPropertyName())->isNodeAbstractProperty();
}
bool ModelNode::hasDefaultNodeListProperty() const
{
return hasProperty(metaInfo().defaultPropertyName()) && internalNode()->property(metaInfo().defaultPropertyName())->isNodeListProperty();
return hasProperty(metaInfo().defaultPropertyName())
&& m_internalNode->property(metaInfo().defaultPropertyName())->isNodeListProperty();
}
bool ModelNode::hasDefaultNodeProperty() const
{
return hasProperty(metaInfo().defaultPropertyName()) && internalNode()->property(metaInfo().defaultPropertyName())->isNodeProperty();
return hasProperty(metaInfo().defaultPropertyName())
&& m_internalNode->property(metaInfo().defaultPropertyName())->isNodeProperty();
}
bool ModelNode::hasNodeProperty(const PropertyName &name) const
{
return hasProperty(name) && internalNode()->property(name)->isNodeProperty();
return hasProperty(name) && m_internalNode->property(name)->isNodeProperty();
}
bool ModelNode::hasNodeListProperty(const PropertyName &name) const
{
return hasProperty(name) && internalNode()->property(name)->isNodeListProperty();
return hasProperty(name) && m_internalNode->property(name)->isNodeListProperty();
}
static bool recursiveAncestor(const ModelNode &possibleAncestor, const ModelNode &node)
@@ -1054,24 +1055,24 @@ QVariant ModelNode::auxiliaryData(const PropertyName &name) const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return internalNode()->auxiliaryData(name);
return m_internalNode->auxiliaryData(name);
}
void ModelNode::setAuxiliaryData(const PropertyName &name, const QVariant &data) const
{
Internal::WriteLocker locker(m_model.data());
m_model.data()->d->setAuxiliaryData(internalNode(), name, data);
m_model.data()->d->setAuxiliaryData(m_internalNode, name, data);
}
void ModelNode::setAuxiliaryDataWithoutLock(const PropertyName &name, const QVariant &data) const
{
m_model.data()->d->setAuxiliaryData(internalNode(), name, data);
m_model.data()->d->setAuxiliaryData(m_internalNode, name, data);
}
void ModelNode::removeAuxiliaryData(const PropertyName &name) const
{
Internal::WriteLocker locker(m_model.data());
m_model.data()->d->removeAuxiliaryData(internalNode(), name);
m_model.data()->d->removeAuxiliaryData(m_internalNode, name);
}
bool ModelNode::hasAuxiliaryData(const PropertyName &name) const
@@ -1079,7 +1080,7 @@ bool ModelNode::hasAuxiliaryData(const PropertyName &name) const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return internalNode()->hasAuxiliaryData(name);
return m_internalNode->hasAuxiliaryData(name);
}
const QHash<PropertyName, QVariant> &ModelNode::auxiliaryData() const
@@ -1087,7 +1088,7 @@ const QHash<PropertyName, QVariant> &ModelNode::auxiliaryData() const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return internalNode()->auxiliaryData();
return m_internalNode->auxiliaryData();
}
QString ModelNode::customId() const
@@ -1287,20 +1288,20 @@ bool ModelNode::isThisOrAncestorLocked(const ModelNode &node)
void ModelNode::setScriptFunctions(const QStringList &scriptFunctionList)
{
model()->d->setScriptFunctions(internalNode(), scriptFunctionList);
model()->d->setScriptFunctions(m_internalNode, scriptFunctionList);
}
QStringList ModelNode::scriptFunctions() const
{
return internalNode()->scriptFunctions();
return m_internalNode->scriptFunctions;
}
qint32 ModelNode::internalId() const
{
if (m_internalNode.isNull())
if (!m_internalNode)
return -1;
return m_internalNode->internalId();
return m_internalNode->internalId;
}
void ModelNode::setNodeSource(const QString &newNodeSource)
@@ -1312,10 +1313,10 @@ void ModelNode::setNodeSource(const QString &newNodeSource)
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
if (internalNode()->nodeSource() == newNodeSource)
if (m_internalNode->nodeSource == newNodeSource)
return;
m_model.data()->d->setNodeSource(internalNode(), newNodeSource);
m_model.data()->d->setNodeSource(m_internalNode, newNodeSource);
}
void ModelNode::setNodeSource(const QString &newNodeSource, NodeSourceType type)
@@ -1327,11 +1328,11 @@ void ModelNode::setNodeSource(const QString &newNodeSource, NodeSourceType type)
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
}
if (internalNode()->nodeSourceType() == type && internalNode()->nodeSource() == newNodeSource)
if (m_internalNode->nodeSourceType == type && m_internalNode->nodeSource == newNodeSource)
return;
internalNode()->setNodeSourceType(type); // Set type first as it doesn't trigger any notifies
m_model.data()->d->setNodeSource(internalNode(), newNodeSource);
m_internalNode->nodeSourceType = type; // Set type first as it doesn't trigger any notifies
m_model.data()->d->setNodeSource(m_internalNode, newNodeSource);
}
QString ModelNode::nodeSource() const
@@ -1339,7 +1340,7 @@ QString ModelNode::nodeSource() const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return internalNode()->nodeSource();
return m_internalNode->nodeSource;
}
QString ModelNode::convertTypeToImportAlias() const
@@ -1358,8 +1359,7 @@ ModelNode::NodeSourceType ModelNode::nodeSourceType() const
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
return static_cast<ModelNode::NodeSourceType>(internalNode()->nodeSourceType());
return static_cast<ModelNode::NodeSourceType>(m_internalNode->nodeSourceType);
}
bool ModelNode::isComponent() const
@@ -1445,10 +1445,10 @@ QIcon ModelNode::typeIcon() const
QString ModelNode::behaviorPropertyName() const
{
if (m_internalNode.isNull())
if (!m_internalNode)
return {};
return m_internalNode->behaviorPropertyName();
return m_internalNode->behaviorPropertyName;
}
}

View File

@@ -149,9 +149,7 @@ int NodeAbstractProperty::count() const
QList<ModelNode> NodeAbstractProperty::allSubNodes()
{
if (!internalNode()
|| !internalNode()->isValid()
|| !internalNode()->hasProperty(name())
if (!internalNode() || !internalNode()->isValid || !internalNode()->hasProperty(name())
|| !internalNode()->property(name())->isNodeAbstractProperty())
return QList<ModelNode>();
@@ -161,9 +159,7 @@ QList<ModelNode> NodeAbstractProperty::allSubNodes()
QList<ModelNode> NodeAbstractProperty::directSubNodes() const
{
if (!internalNode()
|| !internalNode()->isValid()
|| !internalNode()->hasProperty(name())
if (!internalNode() || !internalNode()->isValid || !internalNode()->hasProperty(name())
|| !internalNode()->property(name())->isNodeAbstractProperty())
return QList<ModelNode>();