Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
Executable
+172
@@ -0,0 +1,172 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
*
|
||||
* Tree model for the TopicSortModel
|
||||
*
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QModelIndex>
|
||||
#include "logger.h"
|
||||
#include "nglsettings.h"
|
||||
|
||||
#include <dds/core/xtypes/DynamicData.hpp>
|
||||
|
||||
class TreeItem;
|
||||
class TreeModel;
|
||||
|
||||
class TopicDataModel final : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TopicDataModel(QObject *parent = nullptr);
|
||||
~TopicDataModel();
|
||||
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
QModelIndex parent(const QModelIndex &child) const override;
|
||||
|
||||
static dds::core::xtypes::TypeKind typeKindFromData(const std::shared_ptr<dds::core::xtypes::DynamicData> &ddParent,
|
||||
int row);
|
||||
static const dds::core::xtypes::Member &memberFromType(const dds::core::xtypes::StructType &parent,
|
||||
dds::core::xtypes::StructType &stCopy,
|
||||
int row);
|
||||
public Q_SLOTS:
|
||||
void setTopicData(const dds::core::xtypes::DynamicData &data);
|
||||
void reset();
|
||||
private:
|
||||
QVariant dataInternal(const QModelIndex &index, int role) const;
|
||||
void cleanupModelIndexes();
|
||||
std::shared_ptr<dds::core::xtypes::DynamicData> parentFromPath(int pathIdx, const QVector<int> &path,
|
||||
const std::shared_ptr<dds::core::xtypes::DynamicData> &ddParent) const;
|
||||
static QString positionFromStruct(const dds::core::xtypes::DynamicData &data);
|
||||
static dds::core::xtypes::TypeKind childTypeKind(const std::shared_ptr<dds::core::xtypes::DynamicData> &ddParent,
|
||||
int typeRow);
|
||||
private:
|
||||
std::shared_ptr<dds::core::xtypes::DynamicData> m_data;
|
||||
struct PathInformationKey
|
||||
{
|
||||
int row = 0;
|
||||
int column = 0;
|
||||
QModelIndex parentIndex;
|
||||
PathInformationKey(int r, int c, const QModelIndex &parent)
|
||||
: row(r)
|
||||
, column(c)
|
||||
, parentIndex(parent)
|
||||
{}
|
||||
bool operator==(const PathInformationKey &o) const
|
||||
{
|
||||
if (row != o.row)
|
||||
return false;
|
||||
if (column != o.column)
|
||||
return false;
|
||||
if (parentIndex != o.parentIndex)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
friend uint qHash(const TopicDataModel::PathInformationKey &k);
|
||||
|
||||
mutable QHash<PathInformationKey, QModelIndex> m_pathInformations;
|
||||
struct IndexData
|
||||
{
|
||||
QVector<int> path;
|
||||
QModelIndex index;
|
||||
QModelIndex parent;
|
||||
QVariant displayRole[4];
|
||||
};
|
||||
NGL::INGLLogger &m_logger;
|
||||
};
|
||||
inline uint qHash(const TopicDataModel::PathInformationKey &k)
|
||||
{
|
||||
const quint64 p = reinterpret_cast<quint64>(k.parentIndex.internalPointer());
|
||||
uint ret = static_cast<uint>(k.row);
|
||||
ret ^= static_cast<uint>(k.column);
|
||||
ret ^= static_cast<uint>(p & 0xffffffff);
|
||||
ret ^= static_cast<uint>((p >> 32) & 0xffffffff);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
// | Class TopicSortModel |
|
||||
// --------------------------------------------------------------------------------
|
||||
class TopicSortModel final : public QSortFilterProxyModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
using QSortFilterProxyModel::QSortFilterProxyModel;
|
||||
|
||||
TreeItem *addData(const TopicDescriptionEx &data, TreeItem *parent);
|
||||
TopicDescriptionEx getData(const QModelIndex &idx) const;
|
||||
|
||||
void setSourceModel(QAbstractItemModel *sourceModel) override;
|
||||
protected:
|
||||
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
|
||||
private:
|
||||
TreeModel *m_sourceModel = nullptr;
|
||||
};
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
// | Class TreeItem |
|
||||
// --------------------------------------------------------------------------------
|
||||
class TreeItem final
|
||||
{
|
||||
public:
|
||||
explicit TreeItem(const TopicDescriptionEx &description, TreeItem *parent);
|
||||
~TreeItem();
|
||||
|
||||
void appendChild(TreeItem *child);
|
||||
|
||||
TreeItem *child(int row);
|
||||
int childCount() const;
|
||||
QVariant itemData(int column) const;
|
||||
int row() const;
|
||||
TreeItem *parentItem();
|
||||
TopicDescriptionEx data() const { return m_data; }
|
||||
|
||||
private:
|
||||
TopicDescriptionEx m_data;
|
||||
QVector<TreeItem *> m_childItems;
|
||||
TreeItem *m_parentItem;
|
||||
};
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------------
|
||||
// | Class TreeModel |
|
||||
// --------------------------------------------------------------------------------
|
||||
class TreeModel final : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TreeModel(QObject *parent = nullptr);
|
||||
~TreeModel();
|
||||
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const override;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
|
||||
QModelIndex parent(const QModelIndex &index) const override;
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
QMimeData *mimeData(const QModelIndexList &indexes) const override;
|
||||
QStringList mimeTypes() const override;
|
||||
Qt::DropActions supportedDragActions() const override;
|
||||
|
||||
TreeItem *addData(const TopicDescriptionEx &data, TreeItem *parent);
|
||||
TreeItem *rootItem() const { return m_rootItem; }
|
||||
TopicDescriptionEx getData(const QModelIndex &idx) const;
|
||||
void setWithTypeCode(bool bWith) { m_bWithTypeCode = bWith; }
|
||||
private:
|
||||
TreeItem *m_rootItem;
|
||||
bool m_bWithTypeCode;
|
||||
};
|
||||
Reference in new issue
Block a user