1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef OPCUAATTRIBUTEOPERAND_P_H
5#define OPCUAATTRIBUTEOPERAND_P_H
6
7#include <private/opcuaoperandbase_p.h>
8#include <private/opcuanodeid_p.h>
9
10#include <QOpcUaAttributeOperand>
11#include <QQmlListProperty>
12#include <QList>
13#include <QtQml/qqml.h>
14
15//
16// W A R N I N G
17// -------------
18//
19// This file is not part of the Qt API. It exists purely as an
20// implementation detail. This header file may change from version to
21// version without notice, or even be removed.
22//
23// We mean it.
24//
25
26QT_BEGIN_NAMESPACE
27
28class OpcUaRelativeNodePath;
29class QOpcUaClient;
30
31class OpcUaAttributeOperand : public OpcUaOperandBase, private QOpcUaAttributeOperand {
32 Q_OBJECT
33 Q_PROPERTY(QQmlListProperty<OpcUaRelativeNodePath> browsePath READ browsePath)
34 Q_PROPERTY(QString indexRange READ indexRange WRITE setIndexRange)
35 Q_PROPERTY(QOpcUa::NodeAttribute nodeAttribute READ nodeAttribute WRITE setNodeAttribute)
36 Q_PROPERTY(OpcUaNodeId* typeId READ typeId WRITE setTypeId)
37 Q_PROPERTY(QString alias READ alias WRITE setAlias)
38
39 QML_NAMED_ELEMENT(AttributeOperand)
40 QML_ADDED_IN_VERSION(5, 13)
41
42public:
43 explicit OpcUaAttributeOperand(QObject *parent = nullptr);
44 ~OpcUaAttributeOperand();
45 virtual QVariant toCppVariant(QOpcUaClient *client) const override;
46
47 OpcUaNodeId *typeId() const;
48 void setTypeId(OpcUaNodeId *nodeId);
49
50 QString alias() const;
51 void setAlias(const QString &alias);
52
53 QString indexRange() const;
54 void setIndexRange(const QString &indexRange);
55
56 QOpcUa::NodeAttribute nodeAttribute() const;
57 void setNodeAttribute(QOpcUa::NodeAttribute nodeAttribute);
58
59 QQmlListProperty<OpcUaRelativeNodePath> browsePath();
60 void appendBrowsePathElement(OpcUaRelativeNodePath *nodeId);
61 int browsePathSize() const;
62 OpcUaRelativeNodePath *browsePathElement(int index) const;
63 void clearBrowsePath();
64
65signals:
66 void dataChanged();
67
68private:
69 static void appendBrowsePathElement(QQmlListProperty<OpcUaRelativeNodePath> *list, OpcUaRelativeNodePath *nodeId);
70 static qsizetype browsePathSize(QQmlListProperty<OpcUaRelativeNodePath> *list);
71 static OpcUaRelativeNodePath* browsePathElement(QQmlListProperty<OpcUaRelativeNodePath> *list, qsizetype index);
72 static void clearBrowsePath(QQmlListProperty<OpcUaRelativeNodePath> *list);
73
74 QList<OpcUaRelativeNodePath*> m_browsePath;
75 OpcUaNodeId *m_nodeId = nullptr;
76};
77
78QT_END_NAMESPACE
79
80#endif // OPCUASIMPLEATTRIBUTEOPERAND_P_H
81

source code of qtopcua/src/declarative_opcua/opcuaattributeoperand_p.h