From fa638568fddf9a2136d818bc4141cccc9ad15ce1 Mon Sep 17 00:00:00 2001 From: Carsten Niehaus Date: Sun, 23 Oct 2005 11:59:34 +0000 Subject: [PATCH] * Add support for units * Add the period svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=473336 --- libscience/chemicaldataobject.cpp | 36 +++++++++++++++++++++++++++++ libscience/chemicaldataobject.h | 35 +++++++++++++++++++++++++++- libscience/elementparser.cpp | 10 +++++++- libscience/elementparser.h | 3 ++- libscience/tests/xmlreadingtest.cpp | 7 +++++- 5 files changed, 87 insertions(+), 4 deletions(-) diff --git a/libscience/chemicaldataobject.cpp b/libscience/chemicaldataobject.cpp index 744dc76..56d0239 100644 --- a/libscience/chemicaldataobject.cpp +++ b/libscience/chemicaldataobject.cpp @@ -25,11 +25,13 @@ ChemicalDataObject::ChemicalDataObject( QVariant v, BlueObelisk type ) { m_value = v; m_type = type; + m_unit = ChemicalDataObject::noUnit; }; ChemicalDataObject::ChemicalDataObject() { m_value = QVariant(); + m_unit = ChemicalDataObject::noUnit; } QString ChemicalDataObject::valueAsString() @@ -119,10 +121,44 @@ QString ChemicalDataObject::dictRef() case periodTableBlock: botype = "periodTableBlock"; break; + case nameOrigin: + botype = "nameOrigin"; + break; + case orbit: + botype = "orbit"; + break; + case period: + botype = "period"; + break; } botype = botype.prepend( "bo:" ); return botype; } + +QString ChemicalDataObject::unitAsString() +{ + QString bounit; + switch ( m_unit ){ + case kelvin: + bounit = "kelvin"; + break; + case nm: + bounit = "nm"; + break; + case pm: + bounit = "pm"; + break; + case ev: + bounit = "ev"; + break; + case noUnit: + return "noUnit"; + } + + bounit = bounit.prepend( "bo:" ); + + return bounit; +} diff --git a/libscience/chemicaldataobject.h b/libscience/chemicaldataobject.h index ebe67a2..cb606fa 100644 --- a/libscience/chemicaldataobject.h +++ b/libscience/chemicaldataobject.h @@ -55,7 +55,22 @@ class ChemicalDataObject meltingpoint, boilingpoint, periodTableBlock, - nameOrigin + nameOrigin, + orbit, + period + }; + + /** + * The BlueObelisk-project defines in their XML file the dataset + * with the units in the namespace "bo". + */ + enum BlueObeliskUnit + { + kelvin = 0/**< Degree Kelvin */, + ev/**< electron volt */, + nm/**< nanometer */, + pm/**< picometer */, + noUnit/**< no unit */ }; /** @@ -153,10 +168,28 @@ class ChemicalDataObject * identifier. For example, for the mass it is "bo:mass" */ QString dictRef(); + + /** + * @return the unit of the object as a QString. For example kelvin + * will be returned as "bo:kelvin" + */ + QString unitAsString(); + + /** + * @return the unit of the object + */ + BlueObeliskUnit unit() const{ + return m_unit; + } + + void setUnit( BlueObeliskUnit unit ){ + m_unit = unit; + } private: QVariant m_value; BlueObelisk m_type; + BlueObeliskUnit m_unit; }; #endif // CHEMICALDATAOBJECT_H diff --git a/libscience/elementparser.cpp b/libscience/elementparser.cpp index ecf252e..a4a3c8a 100644 --- a/libscience/elementparser.cpp +++ b/libscience/elementparser.cpp @@ -35,7 +35,8 @@ ElementSaxParser::ElementSaxParser() inBoilingPoint_(false), inMeltingPoint_(false), inPeriodTableBlock_(false), - inNameOrigin_(false) + inNameOrigin_(false), + inPeriod_(false) { } @@ -75,6 +76,8 @@ bool ElementSaxParser::startElement(const QString&, const QString &localName, co inPeriodTableBlock_ = true; else if (attrs.value(i) == "bo:nameOrigin") inNameOrigin_ = true; + else if (attrs.value(i) == "bo:period") + inPeriod_ = true; } } return true; @@ -169,6 +172,11 @@ bool ElementSaxParser::characters(const QString &ch) type = ChemicalDataObject::nameOrigin; inNameOrigin_ = false; } + else if (inPeriod_) { + value = ch.toInt(); + type = ChemicalDataObject::period; + inPeriod_ = false; + } else//it is a non known value. Do not create a wrong object but return return true; diff --git a/libscience/elementparser.h b/libscience/elementparser.h index afcb922..58ed4e2 100644 --- a/libscience/elementparser.h +++ b/libscience/elementparser.h @@ -48,6 +48,7 @@ class ElementSaxParser : public QXmlDefaultHandler inBoilingPoint_, inMeltingPoint_, inPeriodTableBlock_, - inNameOrigin_; + inNameOrigin_, + inPeriod_; }; #endif // ELEMENTPARSER_H diff --git a/libscience/tests/xmlreadingtest.cpp b/libscience/tests/xmlreadingtest.cpp index d36662c..a0e77df 100644 --- a/libscience/tests/xmlreadingtest.cpp +++ b/libscience/tests/xmlreadingtest.cpp @@ -41,7 +41,12 @@ int main(int argc, char *argv[]) //Test: give me all data available foreach( ChemicalDataObject*o, list ){ if ( o ) - kdDebug() << "Name: " << o->dictRef() << " " << o->valueAsString() << endl; + { + QString unit = o->unitAsString(); + if ( unit == "bo:noUnit" ) + unit = ""; + kdDebug() << "Name: " << o->dictRef() << " " << o->valueAsString() <<" " << unit << endl; + } } } -- 2.47.3