diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2018-02-06 14:42:12 +0200 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@qt.io> | 2018-02-06 13:24:19 +0000 |
commit | 49b3f5c873248bee4e7e94015d7472a7fa10fa1c (patch) | |
tree | 14119b72950799f61ee20feae7a771255d3374fe /src | |
parent | bae556c9fa38ab1749a784a035943b184d4e5930 (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.cpp | 94 |
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); } } } |