diff --git a/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreColor3f.h b/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreColor3f.h index 801b2b4d0f..f239ddc308 100644 --- a/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreColor3f.h +++ b/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreColor3f.h @@ -66,7 +66,7 @@ public: PdmValueFieldSpecialization< cvf::Color3f >::setFromVariant(variantValue, value); } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return PdmValueFieldSpecialization< cvf::Color3f >::isEqual(variantValue, variantValue2); } diff --git a/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreMat4d.h b/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreMat4d.h index 6057fbe528..8a7664ca5a 100644 --- a/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreMat4d.h +++ b/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreMat4d.h @@ -64,7 +64,7 @@ public: PdmValueFieldSpecialization< cvf::Mat4d >::setFromVariant(variantValue, value); } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return PdmValueFieldSpecialization< cvf::Mat4d >::isEqual(variantValue, variantValue2); } diff --git a/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreVec3d.h b/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreVec3d.h index 2efd187fce..ce4db6748f 100644 --- a/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreVec3d.h +++ b/Fwk/AppFwk/cafPdmCvf/cafPdmUiCoreVec3d.h @@ -65,7 +65,7 @@ public: PdmValueFieldSpecialization< cvf::Vec3d >::setFromVariant(variantValue, value); } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return PdmValueFieldSpecialization< cvf::Vec3d >::isEqual(variantValue, variantValue2); } diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmFieldTypeSpecializations.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmFieldTypeSpecializations.h index 2587c68459..cabdfabf96 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmFieldTypeSpecializations.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmFieldTypeSpecializations.h @@ -37,7 +37,7 @@ public: value.setRawPtr(variantValue.value >().rawPtr()); } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return variantValue.value >() == variantValue2.value >() ; } @@ -84,7 +84,7 @@ public: } } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return variantValue.value() == variantValue2.value(); } @@ -121,7 +121,7 @@ public: return PdmValueFieldSpecialization< std::vector >::setFromVariant(variantValue, value); } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return variantValue.value() == variantValue2.value(); } @@ -174,7 +174,7 @@ public: #endif } - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return variantValue == variantValue2; } diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl index 04daa76452..a29cfbf750 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafInternalPdmUiFieldCapability.inl @@ -116,7 +116,11 @@ QVariant caf::PdmFieldUiCap::uiValue() const PdmOptionItemInfo::findValues(m_optionEntryCache, uiBasedQVariant, indexesToFoundOptions); if (uiBasedQVariant.type() == QVariant::List) { - if (indexesToFoundOptions.size() == static_cast(uiBasedQVariant.toList().size())) + if (isAutoAddingOptionFromValue() && indexesToFoundOptions.size() != static_cast(uiBasedQVariant.toList().size())) + { + assert(false); // Did not find all the field values among the options available, even though we should. The "core" data type in the field is probably not supported by QVariant::toString() + } + else { QList returnList; for (size_t i = 0; i < indexesToFoundOptions.size(); ++i) @@ -125,7 +129,6 @@ QVariant caf::PdmFieldUiCap::uiValue() const } return QVariant(returnList); } - assert(false); // Did not find all the field values among the options available. } else { @@ -175,7 +178,8 @@ QList caf::PdmFieldUiCap::valueOptions(bool* useOp bool foundAllFieldValues = PdmOptionItemInfo::findValues(m_optionEntryCache, uiBasedQVariant, foundIndexes); // If not all are found, we have to add the missing to the list, to be able to show it - + // This will only work if the field data type (or elemnt type for containers) is supported by QVariant.toString(). Custom classes don't + if (isAutoAddingOptionFromValue() && !foundAllFieldValues) { if (uiBasedQVariant.type() != QVariant::List) // Single value field @@ -193,7 +197,10 @@ QList caf::PdmFieldUiCap::valueOptions(bool* useOp bool isFound = false; for (unsigned int opIdx = 0; opIdx < static_cast(m_optionEntryCache.size()); ++opIdx) { - if (valuesSelectedInField[i] == m_optionEntryCache[opIdx].value) isFound = true; + if(PdmUiFieldSpecialization::isDataElementEqual(valuesSelectedInField[i], m_optionEntryCache[opIdx].value)) + { + isFound = true; + } } if (!isFound && !valuesSelectedInField[i].toString().isEmpty()) diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h index 2d377d7f48..c195c2ab23 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.h @@ -27,7 +27,7 @@ public: virtual QVariant toUiBasedQVariant() const { return QVariant(); } void notifyFieldChanged(const QVariant& oldUiBasedQVariant, const QVariant& newUiBasedQVariant); - bool isAutoAddingOptionFromValue() { return m_isAutoAddingOptionFromValue; } + bool isAutoAddingOptionFromValue() const { return m_isAutoAddingOptionFromValue; } void setAutoAddingOptionFromValue(bool isAddingValue) { m_isAutoAddingOptionFromValue = isAddingValue;} private: PdmFieldHandle* m_owner; diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldSpecialization.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldSpecialization.h index 99c38d331b..6351b5f50c 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldSpecialization.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldSpecialization.h @@ -43,7 +43,7 @@ public: /// The == operator will normally work, but does not support custom types in the QVariant /// See http://qt-project.org/doc/qt-4.8/qvariant.html#operator-eq-eq-64 /// This is needed for the lookup regarding OptionValues - static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) + static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2) { return variantValue == variantValue2; } diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiItem.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiItem.h index 642d0e41eb..d2812e36ae 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiItem.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiItem.h @@ -128,7 +128,7 @@ bool PdmOptionItemInfo::findValues(const QList& optionList, Q { for (unsigned int opIdx = 0; opIdx < static_cast(optionList.size()); ++opIdx) { - if (PdmUiFieldSpecialization::isEqual(valuesSelectedInField[i], optionList[opIdx].value)) + if (PdmUiFieldSpecialization::isDataElementEqual(valuesSelectedInField[i], optionList[opIdx].value)) { foundIndexes.push_back(opIdx); } @@ -142,7 +142,7 @@ bool PdmOptionItemInfo::findValues(const QList& optionList, Q { for (unsigned int opIdx = 0; opIdx < static_cast(optionList.size()); ++opIdx) { - if (PdmUiFieldSpecialization::isEqual(optionList[opIdx].value, fieldValue)) + if (PdmUiFieldSpecialization::isDataElementEqual(optionList[opIdx].value, fieldValue)) { foundIndexes.push_back(opIdx); break;