1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-07 19:32:49 +01:00
openrw/rwviewer/models/DFFFramesTreeModel.cpp

112 lines
3.1 KiB
C++
Raw Normal View History

2014-02-12 07:42:07 +01:00
#include "DFFFramesTreeModel.hpp"
2017-01-03 15:18:06 +01:00
#include <data/Clump.hpp>
2014-02-12 07:42:07 +01:00
DFFFramesTreeModel::DFFFramesTreeModel(ClumpPtr m,
2016-09-09 22:13:21 +02:00
QObject* parent)
2017-01-08 20:46:00 +01:00
: QAbstractItemModel(parent), model(m) {
2014-02-12 07:42:07 +01:00
}
2016-09-09 22:13:21 +02:00
int DFFFramesTreeModel::columnCount(const QModelIndex& parent) const {
return 1;
2014-02-12 07:42:07 +01:00
}
2016-09-09 22:13:21 +02:00
int DFFFramesTreeModel::rowCount(const QModelIndex& parent) const {
ModelFrame* f = static_cast<ModelFrame*>(parent.internalPointer());
if (f) {
return f->getChildren().size();
}
if (parent.row() == -1) {
return 1;
}
return 0;
2014-02-12 07:42:07 +01:00
}
2016-09-09 22:13:21 +02:00
QModelIndex DFFFramesTreeModel::index(int row, int column,
const QModelIndex& parent) const {
if (parent.row() == -1 && parent.column() == -1) {
return createIndex(row, column, model->getFrame().get());
2016-09-09 22:13:21 +02:00
}
ModelFrame* f = static_cast<ModelFrame*>(parent.internalPointer());
ModelFrame* p = f->getChildren()[row].get();
2016-09-09 22:13:21 +02:00
return createIndex(row, column, p);
2014-02-12 07:42:07 +01:00
}
2016-09-09 22:13:21 +02:00
QModelIndex DFFFramesTreeModel::parent(const QModelIndex& child) const {
ModelFrame* c = static_cast<ModelFrame*>(child.internalPointer());
if (c->getParent()) {
auto cp = c->getParent();
if (cp->getParent()) {
for (size_t i = 0; i < cp->getParent()->getChildren().size(); ++i) {
if (cp->getParent()->getChildren()[i].get() == c->getParent()) {
2016-09-09 22:13:21 +02:00
return createIndex(i, 0, c->getParent());
}
}
} else {
return createIndex(0, 0, cp);
}
}
return QModelIndex();
2014-02-12 07:42:07 +01:00
}
2016-09-09 22:13:21 +02:00
QVariant DFFFramesTreeModel::data(const QModelIndex& index, int role) const {
ModelFrame* f = static_cast<ModelFrame*>(index.internalPointer());
if (role == Qt::DisplayRole) {
if (index.column() == 0) {
return QString(f->getName().c_str());
}
} else if (role == Qt::CheckStateRole) {
if (index.column() == 0) {
2017-01-08 20:46:00 +01:00
return true;
2016-09-09 22:13:21 +02:00
}
}
return QVariant();
2014-02-12 07:42:07 +01:00
}
2016-09-09 22:13:21 +02:00
bool DFFFramesTreeModel::setData(const QModelIndex& index,
const QVariant& value, int role) {
if (!index.isValid()) {
return false;
}
ModelFrame* f = static_cast<ModelFrame*>(index.internalPointer());
if (role == Qt::CheckStateRole) {
2017-01-08 20:46:00 +01:00
if (index.column() == 0) {
2016-09-09 22:13:21 +02:00
if ((Qt::CheckState)value.toInt() == Qt::Checked) {
2017-01-08 20:46:00 +01:00
RW_UNIMPLEMENTED("Hiding Frames");
2016-09-09 22:13:21 +02:00
} else {
}
return true;
}
}
return false;
}
2016-09-09 22:13:21 +02:00
Qt::ItemFlags DFFFramesTreeModel::flags(const QModelIndex& index) const {
if (!index.isValid()) {
return 0;
}
2016-09-09 22:13:21 +02:00
Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
2017-01-08 20:46:00 +01:00
if (index.column() == 0) {
2016-09-09 22:13:21 +02:00
flags |= Qt::ItemIsUserCheckable;
}
2016-09-09 22:13:21 +02:00
return flags;
}
2016-09-09 22:13:21 +02:00
QVariant DFFFramesTreeModel::headerData(int section,
Qt::Orientation orientation,
int role) const {
if (orientation == Qt::Horizontal) {
if (role == Qt::DisplayRole) {
return "Name";
}
}
return QVariant();
2014-02-12 07:42:07 +01:00
}