! * \internal */
| 440 | * \internal |
| 441 | */ |
| 442 | DataValidation DataValidation::loadFromXml(QXmlStreamReader &reader) |
| 443 | { |
| 444 | Q_ASSERT(reader.name() == QLatin1String("dataValidation")); |
| 445 | |
| 446 | static const QMap<QString, DataValidation::ValidationType> typeMap = { |
| 447 | {QStringLiteral("none"), DataValidation::None}, |
| 448 | {QStringLiteral("whole"), DataValidation::Whole}, |
| 449 | {QStringLiteral("decimal"), DataValidation::Decimal}, |
| 450 | {QStringLiteral("list"), DataValidation::List}, |
| 451 | {QStringLiteral("date"), DataValidation::Date}, |
| 452 | {QStringLiteral("time"), DataValidation::Time}, |
| 453 | {QStringLiteral("textLength"), DataValidation::TextLength}, |
| 454 | {QStringLiteral("custom"), DataValidation::Custom} |
| 455 | }; |
| 456 | |
| 457 | static const QMap<QString, DataValidation::ValidationOperator> opMap = { |
| 458 | {QStringLiteral("between"), DataValidation::Between}, |
| 459 | {QStringLiteral("notBetween"), DataValidation::NotBetween}, |
| 460 | {QStringLiteral("equal"), DataValidation::Equal}, |
| 461 | {QStringLiteral("notEqual"), DataValidation::NotEqual}, |
| 462 | {QStringLiteral("lessThan"), DataValidation::LessThan}, |
| 463 | {QStringLiteral("lessThanOrEqual"), DataValidation::LessThanOrEqual}, |
| 464 | {QStringLiteral("greaterThan"), DataValidation::GreaterThan}, |
| 465 | {QStringLiteral("greaterThanOrEqual"), DataValidation::GreaterThanOrEqual} |
| 466 | }; |
| 467 | |
| 468 | static const QMap<QString, DataValidation::ErrorStyle> esMap = { |
| 469 | {QStringLiteral("stop"), DataValidation::Stop}, |
| 470 | {QStringLiteral("warning"), DataValidation::Warning}, |
| 471 | {QStringLiteral("information"), DataValidation::Information} |
| 472 | }; |
| 473 | |
| 474 | DataValidation validation; |
| 475 | QXmlStreamAttributes attrs = reader.attributes(); |
| 476 | |
| 477 | QString sqref = attrs.value(QLatin1String("sqref")).toString(); |
| 478 | const auto sqrefParts = sqref.split(QLatin1Char(' ')); |
| 479 | for (const QString &range : sqrefParts) |
| 480 | validation.addRange(range); |
| 481 | |
| 482 | if (attrs.hasAttribute(QLatin1String("type"))) { |
| 483 | QString t = attrs.value(QLatin1String("type")).toString(); |
| 484 | auto it = typeMap.constFind(t); |
| 485 | validation.setValidationType(it != typeMap.constEnd() ? it.value() : DataValidation::None); |
| 486 | } |
| 487 | if (attrs.hasAttribute(QLatin1String("errorStyle"))) { |
| 488 | QString es = attrs.value(QLatin1String("errorStyle")).toString(); |
| 489 | auto it = esMap.constFind(es); |
| 490 | validation.setErrorStyle(it != esMap.constEnd() ? it.value() : DataValidation::Stop); |
| 491 | } |
| 492 | if (attrs.hasAttribute(QLatin1String("operator"))) { |
| 493 | QString op = attrs.value(QLatin1String("operator")).toString(); |
| 494 | auto it = opMap.constFind(op); |
| 495 | validation.setValidationOperator(it != opMap.constEnd() ? it.value() : DataValidation::Between); |
| 496 | } |
| 497 | if (attrs.hasAttribute(QLatin1String("allowBlank"))) { |
| 498 | validation.setAllowBlank(true); |
| 499 | } else { |
nothing calls this directly
no test coverage detected