You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.8 KiB
C++
111 lines
3.8 KiB
C++
#include "nestedinfocollection.hpp"
|
|
|
|
#include "nestedcoladapterimp.hpp"
|
|
|
|
namespace CSMWorld
|
|
{
|
|
NestedInfoCollection::NestedInfoCollection ()
|
|
{}
|
|
|
|
NestedInfoCollection::~NestedInfoCollection()
|
|
{
|
|
for (std::map<const ColumnBase *, NestedColumnAdapter<Info>* >::iterator
|
|
iter (mAdapters.begin()); iter!=mAdapters.end(); ++iter)
|
|
{
|
|
delete (*iter).second;
|
|
}
|
|
}
|
|
|
|
void NestedInfoCollection::addAdapter(std::pair<const ColumnBase*,
|
|
NestedColumnAdapter<Info>* > adapter)
|
|
{
|
|
mAdapters.insert(adapter);
|
|
}
|
|
|
|
const NestedColumnAdapter<Info>& NestedInfoCollection::getAdapter(const ColumnBase &column) const
|
|
{
|
|
std::map<const ColumnBase *, NestedColumnAdapter<Info>* >::const_iterator iter =
|
|
mAdapters.find (&column);
|
|
|
|
if (iter==mAdapters.end())
|
|
throw std::logic_error("No such column in the nestedidadapter");
|
|
|
|
return *iter->second;
|
|
}
|
|
|
|
void NestedInfoCollection::addNestedRow(int row, int column, int position)
|
|
{
|
|
Record<Info> record;
|
|
record.assign(Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
|
|
getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).addRow(record, position);
|
|
|
|
Collection<Info, IdAccessor<Info> >::setRecord(row, record);
|
|
}
|
|
|
|
void NestedInfoCollection::removeNestedRows(int row, int column, int subRow)
|
|
{
|
|
Record<Info> record;
|
|
record.assign(Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
|
|
getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).removeRow(record, subRow);
|
|
|
|
Collection<Info, IdAccessor<Info> >::setRecord(row, record);
|
|
}
|
|
|
|
QVariant NestedInfoCollection::getNestedData (int row,
|
|
int column, int subRow, int subColumn) const
|
|
{
|
|
return getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).getData(
|
|
Collection<Info, IdAccessor<Info> >::getRecord(row), subRow, subColumn);
|
|
}
|
|
|
|
void NestedInfoCollection::setNestedData(int row,
|
|
int column, const QVariant& data, int subRow, int subColumn)
|
|
{
|
|
Record<Info> record;
|
|
record.assign(Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
|
|
getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).setData(
|
|
record, data, subRow, subColumn);
|
|
|
|
Collection<Info, IdAccessor<Info> >::setRecord(row, record);
|
|
}
|
|
|
|
CSMWorld::NestedTableWrapperBase* NestedInfoCollection::nestedTable(int row,
|
|
int column) const
|
|
{
|
|
return getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).table(
|
|
Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
}
|
|
|
|
void NestedInfoCollection::setNestedTable(int row,
|
|
int column, const CSMWorld::NestedTableWrapperBase& nestedTable)
|
|
{
|
|
Record<Info> record;
|
|
record.assign(Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
|
|
getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).setTable(
|
|
record, nestedTable);
|
|
|
|
Collection<Info, IdAccessor<Info> >::setRecord(row, record);
|
|
}
|
|
|
|
int NestedInfoCollection::getNestedRowsCount(int row, int column) const
|
|
{
|
|
return getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).getRowsCount(
|
|
Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
}
|
|
|
|
int NestedInfoCollection::getNestedColumnsCount(int row, int column) const
|
|
{
|
|
return getAdapter(Collection<Info, IdAccessor<Info> >::getColumn(column)).getColumnsCount(
|
|
Collection<Info, IdAccessor<Info> >::getRecord(row));
|
|
}
|
|
|
|
CSMWorld::NestableColumn *NestedInfoCollection::getNestableColumn(int column)
|
|
{
|
|
return Collection<Info, IdAccessor<Info> >::getNestableColumn(column);
|
|
}
|
|
}
|