Actually using new nestedmodel

pull/553/head
Marek Kochanowicz 11 years ago
parent 1fb18873cb
commit b63f2f4cd5

@ -1,10 +1,11 @@
#include "nestedtablemodel.hpp"
#include <cassert>
#include "./idtable.hpp"
CSMWorld::NestedTableModel::NestedTableModel(const QModelIndex& parent,
ColumnBase::Display columnId,
CSMWorld::IdTable* parentModel)
CSMWorld::IdTable* parentModel)
: mParentColumn(parent.column())
{
const int parentRow = parent.row();
@ -20,7 +21,7 @@ QModelIndex CSMWorld::NestedTableModel::mapFromSource(const QModelIndex& sourceI
{
return createIndex(sourceIndex.row(), sourceIndex.column());
}
else
else
{
return QModelIndex();
}
@ -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
@ -26,16 +25,24 @@ namespace CSMWorld
std::string mId;
std::vector<std::string> mHeaderTitle;
std::vector<ColumnBase::Display> mHeaderDisplay;
public:
NestedTableModel(const QModelIndex& parent,
ColumnBase::Display displayType,
IdTable* parentModel);
//parent is the parent of columns to work with. Columnid provides information about the column
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…
Cancel
Save