Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/SymbologyXML/symbol_reader.h
T
2026-08-13 18:33:10 +02:00

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