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