summaryrefslogtreecommitdiff
path: root/src/libs/utils/persistentsettings.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-07-04 15:08:05 +0200
committerFriedemann Kleint <Friedemann.Kleint@digia.com>2013-07-04 15:50:33 +0200
commitd99e14fad83f521b0970b3f27e5c452993d32a56 (patch)
tree0110f7155d1cbadc354fe8590dcd9f694125ca86 /src/libs/utils/persistentsettings.cpp
parent87fa3adb2d96723ffb39ffb5487866e47b52e94b (diff)
downloadqt-creator-d99e14fad83f521b0970b3f27e5c452993d32a56.tar.gz
Persistent settings reader: Implement QRect-type for values.
Format in X11-resource syntax. Change-Id: Ifc8cd76202d0e1e02ae18809ac8d276e94a27262 Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src/libs/utils/persistentsettings.cpp')
-rw-r--r--src/libs/utils/persistentsettings.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp
index 7b841eed2c..42b04169d7 100644
--- a/src/libs/utils/persistentsettings.cpp
+++ b/src/libs/utils/persistentsettings.cpp
@@ -36,9 +36,29 @@
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QDateTime>
+#include <QTextStream>
+#include <QRegExp>
+#include <QRect>
#include <utils/qtcassert.h>
+// Read and write rectangle in X11 resource syntax "12x12+4+3"
+static QString rectangleToString(const QRect &r)
+{
+ QString result;
+ QTextStream(&result) << r.width() << 'x' << r.height() << forcesign << r.x() << r.y();
+ return result;
+}
+
+static QRect stringToRectangle(const QString &v)
+{
+ static QRegExp pattern(QLatin1String("(\\d+)x(\\d+)([-+]\\d+)([-+]\\d+)"));
+ Q_ASSERT(pattern.isValid());
+ return pattern.exactMatch(v) ?
+ QRect(QPoint(pattern.cap(3).toInt(), pattern.cap(4).toInt()),
+ QSize(pattern.cap(1).toInt(), pattern.cap(2).toInt())) :
+ QRect();
+}
/*!
\class Utils::PersistentSettingsReader
@@ -302,6 +322,10 @@ QVariant ParseContext::readSimpleValue(QXmlStreamReader &r, const QXmlStreamAttr
QTC_ASSERT(text.size() == 1, return QVariant());
return QVariant(QChar(text.at(0)));
}
+ if (type == QLatin1String("QRect")) {
+ const QRect rectangle = stringToRectangle(text);
+ return rectangle.isValid() ? QVariant(rectangle) : QVariant();
+ }
QVariant value;
value.setValue(text);
value.convert(QVariant::nameToType(type.toLatin1().data()));
@@ -381,7 +405,14 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
w.writeAttribute(ctx.typeAttribute, QLatin1String(variant.typeName()));
if (!key.isEmpty())
w.writeAttribute(ctx.keyAttribute, key);
- w.writeCharacters(variant.toString());
+ switch (variant.type()) {
+ case QVariant::Rect:
+ w.writeCharacters(rectangleToString(variant.toRect()));
+ break;
+ default:
+ w.writeCharacters(variant.toString());
+ break;
+ }
w.writeEndElement();
break;
}