1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-13 12:40:04 +00:00

record IDs are no longer handled as a special case

This commit is contained in:
Marc Zinnschlag 2012-11-29 18:56:28 +01:00
parent 4086b556d2
commit fd55c0cae2
5 changed files with 30 additions and 21 deletions

View File

@ -28,6 +28,22 @@ namespace CSMWorld
}
};
template<typename ESXRecordT>
struct StringIdColumn : public Column<ESXRecordT>
{
StringIdColumn() : Column<ESXRecordT> ("ID") {}
virtual QVariant get (const Record<ESXRecordT>& record) const
{
return record.get().mId.c_str();
}
virtual bool isEditable() const
{
return false;
}
};
}
#endif

View File

@ -12,6 +12,7 @@
CSMWorld::Data::Data()
{
mGlobals.addColumn (new StringIdColumn<ESM::Global>);
mGlobals.addColumn (new FloatValueColumn<ESM::Global>);
mModels.insert (std::make_pair (

View File

@ -6,6 +6,7 @@
#include <string>
#include <algorithm>
#include <cctype>
#include <stdexcept>
#include <QVariant>
@ -24,7 +25,10 @@ namespace CSMWorld
virtual QVariant get (const Record<ESXRecordT>& record) const = 0;
virtual void set (Record<ESXRecordT>& record, const QVariant& data) = 0;
virtual void set (Record<ESXRecordT>& record, const QVariant& data)
{
throw std::logic_error ("Column " + mTitle + " is not editable");
}
virtual bool isEditable() const = 0;
};

View File

@ -26,7 +26,7 @@ int CSMWorld::IdTable::columnCount (const QModelIndex & parent) const
if (parent.isValid())
return 0;
return 1+mIdCollection->getColumns();
return mIdCollection->getColumns();
}
QVariant CSMWorld::IdTable::data (const QModelIndex & index, int role) const
@ -34,19 +34,10 @@ QVariant CSMWorld::IdTable::data (const QModelIndex & index, int role) const
if (role!=Qt::DisplayRole && role!=Qt::EditRole)
return QVariant();
if (role==Qt::EditRole)
{
if (index.column()==0)
if (role==Qt::EditRole && !mIdCollection->isEditable (index.column()))
return QVariant();
if (!mIdCollection->isEditable (index.column()-1))
return QVariant();
}
if (index.column()==0)
return QVariant (tr (mIdCollection->getId (index.row()).c_str()));
return mIdCollection->getData (index.row(), index.column()-1);
return mIdCollection->getData (index.row(), index.column());
}
QVariant CSMWorld::IdTable::headerData (int section, Qt::Orientation orientation, int role) const
@ -57,17 +48,14 @@ QVariant CSMWorld::IdTable::headerData (int section, Qt::Orientation orientation
if (orientation==Qt::Vertical)
return QVariant();
if (section==0)
return QVariant (tr ("ID"));
return tr (mIdCollection->getTitle (section-1).c_str());
return tr (mIdCollection->getTitle (section).c_str());
}
bool CSMWorld::IdTable::setData ( const QModelIndex &index, const QVariant &value, int role)
{
if (index.column()>0 && role==Qt::EditRole)
if (mIdCollection->isEditable (index.column()) && role==Qt::EditRole)
{
mIdCollection->setData (index.row(), index.column()-1, value);
mIdCollection->setData (index.row(), index.column(), value);
emit dataChanged (index, index);
return true;
}
@ -79,7 +67,7 @@ Qt::ItemFlags CSMWorld::IdTable::flags (const QModelIndex & index) const
{
Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
if (index.column()>0)
if (mIdCollection->isEditable (index.column()))
flags |= Qt::ItemIsEditable;
return flags;

View File

@ -63,7 +63,7 @@ CSVWorld::Globals::Globals (const CSMWorld::UniversalId& id, CSMWorld::Data& dat
int columns = model->columnCount();
for (int i=1; i<columns; ++i)
for (int i=0; i<columns; ++i)
{
CommandDelegate *delegate = new CommandDelegate (undoStack, table);
table->setItemDelegateForColumn (i, delegate);