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

0001 /*
0002     File                 : OriginProjectParser.h
0003     Project              : LabPlot
0004     Description          : parser for Origin projects
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2017-2024 Alexander Semke <alexander.semke@web.de>
0007     SPDX-FileCopyrightText: 2018-2021 Stefan Gerlach <stefan.gerlach@uni.kn>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef ORIGINPROJECTPARSER_H
0012 #define ORIGINPROJECTPARSER_H
0013 
0014 #include "backend/datasources/projects/ProjectParser.h"
0015 #include "backend/worksheet/Background.h"
0016 #include <OriginFile.h>
0017 
0018 class Axis;
0019 class CartesianPlot;
0020 class Column;
0021 class Project;
0022 class Workbook;
0023 class Spreadsheet;
0024 class Matrix;
0025 class TextLabel;
0026 class Worksheet;
0027 class Note;
0028 class XYCurve;
0029 
0030 class OriginProjectParser : public ProjectParser {
0031     Q_OBJECT
0032 
0033 public:
0034     OriginProjectParser();
0035     ~OriginProjectParser() override;
0036 
0037     static bool isOriginProject(const QString& fileName);
0038     static QString supportedExtensions();
0039 
0040     void checkContent(bool& hasUnusedObjects, bool& hasMultiLayers);
0041     void setImportUnusedObjects(bool);
0042     void setGraphLayerAsPlotArea(bool);
0043 
0044 protected:
0045     bool load(Project*, bool preview) override;
0046 
0047 private:
0048     bool loadFolder(Folder*, tree<Origin::ProjectNode>::iterator, bool preview);
0049     bool loadWorkbook(Workbook*, bool preview);
0050     bool loadSpreadsheet(Spreadsheet*, bool preview, const QString& wbName = QString(), int sheetIndex = -1);
0051     void loadColumnNumericFormat(const Origin::SpreadColumn& originColumn, Column* column) const;
0052     bool loadMatrixWorkbook(Workbook*, bool preview);
0053     bool loadMatrix(Matrix*, bool preview, size_t sheetIndex = 0, const QString& mwbName = QString());
0054 
0055     bool loadWorksheet(Worksheet*, bool preview);
0056     void loadGraphLayer(const Origin::GraphLayer&, CartesianPlot*, int layerIndex, QHash<TextLabel*, QSizeF>& textLabelPositions, bool preview);
0057     void loadCurves(const Origin::GraphLayer&, CartesianPlot*, int layerIndex, bool preview);
0058     void loadAxes(const Origin::GraphLayer&, CartesianPlot*, int layerIndex, const QString& xColumnInfo, const QString& yColumnInfo);
0059     void loadAxis(const Origin::GraphAxis&, Axis*, int layerIndex, int index, const QString& columnInfo = QString()) const;
0060     void loadCurve(const Origin::GraphCurve&, XYCurve*) const;
0061 
0062     bool loadNote(Note*, bool preview);
0063     void handleLooseWindows(Folder*, bool preview);
0064 
0065     bool hasUnusedObjects();
0066     bool hasMultiLayerGraphs();
0067 
0068     unsigned int findSpreadsheetByName(const QString&);
0069     unsigned int findColumnByName(Origin::SpreadSheet&, const QString&);
0070     unsigned int findMatrixByName(const QString&);
0071     unsigned int findWorkbookByName(const QString&);
0072     unsigned int findWorksheetByName(const QString&);
0073     unsigned int findNoteByName(const QString&);
0074     Origin::SpreadSheet getSpreadsheetByName(QString&);
0075     QString parseOriginText(const QString&) const;
0076     QString parseOriginTags(const QString&) const;
0077     QDateTime creationTime(tree<Origin::ProjectNode>::iterator) const;
0078     QColor color(Origin::Color) const;
0079     Background::ColorStyle backgroundColorStyle(Origin::ColorGradientDirection) const;
0080 
0081     QList<QPair<QString, QString>> charReplacementList() const;
0082     QString replaceSpecialChars(const QString&) const;
0083 
0084     OriginFile* m_originFile{nullptr};
0085     QStringList m_spreadsheetNameList;
0086     QStringList m_workbookNameList;
0087     QStringList m_matrixNameList;
0088     QStringList m_worksheetNameList;
0089     QStringList m_noteNameList;
0090     QString m_legendText;
0091     bool m_importUnusedObjects{false};
0092     bool m_graphLayerAsPlotArea{true};
0093     double textScalingFactor{1.};
0094     double elementScalingFactor{1.};
0095     QSize graphSize;
0096 
0097     friend class ProjectImportTest;
0098 };
0099 
0100 #endif // ORIGINPROJECTPARSER_H