mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-09 23:16:00 -06:00
Caf: Fixed issues regarding custom type in fields with multi selection
This commit is contained in:
parent
ce2112fbc6
commit
214f013499
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
value.setRawPtr(variantValue.value<PdmPointer<PdmObjectHandle> >().rawPtr());
|
||||
}
|
||||
|
||||
static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2)
|
||||
static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2)
|
||||
{
|
||||
return variantValue.value<PdmPointer<PdmObjectHandle> >() == variantValue2.value<PdmPointer<PdmObjectHandle> >() ;
|
||||
}
|
||||
@ -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<T>() == variantValue2.value<T>();
|
||||
}
|
||||
@ -121,7 +121,7 @@ public:
|
||||
return PdmValueFieldSpecialization< std::vector<T> >::setFromVariant(variantValue, value);
|
||||
}
|
||||
|
||||
static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2)
|
||||
static bool isDataElementEqual(const QVariant& variantValue, const QVariant& variantValue2)
|
||||
{
|
||||
return variantValue.value<T>() == variantValue2.value<T>();
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
@ -116,7 +116,11 @@ QVariant caf::PdmFieldUiCap<FieldType>::uiValue() const
|
||||
PdmOptionItemInfo::findValues<typename FieldType::FieldDataType>(m_optionEntryCache, uiBasedQVariant, indexesToFoundOptions);
|
||||
if (uiBasedQVariant.type() == QVariant::List)
|
||||
{
|
||||
if (indexesToFoundOptions.size() == static_cast<size_t>(uiBasedQVariant.toList().size()))
|
||||
if (isAutoAddingOptionFromValue() && indexesToFoundOptions.size() != static_cast<size_t>(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<QVariant> returnList;
|
||||
for (size_t i = 0; i < indexesToFoundOptions.size(); ++i)
|
||||
@ -125,7 +129,6 @@ QVariant caf::PdmFieldUiCap<FieldType>::uiValue() const
|
||||
}
|
||||
return QVariant(returnList);
|
||||
}
|
||||
assert(false); // Did not find all the field values among the options available.
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -175,7 +178,8 @@ QList<PdmOptionItemInfo> caf::PdmFieldUiCap<FieldType>::valueOptions(bool* useOp
|
||||
bool foundAllFieldValues = PdmOptionItemInfo::findValues<typename FieldType::FieldDataType>(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<PdmOptionItemInfo> caf::PdmFieldUiCap<FieldType>::valueOptions(bool* useOp
|
||||
bool isFound = false;
|
||||
for (unsigned int opIdx = 0; opIdx < static_cast<unsigned int>(m_optionEntryCache.size()); ++opIdx)
|
||||
{
|
||||
if (valuesSelectedInField[i] == m_optionEntryCache[opIdx].value) isFound = true;
|
||||
if(PdmUiFieldSpecialization<typename FieldType::FieldDataType>::isDataElementEqual(valuesSelectedInField[i], m_optionEntryCache[opIdx].value))
|
||||
{
|
||||
isFound = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isFound && !valuesSelectedInField[i].toString().isEmpty())
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ bool PdmOptionItemInfo::findValues(const QList<PdmOptionItemInfo>& optionList, Q
|
||||
{
|
||||
for (unsigned int opIdx = 0; opIdx < static_cast<unsigned int>(optionList.size()); ++opIdx)
|
||||
{
|
||||
if (PdmUiFieldSpecialization<T>::isEqual(valuesSelectedInField[i], optionList[opIdx].value))
|
||||
if (PdmUiFieldSpecialization<T>::isDataElementEqual(valuesSelectedInField[i], optionList[opIdx].value))
|
||||
{
|
||||
foundIndexes.push_back(opIdx);
|
||||
}
|
||||
@ -142,7 +142,7 @@ bool PdmOptionItemInfo::findValues(const QList<PdmOptionItemInfo>& optionList, Q
|
||||
{
|
||||
for (unsigned int opIdx = 0; opIdx < static_cast<unsigned int>(optionList.size()); ++opIdx)
|
||||
{
|
||||
if (PdmUiFieldSpecialization<T>::isEqual(optionList[opIdx].value, fieldValue))
|
||||
if (PdmUiFieldSpecialization<T>::isDataElementEqual(optionList[opIdx].value, fieldValue))
|
||||
{
|
||||
foundIndexes.push_back(opIdx);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user