/** * @RDE_HEADER@ * * TableModel for dynamic topics * * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include #include #include #include #include #include #include #include #include "logger.h" class QDomDocument; class QDomElement; class TelegramSortModel; class TelegramModel final : public QAbstractTableModel { Q_OBJECT public: explicit TelegramModel(QObject *parent = nullptr); enum Column { DateTime = 0, TopicName = 1, TypeName = 2, Info = 3, Maximum = Info }; struct TelegramData { QDateTime dateTime; std::string typeName; QString topicName; QString info; DataModification modType; QSharedPointer legatusData; void toXml(QDomDocument &doc, QDomElement &de) const; bool fromXml(QDomElement &de); }; int rowCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; TelegramData telegramData(const QModelIndex &index) const; void processData(const dds::core::xtypes::DynamicData &data, const QString &topicName, DataModification modType); const QString topicName(const QModelIndex &index) const; const std::string typeName(const QModelIndex &index) const; const QSharedPointer dynamicData(const QModelIndex &index) const; Qt::ItemFlags flags(const QModelIndex &index) const override; Qt::DropActions supportedDropActions() const override; bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; QMimeData *mimeData(const QModelIndexList &indexes) const override; QStringList mimeTypes() const override; void onTypeCodeInfosChanged(); bool deleteRow(const QModelIndex &index); public slots: void onClear(); signals: void send(const QSharedPointer &data, const QString &topicName); private: QString getString(const dds::core::xtypes::DynamicData &data, uint32_t member_index) const; QString getInfo(const dds::core::xtypes::DynamicData &data, const QString &topicName) const; QMap getInfoInternal(const dds::core::xtypes::DynamicData &data, const QStringList &fields) const; QVector m_data; QMap m_infoList; NGL::INGLLogger &m_logger; friend class TelegramSortModel; }; class TelegramSortModel final : public QSortFilterProxyModel { Q_OBJECT public: using QSortFilterProxyModel::QSortFilterProxyModel; protected: bool lessThan(const QModelIndex &left, const QModelIndex &right) const override; };