give prefixed units their own names and symbols instead of concatenating prefix and base unit

This commit is contained in:
Mathew Sutcliffe
2013-08-22 19:44:19 +01:00
parent e8736cf31d
commit 669af6b691
3 changed files with 39 additions and 41 deletions

View File

@@ -42,7 +42,7 @@ bool CMeasurementPrefix::operator !=(const CMeasurementPrefix &other) const
* Constructor * Constructor
*/ */
CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, double factor, int displayDigits, double epsilon) : CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, double factor, int displayDigits, double epsilon) :
m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_prefix(CMeasurementPrefix::One()), m_converter(new LinearConverter(factor)) m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_converter(new LinearConverter(factor))
{ {
} }
@@ -50,7 +50,7 @@ CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, d
* Constructor * Constructor
*/ */
CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, double factor, double offset, int displayDigits, double epsilon) : CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, double factor, double offset, int displayDigits, double epsilon) :
m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_prefix(CMeasurementPrefix::One()), m_converter(new AffineConverter(factor, offset)) m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_converter(new AffineConverter(factor, offset))
{ {
} }
@@ -58,15 +58,15 @@ CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, d
* Constructor * Constructor
*/ */
CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, Converter *converter, int displayDigits, double epsilon) : CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, Converter *converter, int displayDigits, double epsilon) :
m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_prefix(CMeasurementPrefix::One()), m_converter(converter) m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_converter(converter)
{ {
} }
/* /*
* Constructor * Constructor
*/ */
CMeasurementUnit::CMeasurementUnit(const CMeasurementUnit &base, const CMeasurementPrefix &prefix, int displayDigits, double epsilon) : CMeasurementUnit::CMeasurementUnit(const QString &name, const QString &symbol, const CMeasurementUnit &base, const CMeasurementPrefix &prefix, int displayDigits, double epsilon) :
m_name(base.m_name), m_symbol(base.m_symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_prefix(prefix), m_converter(base.m_converter->clone(prefix)) m_name(name), m_symbol(symbol), m_epsilon(epsilon), m_displayDigits(displayDigits), m_converter(base.m_converter->clone(prefix))
{ {
} }
@@ -74,7 +74,7 @@ CMeasurementUnit::CMeasurementUnit(const CMeasurementUnit &base, const CMeasurem
* Copy constructor * Copy constructor
*/ */
CMeasurementUnit::CMeasurementUnit(const CMeasurementUnit &other) : CMeasurementUnit::CMeasurementUnit(const CMeasurementUnit &other) :
m_name(other.m_name), m_symbol(other.m_symbol), m_epsilon(other.m_epsilon), m_displayDigits(other.m_displayDigits), m_prefix(other.m_prefix), m_converter(other.m_converter) m_name(other.m_name), m_symbol(other.m_symbol), m_epsilon(other.m_epsilon), m_displayDigits(other.m_displayDigits), m_converter(other.m_converter)
{ {
} }
@@ -84,7 +84,7 @@ CMeasurementUnit::CMeasurementUnit(const CMeasurementUnit &other) :
bool CMeasurementUnit::operator ==(const CMeasurementUnit &other) const bool CMeasurementUnit::operator ==(const CMeasurementUnit &other) const
{ {
if (this == &other) return true; if (this == &other) return true;
return this->m_prefix == other.m_prefix && this->m_name == other.m_name; return this->m_name == other.m_name;
} }
/* /*

View File

@@ -377,7 +377,6 @@ private:
QString m_symbol; //!< unit name, e.g. "m" QString m_symbol; //!< unit name, e.g. "m"
double m_epsilon; //!< values with differences below epsilon are the equal double m_epsilon; //!< values with differences below epsilon are the equal
int m_displayDigits; //!< standard rounding for string conversions int m_displayDigits; //!< standard rounding for string conversions
CMeasurementPrefix m_prefix; //!< multiplier (kilo, Mega)
QSharedDataPointer<Converter> m_converter; //!< strategy pattern allows an arbitrary conversion method as per object QSharedDataPointer<Converter> m_converter; //!< strategy pattern allows an arbitrary conversion method as per object
protected: protected:
@@ -419,7 +418,7 @@ protected:
* \param displayDigits * \param displayDigits
* \param epsilon * \param epsilon
*/ */
CMeasurementUnit(const CMeasurementUnit &base, const CMeasurementPrefix &prefix, int displayDigits = 2, double epsilon = 1E-10); CMeasurementUnit(const QString &name, const QString &symbol, const CMeasurementUnit &base, const CMeasurementPrefix &prefix, int displayDigits = 2, double epsilon = 1E-10);
/*! /*!
* \brief Copy constructor * \brief Copy constructor
@@ -504,8 +503,7 @@ public:
*/ */
QString getName(bool i18n = false) const QString getName(bool i18n = false) const
{ {
QString base = i18n ? QCoreApplication::translate("CMeasurementUnit", this->m_name.toStdString().c_str()) : this->m_name; return i18n ? QCoreApplication::translate("CMeasurementUnit", this->m_name.toStdString().c_str()) : this->m_name;
return this->m_prefix.getName(i18n) + base;
} }
/*! /*!
@@ -515,8 +513,7 @@ public:
*/ */
QString getSymbol(bool i18n = false) const QString getSymbol(bool i18n = false) const
{ {
QString base = i18n ? QCoreApplication::translate("CMeasurementUnit", this->m_symbol.toStdString().c_str()) : this->m_symbol; return i18n ? QCoreApplication::translate("CMeasurementUnit", this->m_symbol.toStdString().c_str()) : this->m_symbol;
return this->m_prefix.getSymbol(i18n) + base;
} }
/*! /*!
@@ -564,15 +561,6 @@ public:
return this->m_displayDigits; return this->m_displayDigits;
} }
/*!
* \brief Multiplier such as "kilo"
* \return
*/
CMeasurementPrefix getPrefix() const
{
return this->m_prefix;
}
/*! /*!
* Convert from other unit to this unit. * Convert from other unit to this unit.
* \param * \param

View File

@@ -43,13 +43,15 @@ private:
/*! /*!
* \brief Constructor length unit * \brief Constructor length unit
* \param name
* \param symbol
* \param prefix * \param prefix
* \param base * \param base
* \param displayDigits * \param displayDigits
* \param epsilon * \param epsilon
*/ */
CLengthUnit(const CMeasurementPrefix &prefix, const CLengthUnit &base, int displayDigits = 2, double epsilon = 1E-9) : CLengthUnit(const QString &name, const QString &symbol, const CMeasurementPrefix &prefix, const CLengthUnit &base, int displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(base, prefix, displayDigits, epsilon) {} CMeasurementUnit(name, symbol, base, prefix, displayDigits, epsilon) {}
public: public:
/*! /*!
@@ -105,7 +107,7 @@ public:
*/ */
static const CLengthUnit &km() static const CLengthUnit &km()
{ {
static CLengthUnit km(CMeasurementPrefix::k(), m(), 3); static CLengthUnit km(QT_TRANSLATE_NOOP("CMeasurementUnit", "kilometer"), "km", CMeasurementPrefix::k(), m(), 3);
return km; return km;
} }
@@ -115,7 +117,7 @@ public:
*/ */
static const CLengthUnit &cm() static const CLengthUnit &cm()
{ {
static CLengthUnit cm(CMeasurementPrefix::c(), m(), 1); static CLengthUnit cm(QT_TRANSLATE_NOOP("CMeasurementUnit", "centimeter"), "cm", CMeasurementPrefix::c(), m(), 1);
return cm; return cm;
} }
@@ -320,13 +322,15 @@ private:
/*! /*!
* Constructor frequency unit * Constructor frequency unit
* \param name
* \param symbol
* \param prefix * \param prefix
* \param base * \param base
* \param displayDigits * \param displayDigits
* \param epsilon * \param epsilon
*/ */
CFrequencyUnit(const CMeasurementPrefix &prefix, const CFrequencyUnit &base, int displayDigits = 2, double epsilon = 1E-9) : CFrequencyUnit(const QString &name, const QString &symbol, const CMeasurementPrefix &prefix, const CFrequencyUnit &base, int displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(base, prefix, displayDigits, epsilon) {} CMeasurementUnit(name, symbol, base, prefix, displayDigits, epsilon) {}
public: public:
/*! /*!
@@ -362,7 +366,7 @@ public:
*/ */
static const CFrequencyUnit &kHz() static const CFrequencyUnit &kHz()
{ {
static CFrequencyUnit kHz(CMeasurementPrefix::k(), Hz(), 1); static CFrequencyUnit kHz(QT_TRANSLATE_NOOP("CMeasurementUnit", "kilohertz"), "kHz", CMeasurementPrefix::k(), Hz(), 1);
return kHz; return kHz;
} }
@@ -372,7 +376,7 @@ public:
*/ */
static const CFrequencyUnit &MHz() static const CFrequencyUnit &MHz()
{ {
static CFrequencyUnit MHz(CMeasurementPrefix::M(), Hz(), 2); static CFrequencyUnit MHz(QT_TRANSLATE_NOOP("CMeasurementUnit", "megahertz"), "MHz", CMeasurementPrefix::M(), Hz(), 2);
return MHz; return MHz;
} }
@@ -382,7 +386,7 @@ public:
*/ */
static const CFrequencyUnit &GHz() static const CFrequencyUnit &GHz()
{ {
static CFrequencyUnit GHz(CMeasurementPrefix::G(), Hz(), 2); static CFrequencyUnit GHz(QT_TRANSLATE_NOOP("CMeasurementUnit", "gigahertz"), "GHz", CMeasurementPrefix::G(), Hz(), 2);
return GHz; return GHz;
} }
@@ -435,13 +439,15 @@ private:
/*! /*!
* \brief Constructor mass units * \brief Constructor mass units
* \param name
* \param symbol
* \param prefix * \param prefix
* \param base * \param base
* \param displayDigits * \param displayDigits
* \param epsilon * \param epsilon
*/ */
CMassUnit(const CMeasurementPrefix &prefix, const CMassUnit &base, int displayDigits = 2, double epsilon = 1E-9) : CMassUnit(const QString &name, const QString &symbol, const CMeasurementPrefix &prefix, const CMassUnit &base, int displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(base, prefix, displayDigits, epsilon) {} CMeasurementUnit(name, symbol, base, prefix, displayDigits, epsilon) {}
public: public:
/*! /*!
@@ -467,7 +473,7 @@ public:
*/ */
static const CMassUnit &kg() static const CMassUnit &kg()
{ {
static CMassUnit kg(CMeasurementPrefix::k(), g(), 1); static CMassUnit kg(QT_TRANSLATE_NOOP("CMeasurementUnit", "kilogram"), "kg", CMeasurementPrefix::k(), g(), 1);
return kg; return kg;
} }
@@ -550,13 +556,15 @@ private:
/*! /*!
* \brief Pressure unit constructor * \brief Pressure unit constructor
* \param name
* \param symbol
* \param prefix * \param prefix
* \param base * \param base
* \param displayDigits * \param displayDigits
* \param epsilon * \param epsilon
*/ */
CPressureUnit(const CMeasurementPrefix &prefix, const CPressureUnit &base, int displayDigits = 2, double epsilon = 1E-9) : CPressureUnit(const QString &name, const QString &symbol, const CMeasurementPrefix &prefix, const CPressureUnit &base, int displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(base, prefix, displayDigits, epsilon) {} CMeasurementUnit(name, symbol, base, prefix, displayDigits, epsilon) {}
public: public:
/*! /*!
@@ -592,7 +600,7 @@ public:
*/ */
static const CPressureUnit &hPa() static const CPressureUnit &hPa()
{ {
static CPressureUnit hPa(CMeasurementPrefix::h(), Pa()); static CPressureUnit hPa(QT_TRANSLATE_NOOP("CMeasurementUnit", "hectopascal"), "hPa", CMeasurementPrefix::h(), Pa());
return hPa; return hPa;
} }
@@ -622,7 +630,7 @@ public:
*/ */
static const CPressureUnit &mbar() static const CPressureUnit &mbar()
{ {
static CPressureUnit mbar(CMeasurementPrefix::m(), bar(), 1); static CPressureUnit mbar(QT_TRANSLATE_NOOP("CMeasurementUnit", "millibar"), "mbar", CMeasurementPrefix::m(), bar(), 1);
return mbar; return mbar;
} }
@@ -919,13 +927,15 @@ private:
/*! /*!
* \brief Time unit constructor * \brief Time unit constructor
* \param name
* \param symbol
* \param prefix * \param prefix
* \param base * \param base
* \param displayDigits * \param displayDigits
* \param epsilon * \param epsilon
*/ */
CTimeUnit(const CMeasurementPrefix &prefix, const CTimeUnit &base, int displayDigits = 2, double epsilon = 1E-9) : CTimeUnit(const QString &name, const QString &symbol, const CMeasurementPrefix &prefix, const CTimeUnit &base, int displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(base, prefix, displayDigits, epsilon) {} CMeasurementUnit(name, symbol, base, prefix, displayDigits, epsilon) {}
/*! /*!
* \brief Time unit constructor * \brief Time unit constructor
@@ -981,7 +991,7 @@ public:
*/ */
static const CTimeUnit &ms() static const CTimeUnit &ms()
{ {
static CTimeUnit ms(CMeasurementPrefix::m(), s(), 0); static CTimeUnit ms(QT_TRANSLATE_NOOP("CMeasurementUnit", "millisecond"), "ms", CMeasurementPrefix::m(), s(), 0);
return ms; return ms;
} }