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; } }
ods::DrawFrame* Cell::CreateDrawFrame(const QFile &file) { if (draw_frame_ != nullptr) { mtl_warn("draw_frame_ != nullptr"); return nullptr; } draw_frame_ = new ods::DrawFrame(this, file); if (draw_frame_->ok()) { return draw_frame_; } delete draw_frame_; draw_frame_ = nullptr; return nullptr; }
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"); }