227 lines
6.8 KiB
C++
Executable File
227 lines
6.8 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "symbology_xml_export.h"
|
|
|
|
#include "symbol.h"
|
|
#include "primitive.h"
|
|
|
|
#include <QColor>
|
|
#include <QString>
|
|
#include <QXmlStreamReader>
|
|
|
|
#include <NGLLogger/INGLLogger.h>
|
|
|
|
class QBuffer;
|
|
class QFile;
|
|
|
|
|
|
namespace SymbologyXML
|
|
{
|
|
/**
|
|
\brief Read a Symbol from a XML-File or XML-String.
|
|
|
|
Symbols are stored as XML-Files on HD or in a database. This class reads a
|
|
XML-Description of a Symbol and writes the data into a given Symbol. To export
|
|
a Symbol to XML, use SymbolWriter.
|
|
|
|
@author Stephan Kuhagen <stephan.kuhagen@rheinmetall.com>
|
|
*/
|
|
class SYMBOLOGY_XML_EXPORT SymbolReader : public QXmlStreamReader {
|
|
public:
|
|
SymbolReader();
|
|
~SymbolReader();
|
|
|
|
/**
|
|
Read a symbol from a file
|
|
\param xml: The file containing the XML-description of the symbol
|
|
\param target: The symbol, where the data should go
|
|
\return true on success, false otherwise
|
|
*/
|
|
bool read(QFile *xml, Symbol &target);
|
|
|
|
/**
|
|
Read a symbol from a string
|
|
\param xml: The file containing the XML-description of the symbol
|
|
\param target: The symbol, where the data should go
|
|
\return true on success, false otherwise
|
|
*/
|
|
bool read(const QString &xml, Symbol &target);
|
|
|
|
/**
|
|
Read a symbol from a string
|
|
\param xml: The file containing the XML-description of the symbol
|
|
\param target: The symbol, where the data should go
|
|
\return true on success, false otherwise
|
|
*/
|
|
bool read(const QByteArray &xml, Symbol &target);
|
|
|
|
private:
|
|
//! NGLLogger
|
|
NGL::INGLLogger& logger;
|
|
|
|
/**
|
|
Read a symbol from the current IODevice. The IODevice is set and created
|
|
the string of file of the public read()-methods
|
|
\return true on success, false otherwise
|
|
*/
|
|
bool read();
|
|
|
|
//! Read an unknown element until a close-tag is found
|
|
void readUnknownElement();
|
|
|
|
//! Read a symbol-element
|
|
void readSymbol();
|
|
//! Read a name-element
|
|
void readName();
|
|
//! Read a branch-element
|
|
void readBranch();
|
|
//! Read the APP6-Classification
|
|
void readApp6Class();
|
|
//! Read a misc-element
|
|
void readMisc();
|
|
//! Read a text-element
|
|
void readText(unsigned int lines);
|
|
//! Read a graphic-element
|
|
void readGraphic();
|
|
/**
|
|
Read a data-element
|
|
\param align: Pointer to a t_alignment-variable
|
|
\return The data as a string
|
|
*/
|
|
QString readData(Symbol::t_alignment* align);
|
|
|
|
//! Read a ellipse-element
|
|
void readGEllipse();
|
|
//! Read a line-element
|
|
void readGLine();
|
|
//! Read a polygon-element
|
|
void readGPolygon();
|
|
//! Read a rect-element
|
|
void readGRect();
|
|
//! Read a icon-element
|
|
void readGIcon();
|
|
//! Read a text-element
|
|
void readGText();
|
|
//! Read a point-element
|
|
QPointF readGPoint();
|
|
|
|
/**
|
|
Parse a bool-attribute
|
|
\param name: The name of the Attribute
|
|
\param def: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
bool getAttribBool(const char *name, bool def = false, bool implied = false);
|
|
|
|
/**
|
|
Parse a double-attribute
|
|
\param name: The name of the Attribute
|
|
\param def: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
double getAttribDouble(const char *name, double def = 0.0, bool implied = false);
|
|
|
|
/**
|
|
Parse a int-attribute
|
|
\param name: The name of the Attribute
|
|
\param def: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
int getAttribInt(const char *name, int def = 0, bool implied = false);
|
|
|
|
/**
|
|
Parse a linestyle-attribute
|
|
\param default: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
Primitive::t_linestyle getAttribLineStyle();
|
|
|
|
/**
|
|
Parse a Position-attribute
|
|
\param default: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
SymbolTypes::t_sector_position getAttribPosition(SymbolTypes::t_sector_position def = SymbolTypes::SECTOR_POSITION_UNDEFINED);
|
|
|
|
/**
|
|
Parse a Rectpos-attribute
|
|
\param default: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
SymbolTypes::t_sector_rectpos getAttribRectpos(SymbolTypes::t_sector_rectpos def = SymbolTypes::SECTOR_RECTPOS_DEFAULT);
|
|
|
|
/**
|
|
Parse a scalemode-attribute
|
|
\param default: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
Primitive::t_scalemode getAttribScalemode(Primitive::t_scalemode def = Primitive::Scalemode_Proport);
|
|
|
|
/**
|
|
Parse a linestyle-attribute
|
|
\param default: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
\param implied: If true, then the Attribute is implied and if not present
|
|
in the XML-Data, then default is returned.
|
|
*/
|
|
QString getAttribString(const char *name);
|
|
|
|
/**
|
|
Parse a color-attribute
|
|
\param default: The default-value, if implied==true and the Attribute is not
|
|
in the XML-Data.
|
|
*/
|
|
QColor getAttribColor(const QColor &def = QColor());
|
|
|
|
|
|
/**
|
|
Concatinate filename and symbol id for debug-output.
|
|
\return filename and symbol for debug
|
|
*/
|
|
QString getDebugInfo() const;
|
|
|
|
/**
|
|
Creates a primitive ICON
|
|
\return primitive
|
|
*/
|
|
Primitive *newPrimitiveICON(SymbolTypes::t_icon_type iconType,
|
|
SymbolTypes::t_sector_position pos, SymbolTypes::t_sector_rectpos rectpos,
|
|
int id);
|
|
Primitive *newMiscPrimitiveICON(const QStringRef &attrib);
|
|
|
|
//! Buffer containing the QString from read() with QString
|
|
QBuffer* _buffer;
|
|
//! Pointer to the symbol, where the data should go
|
|
Symbol* _symbol;
|
|
//! Save the symbols transformed-flag until parsing is complete
|
|
bool _transformed;
|
|
|
|
//! Save the filename for debuuging
|
|
QString _filename;
|
|
|
|
}; // class SymbolReader : public QXmlStreamReader
|
|
|
|
}; // namespace SymologyXML
|
|
|