diff --git a/sources/properties/elementdata.cpp b/sources/properties/elementdata.cpp new file mode 100644 index 000000000..5044ceece --- /dev/null +++ b/sources/properties/elementdata.cpp @@ -0,0 +1,232 @@ +/* + 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 . +*/ +#include "elementdata.h" +#include "../qetxml.h" +#include + +void ElementData::toSettings(QSettings &settings, const QString prefix) const { + Q_UNUSED(settings) + Q_UNUSED(prefix) +} + +void ElementData::fromSettings(const QSettings &settings, const QString prefix) { + Q_UNUSED(settings) + Q_UNUSED(prefix) +} + +QDomElement ElementData::toXml(QDomDocument &xml_element) const { + Q_UNUSED(xml_element) + return QDomElement(); +} + +/** + * @brief ElementData::fromXml + * load properties from xml element. + * The tag name of xml_element must be definition + * and have an attribute "type" + * @param xml_element : tagName must be 'definition' + * @return true is successfuly loaded + */ +bool ElementData::fromXml(const QDomElement &xml_element) +{ + if(xml_element.tagName() != "definition" || + xml_element.attribute("type") != "element") { + return false; + } + + m_type = typeFromString(xml_element.attribute("link_type", "simple")); + kindInfoFromXml(xml_element); + m_informations.fromXml(xml_element.firstChildElement("elementInformations"), + "elementInformation"); + m_names_list.fromXml(xml_element); + + auto xml_draw_info = xml_element.firstChildElement("informations"); + if(xml_draw_info.tagName() == "informations") { + m_drawing_information = xml_draw_info.text(); + } + + return true; +} + +QString ElementData::typeToString(ElementData::Type type) +{ + switch (type) { + case ElementData::Simple : + return QString("simple"); + case ElementData::NextReport : + return QString ("next_report"); + case ElementData::PreviousReport : + return QString("previous_report"); + case ElementData::Master : + return QString("master"); + case ElementData::Slave : + return QString("slave"); + case ElementData::Terminale : + return QString("terminal"); + default: + qDebug() << "ElementData::typeToString : type don't exist" + << "return failsafe value 'simple'"; + return QString("simple"); + } +} + +ElementData::Type ElementData::typeFromString(const QString &string) +{ + if (string == "simple") { + return ElementData::Simple; + } else if (string == "next_report") { + return ElementData::NextReport; + } else if (string == "previous_report") { + return ElementData::PreviousReport; + } else if (string == "master") { + return ElementData::Master; + } else if (string == "slave") { + return ElementData::Slave; + } else if (string == "terminal") { + return ElementData::Terminale; + } + + //Return simple if nothing match + qDebug() << "ElementData::typeFromString : string " + << string + << " don't exist, return failsafe value 'simple"; + return ElementData::Simple; +} + +QString ElementData::masterTypeToString(ElementData::MasterType type) +{ + switch (type) { + case ElementData::Coil: + return QString ("coil"); + case ElementData::Protection: + return QString ("protection"); + case ElementData::Commutator: + return QString ("commutator"); + } +} + +ElementData::MasterType ElementData::masterTypeFromString(const QString &string) +{ + if (string == "coil") { + return ElementData::Coil; + } else if (string == "protection") { + return ElementData::Protection; + } else if (string == "commutator") { + return ElementData::Commutator; + } + + qDebug() << "ElementData::masterTypeFromString : string " + << string + << " don't exist, return failsafe value 'coil'"; + return ElementData::Coil; +} + +QString ElementData::slaveTypeToString(ElementData::SlaveType type) +{ + switch (type) { + case ElementData::SSimple: + return QString ("simple"); + case ElementData::Power: + return QString ("power"); + case ElementData::DelayOn: + return QString("delayOn"); + case ElementData::DelayOff: + return QString("delayOff"); + case ElementData::delayOnOff: + return QString("delayOnOff"); + } +} + +ElementData::SlaveType ElementData::slaveTypeFromString(const QString &string) +{ + if (string == "simple") { + return ElementData::SSimple; + } else if (string == "power") { + return ElementData::Power; + } else if (string == "delayOn") { + return ElementData::DelayOn; + } else if (string == "delayOff") { + return ElementData::DelayOff; + } else if (string == "delayOnOff") { + return ElementData::delayOnOff; + } + + qDebug() << "ElementData::slaveTypeFromSting : string " + << string + << " don't exist, return failsafe value 'simple'"; + return ElementData::SSimple; +} + +QString ElementData::slaveStateToString(ElementData::SlaveState type) +{ + switch (type) { + case NO: + return QString("NO"); + case NC: + return QString("NC"); + case SW: + return QString("SW"); + } +} + +ElementData::SlaveState ElementData::slaveStateFromString(const QString &string) +{ + if (string == "NO") { + return ElementData::NO; + } else if (string == "NC") { + return ElementData::NC; + } else if (string == "SW") { + return ElementData::SW; + } + + qDebug() << "ElementData::slaveStateFromString : string : " + << string + << " don't exist, return failsafe value 'NO'"; + return ElementData::NO; +} + +void ElementData::kindInfoFromXml(const QDomElement &xml_element) +{ + if (m_type != ElementData::Master || + m_type != ElementData::Slave) { + return; + } + + auto xml_kind = xml_element.firstChildElement("kindInformations"); + for (auto dom_elmt : QETXML::findInDomElement(xml_kind, "kindInformation")) + { + if (!dom_elmt.hasAttribute("name")) { + continue; + } + auto name = dom_elmt.attribute("name"); + + if (m_type == ElementData::Master && + name == "type") { + m_master_type = masterTypeFromString(dom_elmt.text()); + } + else if (m_type == ElementData::Slave ) { + if (name == "type") { + m_slave_type = slaveTypeFromString(dom_elmt.text()); + } else if (name == "state") { + m_slave_state = slaveStateFromString(dom_elmt.text()); + } else if (name == "number") { + m_contact_count = dom_elmt.text().toInt(); + } + } + } +} diff --git a/sources/properties/elementdata.h b/sources/properties/elementdata.h new file mode 100644 index 000000000..c15b80752 --- /dev/null +++ b/sources/properties/elementdata.h @@ -0,0 +1,103 @@ +/* + 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 ELEMENTDATA_H +#define ELEMENTDATA_H + +#include "propertiesinterface.h" +#include "../diagramcontext.h" +#include "../NameList/nameslist.h" + +/** + * @brief The ElementData class + * WARNING + * This class inherit from PropertiesInterface but + * only fromXml is actually reimplemented. + */ +class ElementData : public PropertiesInterface +{ + Q_GADGET + + public: + enum Type { + Simple = 1, + NextReport = 2, + PreviousReport = 4, + AllReport = 6, + Master = 8, + Slave = 16, + Terminale = 32}; + Q_ENUM(Type) + + enum MasterType { + Coil, + Protection, + Commutator + }; + Q_ENUM(MasterType) + + enum SlaveType { + SSimple, + Power, + DelayOn, + DelayOff, + delayOnOff + }; + Q_ENUM(SlaveType) + + enum SlaveState { + NO, + NC, + SW + }; + Q_ENUM(SlaveState) + + ElementData() {} + ~ElementData() override {} + + void toSettings(QSettings &settings, const QString prefix = QString()) const override; + void fromSettings(const QSettings &settings, const QString prefix = QString()) override; + QDomElement toXml(QDomDocument &xml_element) const override; + bool fromXml(const QDomElement &xml_element) override; + + static QString typeToString(ElementData::Type type); + static ElementData::Type typeFromString(const QString &string); + + static QString masterTypeToString(ElementData::MasterType type); + static ElementData::MasterType masterTypeFromString(const QString &string); + + static QString slaveTypeToString (ElementData::SlaveType type); + static ElementData::SlaveType slaveTypeFromString(const QString &string); + + static QString slaveStateToString(ElementData::SlaveState type); + static ElementData::SlaveState slaveStateFromString(const QString &string); + + // must be public, because this class is a private member + // of Element/ element editor and they must access this data + ElementData::Type m_type = ElementData::Simple; + ElementData::MasterType m_master_type = ElementData::Coil; + ElementData::SlaveType m_slave_type = ElementData::SSimple; + ElementData::SlaveState m_slave_state = ElementData::NO; + int m_contact_count = 1; + DiagramContext m_informations; + NamesList m_names_list; + QString m_drawing_information; + + private: + void kindInfoFromXml(const QDomElement &xml_element); +}; +#endif // ELEMENTDATA_H