Commit 85ee2f90aafdcf195bdbb9e480172f183ea045b2

Authored by Josh Klontz
1 parent 967d7b03

improve support for converting back to strings

Showing 1 changed file with 18 additions and 7 deletions
openbr/openbr_plugin.cpp
... ... @@ -166,10 +166,10 @@ QVariant File::parse(const QString &value)
166 166 void File::set(const QString &key, const QString &value)
167 167 {
168 168 if (value.startsWith('[') && value.endsWith(']')) {
169   - QList<QVariant> variants;
  169 + QVariantList variants;
170 170 foreach (const QString &value, QtUtils::parse(value.mid(1, value.size()-2)))
171 171 variants.append(parse(value));
172   - set(key, QVariant(variants));
  172 + set(key, variants);
173 173 } else {
174 174 set(key, QVariant(parse(value)));
175 175 }
... ... @@ -806,9 +806,7 @@ void Object::setProperty(const QString &amp;name, QVariant value)
806 806 value = v;
807 807 } else if ((type.startsWith("QList<") && type.endsWith(">")) || (type == "QStringList") || (type == "QVariantList")) {
808 808 QVariantList elements;
809   - if (value.canConvert<QVariantList>()) {
810   - elements = value.value<QVariantList>();
811   - } else if (value.canConvert< QList<Transform*> >()) {
  809 + if (value.canConvert< QList<Transform*> >()) {
812 810 foreach (Transform *transform, value.value< QList<Transform*> >())
813 811 elements.append(QVariant::fromValue(transform));
814 812 } else if (value.canConvert<QString>()) {
... ... @@ -817,6 +815,8 @@ void Object::setProperty(const QString &amp;name, QVariant value)
817 815 qFatal("Expected a list to start with '[' and end with 'brackets']'.");
818 816 foreach (const QString &element, parse(string.mid(1, string.size()-2)))
819 817 elements.append(element);
  818 + } else if (value.canConvert<QVariantList>()) {
  819 + elements = value.value<QVariantList>();
820 820 } else {
821 821 qFatal("Expected a list.");
822 822 }
... ... @@ -825,8 +825,19 @@ void Object::setProperty(const QString &amp;name, QVariant value)
825 825 value.setValue(elements);
826 826 } else if ((type == "QList<QString>") || (type == "QStringList")) {
827 827 QStringList parsedValues;
828   - foreach (const QVariant &element, elements)
829   - parsedValues.append(element.toString());
  828 + foreach (const QVariant &element, elements) {
  829 + if (element.canConvert<QString>()) {
  830 + parsedValues.append(element.toString());
  831 + } else if (element.canConvert<QPointF>()) {
  832 + const QPointF point = element.toPointF();
  833 + parsedValues.push_back(QString("(%1,%2)").arg(QString::number(point.x()), QString::number(point.y())));
  834 + } else if (element.canConvert<QRectF>()) {
  835 + const QRectF rect = element.toRectF();
  836 + parsedValues.push_back(QString("(%1,%2,%3,%4)").arg(QString::number(rect.x()), QString::number(rect.y()), QString::number(rect.width()), QString::number(rect.height())));
  837 + } else {
  838 + qFatal("Can't convert variant to string.");
  839 + }
  840 + }
830 841 value.setValue(parsedValues);
831 842 } else if (type == "QList<float>") {
832 843 QList<float> parsedValues; bool ok;
... ...