File indexing completed on 2026-08-09 11:32:21
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2002 Norbert Andres <nandres@web.de> 0003 SPDX-FileCopyrightText: 2004 Montel Laurent <montel@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef OpenCalc_IMPORT_H__ 0009 #define OpenCalc_IMPORT_H__ 0010 0011 #include "sheets/engine/Format.h" 0012 0013 #include <KoFilter.h> 0014 0015 #include <QHash> 0016 #include <QDomDocument> 0017 #include <QByteArray> 0018 #include <KoXmlReader.h> 0019 #include <QVariantList> 0020 0021 class KoStyleStack; 0022 class KoStore; 0023 0024 namespace Calligra 0025 { 0026 namespace Sheets 0027 { 0028 class Cell; 0029 class Conditional; 0030 class DocBase; 0031 class Map; 0032 class Sheet; 0033 class Style; 0034 class Validity; 0035 class ValueParser; 0036 } 0037 } 0038 0039 class OpenCalcImport : public KoFilter 0040 { 0041 Q_OBJECT 0042 public: 0043 OpenCalcImport(QObject * parent, const QVariantList &); 0044 ~OpenCalcImport() override; 0045 0046 KoFilter::ConversionStatus convert(QByteArray const & from, QByteArray const & to) override; 0047 0048 0049 private: 0050 0051 class OpenCalcPoint 0052 { 0053 public: 0054 explicit OpenCalcPoint(const QString &str, Calligra::Sheets::Map *map); 0055 0056 QString table; 0057 QString translation; 0058 QPoint topLeft; 0059 QPoint botRight; 0060 bool isRange; 0061 }; 0062 0063 enum bPos { Left, Top, Right, Bottom, Fall, GoUp, Border }; 0064 0065 Calligra::Sheets::DocBase *m_doc; 0066 Calligra::Sheets::Style * m_defaultStyle; 0067 0068 KoXmlDocument m_content; 0069 KoXmlDocument m_meta; 0070 KoXmlDocument m_settings; 0071 0072 QHash<QString, KoXmlElement*> m_styles; 0073 QHash<QString, Calligra::Sheets::Style*> m_defaultStyles; 0074 QHash<QString, QString*> m_formats; 0075 QMap<QString, KoXmlElement> m_validationList; 0076 0077 QStringList m_namedAreas; 0078 0079 int readMetaData(); 0080 bool parseBody(int numOfTables); 0081 void insertStyles(KoXmlElement const & element); 0082 bool createStyleMap(KoXmlDocument const & styles); 0083 bool readRowFormat(KoXmlElement & rowNode, KoXmlElement * rowStyle, 0084 Calligra::Sheets::Sheet * table, int & row, int & number, bool last); 0085 bool readColLayouts(KoXmlElement & content, Calligra::Sheets::Sheet * table); 0086 bool readRowsAndCells(KoXmlElement & content, Calligra::Sheets::Sheet * table); 0087 bool readCells(KoXmlElement & rowNode, Calligra::Sheets::Sheet * table, int row, int & columns); 0088 void convertFormula(QString & text, QString const & f) const; 0089 void loadFontStyle(Calligra::Sheets::Style * layout, KoXmlElement const * font) const; 0090 void readInStyle(Calligra::Sheets::Style * layout, KoXmlElement const & style); 0091 void loadStyleProperties(Calligra::Sheets::Style * layout, KoXmlElement const & property) const; 0092 void loadBorder(Calligra::Sheets::Style * layout, QString const & borderDef, bPos pos) const; 0093 void loadTableMasterStyle(Calligra::Sheets::Sheet * table, QString const & stylename); 0094 QString * loadFormat(KoXmlElement * element, 0095 Calligra::Sheets::Format::Type & formatType, 0096 QString name); 0097 void checkForNamedAreas(QString & formula) const; 0098 void loadOasisCellValidation(const KoXmlElement&body, const Calligra::Sheets::ValueParser *parser); 0099 void loadOasisValidation(Calligra::Sheets::Validity val, const QString& validationName, const Calligra::Sheets::ValueParser *parser); 0100 void loadOasisValidationCondition(Calligra::Sheets::Validity val, QString &valExpression, const Calligra::Sheets::ValueParser *parser); 0101 void loadOasisAreaName(const KoXmlElement&body); 0102 void loadOasisMasterLayoutPage(Calligra::Sheets::Sheet * table, KoStyleStack &styleStack); 0103 void loadOasisValidationValue(Calligra::Sheets::Validity val, const QStringList &listVal, const Calligra::Sheets::ValueParser *parser); 0104 QString translatePar(QString & par) const; 0105 void loadCondition(const Calligra::Sheets::Cell& cell, const KoXmlElement &property); 0106 void loadOasisCondition(const Calligra::Sheets::Cell& cell, const KoXmlElement &property); 0107 void loadOasisConditionValue(const QString &styleCondition, Calligra::Sheets::Conditional &newCondition, const Calligra::Sheets::ValueParser *parser); 0108 void loadOasisCondition(QString &valExpression, Calligra::Sheets::Conditional &newCondition, const Calligra::Sheets::ValueParser *parser); 0109 KoFilter::ConversionStatus loadAndParse(KoXmlDocument& doc, const QString& fileName, KoStore *m_store); 0110 0111 KoFilter::ConversionStatus openFile(); 0112 }; 0113 0114 #endif // OpenCalc_IMPORT_H__ 0115