File indexing completed on 2024-06-23 03:46:16

0001 /*
0002     File                 : AbstractFileFilter.h
0003     Project              : LabPlot
0004     Description          : file I/O-filter related interface
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2009-2018 Alexander Semke <alexander.semke@web.de>
0007     SPDX-FileCopyrightText: 2017 Stefan Gerlach <stefan.gerlach@uni.kn>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #ifndef ABSTRACTFILEFILTER_H
0013 #define ABSTRACTFILEFILTER_H
0014 
0015 #include "backend/core/AbstractColumn.h"
0016 #include <QLocale>
0017 #include <QObject>
0018 #include <memory> // smart pointer
0019 
0020 class AbstractDataSource;
0021 class XmlStreamReader;
0022 class QXmlStreamWriter;
0023 class KConfig;
0024 
0025 class AbstractFileFilter : public QObject {
0026     Q_OBJECT
0027     Q_ENUMS(FileType)
0028     Q_ENUMS(ImportMode)
0029 
0030 public:
0031     enum class FileType { Ascii, Binary, XLSX, Ods, Image, HDF5, NETCDF, FITS, JSON, ROOT, Spice, READSTAT, MATIO, VECTOR_BLF };
0032     enum class ImportMode { Append, Prepend, Replace };
0033 
0034     explicit AbstractFileFilter(FileType type)
0035         : m_type(type) {
0036     }
0037     ~AbstractFileFilter() override = default;
0038 
0039     static bool isNan(const QString&);
0040     static AbstractColumn::ColumnMode columnMode(const QString& valueString, QString& dateTimeFormat, QLocale::Language);
0041     static AbstractColumn::ColumnMode columnMode(const QString& valueString, QString& dateTimeFormat, const QLocale& = QLocale());
0042     static QString dateTimeFormat(const QString& valueString);
0043     static QStringList numberFormats();
0044     static AbstractFileFilter::FileType fileType(const QString&);
0045     static QStringList fileTypes();
0046     static QString convertFromNumberToColumn(int n);
0047 
0048     virtual void readDataFromFile(const QString& fileName, AbstractDataSource* = nullptr, ImportMode = ImportMode::Replace) = 0;
0049     virtual void write(const QString& fileName, AbstractDataSource*) = 0;
0050 
0051     virtual QStringList lastErrors();
0052 
0053     // save/load in the project XML
0054     virtual void save(QXmlStreamWriter*) const = 0;
0055     virtual bool load(XmlStreamReader*) = 0;
0056 
0057     FileType type() const {
0058         return m_type;
0059     }
0060 
0061 Q_SIGNALS:
0062     void completed(int) const; //!< int ranging from 0 to 100 notifies about the status of a read/write process
0063 
0064 protected:
0065     const FileType m_type;
0066 };
0067 
0068 #endif