############################################################################## ################## Serialization/Deserialization ########################### ############################################################################## ! Saves as XML. */
| 778 | Saves as XML. |
| 779 | */ |
| 780 | void LiveDataSource::save(QXmlStreamWriter* writer) const { |
| 781 | writer->writeStartElement(QStringLiteral("liveDataSource")); |
| 782 | writeBasicAttributes(writer); |
| 783 | writeCommentElement(writer); |
| 784 | |
| 785 | // general |
| 786 | writer->writeStartElement(QStringLiteral("general")); |
| 787 | |
| 788 | switch (m_sourceType) { |
| 789 | case SourceType::FileOrPipe: |
| 790 | writer->writeAttribute(QStringLiteral("fileType"), QString::number(static_cast<int>(m_fileType))); |
| 791 | writer->writeAttribute(QStringLiteral("fileLinked"), QString::number(m_fileLinked)); |
| 792 | writer->writeAttribute(QStringLiteral("relativePath"), QString::number(m_relativePath)); |
| 793 | if (m_relativePath) { |
| 794 | // convert from the absolute to the relative path and save it |
| 795 | const Project* p = const_cast<LiveDataSource*>(this)->project(); |
| 796 | QFileInfo fi(p->fileName()); |
| 797 | writer->writeAttribute(QStringLiteral("fileName"), fi.dir().relativeFilePath(m_fileName)); |
| 798 | } else |
| 799 | writer->writeAttribute(QStringLiteral("fileName"), m_fileName); |
| 800 | |
| 801 | break; |
| 802 | case SourceType::SerialPort: |
| 803 | writer->writeAttribute(QStringLiteral("baudRate"), QString::number(m_baudRate)); |
| 804 | writer->writeAttribute(QStringLiteral("serialPortName"), m_serialPortName); |
| 805 | break; |
| 806 | case SourceType::NetworkTCPSocket: |
| 807 | case SourceType::NetworkUDPSocket: |
| 808 | writer->writeAttribute(QStringLiteral("host"), m_host); |
| 809 | writer->writeAttribute(QStringLiteral("port"), QString::number(m_port)); |
| 810 | break; |
| 811 | case SourceType::LocalSocket: |
| 812 | break; |
| 813 | case SourceType::MQTT: |
| 814 | break; |
| 815 | } |
| 816 | |
| 817 | writer->writeAttribute(QStringLiteral("updateType"), QString::number(static_cast<int>(m_updateType))); |
| 818 | writer->writeAttribute(QStringLiteral("readingType"), QString::number(static_cast<int>(m_readingType))); |
| 819 | writer->writeAttribute(QStringLiteral("sourceType"), QString::number(static_cast<int>(m_sourceType))); |
| 820 | writer->writeAttribute(QStringLiteral("keepNValues"), QString::number(m_keepNValues)); |
| 821 | |
| 822 | if (m_updateType == UpdateType::TimeInterval) |
| 823 | writer->writeAttribute(QStringLiteral("updateInterval"), QString::number(m_updateInterval_ms)); |
| 824 | |
| 825 | if (m_readingType != ReadingType::TillEnd) |
| 826 | writer->writeAttribute(QStringLiteral("sampleSize"), QString::number(m_sampleSize)); |
| 827 | writer->writeEndElement(); // general |
| 828 | |
| 829 | // filter |
| 830 | if (m_filter) { |
| 831 | // If older project do not have loaded the filter correctly |
| 832 | // The filter might not be available. So check before saving |
| 833 | m_filter->save(writer); |
| 834 | } |
| 835 | |
| 836 | // columns |
| 837 | if (!m_fileLinked) { |