blob: a484377a562cea2805368f040e6f806c1864ac1f [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the tools applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef DOMTOOL_H
#define DOMTOOL_H
#include <QVariant>
QT_BEGIN_NAMESPACE
class QDomElement;
class QDomDocument;
class QDomNode;
class QDomNodeList;
struct Common
{
int kind;
enum {
Kind_Unknown = 0,
Kind_Color,
Kind_Point,
Kind_Size,
Kind_Rect,
Kind_Font,
Kind_SizePolicy,
Kind_Cursor
};
inline void init()
{ kind = Kind_Unknown; }
};
struct Color
{
Common common;
int red, green, blue;
inline void init(int r, int g, int b)
{
common.kind = Common::Kind_Color;
red = r;
green = g;
blue = b;
}
inline bool operator == (const Color &other) const
{ return red == other.red && green == other.green && blue == other.blue; }
};
struct Point
{
Common common;
int x, y;
inline void init(int x, int y)
{
common.kind = Common::Kind_Point;
this->x = x;
this->y = y;
}
};
struct Size
{
Common common;
int width, height;
inline bool isNull() const
{ return this->width == 0 && this->height == 0; }
inline void init(int width, int height)
{
common.kind = Common::Kind_Size;
this->width = width;
this->height = height;
}
};
struct Rect
{
Common common;
int x, y;
int width, height;
inline void init(int x, int y, int width, int height)
{
common.kind = Common::Kind_Rect;
this->x = x;
this->y = y;
this->width = width;
this->height = height;
}
};
struct Font
{
Common common;
char *family;
int pointsize;
bool bold;
bool italic;
bool underline;
bool strikeout;
inline void init()
{
common.kind = Common::Kind_Font;
family = 0;
pointsize = 0;
bold = false;
italic = false;
underline = false;
strikeout = false;
}
};
struct SizePolicy
{
Common common;
int hsizetype;
int vsizetype;
int horstretch;
int verstretch;
inline void init()
{
common.kind = Common::Kind_SizePolicy;
hsizetype = 0;
vsizetype = 0;
horstretch = 0;
verstretch = 0;
}
};
struct Cursor
{
Common common;
int shape;
inline void init(int shape)
{
common.kind = Common::Kind_Cursor;
this->shape = shape;
}
};
union Variant
{
Common common;
Color color;
Size size;
Point point;
Rect rect;
Font font;
SizePolicy sizePolicy;
Cursor cursor;
inline Variant()
{ common.kind = Common::Kind_Unknown; }
inline ~Variant()
{
if (common.kind == Common::Kind_Font) {
delete[] font.family;
font.family = 0;
}
}
inline int kind() const
{ return common.kind; }
inline Variant &createColor(int r, int g, int b)
{ color.init(r, g, b); return *this; }
inline Variant &createPoint(int x, int y)
{ point.init(x, y); return *this; }
inline Variant &createSize(int width, int height)
{ size.init(width, height); return *this; }
inline Variant &createRect(int x, int y, int w, int h)
{ rect.init(x, y, w, h); return *this; }
inline Variant &createFont()
{ font.init(); return *this; }
inline Variant &createSizePolicy()
{ sizePolicy.init(); return *this; }
inline Variant &createCursor(int shape)
{ cursor.init(shape); return *this; }
};
class DomTool
{
public:
static QVariant readProperty(const QDomElement& e, const QString& name, const QVariant& defValue);
static QVariant readProperty(const QDomElement& e, const QString& name, const QVariant& defValue, QString& comment);
static bool hasProperty(const QDomElement& e, const QString& name);
static QStringList propertiesOfType(const QDomElement& e, const QString& type);
static QVariant elementToVariant(const QDomElement& e, const QVariant& defValue);
static QVariant elementToVariant(const QDomElement& e, const QVariant& defValue, QString &comment);
static QVariant readAttribute(const QDomElement& e, const QString& name, const QVariant& defValue);
static QVariant readAttribute(const QDomElement& e, const QString& name, const QVariant& defValue, QString& comment);
static bool hasAttribute(const QDomElement& e, const QString& name);
static Color readColor(const QDomElement &e);
static void fixDocument(QDomDocument&);
static void fixAttributes(QDomNodeList&, double);
static void fixAttribute(QDomNode&, double);
};
QT_END_NAMESPACE
Q_DECLARE_METATYPE(Size)
Q_DECLARE_METATYPE(Rect)
Q_DECLARE_METATYPE(Font)
Q_DECLARE_METATYPE(SizePolicy)
Q_DECLARE_METATYPE(Cursor)
Q_DECLARE_METATYPE(Color)
Q_DECLARE_METATYPE(Point)
Q_DECLARE_METATYPE(Common)
Q_DECLARE_METATYPE(Variant)
QT_BEGIN_NAMESPACE
inline Variant asVariant(const QVariant &v)
{
Variant var;
var = qVariantValue<Variant>(v);
return var;
}
QT_END_NAMESPACE
#endif // DOMTOOL_H