mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-21 06:53:53 +00:00
Actually using new nestedmodel
This commit is contained in:
parent
1fb18873cb
commit
b63f2f4cd5
4 changed files with 81 additions and 9 deletions
|
@ -1,5 +1,6 @@
|
|||
#include "nestedtablemodel.hpp"
|
||||
|
||||
#include <cassert>
|
||||
#include "./idtable.hpp"
|
||||
|
||||
CSMWorld::NestedTableModel::NestedTableModel(const QModelIndex& parent,
|
||||
|
@ -32,3 +33,46 @@ QModelIndex CSMWorld::NestedTableModel::mapToSource(const QModelIndex& proxyInde
|
|||
const QModelIndex& parent = dynamic_cast<CSMWorld::IdTable*>(sourceModel())->getModelIndex (mId, mParentColumn);
|
||||
return sourceModel()->index(proxyIndex.row(), proxyIndex.column(), parent);
|
||||
}
|
||||
|
||||
int CSMWorld::NestedTableModel::rowCount(const QModelIndex& index) const
|
||||
{
|
||||
assert (!index.isValid());
|
||||
|
||||
CSMWorld::IdTable* table = dynamic_cast<CSMWorld::IdTable*>(sourceModel());
|
||||
|
||||
return table->rowCount(table->getModelIndex(mId, mParentColumn));
|
||||
}
|
||||
|
||||
int CSMWorld::NestedTableModel::columnCount(const QModelIndex& parent) const
|
||||
{
|
||||
assert (!parent.isValid());
|
||||
|
||||
CSMWorld::IdTable* table = dynamic_cast<CSMWorld::IdTable*>(sourceModel());
|
||||
|
||||
return table->columnCount(table->getModelIndex(mId, mParentColumn));
|
||||
}
|
||||
|
||||
QModelIndex CSMWorld::NestedTableModel::index(int row, int column, const QModelIndex& parent) const
|
||||
{
|
||||
assert (!parent.isValid());
|
||||
|
||||
CSMWorld::IdTable* table = dynamic_cast<CSMWorld::IdTable*>(sourceModel());
|
||||
|
||||
unsigned rows = table->rowCount(parent);
|
||||
usigned columns = table->columnCount(parent);
|
||||
|
||||
if (row < 0 ||
|
||||
row >= rows ||
|
||||
column < 0 ||
|
||||
column >= columns)
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
return createIndex(row, column);
|
||||
}
|
||||
|
||||
QModelIndex CSMWorld::NestedTableModel::parent(const QModelIndex& index) const
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
#ifndef CSM_WOLRD_NESTEDTABLEMODEL_H
|
||||
#define CSM_WOLRD_NESTEDTABLEMODEL_H
|
||||
|
||||
|
@ -36,6 +35,14 @@ namespace CSMWorld
|
|||
virtual QModelIndex mapFromSource(const QModelIndex& sourceIndex) const;
|
||||
|
||||
virtual QModelIndex mapToSource(const QModelIndex& proxyIndex) const;
|
||||
|
||||
virtual int rowCount(const QModelIndex& parent) const;
|
||||
|
||||
virtual int columnCount(const QModelIndex& parent) const;
|
||||
|
||||
virtual QModelIndex index(int row, int column, const QModelIndex& parent) const;
|
||||
|
||||
virtual QModelIndex parent(const QModelIndex& index) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <QTableView>
|
||||
#include <QDebug>
|
||||
|
||||
#include "../../model/world/nestedtablemodel.hpp"
|
||||
#include "../../model/world/columnbase.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/world/columns.hpp"
|
||||
|
@ -324,6 +325,14 @@ CSVWorld::DialogueDelegateDispatcher::~DialogueDelegateDispatcher()
|
|||
=============================================================EditWidget=====================================================
|
||||
*/
|
||||
|
||||
CSVWorld::EditWidget::~EditWidget()
|
||||
{
|
||||
for (unsigned i = 0; i < mNestedModels.size(); ++i)
|
||||
{
|
||||
delete mNestedModels[i];
|
||||
}
|
||||
}
|
||||
|
||||
CSVWorld::EditWidget::EditWidget(QWidget *parent, int row, CSMWorld::IdTable* table, QUndoStack& undoStack, bool createAndDelete) :
|
||||
mDispatcher(this, table, undoStack),
|
||||
QScrollArea(parent),
|
||||
|
@ -340,6 +349,11 @@ mTable(table)
|
|||
|
||||
void CSVWorld::EditWidget::remake(int row)
|
||||
{
|
||||
for (unsigned i = 0; i < mNestedModels.size(); ++i)
|
||||
{
|
||||
delete mNestedModels[i];
|
||||
}
|
||||
|
||||
if (mMainWidget)
|
||||
{
|
||||
delete mMainWidget;
|
||||
|
@ -379,7 +393,7 @@ void CSVWorld::EditWidget::remake(int row)
|
|||
int locked = 0;
|
||||
const int columns = mTable->columnCount();
|
||||
|
||||
for (int i=0; i<columns; ++i)
|
||||
for (unsigned i=0; i<columns; ++i)
|
||||
{
|
||||
int flags = mTable->headerData (i, Qt::Horizontal, CSMWorld::ColumnBase::Role_Flags).toInt();
|
||||
|
||||
|
@ -390,9 +404,12 @@ void CSVWorld::EditWidget::remake(int row)
|
|||
|
||||
if (mTable->hasChildren(mTable->index(row, i)))
|
||||
{
|
||||
mNestedModels.push_back(new CSMWorld::NestedTableModel (mTable->index(row, i), display, mTable));
|
||||
|
||||
QTableView* table = new QTableView();
|
||||
table->setModel(mTable);
|
||||
table->setRootIndex(mTable->index(row, i));
|
||||
|
||||
table->setModel(*(mNestedModels.rbegin()));
|
||||
|
||||
tablesLayout->addWidget(table);
|
||||
} else
|
||||
{
|
||||
|
|
|
@ -21,6 +21,7 @@ class QVBoxLayout;
|
|||
namespace CSMWorld
|
||||
{
|
||||
class IdTable;
|
||||
class NestedTableModel;
|
||||
}
|
||||
|
||||
namespace CSMDoc
|
||||
|
@ -169,12 +170,15 @@ namespace CSVWorld
|
|||
QWidget* mMainWidget;
|
||||
CSMWorld::IdTable* mTable;
|
||||
QUndoStack& mUndoStack;
|
||||
std::vector<CSMWorld::NestedTableModel*> mNestedModels; //Plain, raw C pointers, deleted in the dtor
|
||||
|
||||
public:
|
||||
|
||||
EditWidget (QWidget *parent, int row, CSMWorld::IdTable* table,
|
||||
QUndoStack& undoStack, bool createAndDelete = false);
|
||||
|
||||
~EditWidget();
|
||||
|
||||
void remake(int row);
|
||||
|
||||
signals:
|
||||
|
|
Loading…
Reference in a new issue