summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2018-02-06 14:42:12 +0200
committerPasi Keränen <pasi.keranen@qt.io>2018-02-06 13:24:19 +0000
commit49b3f5c873248bee4e7e94015d7472a7fa10fa1c (patch)
tree14119b72950799f61ee20feae7a771255d3374fe /src
parentbae556c9fa38ab1749a784a035943b184d4e5930 (diff)
Fix crash when removing an object that is referenced in action
This fixes the editor crash, but viewer will still crash when loading the presentation if the action is not given a proper trigger/target object manually. That's a separate issue, though. Task-number: QT3DS-617 Change-Id: I206469ac03141c02084689d0349135ef422122ac Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io> Reviewed-by: Pasi Keränen <pasi.keranen@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/Authoring/Studio/Palettes/Action/PropertyModel.cpp94
1 files changed, 51 insertions, 43 deletions
diff --git a/src/Authoring/Studio/Palettes/Action/PropertyModel.cpp b/src/Authoring/Studio/Palettes/Action/PropertyModel.cpp
index 12f68049..c3e1ccaa 100644
--- a/src/Authoring/Studio/Palettes/Action/PropertyModel.cpp
+++ b/src/Authoring/Studio/Palettes/Action/PropertyModel.cpp
@@ -64,52 +64,60 @@ void PropertyModel::setAction(const qt3dsdm::Qt3DSDMActionHandle &action)
qt3dsdm::IMetaData &metaData(*studioSystem->GetActionMetaData());
qt3dsdm::TMetaDataPropertyHandleList metaProperties;
const auto instance = bridge->GetInstance(actionInfo.m_Owner, actionInfo.m_TargetObject);
- metaData.GetMetaDataProperties(instance, metaProperties);
-
- for (const auto &metaProperty: metaProperties) {
- auto propertyMetaInfo = metaData.GetMetaDataPropertyInfo(metaProperty);
- if (propertyMetaInfo->m_IsHidden == false) {
- PropertyInfo property;
- property.m_handle = propertyMetaInfo->m_Property;
- property.m_name = QString::fromWCharArray(propertySystem->GetFormalName(instance, property.m_handle).wide_str());
- property.m_nameId = QString::fromWCharArray(propertySystem->GetName(property.m_handle).wide_str());
- property.m_type = propertyMetaInfo->GetDataType();
- property.m_additionalType = propertyMetaInfo->GetAdditionalType();
-
- const auto additionalMetaDataType = propertySystem->GetAdditionalMetaDataType(instance, property.m_handle);
- switch (additionalMetaDataType) {
- case qt3dsdm::AdditionalMetaDataType::Range: {
- const qt3dsdm::TMetaDataData &metaDataData =
- propertySystem->GetAdditionalMetaDataData(instance, property.m_handle);
- qt3dsdm::SMetaDataRange minMax = qt3dsdm::get<qt3dsdm::SMetaDataRange>(metaDataData);
- property.m_min = minMax.m_Min;
- property.m_max = minMax.m_Max;
- break;
- }
- case qt3dsdm::AdditionalMetaDataType::StringList: {
- const qt3dsdm::TMetaDataData &metaDataData =
- propertySystem->GetAdditionalMetaDataData(instance, property.m_handle);
- auto values = qt3dsdm::get<qt3dsdm::TMetaDataStringList>(metaDataData);
- QStringList possibleValues;
- for (const auto &value: values) {
- possibleValues.append(QString::fromWCharArray(value.wide_str()));
+ if (instance.Valid()) {
+ metaData.GetMetaDataProperties(instance, metaProperties);
+
+ for (const auto &metaProperty: metaProperties) {
+ auto propertyMetaInfo = metaData.GetMetaDataPropertyInfo(metaProperty);
+ if (propertyMetaInfo->m_IsHidden == false) {
+ PropertyInfo property;
+ property.m_handle = propertyMetaInfo->m_Property;
+ property.m_name = QString::fromWCharArray(
+ propertySystem->GetFormalName(instance,
+ property.m_handle).wide_str());
+ property.m_nameId = QString::fromWCharArray(
+ propertySystem->GetName(property.m_handle).wide_str());
+ property.m_type = propertyMetaInfo->GetDataType();
+ property.m_additionalType = propertyMetaInfo->GetAdditionalType();
+
+ const auto additionalMetaDataType =
+ propertySystem->GetAdditionalMetaDataType(instance, property.m_handle);
+ switch (additionalMetaDataType) {
+ case qt3dsdm::AdditionalMetaDataType::Range: {
+ const qt3dsdm::TMetaDataData &metaDataData =
+ propertySystem->GetAdditionalMetaDataData(instance,
+ property.m_handle);
+ qt3dsdm::SMetaDataRange minMax =
+ qt3dsdm::get<qt3dsdm::SMetaDataRange>(metaDataData);
+ property.m_min = minMax.m_Min;
+ property.m_max = minMax.m_Max;
+ break;
}
- property.m_possibleValues = possibleValues;
- break;
- }
- case qt3dsdm::AdditionalMetaDataType::Font: {
- std::vector<Q3DStudio::CString> fontNames;
- doc->GetProjectFonts(fontNames);
- QStringList possibleValues;
- for (const auto &fontName: fontNames) {
- possibleValues.append(fontName.toQString());
+ case qt3dsdm::AdditionalMetaDataType::StringList: {
+ const qt3dsdm::TMetaDataData &metaDataData =
+ propertySystem->GetAdditionalMetaDataData(instance,
+ property.m_handle);
+ auto values = qt3dsdm::get<qt3dsdm::TMetaDataStringList>(metaDataData);
+ QStringList possibleValues;
+ for (const auto &value: values)
+ possibleValues.append(QString::fromWCharArray(value.wide_str()));
+ property.m_possibleValues = possibleValues;
+ break;
}
- property.m_possibleValues = possibleValues;
- break;
- }
- default:;
+ case qt3dsdm::AdditionalMetaDataType::Font: {
+ std::vector<Q3DStudio::CString> fontNames;
+ doc->GetProjectFonts(fontNames);
+ QStringList possibleValues;
+ for (const auto &fontName: fontNames)
+ possibleValues.append(fontName.toQString());
+ property.m_possibleValues = possibleValues;
+ break;
+ }
+ default:
+ break;
+ }
+ m_properties.append(property);
}
- m_properties.append(property);
}
}
}