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

0001 /*
0002     File                 : ReadStatFilter.h
0003     Project              : LabPlot
0004     Description          : ReadStat I/O-filter
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2021 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #ifndef READSTATFILTER_H
0010 #define READSTATFILTER_H
0011 
0012 #include "backend/datasources/filters/AbstractFileFilter.h"
0013 
0014 #ifdef HAVE_READSTAT
0015 #include <readstat.h>
0016 #endif
0017 
0018 class ReadStatFilterPrivate;
0019 
0020 class ReadStatFilter : public AbstractFileFilter {
0021     Q_OBJECT
0022 
0023 public:
0024     ReadStatFilter();
0025     ~ReadStatFilter() override;
0026 
0027 #ifdef HAVE_READSTAT
0028     static int getMetaData(readstat_metadata_t*, void*);
0029 #endif
0030 
0031     static QString fileInfoString(const QString&);
0032 
0033     QVector<QStringList> preview(const QString& fileName, int lines);
0034     void
0035     readDataFromFile(const QString& fileName, AbstractDataSource* = nullptr, AbstractFileFilter::ImportMode = AbstractFileFilter::ImportMode::Replace) override;
0036     void write(const QString& fileName, AbstractDataSource*) override;
0037 
0038     QStringList vectorNames() const;
0039     QVector<AbstractColumn::ColumnMode> columnModes() const;
0040 
0041     // TODO: put into base class?
0042     void setStartRow(const int);
0043     int startRow() const;
0044     void setEndRow(const int);
0045     int endRow() const;
0046     void setStartColumn(const int);
0047     int startColumn() const;
0048     void setEndColumn(const int);
0049     int endColumn() const;
0050 
0051     void save(QXmlStreamWriter*) const override;
0052     bool load(XmlStreamReader*) override;
0053 
0054 private:
0055     std::unique_ptr<ReadStatFilterPrivate> const d;
0056     friend class ReadStatFilterPrivate;
0057 };
0058 
0059 #endif