#include "pqstring.h" #include "tuple.h" #include "pqallquantities.h" namespace BlackMisc { namespace PhysicalQuantities { /* * Convert to string */ QString CPqString::convertToQString(bool /** i18n **/) const { return this->m_string; } /* * is a */ bool CPqString::isA(int metaTypeId) const { if (metaTypeId == qMetaTypeId()) { return true; } return this->CValueObject::isA(metaTypeId); } /* * Meta id */ int CPqString::getMetaTypeId() const { return qMetaTypeId(); } /* * Compare */ int CPqString::compareImpl(const CValueObject &otherBase) const { const auto &other = static_cast(otherBase); return compare(TupleConverter::toTuple(*this), TupleConverter::toTuple(other)); } /* * Marshall to DBus */ void CPqString::marshallToDbus(QDBusArgument &argument) const { argument << TupleConverter::toTuple(*this); } /* * Unmarshall from DBus */ void CPqString::unmarshallFromDbus(const QDBusArgument &argument) { argument >> TupleConverter::toTuple(*this); } /* * Equal? */ bool CPqString::operator ==(const CPqString &other) const { if (this == &other) return true; return TupleConverter::toTuple(*this) == TupleConverter::toTuple(other); } /* * Unequal? */ bool CPqString::operator !=(const CPqString &other) const { return !((*this) == other); } /* * Hash */ uint CPqString::getValueHash() const { return qHash(TupleConverter::toTuple(*this)); } /* * Register metadata */ void CPqString::registerMetadata() { qRegisterMetaType(); qDBusRegisterMetaType(); } QVariant CPqString::parse(const QString &value) { QVariant v; if (value.isEmpty()) return v; QRegExp rx("^([-+]?[0-9]*\\.?[0-9]+)\\s*(\\D*)$"); if (rx.indexIn(value) < 0) return v; QString number = rx.cap(1); QString unit = rx.cap(2); if (unit.isEmpty() || number.isEmpty()) return v; bool success; double numberD = number.toDouble(&success); if (!success) return v; if (CMeasurementUnit::isValidUnitSymbol(unit)) { CAcceleration pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CAngle pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CFrequency pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CLength pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CMass pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CPressure pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CSpeed pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CTime pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } if (CMeasurementUnit::isValidUnitSymbol(unit)) { CTemperature pq(numberD, CMeasurementUnit::unitFromSymbol(unit, false)); return pq.toQVariant(); } return v; } } // namespace } // namespace