/* Copyright 2006-2021 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 TERMINALSTRIP_H #define TERMINALSTRIP_H #include #include #include "terminalstripdata.h" #include "../properties/elementdata.h" class Element; class RealTerminal; class QETProject; class PhysicalTerminal; class TerminalStripIndex; class TerminalElement; struct RealTerminalData { QSharedPointer m_real_terminal; int level_ = 0; QString label_, Xref_, cable_, cable_wire_, conductor_; ElementData::TerminalType type_; ElementData::TerminalFunction function_; bool led_ = false, is_element = false; }; struct PhysicalTerminalData { QVector real_terminals_vector; int pos_ = -1; QSharedPointer physical_terminal; }; /** * @brief The TerminalStrip class * This class hold all the datas and configurations * of a terminal strip (but the not the visual aspect). * A terminal strip have some informations (name comment etc...) * and is composed by terminals (draw in a diagram or described in the terminal strip) */ class TerminalStrip : public QObject { friend class TerminalStripModel; Q_OBJECT public: TerminalStrip(QETProject *project); TerminalStrip(const QString &installation, const QString &location, const QString &name, QETProject *project); void setInstallation(const QString &installation); QString installation() const {return m_data.m_installation;} void setLocation(const QString &location); QString location() const {return m_data.m_location;} void setName(const QString &name); QString name() const {return m_data.m_name;} void setComment(const QString &comment); QString comment() const {return m_data.m_comment;} void setDescription(const QString &description); QString description() const {return m_data.m_description;} QUuid uuid() const {return m_data.m_uuid;} TerminalStripData data() const; void setData(const TerminalStripData &data); bool addTerminal (Element *terminal); bool removeTerminal (Element *terminal); bool haveTerminal (Element *terminal); int physicalTerminalCount() const; TerminalStripIndex index(int index = 0); PhysicalTerminalData physicalTerminalData(int index); QVector> terminalElement() const; static QString xmlTagName() {return QStringLiteral("terminal_strip");} QDomElement toXml(QDomDocument &parent_document); bool fromXml(QDomElement &xml_element); Element *elementForRealTerminal(QSharedPointer rt) const; private: QSharedPointer realTerminal(Element *terminal); QSharedPointer physicalTerminal(QSharedPointer terminal); RealTerminalData realTerminalData(QSharedPointer real_terminal); private: TerminalStripData m_data; QPointer m_project; QVector> m_terminal_elements_vector; QVector> m_real_terminals; QVector> m_physical_terminals; }; class TerminalStripIndex { friend class TerminalStrip; private : TerminalStripIndex () {} TerminalStripIndex (TerminalStripIndex *) {} public: bool isValid() const; QString label(int level = 0) const; QUuid uuid(int level = 0) const; bool isElement(int level = 0) const; TerminalElement *element(int level = 0) const; private: QVector m_label; QVector m_uuid; bool m_valid = false; QVector m_is_element; QVector m_element; }; #endif // TERMINALSTRIP_H