File indexing completed on 2024-04-21 03:41:35

0001 /*
0002     SPDX-FileCopyrightText: 2003, 2004, 2005 Carsten Niehaus <cniehaus@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "element.h"
0008 
0009 
0010 #include <KUnitConversion/Converter>
0011 
0012 Element::Element() = default;
0013 
0014 QVariant Element::dataAsVariant(ChemicalDataObject::BlueObelisk type) const
0015 {
0016     for (const ChemicalDataObject &o : std::as_const(dataList)) {
0017         if (o.type() == type) {
0018             return o.value();
0019         }
0020     }
0021     return {};
0022 }
0023 
0024 QVariant Element::dataAsVariant(ChemicalDataObject::BlueObelisk type, int unit) const
0025 {
0026     for (const ChemicalDataObject &o : dataList) {
0027         if (o.type() == type) {
0028             if (unit == KUnitConversion::NoUnit) {
0029                 return o.value();
0030             }
0031             KUnitConversion::Value data(o.value().toDouble(), KUnitConversion::UnitId(o.unit()));
0032             return {data.convertTo(KUnitConversion::UnitId(unit)).number()};
0033         }
0034     }
0035     return {};
0036 }
0037 
0038 QString Element::dataAsString(ChemicalDataObject::BlueObelisk type) const
0039 {
0040     return dataAsVariant(type).toString();
0041 }
0042 
0043 QString Element::dataAsString(ChemicalDataObject::BlueObelisk type, int unit) const
0044 {
0045     return dataAsVariant(type, unit).toString();
0046 }
0047 
0048 QString Element::dataAsStringWithUnit(ChemicalDataObject::BlueObelisk type, int unit) const
0049 {
0050     QString valueAndUnit(QString::number(dataAsVariant(type, unit).toDouble(), 'g', 4));
0051 
0052     if (valueAndUnit.isEmpty()) {
0053         return {};
0054     }
0055 
0056     valueAndUnit.append(" ");
0057     valueAndUnit.append(KUnitConversion::Converter().unit(KUnitConversion::UnitId(unit)).symbol());
0058     return valueAndUnit;
0059 }
0060 
0061 Element::~Element() = default;
0062 
0063 void Element::addData(const ChemicalDataObject &o)
0064 {
0065     dataList.append(o);
0066 }
0067 
0068 void Element::addData(const QVariant &value, ChemicalDataObject::BlueObelisk type)
0069 {
0070     ChemicalDataObject tmp(value, type);
0071     dataList.append(tmp);
0072 }