From 49b3f5c873248bee4e7e94015d7472a7fa10fa1c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 6 Feb 2018 14:42:12 +0200 Subject: Fix crash when removing an object that is referenced in action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Antti Määttä Reviewed-by: Pasi Keränen --- .../Studio/Palettes/Action/PropertyModel.cpp | 94 ++++++++++++---------- 1 file changed, 51 insertions(+), 43 deletions(-) (limited to 'src') 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(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(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(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 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(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 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); } } } -- cgit v1.2.3