[Fwk] Use PdmValueFieldSpecialization instead of QVariant constructor

This commit is contained in:
Magne Sjaastad 2015-11-26 13:58:17 +01:00
parent 3e9e5779ab
commit 3a3d28003b
2 changed files with 18 additions and 36 deletions

View File

@ -1,5 +1,9 @@
#pragma once #pragma once
#include "cafAppEnum.h"
#include <vector>
#include <QVariant> #include <QVariant>
namespace caf namespace caf
@ -39,15 +43,12 @@ public:
{ {
return variantValue == variantValue2; return variantValue == variantValue2;
} }
}; };
} // End of namespace caf
#include "cafAppEnum.h"
namespace caf
{
//==================================================================================================
/// Partial specialization for caf::AppEnum
//==================================================================================================
template <typename T> template <typename T>
class PdmValueFieldSpecialization<caf::AppEnum<T> > class PdmValueFieldSpecialization<caf::AppEnum<T> >
{ {
@ -67,18 +68,12 @@ public:
{ {
return variantValue == variantValue2; return variantValue == variantValue2;
} }
}; };
} // End of namespace caf
#include <vector>
namespace caf
{
//==================================================================================================
/// Partial specialization for std::vector
//==================================================================================================
template <typename T> template <typename T>
class PdmValueFieldSpecialization<std::vector<T> > class PdmValueFieldSpecialization<std::vector<T> >
{ {
@ -89,10 +84,10 @@ public:
typename std::vector<T>::const_iterator it; typename std::vector<T>::const_iterator it;
for (it = value.begin(); it != value.end() ; ++it) for (it = value.begin(); it != value.end() ; ++it)
{ {
returnList.push_back(QVariant::fromValue(*it)); returnList.push_back(PdmValueFieldSpecialization<T>::convert(*it));
} }
return returnList;
return returnList;
} }
static void setFromVariant(const QVariant& variantValue, std::vector<T>& value) static void setFromVariant(const QVariant& variantValue, std::vector<T>& value)
@ -103,7 +98,10 @@ public:
QList<QVariant> lst = variantValue.toList(); QList<QVariant> lst = variantValue.toList();
for (int i = 0; i < lst.size(); ++i) for (int i = 0; i < lst.size(); ++i)
{ {
value.push_back(lst[i].value<T>()); T val;
PdmValueFieldSpecialization<T>::setFromVariant(lst[i], val);
value.push_back(val);
} }
} }
} }
@ -112,7 +110,6 @@ public:
{ {
return variantValue == variantValue2; return variantValue == variantValue2;
} }
}; };
} // End of namespace caf } // End of namespace caf

View File

@ -111,28 +111,13 @@ public:
/// Convert the field value into a QVariant /// Convert the field value into a QVariant
static QVariant convert(const std::vector<T>& value) static QVariant convert(const std::vector<T>& value)
{ {
QList<QVariant> returnList; return PdmValueFieldSpecialization< std::vector<T> >::convert(value);
typename std::vector<T>::const_iterator it;
for (it = value.begin(); it != value.end() ; ++it)
{
returnList.push_back(QVariant(*it));
}
return returnList;
} }
/// Set the field value from a QVariant /// Set the field value from a QVariant
static void setFromVariant(const QVariant& variantValue, std::vector<T>& value) static void setFromVariant(const QVariant& variantValue, std::vector<T>& value)
{ {
if (variantValue.canConvert< QList<QVariant> >()) return PdmValueFieldSpecialization< std::vector<T> >::setFromVariant(variantValue, value);
{
value.clear();
QList<QVariant> lst = variantValue.toList();
int i;
for (i = 0; i < lst.size(); ++i)
{
value.push_back(lst[i].value<T>());
}
}
} }
static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2) static bool isEqual(const QVariant& variantValue, const QVariant& variantValue2)