Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
propertynode.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#include "propertynode.h"
5
6#include "aggregate.h"
7
9
10/*!
11 \class PropertyNode
12
13 This class describes one instance of using the Q_PROPERTY macro.
14 */
15
16/*!
17 The constructor sets the \a parent and the \a name, but
18 everything else is left to default values.
19 */
20PropertyNode::PropertyNode(Aggregate *parent, const QString &name) : Node(Property, parent, name)
21{
22 // nothing
23}
24
25
26/*!
27 Returns a string representing an access function \a role.
28*/
29QString PropertyNode::roleName(FunctionRole role)
30{
31 switch (role) {
32 case FunctionRole::Getter:
33 return "getter";
34 case FunctionRole::Setter:
35 return "setter";
36 case FunctionRole::Resetter:
37 return "resetter";
38 case FunctionRole::Notifier:
39 return "notifier";
40 case FunctionRole::Bindable:
41 return "bindable";
42 default:
43 break;
44 }
45 return QString();
46}
47
48/*!
49 Sets this property's \e {overridden from} property to
50 \a baseProperty, which indicates that this property
51 overrides \a baseProperty. To begin with, all the values
52 in this property are set to the corresponding values in
53 \a baseProperty.
54
55 We probably should ensure that the constant and final
56 attributes are not being overridden improperly.
57 */
59{
60 for (qsizetype i{0}; i < (qsizetype)FunctionRole::NumFunctionRoles; ++i) {
61 if (m_functions[i].isEmpty())
62 m_functions[i] = baseProperty->m_functions[i];
63 }
64 if (m_stored == FlagValueDefault)
65 m_stored = baseProperty->m_stored;
66 if (m_writable == FlagValueDefault)
67 m_writable = baseProperty->m_writable;
68 if (m_user == FlagValueDefault)
69 m_user = baseProperty->m_user;
70 m_overrides = baseProperty;
71}
72
73/*!
74 Returns a string containing the data type qualified with "const" either
75 prepended to the data type or appended to it, or without the const
76 qualification, depending circumstances in the PropertyNode internal state.
77 */
79{
80 if (m_propertyType != PropertyType::StandardProperty || m_type.startsWith(QLatin1String("const ")))
81 return m_type;
82
83 if (setters().isEmpty() && resetters().isEmpty()) {
84 if (m_type.contains(QLatin1Char('*')) || m_type.contains(QLatin1Char('&'))) {
85 // 'QWidget *' becomes 'QWidget *' const
86 return m_type + " const";
87 } else {
88 /*
89 'int' becomes 'const int' ('int const' is
90 correct C++, but looks wrong)
91 */
92 return "const " + m_type;
93 }
94 } else {
95 return m_type;
96 }
97}
98
99/*!
100 Returns true if this property has an access function named \a name.
101 */
102bool PropertyNode::hasAccessFunction(const QString &name) const
103{
104 for (const auto &getter : getters()) {
105 if (getter->name() == name)
106 return true;
107 }
108 for (const auto &setter : setters()) {
109 if (setter->name() == name)
110 return true;
111 }
112 for (const auto &resetter : resetters()) {
113 if (resetter->name() == name)
114 return true;
115 }
116 for (const auto &notifier : notifiers()) {
117 if (notifier->name() == name)
118 return true;
119 }
120 return false;
121}
122
123/*!
124 Returns the role of \a functionNode for this property.
125 */
127{
128 for (qsizetype i{0}; i < (qsizetype)FunctionRole::NumFunctionRoles; i++) {
129 if (m_functions[i].contains(const_cast<FunctionNode *>(functionNode)))
130 return (FunctionRole)i;
131 }
132 return FunctionRole::Notifier; // TODO: Figure out a better way to handle 'not found'.
133}
134
135QT_END_NAMESPACE
This node is used to represent any kind of function being documented.
@ FlagValueDefault
Definition node.h:114
LinkType
An unsigned char value that probably should be moved out of the Node base class.
Definition node.h:112
This class describes one instance of using the Q_PROPERTY macro.
bool hasAccessFunction(const QString &name) const
Returns true if this property has an access function named name.
const NodeList & resetters() const
const NodeList & setters() const
FunctionRole role(const FunctionNode *functionNode) const
Returns the role of functionNode for this property.
void setOverriddenFrom(const PropertyNode *baseProperty)
Sets this property's {overridden from} property to baseProperty, which indicates that this property o...
QString qualifiedDataType() const
Returns a string containing the data type qualified with "const" either prepended to the data type or...
\inmodule QtQmlCompiler
Combined button and popup list for selecting options.