domUtils.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 
00003  Copyright (C) 2002-2013 Gilles Debunne. All rights reserved.
00004 
00005  This file is part of the QGLViewer library version 2.4.0.
00006 
00007  http://www.libqglviewer.com - contact@libqglviewer.com
00008 
00009  This file may be used under the terms of the GNU General Public License 
00010  versions 2.0 or 3.0 as published by the Free Software Foundation and
00011  appearing in the LICENSE file included in the packaging of this file.
00012  In addition, as a special exception, Gilles Debunne gives you certain 
00013  additional rights, described in the file GPL_EXCEPTION in this package.
00014 
00015  libQGLViewer uses dual licensing. Commercial/proprietary software must
00016  purchase a libQGLViewer Commercial License.
00017 
00018  This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00019  WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00020 
00021 *****************************************************************************/
00022 
00023 #include "config.h"
00024 
00025 #if QT_VERSION >= 0x040000
00026 # include <QDomElement>
00027 # include <QString>
00028 # include <QStringList>
00029 # include <QColor>
00030 #else
00031 # include <qapplication.h>
00032 # include <qdom.h>
00033 # include <qstring.h>
00034 # include <qstringlist.h>
00035 # include <qcolor.h>
00036 #endif
00037 
00038 #include <math.h>
00039 
00040 #ifndef DOXYGEN
00041 
00042 // QDomElement loading with syntax checking.
00043 class DomUtils
00044 {
00045 private:
00046   static void warning(const QString& message)
00047   {
00048 #if QT_VERSION >= 0x040000
00049     qWarning("%s", message.toLatin1().constData());
00050 #else
00051     qWarning("%s", message.latin1());
00052 #endif
00053   }
00054 
00055 public:
00056   static float floatFromDom(const QDomElement& e, const QString& attribute, float defValue)
00057   {
00058     float value = defValue;
00059     if (e.hasAttribute(attribute)) {
00060         const QString s = e.attribute(attribute);
00061         bool ok;
00062         value = s.toFloat(&ok);
00063         if (!ok) {
00064           warning("Bad float syntax for attribute \""+attribute+"\" in initialization of \""+e.tagName()+"\". Setting value to "+QString::number(value)+".");
00065           value = defValue;
00066         }
00067     } else
00068       warning("\""+attribute+"\" attribute missing in initialization of \""+e.tagName()+"\". Setting value to "+QString::number(value)+".");
00069 
00070 #if defined(isnan)
00071     // The "isnan" method may not be available on all platforms.
00072     // Find its equivalent or simply remove these two lines
00073     if (isnan(value))
00074       warning("Warning, attribute \""+attribute+"\" initialized to Not a Number in \""+e.tagName()+"\"");
00075 #endif
00076 
00077     return value;
00078   }
00079 
00080   static double doubleFromDom(const QDomElement& e, const QString& attribute, double defValue)
00081   {
00082     double value = defValue;
00083     if (e.hasAttribute(attribute)) {
00084       const QString s = e.attribute(attribute);
00085       bool ok;
00086       value = s.toDouble(&ok);
00087       if (!ok) {
00088         warning("Bad double syntax for attribute \""+attribute+"\" in initialization of \""+e.tagName()+"\". Setting value to "+QString::number(value)+".");
00089         value = defValue;
00090       }
00091     } else
00092       warning("\""+attribute+"\" attribute missing in initialization of \""+e.tagName()+"\". Setting value to "+QString::number(value)+".");
00093 
00094 #if defined(isnan)
00095     // The "isnan" method may not be available on all platforms.
00096     // Find its equivalent or simply remove these two lines
00097     if (isnan(value))
00098       warning("Warning, attribute \""+attribute+"\" initialized to Not a Number in \""+e.tagName()+"\"");
00099 #endif
00100 
00101     return value;
00102   }
00103 
00104   static int intFromDom(const QDomElement& e, const QString& attribute, int defValue)
00105   {
00106     int value = defValue;
00107     if (e.hasAttribute(attribute))
00108       {
00109     const QString s = e.attribute(attribute);
00110     bool ok;
00111     s.toInt(&ok);
00112     if (ok)
00113       value = s.toInt();
00114     else
00115       warning("Bad integer syntax for attribute \""+attribute+"\" in initialization of \""+e.tagName()+"\". Setting value to "+QString::number(value)+".");
00116       }
00117     else
00118       warning("\""+attribute+"\" attribute missing in initialization of \""+e.tagName()+"\". Setting value to "+QString::number(value)+".");
00119     return value;
00120   }
00121 
00122   static bool boolFromDom(const QDomElement& e, const QString& attribute, bool defValue)
00123   {
00124     bool value = defValue;
00125     if (e.hasAttribute(attribute))
00126       {
00127     const QString s = e.attribute(attribute);
00128 #if QT_VERSION >= 0x040000
00129     if (s.toLower() == QString("true"))
00130 #else
00131     if (s.lower() == QString("true"))
00132 #endif
00133       value = true;
00134 #if QT_VERSION >= 0x040000
00135     else if (s.toLower() == QString("false"))
00136 #else
00137     else if (s.lower() == QString("false"))
00138 #endif
00139       value = false;
00140     else
00141       {
00142         warning("Bad boolean syntax for attribute \""+attribute+"\" in initialization of \""+e.tagName()+"\" (should be \"true\" or \"false\").");
00143         warning("Setting value to "+(value?QString("true."):QString("false.")));
00144       }
00145       }
00146     else
00147       warning("\""+attribute+"\" attribute missing in initialization of \""+e.tagName()+"\". Setting value to "+(value?QString("true."):QString("false.")));
00148     return value;
00149   }
00150 
00151   static QDomElement QColorDomElement(const QColor& color, const QString& name, QDomDocument& doc)
00152   {
00153     QDomElement de = doc.createElement(name);
00154     de.setAttribute("red", QString::number(color.red()));
00155     de.setAttribute("green", QString::number(color.green()));
00156     de.setAttribute("blue", QString::number(color.blue()));
00157     return de;
00158   }
00159 
00160   static QColor QColorFromDom(const QDomElement& e)
00161   {
00162     int color[3];
00163     QStringList attribute;
00164     attribute << "red" << "green" << "blue";
00165 #if QT_VERSION >= 0x040000
00166     for (int i=0; i<attribute.count(); ++i)
00167 #else
00168     for (unsigned int i=0; i<attribute.count(); ++i)
00169 #endif
00170       color[i] = DomUtils::intFromDom(e, attribute[i], 0);
00171     return QColor(color[0], color[1], color[2]);
00172   }
00173 };
00174 
00175 #endif // DOXYGEN


octovis
Author(s): Kai M. Wurm , Armin Hornung
autogenerated on Thu Feb 11 2016 23:51:19