File indexing completed on 2024-06-16 03:42:51

0001 /*
0002     File                 : SpiceFilter.h
0003     Project              : LabPlot
0004     Description          : Filters for reading spice files
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2022 Martin Marmsoler <martin.marmsoler@gmail.com>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #ifndef SPICEFILTER_H
0010 #define SPICEFILTER_H
0011 
0012 #include "backend/core/AbstractColumn.h"
0013 #include "backend/datasources/filters/AbstractFileFilter.h"
0014 
0015 class SpiceFilterPrivate;
0016 
0017 // NgSpice/LtSpice Filter
0018 class SpiceFilter : public AbstractFileFilter {
0019     Q_OBJECT
0020 
0021 public:
0022     SpiceFilter();
0023     ~SpiceFilter() override;
0024 
0025     static bool isSpiceFile(const QString& fileName, bool* binary = nullptr);
0026     static QString fileInfoString(const QString&);
0027 
0028     QVector<QStringList> preview(const QString& fileName, int lines);
0029     void
0030     readDataFromFile(const QString& fileName, AbstractDataSource* = nullptr, AbstractFileFilter::ImportMode = AbstractFileFilter::ImportMode::Replace) override;
0031     void write(const QString& fileName, AbstractDataSource*) override;
0032 
0033     QStringList vectorNames() const;
0034     QVector<AbstractColumn::ColumnMode> columnModes();
0035 
0036     void setStartRow(const int);
0037     int startRow() const;
0038     void setEndRow(const int);
0039     int endRow() const;
0040 
0041 #ifdef SPICEFILTERTEST_EN
0042     void setReaderBulkLineCount(int count) {
0043         mBulkLineCount = count;
0044     }
0045     int mBulkLineCount{100000};
0046 #endif
0047 
0048     void save(QXmlStreamWriter*) const override;
0049     bool load(XmlStreamReader*) override;
0050 
0051     static const QString xmlElementName;
0052 
0053 protected:
0054     std::unique_ptr<SpiceFilterPrivate> const d;
0055 };
0056 
0057 #endif // SPICEFILTER_H