]> Git trees. - libqmvoc.git/commitdiff
* unbreak the radii stuff :-) Most is working again, for example
authorCarsten Niehaus <cniehaus@gmx.de>
Fri, 3 Jun 2005 13:07:32 +0000 (13:07 +0000)
committerCarsten Niehaus <cniehaus@gmx.de>
Fri, 3 Jun 2005 13:07:32 +0000 (13:07 +0000)
  the infodlg

svn path=/trunk/KDE/kdeedu/kalzium/src/element.cpp; revision=421571

kalzium/src/element.cpp
kalzium/src/element.h

index bd6c0ae257d64279d2351f79d9fb02e2b7a67020..fdc8d86805bd9103e3b9291d0da59175b26131c4 100644 (file)
@@ -86,6 +86,44 @@ double Element::meanmass()
        return m_mass/m_number;
 }
 
+const QString Element::adjustRadius( RADIUSTYPE rtype )
+{
+       double val = 0.0;
+       QString v;
+
+       switch ( rtype )
+       {
+               case ATOMIC:
+                       val = m_RadiusAR;
+                       break;
+               case IONIC:
+                       val = m_RadiusIon;
+                       break;
+               case COVALENT:
+                       val = m_RadiusCR;
+                       break;
+               case VDW:
+                       val = m_RadiusVDW;
+                       break;
+       }
+
+       if ( val <= 0 )
+               v = i18n( "Value unknown" );
+       else
+       {
+               switch ( Prefs::units() )
+               {
+                       case 0://use SI-values (meter for length)
+                               v = i18n( "%1 10<sup>-12</sup> m" ).arg( QString::number( val ) );
+                               break;
+                       case 1://use picometer, the most common unit for radii
+                               v = i18n( "%1 pm" ).arg( QString::number( val ) );
+                               break;
+               }
+       }
+       return v;
+}
+
 const QString Element::adjustUnits( const int type, double value )
 {
        QString v;
@@ -146,28 +184,6 @@ const QString Element::adjustUnits( const int type )
                else
                        v = QString::number( val );
        }
