File indexing completed on 2024-06-23 03:46:27
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