void Value::Read(ods::Ns &ns, ods::Attrs &attrs) { DeleteData(); auto *type_attr = attrs.Get(ns.office(), ods::ns::kValueType); if (type_attr == nullptr) { // shouldn't happen type_ = ods::Type::Fail; return; } type_ = ods::TypeFromString(type_attr->value()); auto *value_attr = attrs.Get(ns.office(), ods::ns::kValue); if (value_attr == nullptr) { type_ = ods::Type::Fail; return; } if (IsDouble() || IsPercentage() || IsCurrency()) { double num; if (!value_attr->ToDouble(num)) { mtl_warn("ToDouble()"); return; } set(new double(num), type_); } else if (IsString()) { set(new QString(value_attr->value()), ods::Type::String); } else if (IsDate()) { auto *custom_attr = attrs.Get(ns.office(), ods::ns::kDateValue); if (custom_attr == nullptr) { mtl_warn("custom_attr == nullptr"); return; } auto dt = QDateTime::fromString(custom_attr->value(), Qt::ISODate); set(new QDateTime(dt), type_); } else if (IsDuration()) { auto *custom_attr = attrs.Get(ns.office(), ods::ns::kTimeValue); if (custom_attr == nullptr) { mtl_warn("custom_attr == nullptr"); return; } auto *t = new ods::Duration(); t->Decode(custom_attr->value()); set(t, type_); } else { type_ = ods::Type::NotSet; } }
Substyle::~Substyle() { if (IsNotSet()) return; if (IsCurrency()) delete AsCurrency(); else if (IsDate()) delete AsDate(); else if (IsDuration()) delete AsDuration(); else if (IsPercent()) delete AsPercent(); }
void Value::DeleteData() { if (!Ok()) return; if (IsDouble() || IsPercentage()) delete AsDouble(); else if (IsString()) delete AsString(); else if (IsDate()) delete AsDate(); else if (IsDuration()) delete AsDuration(); data_ = nullptr; type_ = ods::Type::NotSet; }
QString Value::toString() const { if (!Ok()) return ""; if (IsDouble() || IsPercentage()) return QString::number(*AsDouble()); if (IsString()) return *AsString(); if (IsDate()) return AsDate()->toString(Qt::ISODate); if (IsCurrency()) mtl_qline("Currency not supported yet"); if (IsDuration()) return AsDuration()->ToString(); return ""; }
void Value::CopyTo(ods::Value &v) { v.type_set(type_); if (NoValue()) return; if (IsDouble()) v.SetDouble(*AsDouble()); else if (IsString()) v.SetString(*AsString()); else if (IsCurrency()) v.SetCurrency(*AsCurrency()); else if (IsPercentage()) v.SetPercentage(*AsPercentage()); else if (IsDate()) v.SetDate(*AsDate()); else if (IsDuration()) v.SetDuration(*AsDuration()); else mtl_warn("Not implemented"); }