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,10 +166,10 @@ QVariant File::parse(const QString &value)
166 void File::set(const QString &key, const QString &value) 166 void File::set(const QString &key, const QString &value)
167 { 167 {
168 if (value.startsWith('[') && value.endsWith(']')) { 168 if (value.startsWith('[') && value.endsWith(']')) {
169 - QList<QVariant> variants; 169 + QVariantList variants;
170 foreach (const QString &value, QtUtils::parse(value.mid(1, value.size()-2))) 170 foreach (const QString &value, QtUtils::parse(value.mid(1, value.size()-2)))
171 variants.append(parse(value)); 171 variants.append(parse(value));
172 - set(key, QVariant(variants)); 172 + set(key, variants);
173 } else { 173 } else {
174 set(key, QVariant(parse(value))); 174 set(key, QVariant(parse(value)));
175 } 175 }
@@ -806,9 +806,7 @@ void Object::setProperty(const QString &amp;name, QVariant value) @@ -806,9 +806,7 @@ void Object::setProperty(const QString &amp;name, QVariant value)
806 value = v; 806 value = v;
807 } else if ((type.startsWith("QList<") && type.endsWith(">")) || (type == "QStringList") || (type == "QVariantList")) { 807 } else if ((type.startsWith("QList<") && type.endsWith(">")) || (type == "QStringList") || (type == "QVariantList")) {
808 QVariantList elements; 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 foreach (Transform *transform, value.value< QList<Transform*> >()) 810 foreach (Transform *transform, value.value< QList<Transform*> >())
813 elements.append(QVariant::fromValue(transform)); 811 elements.append(QVariant::fromValue(transform));
814 } else if (value.canConvert<QString>()) { 812 } else if (value.canConvert<QString>()) {
@@ -817,6 +815,8 @@ void Object::setProperty(const QString &amp;name, QVariant value) @@ -817,6 +815,8 @@ void Object::setProperty(const QString &amp;name, QVariant value)
817 qFatal("Expected a list to start with '[' and end with 'brackets']'."); 815 qFatal("Expected a list to start with '[' and end with 'brackets']'.");
818 foreach (const QString &element, parse(string.mid(1, string.size()-2))) 816 foreach (const QString &element, parse(string.mid(1, string.size()-2)))
819 elements.append(element); 817 elements.append(element);
  818 + } else if (value.canConvert<QVariantList>()) {
  819 + elements = value.value<QVariantList>();
820 } else { 820 } else {
821 qFatal("Expected a list."); 821 qFatal("Expected a list.");
822 } 822 }
@@ -825,8 +825,19 @@ void Object::setProperty(const QString &amp;name, QVariant value) @@ -825,8 +825,19 @@ void Object::setProperty(const QString &amp;name, QVariant value)
825 value.setValue(elements); 825 value.setValue(elements);
826 } else if ((type == "QList<QString>") || (type == "QStringList")) { 826 } else if ((type == "QList<QString>") || (type == "QStringList")) {
827 QStringList parsedValues; 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 value.setValue(parsedValues); 841 value.setValue(parsedValues);
831 } else if (type == "QList<float>") { 842 } else if (type == "QList<float>") {
832 QList<float> parsedValues; bool ok; 843 QList<float> parsedValues; bool ok;