Convert clothing/armour part reference type column in the nested tables to use enum delegates.

test
cc9cii 10 years ago
parent e00d7f72ac
commit e241fb0104

@ -78,6 +78,7 @@ bool CSMWorld::ColumnBase::isId (Display display)
Display_SkillImpact, Display_SkillImpact,
Display_EffectRange, Display_EffectRange,
Display_EffectId, Display_EffectId,
Display_PartRefType,
Display_None Display_None
}; };

@ -112,6 +112,7 @@ namespace CSMWorld
Display_SkillImpact, Display_SkillImpact,
Display_EffectRange, Display_EffectRange,
Display_EffectId, Display_EffectId,
Display_PartRefType,
//top level columns that nest other columns //top level columns that nest other columns
Display_NestedHeader Display_NestedHeader

@ -476,6 +476,17 @@ namespace
"SummonBonewolf", "SummonCreature04", "SummonCreature05", 0 "SummonBonewolf", "SummonCreature04", "SummonCreature05", 0
}; };
// see ESM::PartReferenceType in <component/esm/loadarmo.hpp>
static const char *sPartRefType[] =
{
"Head", "Hair", "Neck", "Cuirass", "Groin",
"Skirt", "Right Hand", "Left Hand", "Right Wrist", "Left Wrist",
"Shield", "Right Forearm", "Left Forearm", "Right Upperarm", "Left Upperarm",
"Right Foot", "Left Foot", "Right Ankle", "Left Ankle", "Right Knee",
"Left Knee", "Right Leg", "Left Leg", "Right Pauldron", "Left Pauldron",
"Weapon", "Tail", 0
};
const char **getEnumNames (CSMWorld::Columns::ColumnId column) const char **getEnumNames (CSMWorld::Columns::ColumnId column)
{ {
switch (column) switch (column)
@ -501,6 +512,7 @@ namespace
case CSMWorld::Columns::ColumnId_SkillImpact: return sSkills; case CSMWorld::Columns::ColumnId_SkillImpact: return sSkills;
case CSMWorld::Columns::ColumnId_EffectRange: return sEffectRange; case CSMWorld::Columns::ColumnId_EffectRange: return sEffectRange;
case CSMWorld::Columns::ColumnId_EffectId: return sEffectId; case CSMWorld::Columns::ColumnId_EffectId: return sEffectId;
case CSMWorld::Columns::ColumnId_PartRefType: return sPartRefType;
default: return 0; default: return 0;
} }

@ -1665,15 +1665,6 @@ namespace CSMWorld
} }
}; };
static const char *sPartRefs[ESM::PRT_Count] =
{
"Head", "Hair", "Neck", "Cuirass", "Groin",
"Skirt", "Right Hand", "Left Hand", "Right Wrist", "Left Wrist",
"Shield", "Right Forearm", "Left Forearm", "Right Upperarm", "Left Upperarm",
"Right Foot", "Left Foot", "Right Ankle", "Left Ankle", "Right Knee",
"Left Knee", "Right Leg", "Left Leg", "Right Pauldron", "Left Pauldron",
"Weapon", "Tail"
};
template <typename ESXRecordT> template <typename ESXRecordT>
class BodyPartRefIdAdapter : public NestedRefIdAdapterBase class BodyPartRefIdAdapter : public NestedRefIdAdapterBase
@ -1767,7 +1758,13 @@ namespace CSMWorld
switch (subColIndex) switch (subColIndex)
{ {
case 0: return QString(sPartRefs[content.mPart]); case 0:
{
if (content.mPart >=0 && content.mPart < ESM::PRT_Count)
return content.mPart;
else
throw std::runtime_error("Part Reference Type unexpected value");
}
case 1: return QString(content.mMale.c_str()); case 1: return QString(content.mMale.c_str());
case 2: return QString(content.mFemale.c_str()); case 2: return QString(content.mFemale.c_str());
default: default:
@ -1788,24 +1785,7 @@ namespace CSMWorld
switch(subColIndex) switch(subColIndex)
{ {
case 0: case 0: list.at(subRowIndex).mPart = static_cast<unsigned char>(value.toInt()); break;
{
std::string part = value.toString().toStdString();
bool found = false;
for (unsigned int i = 0; i < ESM::PRT_Count; ++i)
{
if (part == sPartRefs[i])
{
list.at(subRowIndex).mPart = static_cast<unsigned char>(i);
found = true;
break;
}
}
if (!found)
return; // return without saving
else
break;
}
case 1: list.at(subRowIndex).mMale = value.toString().toStdString(); break; case 1: list.at(subRowIndex).mMale = value.toString().toStdString(); break;
case 2: list.at(subRowIndex).mFemale = value.toString().toStdString(); break; case 2: list.at(subRowIndex).mFemale = value.toString().toStdString(); break;
default: default:

@ -480,7 +480,7 @@ CSMWorld::RefIdCollection::RefIdCollection()
new BodyPartRefIdAdapter<ESM::Clothing> (UniversalId::Type_Clothing))); new BodyPartRefIdAdapter<ESM::Clothing> (UniversalId::Type_Clothing)));
mNestedAdapters.push_back (std::make_pair(&mColumns.back(), partMap)); mNestedAdapters.push_back (std::make_pair(&mColumns.back(), partMap));
mColumns.back().addColumn( mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_PartRefType, CSMWorld::ColumnBase::Display_String)); new RefIdColumn (Columns::ColumnId_PartRefType, CSMWorld::ColumnBase::Display_PartRefType));
mColumns.back().addColumn( mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_PartRefMale, CSMWorld::ColumnBase::Display_String)); new RefIdColumn (Columns::ColumnId_PartRefMale, CSMWorld::ColumnBase::Display_String));
mColumns.back().addColumn( mColumns.back().addColumn(

@ -87,7 +87,8 @@ CSVDoc::ViewManager::ViewManager (CSMDoc::DocumentManager& documentManager)
{ CSMWorld::ColumnBase::Display_School, CSMWorld::Columns::ColumnId_School, true }, { CSMWorld::ColumnBase::Display_School, CSMWorld::Columns::ColumnId_School, true },
{ CSMWorld::ColumnBase::Display_SkillImpact, CSMWorld::Columns::ColumnId_SkillImpact, true }, { CSMWorld::ColumnBase::Display_SkillImpact, CSMWorld::Columns::ColumnId_SkillImpact, true },
{ CSMWorld::ColumnBase::Display_EffectRange, CSMWorld::Columns::ColumnId_EffectRange, false }, { CSMWorld::ColumnBase::Display_EffectRange, CSMWorld::Columns::ColumnId_EffectRange, false },
{ CSMWorld::ColumnBase::Display_EffectId, CSMWorld::Columns::ColumnId_EffectId, false } { CSMWorld::ColumnBase::Display_EffectId, CSMWorld::Columns::ColumnId_EffectId, false },
{ CSMWorld::ColumnBase::Display_PartRefType, CSMWorld::Columns::ColumnId_PartRefType, false }
}; };
for (std::size_t i=0; i<sizeof (sMapping)/sizeof (Mapping); ++i) for (std::size_t i=0; i<sizeof (sMapping)/sizeof (Mapping); ++i)

Loading…
Cancel
Save