Qt OPC UA Viewer
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef TREEITEM_H
#define TREEITEM_H
#include <qopcuatype.h>
#include <qopcuareferencedescription.h>
#include <QObject>
#include <memory>
class OpcUaModel;
class QOpcUaEUInformation;
class QOpcUaLocalizedText;
class QOpcUaNode;
class QOpcUaRange;
class TreeItem : public QObject
{
Q_OBJECT
public:
explicit TreeItem(OpcUaModel *model);
TreeItem(QOpcUaNode *node, OpcUaModel *model, TreeItem *parent);
TreeItem(QOpcUaNode *node, OpcUaModel *model, const QOpcUaReferenceDescription &browsingData, TreeItem *parent);
~TreeItem();
TreeItem *child(int row);
int childIndex(const TreeItem *child) const;
int childCount();
int columnCount() const;
QVariant data(int column);
int row() const;
TreeItem *parentItem();
void appendChild(TreeItem *child);
QPixmap icon(int column) const;
bool hasChildNodeItem(const QString &nodeId) const;
void setMonitoringEnabled(bool active);
bool monitoringEnabled() const;
bool supportsMonitoring() const;
private slots:
void startBrowsing();
void handleAttributes(QOpcUa::NodeAttributes attr);
void browseFinished(const QList<QOpcUaReferenceDescription> &children, QOpcUa::UaStatusCode statusCode);
private:
QString variantToString(const QVariant &value, const QString &typeNodeId = QString()) const;
QString localizedTextToString(const QOpcUaLocalizedText &text) const;
QString rangeToString(const QOpcUaRange &range) const;
QString euInformationToString(const QOpcUaEUInformation &info) const;
template <typename T>
QString numberArrayToString(const QList<T> &vec) const;
std::unique_ptr<QOpcUaNode> mOpcNode;
OpcUaModel *mModel = nullptr;
bool mAttributesReady = false;
bool mBrowseStarted = false;
QList<TreeItem *> mChildItems;
QSet<QString> mChildNodeIds;
TreeItem *mParentItem = nullptr;
private:
QString mNodeBrowseName;
QString mNodeId;
QString mNodeDisplayName;
bool mHistorizing;
QOpcUa::NodeClass mNodeClass = QOpcUa::NodeClass::Undefined;
};
template <typename T>
QString TreeItem::numberArrayToString(const QList<T> &vec) const
{
using namespace Qt::Literals::StringLiterals;
QString list('['_L1);
for (int i = 0, size = vec.size(); i < size; ++i) {
if (i)
list.append(';'_L1);
list.append(QString::number(vec.at(i)));
}
list.append(']'_L1);
return list;
}
#endif // TREEITEM_H