diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-07-07 16:32:56 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-07-11 17:01:31 +0300 |
commit | 46df5d58f9f84bd66d643827eb8aa2ee1871a8db (patch) | |
tree | c9f7daa2ccfa3f766ad403939ce4807ea507d23f /platform | |
parent | 03b2bb68baf9d590e4f156434a89d5104f3d65d4 (diff) | |
download | qtlocation-mapboxgl-46df5d58f9f84bd66d643827eb8aa2ee1871a8db.tar.gz |
[Qt] Added conversion functions for the runtime style API
Diffstat (limited to 'platform')
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 2 | ||||
-rw-r--r-- | platform/qt/src/qt_conversion.hpp | 106 |
2 files changed, 108 insertions, 0 deletions
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index e370343df5..204aa0571e 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -1,5 +1,7 @@ #include "qmapboxgl_p.hpp" +#include "qt_conversion.hpp" + #include <mbgl/annotation/annotation.hpp> #include <mbgl/gl/gl.hpp> #include <mbgl/map/camera.hpp> diff --git a/platform/qt/src/qt_conversion.hpp b/platform/qt/src/qt_conversion.hpp new file mode 100644 index 0000000000..ebcbdbdc04 --- /dev/null +++ b/platform/qt/src/qt_conversion.hpp @@ -0,0 +1,106 @@ +#pragma once + +#include <mbgl/style/conversion.hpp> +#include <mbgl/util/feature.hpp> +#include <mbgl/util/optional.hpp> + +#include <QColor> +#include <QVariant> + +namespace mbgl { +namespace style { +namespace conversion { + +inline bool isUndefined(const QVariant& value) { + return value.isNull() || !value.isValid(); +} + +inline bool isArray(const QVariant& value) { + return value.canConvert(QVariant::List); +} + +inline std::size_t arrayLength(const QVariant& value) { + return value.toList().size(); +} + +inline QVariant arrayMember(const QVariant& value, std::size_t i) { + return value.toList()[i]; +} + +inline bool isObject(const QVariant& value) { + return value.canConvert(QVariant::Map); +} + +inline optional<QVariant> objectMember(const QVariant& value, const char* key) { + auto map = value.toMap(); + auto iter = map.constFind(key); + + if (iter != map.constEnd()) { + return iter.value(); + } else { + return {}; + } +} + +template <class Fn> +optional<Error> eachMember(const QVariant& value, Fn&& fn) { + auto map = value.toMap(); + auto iter = map.constBegin(); + + while (iter != map.constEnd()) { + optional<Error> result = fn(iter.key().toStdString(), iter.value()); + if (result) { + return result; + } + + ++iter; + } + + return {}; +} + +inline optional<bool> toBool(const QVariant& value) { + if (value.type() == QVariant::Bool) { + return value.toBool(); + } else { + return {}; + } +} + +inline optional<float> toNumber(const QVariant& value) { + if (value.type() == QVariant::Double) { + return value.toFloat(); + } else { + return {}; + } +} + +inline optional<std::string> toString(const QVariant& value) { + if (value.type() == QVariant::String) { + return value.toString().toStdString(); + } else if (value.type() == QVariant::Color) { + return value.value<QColor>().name().toStdString(); + } else { + return {}; + } +} + +inline optional<Value> toValue(const QVariant& value) { + if (value.type() == QVariant::Bool) { + return { value.toBool() }; + } else if (value.type() == QVariant::String) { + return { value.toString().toStdString() }; + } else if (value.type() == QVariant::Color) { + return { value.value<QColor>().name().toStdString() }; + } else if (value.type() == QVariant::Int) { + return { value.toInt() }; + } else if (value.canConvert(QVariant::Double)) { + return { value.toFloat() }; + } else { + return {}; + } +} + +} // namespace conversion +} // namespace style +} // namespace mbgl |