mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-14 01:19:59 +00:00
Merge branch 'ref_id_universal_id' into 'master'
Fix RefId based UniversalId (#7747) Closes #7747 See merge request OpenMW/openmw!3702
This commit is contained in:
commit
8a91e7057f
@ -188,6 +188,8 @@ namespace
|
||||
{
|
||||
mStream << ": " << value;
|
||||
}
|
||||
|
||||
void operator()(const ESM::RefId& value) const { mStream << ": " << value.toString(); }
|
||||
};
|
||||
|
||||
struct GetTypeData
|
||||
@ -327,6 +329,12 @@ CSMWorld::UniversalId::UniversalId(Type type, ESM::RefId id)
|
||||
throw std::logic_error("invalid RefId argument UniversalId type: " + std::to_string(type));
|
||||
}
|
||||
|
||||
CSMWorld::UniversalId::UniversalId(Type type, const UniversalId& id)
|
||||
: mType(type)
|
||||
, mValue(id.mValue)
|
||||
{
|
||||
}
|
||||
|
||||
CSMWorld::UniversalId::UniversalId(Type type, int index)
|
||||
: mType(type)
|
||||
, mValue(index)
|
||||
@ -361,6 +369,10 @@ const std::string& CSMWorld::UniversalId::getId() const
|
||||
if (const std::string* result = std::get_if<std::string>(&mValue))
|
||||
return *result;
|
||||
|
||||
if (const ESM::RefId* refId = std::get_if<ESM::RefId>(&mValue))
|
||||
if (const ESM::StringRefId* result = refId->getIf<ESM::StringRefId>())
|
||||
return result->getValue();
|
||||
|
||||
throw std::logic_error("invalid access to ID of " + ::toString(getArgumentType()) + " UniversalId");
|
||||
}
|
||||
|
||||
|
@ -159,6 +159,8 @@ namespace CSMWorld
|
||||
UniversalId(Type type, int index);
|
||||
///< Using a type for a non-index-argument UniversalId will throw an exception.
|
||||
|
||||
UniversalId(Type type, const UniversalId& id);
|
||||
|
||||
Class getClass() const;
|
||||
|
||||
ArgumentType getArgumentType() const;
|
||||
|
@ -629,7 +629,7 @@ void CSVDoc::View::addSubView(const CSMWorld::UniversalId& id, const std::string
|
||||
if (isReferenceable)
|
||||
{
|
||||
view = mSubViewFactory.makeSubView(
|
||||
CSMWorld::UniversalId(CSMWorld::UniversalId::Type_Referenceable, id.getId()), *mDocument);
|
||||
CSMWorld::UniversalId(CSMWorld::UniversalId::Type_Referenceable, id), *mDocument);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -694,10 +694,10 @@ void CSVWorld::Table::previewRecord()
|
||||
|
||||
if (selectedRows.size() == 1)
|
||||
{
|
||||
std::string id = getUniversalId(selectedRows.begin()->row()).getId();
|
||||
CSMWorld::UniversalId id = getUniversalId(selectedRows.begin()->row());
|
||||
|
||||
QModelIndex index
|
||||
= mModel->getModelIndex(id, mModel->findColumnIndex(CSMWorld::Columns::ColumnId_Modification));
|
||||
= mModel->getModelIndex(id.getId(), mModel->findColumnIndex(CSMWorld::Columns::ColumnId_Modification));
|
||||
|
||||
if (mModel->data(index) != CSMWorld::RecordBase::State_Deleted)
|
||||
emit editRequest(CSMWorld::UniversalId(CSMWorld::UniversalId::Type_Preview, id), "");
|
||||
|
@ -177,11 +177,11 @@ namespace CSMWorld
|
||||
UniversalId::ArgumentType_Id, "Instance", "Instance: f", ":./instance.png" },
|
||||
|
||||
Params{ UniversalId(UniversalId::Type_Reference, ESM::RefId::stringRefId("g")), UniversalId::Type_Reference,
|
||||
UniversalId::Class_SubRecord, UniversalId::ArgumentType_RefId, "Instance", "Instance: \"g\"",
|
||||
UniversalId::Class_SubRecord, UniversalId::ArgumentType_RefId, "Instance", "Instance: g",
|
||||
":./instance.png" },
|
||||
Params{ UniversalId(UniversalId::Type_Reference, ESM::RefId::index(ESM::REC_SKIL, 42)),
|
||||
UniversalId::Type_Reference, UniversalId::Class_SubRecord, UniversalId::ArgumentType_RefId, "Instance",
|
||||
"Instance: Index:SKIL:0x2a", ":./instance.png" },
|
||||
"Instance: SKIL:0x2a", ":./instance.png" },
|
||||
};
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(ValidParams, CSMWorldUniversalIdValidPerTypeTest, ValuesIn(validParams));
|
||||
|
Loading…
x
Reference in New Issue
Block a user