aboutsummaryrefslogtreecommitdiff
path: root/src/ui/mapper/MeasureLengthMapper.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-24 15:56:01 +0800
committercrupest <crupest@outlook.com>2022-02-24 15:56:01 +0800
commit640401bf2f4b3da3708970a1408b27e159f93631 (patch)
treec9692f9c6e8a3efdadabc5929029837450efd6af /src/ui/mapper/MeasureLengthMapper.cpp
parentd9a3b8c14b9ab1bc591ca7c373daaf7141d2d098 (diff)
downloadcru-640401bf2f4b3da3708970a1408b27e159f93631.tar.gz
cru-640401bf2f4b3da3708970a1408b27e159f93631.tar.bz2
cru-640401bf2f4b3da3708970a1408b27e159f93631.zip
...
Diffstat (limited to 'src/ui/mapper/MeasureLengthMapper.cpp')
-rw-r--r--src/ui/mapper/MeasureLengthMapper.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/ui/mapper/MeasureLengthMapper.cpp b/src/ui/mapper/MeasureLengthMapper.cpp
new file mode 100644
index 00000000..6a0f95e3
--- /dev/null
+++ b/src/ui/mapper/MeasureLengthMapper.cpp
@@ -0,0 +1,29 @@
+#include "cru/ui/mapper/MeasureLengthMapper.h"
+#include "cru/ui/render/MeasureRequirement.h"
+
+namespace cru::ui::mapper {
+bool MeasureLengthMapper::XmlElementIsOfThisType(xml::XmlElementNode* node) {
+ return node->GetTag().CaseInsensitiveEqual(u"MeasureLength");
+}
+
+render::MeasureLength MeasureLengthMapper::DoMapFromString(String str) {
+ if (str.CaseInsensitiveEqual(u"notspecified")) {
+ return render::MeasureLength::NotSpecified();
+ }
+ if (str.CaseInsensitiveEqual(u"unspecified")) {
+ return render::MeasureLength::NotSpecified();
+ }
+ auto value = str.ParseToFloat();
+ if (value < 0) {
+ return render::MeasureLength::NotSpecified();
+ }
+ return render::MeasureLength(value);
+}
+
+render::MeasureLength MeasureLengthMapper::DoMapFromXml(
+ xml::XmlElementNode* node) {
+ auto value_attr = node->GetOptionalAttributeCaseInsensitive(u"value");
+ if (!value_attr) return {};
+ return DoMapFromString(*value_attr);
+}
+} // namespace cru::ui::mapper