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