/* Copyright 2006-2017 The QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. QElectroTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QElectroTech. If not, see . */ #ifndef CUSTOM_ELEMENT_H #define CUSTOM_ELEMENT_H #include "element.h" #include "nameslist.h" #include "elementslocation.h" #include class Terminal; /** This class represents an electrical element; it may be used like a fixed element, the difference being that the CustomElement reads its description (names, drawing, behavior) from an XML document. */ class CustomElement : public Element { Q_OBJECT // constructors, destructor public: CustomElement (const ElementsLocation &, QGraphicsItem * = nullptr, int * = nullptr); ~CustomElement() override; private: CustomElement(const CustomElement &); // attributes protected: NamesList names; ElementsLocation location_; QPicture drawing; QPicture low_zoom_drawing; QList m_terminals; QList m_dynamic_texts; bool forbid_antialiasing; QList m_lines; QList m_rectangles; QList m_circles; QList *> m_polygons; QList *> m_arcs; // methods public: QList terminals() const override; QList conductors() const override; QList lines() const override; QList rectangles() const override; QList circles() const override; QList *> polygons() const override; QList *> arcs() const override; void paint(QPainter *, const QStyleOptionGraphicsItem *) override; QString typeId() const override; ElementsLocation location() const; QString name() const override; protected: virtual bool buildFromXml(const QDomElement &, int * = nullptr); virtual bool parseElement(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseLine(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseRect(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseEllipse(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseCircle(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseArc(QDomElement &, QPainter &, bool addtolist = true); virtual bool parsePolygon(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseText(QDomElement &, QPainter &, bool addtolist = true); virtual bool parseInput(QDomElement &); virtual DynamicElementTextItem *parseDynamicText(QDomElement &); virtual Terminal *parseTerminal(QDomElement &); virtual void setQPainterAntiAliasing(QPainter &, bool); virtual bool validOrientationAttribute(const QDomElement &); virtual void setPainterStyle(QDomElement &, QPainter &); }; /** @return The element type ID; considering a CustomElement, this means the @location of its XML description. @see location() */ inline QString CustomElement::typeId() const { return(location_.path()); } /** @return the location of the XML document describing this element. */ inline ElementsLocation CustomElement::location() const { return(location_); } /** @return The name of this element. */ inline QString CustomElement::name() const { return(names.name(location_.baseName())); } #endif