Files
QtGameEngine/treemodel.cpp
2017-06-03 10:20:07 +02:00

170 lines
4.0 KiB
C++

#include "treemodel.h"
#include <QEntity>
#include <QFont>
TreeModel::TreeModel(Qt3DCore::QEntity *root, QObject *parent) :
QAbstractItemModel(parent),
m_root(root)
{
}
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const
{
if (!hasIndex(row, column, parent))
return QModelIndex();
return createIndex(row, column, (parent.isValid() ? static_cast<Qt3DCore::QEntity *>(parent.internalPointer()) : root())->childNodes().at(row));
}
QModelIndex TreeModel::parent(const QModelIndex &index) const
{
if (!index.isValid())
return QModelIndex();
auto parent = static_cast<Qt3DCore::QEntity *>(index.internalPointer())->parentNode();
if (parent == root())
return QModelIndex();
int parentRow = 0;
if(parent->parentNode())
parentRow = parent->parentNode()->childNodes().indexOf(parent);
return createIndex(parentRow, 0, parent);
}
int TreeModel::rowCount(const QModelIndex &parent) const
{
if (parent.column() > 0)
return 0;
return (parent.isValid() ? static_cast<Qt3DCore::QEntity *>(parent.internalPointer()) : root())->childNodes().count();
}
int TreeModel::columnCount(const QModelIndex &parent) const
{
if (parent.column() > 0)
return 0;
return 3; //(parent.isValid() ? static_cast<Qt3DCore::QEntity *>(parent.internalPointer()) : root())->columnCount();
}
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
switch(index.column())
{
case 0:
{
auto name = static_cast<Qt3DCore::QEntity *>(index.internalPointer())->objectName();
switch(role)
{
case Qt::DisplayRole:
if(name.isNull())
return tr("NULL");
else
return name;
case Qt::EditRole:
return name;
case Qt::FontRole:
if(name.isNull())
{
QFont font;
font.setItalic(true);
return font;
}
default:
return QVariant();
}
}
case 1:
{
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
return static_cast<Qt3DCore::QEntity *>(index.internalPointer())->metaObject()->className();
default:
return QVariant();
}
}
case 2:
{
auto enabled = static_cast<Qt3DCore::QEntity *>(index.internalPointer())->isEnabled();
switch(role)
{
case Qt::DisplayRole:
return enabled ? tr("true") : tr("false");
case Qt::EditRole:
return enabled;
default:
return QVariant();
}
}
}
return QVariant();
}
QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int role) const
{
switch(orientation)
{
case Qt::Horizontal:
switch(section) {
case 0:
{
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
return tr("Name");
default: return QVariant();
}
}
case 1:
{
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
return tr("Typ");
default: return QVariant();
}
}
case 2:
{
switch(role)
{
case Qt::DisplayRole:
case Qt::EditRole:
return tr("Enabled");
default: return QVariant();
}
}
default: return QVariant();
}
default: return QVariant();
}
return QVariant();
}
//Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
//{
// if (!index.isValid())
// return Qt::ItemFlags();
// return static_cast<Qt3DCore::QEntity *>(index.internalPointer())->flags();
//}
Qt3DCore::QEntity *TreeModel::root() const
{
return m_root;
}