Merge remote-tracking branch 'cc9cii/leveled-list-edit'

test
Marc Zinnschlag 10 years ago
commit 0bf28a6eab

@ -222,7 +222,6 @@ namespace CSMWorld
{ ColumnId_HitSound, "Hit Sound" },
{ ColumnId_AreaSound, "Area Sound" },
{ ColumnId_BoltSound, "Bolt Sound" },
{ ColumnId_OriginalCell, "Original Cell" },
{ ColumnId_PathgridPoints, "Points" },
{ ColumnId_PathgridIndex, "Index" },
@ -267,13 +266,15 @@ namespace CSMWorld
{ ColumnId_LevelledList,"Levelled List" },
{ ColumnId_LevelledItemId,"Item ID" },
{ ColumnId_LevelledItemLevel,"Level" },
{ ColumnId_LevelledItemType, "Type" },
{ ColumnId_LevelledItemType, "Calculate all levels <= player" },
{ ColumnId_LevelledItemTypeEach, "Select a new item each instance" },
{ ColumnId_LevelledItemChanceNone, "Chance None" },
{ ColumnId_PowerList, "Powers" },
{ ColumnId_SkillImpact, "Skills" },
{ ColumnId_InfoList, "Info List" },
{ ColumnId_OriginalCell, "Original Cell" },
{ ColumnId_UseValue1, "Use value 1" },
{ ColumnId_UseValue2, "Use value 2" },

@ -257,14 +257,15 @@ namespace CSMWorld
ColumnId_LevelledItemId = 234,
ColumnId_LevelledItemLevel = 235,
ColumnId_LevelledItemType = 236,
ColumnId_LevelledItemChanceNone = 237,
ColumnId_LevelledItemTypeEach = 237,
ColumnId_LevelledItemChanceNone = 238,
ColumnId_PowerList = 238,
ColumnId_SkillImpact = 239, // impact from magic effects
ColumnId_PowerList = 239,
ColumnId_SkillImpact = 240, // impact from magic effects
ColumnId_InfoList = 240,
ColumnId_InfoList = 241,
ColumnId_OriginalCell = 241,
ColumnId_OriginalCell = 242,
// Allocated to a separate value range, so we don't get a collision should we ever need
// to extend the number of use values.

@ -21,8 +21,11 @@ CSMWorld::ModifyCommand::ModifyCommand (QAbstractItemModel& model, const QModelI
// Replace proxy with actual model
mIndex = proxy->mapToSource (index);
mModel = proxy->sourceModel();
}
setText ("Modify " + dynamic_cast<CSMWorld::IdTree*>(mModel)->nestedHeaderData (
mIndex.parent().column(), mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString());
}
else
setText ("Modify " + mModel->headerData (mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString());
}

