File indexing completed on 2024-05-26 03:51:12
0001 /* 0002 File : JsonFilter.h 0003 Project : LabPlot 0004 Description : JSON I/O-filter. 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2018 Andrey Cygankov <craftplace.ms@gmail.com> 0007 SPDX-FileCopyrightText: 2018-2020 Alexander Semke <alexander.semke@web.de> 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #ifndef JSONFILTER_H 0012 #define JSONFILTER_H 0013 0014 #include "backend/core/AbstractColumn.h" 0015 #include "backend/datasources/filters/AbstractFileFilter.h" 0016 0017 #include <QJsonValue> 0018 0019 class QIODevice; 0020 class QJsonDocument; 0021 class QJsonModel; 0022 class JsonFilterPrivate; 0023 0024 class JsonFilter : public AbstractFileFilter { 0025 Q_OBJECT 0026 0027 public: 0028 enum class DataContainerType { Array, Object }; 0029 0030 JsonFilter(); 0031 ~JsonFilter() override; 0032 0033 static QStringList dataTypes(); 0034 static QStringList dataRowTypes(); 0035 static QString fileInfoString(const QString&); 0036 0037 // read data from any device 0038 void readDataFromDevice(QIODevice& device, AbstractDataSource*, AbstractFileFilter::ImportMode = AbstractFileFilter::ImportMode::Replace, int lines = -1); 0039 // overloaded function to read from file 0040 void 0041 readDataFromFile(const QString& fileName, AbstractDataSource* = nullptr, AbstractFileFilter::ImportMode = AbstractFileFilter::ImportMode::Replace) override; 0042 void write(const QString& fileName, AbstractDataSource*) override; 0043 0044 QVector<QStringList> preview(const QString& fileName, int lines); 0045 QVector<QStringList> preview(QIODevice& device, int lines); 0046 0047 void setDataRowType(const QJsonValue::Type); 0048 QJsonValue::Type dataRowType() const; 0049 0050 void setModel(QJsonModel*); 0051 void setModelRows(const QVector<int>&); 0052 QVector<int> modelRows() const; 0053 0054 void setDateTimeFormat(const QString&); 0055 QString dateTimeFormat() const; 0056 void setNumberFormat(QLocale::Language); 0057 QLocale::Language numberFormat() const; 0058 void setNaNValueToZero(const bool); 0059 bool NaNValueToZeroEnabled() const; 0060 void setCreateIndexEnabled(const bool); 0061 void setImportObjectNames(const bool); 0062 0063 QStringList vectorNames() const; 0064 QVector<AbstractColumn::ColumnMode> columnModes(); 0065 0066 void setStartRow(const int); 0067 int startRow() const; 0068 void setEndRow(const int); 0069 int endRow() const; 0070 void setStartColumn(const int); 0071 int startColumn() const; 0072 void setEndColumn(const int); 0073 int endColumn() const; 0074 0075 void save(QXmlStreamWriter*) const override; 0076 bool load(XmlStreamReader*) override; 0077 0078 private: 0079 std::unique_ptr<JsonFilterPrivate> const d; 0080 friend class JsonFilterPrivate; 0081 }; 0082 0083 #endif