/** * @RDE_HEADER@ * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include "symbology_xml_export.h" #include "symbol.h" #include "primitive.h" #include #include #include #include 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 */ 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