-//X    else if ( type == RADIUS || type == IONICRADIUS ) // its a length
-//X    {
-//X            if ( type == RADIUS )
-//X                    val = radius();
-//X            else if ( type == IONICRADIUS )
-//X                    val = ionicValue();
-//X 
-//X            if ( val <= 0 )
-//X                    v = i18n( "Value unknown" );
-//X            else
-//X            {
-//X                    switch ( Prefs::units() )
-//X                    {
-//X                            case 0://use SI-values (meter for length)
-//X                                    v = i18n( "%1 10<sup>-12</sup> m" ).arg( QString::number( val ) );
-//X                                    break;
-//X                            case 1://use picometer, the most common unit for radii
-//X                                    v = i18n( "%1 pm" ).arg( QString::number( val ) );
-//X                                    break;
-//X                    }
-//X            }
-//X    }
        else if ( type == MASS ) // its a mass
        {
                val = mass();
@@ -489,7 +505,42 @@ void Element::setupXY()
 
 void Element::setRadius( RADIUSTYPE type, double value, const QString& name )
 {
+       switch ( type )
+       {
+               case ATOMIC:
+                       m_RadiusAR = value;
+                       break;
+               case IONIC:
+                       m_RadiusIon = value;
+                       m_ionvalue = name;
+                       break;
+               case COVALENT:
+                       m_RadiusCR = value;
+                       break;
+               case VDW:
+                       m_RadiusVDW = value;
+                       break;
+       }
+}
 
+double Element::getRadius( RADIUSTYPE type )
+{
+       switch ( type )
+       {
+               case ATOMIC:
+                       return m_RadiusAR;
+                       break;
+               case IONIC:
+                       return m_RadiusIon;
+                       break;
+               case COVALENT:
+                       return m_RadiusCR;
+                       break;
+               case VDW:
+                       return m_RadiusVDW;
+                       break;
+       }
+       return 0.0;
 }
 
 KalziumDataObject::KalziumDataObject()
@@ -546,9 +597,12 @@ EList KalziumDataObject::readData(  QDomDocument &dataDocument )
                double mp = domElement.namedItem( "meltingpoint" ).toElement().text().toDouble();
                double bp = domElement.namedItem( "boilingpoint" ).toElement().text().toDouble();
                double density = domElement.namedItem( "density" ).toElement().text().toDouble();
-//X            double covalent_radius = domElement.namedItem( "radius" ).namedItem( "covalent" ).toElement().text().toDouble();
-//X            double ionic_radius = domElement.namedItem( "radius" ).namedItem( "ionic" ).toElement().text().toDouble();
-//X            QString ionic_charge = domElement.namedItem( "radius" ).namedItem( "ionic" ).toElement().attributeNode( "charge" ).value();
+               double covalent_radius = domElement.namedItem( "radius" ).namedItem( "covalent" ).toElement().text().toDouble();
+               //van der Walls-Radius
+               double vdw_radius = domElement.namedItem( "radius" ).namedItem( "vdw" ).toElement().text().toDouble();
+               double atomic_radius = domElement.namedItem( "radius" ).namedItem( "atomic" ).toElement().text().toDouble();
+               double ionic_radius = domElement.namedItem( "radius" ).namedItem( "ionic" ).toElement().text().toDouble();
+               QString ionic_charge = domElement.namedItem( "radius" ).namedItem( "ionic" ).toElement().attributeNode( "charge" ).value();
                
                int bio = domElement.namedItem( "biologicalmeaning" ).toElement().text().toInt();
                int az = domElement.namedItem( "aggregation" ).toElement().text().toInt();
@@ -583,7 +637,10 @@ EList KalziumDataObject::readData(  QDomDocument &dataDocument )
                e->setBiologicalMeaning(bio);
                e->setAggregation(az);
                e->setNumber( number );
-//             e->setIonicValues( ionic_radius, ionic_charge );
+               e->setRadius( Element::ATOMIC, atomic_radius );
+               e->setRadius( Element::IONIC, ionic_radius, ionic_charge );
+               e->setRadius( Element::COVALENT, covalent_radius );
+               e->setRadius( Element::VDW, vdw_radius );
                
                e->setScientist(scientist);
                e->setCrysatalstructure( crystal );
@@ -604,7 +661,6 @@ EList KalziumDataObject::readData(  QDomDocument &dataDocument )
                e->setMeltingpoint( mp );
                e->setBoilingpoint( bp );
                e->setDensity( density );
-//             e->setCovalentRadius( covalent_radius );
 
                e->setupXY();
 
index beac0bd4de4141e8d73c18993339f1ab64a5e5cc..f3a14f8122e8db36f5ed206c59b6a694f5a6b922 100644 (file)
@@ -109,6 +109,11 @@ class Element{
                 * the ion (for example, +2 or -3 )
                 */
                void setRadius( RADIUSTYPE type, double value, const QString& name = 0 );
+               
+               /**
+                * @return the value of the radius of the type @p type
+                */
+               double getRadius( RADIUSTYPE type );
 
                void setDate( int date ) { m_date = date; }
                void setBiologicalMeaning( int value ) { m_biological = value; }
@@ -195,6 +200,12 @@ class Element{
                QString elname() const {
                        return m_name;
                }
+
+               //FIXME I need to add a way to have more than one ionic radius
+               QString ioncharge() const{ 
+                       return m_ionvalue; 
+               }
+               
                /**
                 * @return the chemical block (s, p, d, f) of the element
                 */
@@ -303,6 +314,9 @@ class Element{
                 */
                const QString adjustUnits( const int type );
 
+               const QString adjustRadius( RADIUSTYPE rtype );
+
+
                /**
                 * needed for values stored in a QValueList<double>
                 */
@@ -358,7 +372,12 @@ class Element{
                        m_MP, 
                        m_BP, 
                        m_EN, 
-                       m_Density;
+                       m_Density,
+                       m_RadiusAR,
+                       m_RadiusCR,
+                       m_RadiusVDW,
+                       m_RadiusIon;
+               
 
                int     m_number, 
                        m_date,
@@ -376,7 +395,8 @@ class Element{
                        m_orbits,
                        m_isotopes,
                        m_scientist,
-                       m_crystalstructure;
+                       m_crystalstructure,
+                       m_ionvalue;
 
                doubleList m_ionenergies;