Fixed levelled lists flags - now bit masks represented by tick boxes in the dialogue subview.

test
cc9cii 10 years ago
parent 7f2bd01f79
commit b04aeb6aad

@ -222,7 +222,6 @@ namespace CSMWorld
{ ColumnId_HitSound, "Hit Sound" }, { ColumnId_HitSound, "Hit Sound" },
{ ColumnId_AreaSound, "Area Sound" }, { ColumnId_AreaSound, "Area Sound" },
{ ColumnId_BoltSound, "Bolt Sound" }, { ColumnId_BoltSound, "Bolt Sound" },
{ ColumnId_OriginalCell, "Original Cell" },
{ ColumnId_PathgridPoints, "Points" }, { ColumnId_PathgridPoints, "Points" },
{ ColumnId_PathgridIndex, "Index" }, { ColumnId_PathgridIndex, "Index" },
@ -267,13 +266,15 @@ namespace CSMWorld
{ ColumnId_LevelledList,"Levelled List" }, { ColumnId_LevelledList,"Levelled List" },
{ ColumnId_LevelledItemId,"Item ID" }, { ColumnId_LevelledItemId,"Item ID" },
{ ColumnId_LevelledItemLevel,"Level" }, { 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_LevelledItemChanceNone, "Chance None" },
{ ColumnId_PowerList, "Powers" }, { ColumnId_PowerList, "Powers" },
{ ColumnId_SkillImpact, "Skills" }, { ColumnId_SkillImpact, "Skills" },
{ ColumnId_InfoList, "Info List" }, { ColumnId_InfoList, "Info List" },
{ ColumnId_OriginalCell, "Original Cell" },
{ ColumnId_UseValue1, "Use value 1" }, { ColumnId_UseValue1, "Use value 1" },
{ ColumnId_UseValue2, "Use value 2" }, { ColumnId_UseValue2, "Use value 2" },

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

@ -21,9 +21,12 @@ CSMWorld::ModifyCommand::ModifyCommand (QAbstractItemModel& model, const QModelI
// Replace proxy with actual model // Replace proxy with actual model
mIndex = proxy->mapToSource (index); mIndex = proxy->mapToSource (index);
mModel = proxy->sourceModel(); mModel = proxy->sourceModel();
}
setText ("Modify " + mModel->headerData (mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString()); 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());
} }
void CSMWorld::ModifyCommand::redo() void CSMWorld::ModifyCommand::redo()

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

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

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

Loading…
Cancel
Save