@ -2,6 +2,7 @@
#define CSM_WOLRD_REFIDADAPTERIMP_H
#include <map>
#include <iostream>
#include <QVariant>
@ -1829,10 +1830,10 @@ namespace CSMWorld
}
// for non-tables
template <typename ESXRecordT>
class NestedListLevListRefIdAdapter : public NestedRefIdAdapterBase
{
UniversalId::Type mType;
// not implemented
@ -1876,31 +1877,27 @@ namespace CSMWorld
const Record<ESXRecordT>& record =
static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
switch (subColIndex)
{
case 0:
{
if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
record.get().mFlags == 0x01)
if (mType == UniversalId::Type_CreatureLevelledList)
{
return QString("All Levels");
}
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
record.get().mFlags == 0x01)
switch (subColIndex)
{
return QString("Each");
case 0: return QVariant(); // don't allow checkbox editor to be created
case 1: return record.get().mFlags & ESM::CreatureLevList::AllLevels;
case 2: return static_cast<int> (record.get().mChanceNone);
default:
throw std::runtime_error("Trying to access non-existing column in levelled creatues!");
}
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
record.get().mFlags == 0x02)
{
return QString("All Levels");
}
else
throw std::runtime_error("unknown leveled list type");
}
case 1: return static_cast<int> (record.get().mChanceNone);
{
switch (subColIndex)
{
case 0: return record.get().mFlags & ESM::ItemLevList::Each;
case 1: return record.get().mFlags & ESM::ItemLevList::AllLevels;
case 2: return static_cast<int> (record.get().mChanceNone);
default:
throw std::runtime_error("Trying to access non-existing column in the nested table!");
throw std::runtime_error("Trying to access non-existing column in levelled items!");
}
}
}
@ -1911,34 +1908,63 @@ namespace CSMWorld
static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
ESXRecordT leveled = record.get();
if (mType == UniversalId::Type_CreatureLevelledList)
{
switch(subColIndex)
{
case 0: return; // return without saving
case 1:
{
if(value.toBool())
{
leveled.mFlags |= ESM::CreatureLevList::AllLevels;
break;
}
else
{
leveled.mFlags &= ~ESM::CreatureLevList::AllLevels;
break;
}
}
case 2: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
default:
throw std::runtime_error("Trying to set non-existing column in levelled creatures!");
}
}
else
{
switch(subColIndex)
{
case 0:
{
if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
value.toString().toStdString() == "All Levels")
if(value.toBool())
{
leveled.mFlags = 0x01;
leveled.mFlags |= ESM::ItemLevList::Each;
break;
}
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
value.toString().toStdString() == "Each")
else
{
leveled.mFlags = 0x01;
leveled.mFlags &= ~ESM::ItemLevList::Each;
break;
}
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
value.toString().toStdString() == "All Levels")
}
case 1:
{
if(value.toBool())
{
leveled.mFlags = 0x02;
leveled.mFlags |= ESM::ItemLevList::AllLevels;
break;
}
else
return; // return without saving
{
leveled.mFlags &= ~ESM::ItemLevList::AllLevels;
break;
}
case 1: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
}
case 2: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
default:
throw std::runtime_error("Trying to access non-existing column in the nested table!");
throw std::runtime_error("Trying to set non-existing column in levelled items!");
}
}
record.setModified (leveled);
@ -1946,7 +1972,7 @@ namespace CSMWorld
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
{
return 2;
return 3;
}
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
@ -1955,6 +1981,7 @@ namespace CSMWorld
}
};
// for tables
template <typename ESXRecordT>
class NestedLevListRefIdAdapter : public NestedRefIdAdapterBase
{

@ -514,7 +514,9 @@ CSMWorld::RefIdCollection::RefIdCollection()
new NestedListLevListRefIdAdapter<ESM::ItemLevList> (UniversalId::Type_ItemLevelledList)));
mNestedAdapters.push_back (std::make_pair(&mColumns.back(), nestedListLevListMap));
mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_LevelledItemType, CSMWorld::ColumnBase::Display_String));
new RefIdColumn (Columns::ColumnId_LevelledItemTypeEach, CSMWorld::ColumnBase::Display_Boolean));
mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_LevelledItemType, CSMWorld::ColumnBase::Display_Boolean));
mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_LevelledItemChanceNone, CSMWorld::ColumnBase::Display_Integer));

@ -29,8 +29,8 @@
#include "../../model/world/record.hpp"
#include "../../model/world/tablemimedata.hpp"
#include "../../model/world/idtree.hpp"
#include "../../model/doc/document.hpp"
#include "../../model/world/commands.hpp"
#include "../../model/doc/document.hpp"
#include "recordstatusdelegate.hpp"
#include "util.hpp"
@ -444,7 +444,8 @@ void CSVWorld::EditWidget::remake(int row)
if (mTable->hasChildren(mTable->index(row, i)) &&
!(flags & CSMWorld::ColumnBase::Flag_Dialogue_List))
{
mNestedModels.push_back(new CSMWorld::NestedTableProxyModel (mTable->index(row, i), display, dynamic_cast<CSMWorld::IdTree*>(mTable)));
mNestedModels.push_back(new CSMWorld::NestedTableProxyModel (
mTable->index(row, i), display, dynamic_cast<CSMWorld::IdTree*>(mTable)));
int idColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_Id);
int typeColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_RecordType);

Loading…
Cancel
Save