File indexing completed on 2025-01-12 13:05:55
0001 /* This file is part of the KDE project 0002 Copyright (C) 2002 Norbert Andres <nandres@web.de> 0003 Copyright (C) 2004 Montel Laurent <montel@kde.org> 0004 0005 This library is free software; you can redistribute it and/or 0006 modify it under the terms of the GNU Library General Public 0007 License as published by the Free Software Foundation; either 0008 version 2 of the License, or (at your option) any later version. 0009 0010 This library is distributed in the hope that it will be useful, 0011 but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0013 Library General Public License for more details. 0014 0015 You should have received a copy of the GNU Library General Public License 0016 along with this library; see the file COPYING.LIB. If not, write to 0017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0018 * Boston, MA 02110-1301, USA. 0019 */ 0020 0021 #ifndef OpenCalc_IMPORT_H__ 0022 #define OpenCalc_IMPORT_H__ 0023 0024 #include "Format.h" 0025 0026 #include <KoFilter.h> 0027 0028 #include <QHash> 0029 #include <QDomDocument> 0030 #include <QByteArray> 0031 #include <KoXmlReader.h> 0032 #include <QVariantList> 0033 0034 class KoStyleStack; 0035 class KoStore; 0036 0037 namespace Calligra 0038 { 0039 namespace Sheets 0040 { 0041 class Cell; 0042 class Conditional; 0043 class Doc; 0044 class Sheet; 0045 class Style; 0046 class Validity; 0047 class ValueParser; 0048 } 0049 } 0050 0051 class OpenCalcImport : public KoFilter 0052 { 0053 Q_OBJECT 0054 public: 0055 OpenCalcImport(QObject * parent, const QVariantList &); 0056 ~OpenCalcImport() override; 0057 0058 KoFilter::ConversionStatus convert(QByteArray const & from, QByteArray const & to) override; 0059 0060 0061 private: 0062 0063 class OpenCalcPoint 0064 { 0065 public: 0066 explicit OpenCalcPoint(const QString &str); 0067 0068 QString table; 0069 QString translation; 0070 QPoint topLeft; 0071 QPoint botRight; 0072 bool isRange; 0073 }; 0074 0075 enum bPos { Left, Top, Right, Bottom, Fall, GoUp, Border }; 0076 0077 Calligra::Sheets::Doc * m_doc; 0078 Calligra::Sheets::Style * m_defaultStyle; 0079 0080 KoXmlDocument m_content; 0081 KoXmlDocument m_meta; 0082 KoXmlDocument m_settings; 0083 0084 QHash<QString, KoXmlElement*> m_styles; 0085 QHash<QString, Calligra::Sheets::Style*> m_defaultStyles; 0086 QHash<QString, QString*> m_formats; 0087 QMap<QString, KoXmlElement> m_validationList; 0088 0089 QStringList m_namedAreas; 0090 0091 int readMetaData(); 0092 bool parseBody(int numOfTables); 0093 void insertStyles(KoXmlElement const & element); 0094 bool createStyleMap(KoXmlDocument const & styles); 0095 bool readRowFormat(KoXmlElement & rowNode, KoXmlElement * rowStyle, 0096 Calligra::Sheets::Sheet * table, int & row, int & number, bool last); 0097 bool readColLayouts(KoXmlElement & content, Calligra::Sheets::Sheet * table); 0098 bool readRowsAndCells(KoXmlElement & content, Calligra::Sheets::Sheet * table); 0099 bool readCells(KoXmlElement & rowNode, Calligra::Sheets::Sheet * table, int row, int & columns); 0100 void convertFormula(QString & text, QString const & f) const; 0101 void loadFontStyle(Calligra::Sheets::Style * layout, KoXmlElement const * font) const; 0102 void readInStyle(Calligra::Sheets::Style * layout, KoXmlElement const & style); 0103 void loadStyleProperties(Calligra::Sheets::Style * layout, KoXmlElement const & property) const; 0104 void loadBorder(Calligra::Sheets::Style * layout, QString const & borderDef, bPos pos) const; 0105 void loadTableMasterStyle(Calligra::Sheets::Sheet * table, QString const & stylename); 0106 QString * loadFormat(KoXmlElement * element, 0107 Calligra::Sheets::Format::Type & formatType, 0108 QString name); 0109 void checkForNamedAreas(QString & formula) const; 0110 void loadOasisCellValidation(const KoXmlElement&body, const Calligra::Sheets::ValueParser *parser); 0111 void loadOasisValidation(Calligra::Sheets::Validity val, const QString& validationName, const Calligra::Sheets::ValueParser *parser); 0112 void loadOasisValidationCondition(Calligra::Sheets::Validity val, QString &valExpression, const Calligra::Sheets::ValueParser *parser); 0113 void loadOasisAreaName(const KoXmlElement&body); 0114 void loadOasisMasterLayoutPage(Calligra::Sheets::Sheet * table, KoStyleStack &styleStack); 0115 void loadOasisValidationValue(Calligra::Sheets::Validity val, const QStringList &listVal, const Calligra::Sheets::ValueParser *parser); 0116 QString translatePar(QString & par) const; 0117 void loadCondition(const Calligra::Sheets::Cell& cell, const KoXmlElement &property); 0118 void loadOasisCondition(const Calligra::Sheets::Cell& cell, const KoXmlElement &property); 0119 void loadOasisConditionValue(const QString &styleCondition, Calligra::Sheets::Conditional &newCondition, const Calligra::Sheets::ValueParser *parser); 0120 void loadOasisCondition(QString &valExpression, Calligra::Sheets::Conditional &newCondition, const Calligra::Sheets::ValueParser *parser); 0121 KoFilter::ConversionStatus loadAndParse(KoXmlDocument& doc, const QString& fileName, KoStore *m_store); 0122 0123 KoFilter::ConversionStatus openFile(); 0124 }; 0125 0126 #endif // OpenCalc_IMPORT_H__ 0127