diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-07-04 15:08:05 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2013-07-04 15:50:33 +0200 |
commit | d99e14fad83f521b0970b3f27e5c452993d32a56 (patch) | |
tree | 0110f7155d1cbadc354fe8590dcd9f694125ca86 /src/libs/utils/persistentsettings.cpp | |
parent | 87fa3adb2d96723ffb39ffb5487866e47b52e94b (diff) | |
download | qt-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.cpp | 33 |
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; } |