summaryrefslogtreecommitdiffstats
path: root/sc/source/filter/inc/orcusinterface.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/filter/inc/orcusinterface.hxx')
-rw-r--r--sc/source/filter/inc/orcusinterface.hxx656
1 files changed, 656 insertions, 0 deletions
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
new file mode 100644
index 000000000..08e9c4a56
--- /dev/null
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -0,0 +1,656 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <address.hxx>
+#include <documentimport.hxx>
+
+#include <tools/color.hxx>
+#include <tools/fontenum.hxx>
+#include <editeng/svxenum.hxx>
+
+#include "sharedformulagroups.hxx"
+
+#include <conditio.hxx>
+
+#include <rtl/strbuf.hxx>
+#include <editeng/borderline.hxx>
+
+#include <orcus/spreadsheet/import_interface.hpp>
+
+#include <memory>
+#include <map>
+#include <unordered_map>
+#include <vector>
+
+class ScOrcusSheet;
+class ScOrcusStyles;
+class ScOrcusFactory;
+class SfxItemSet;
+namespace com::sun::star::task { class XStatusIndicator; }
+
+class ScOrcusGlobalSettings : public orcus::spreadsheet::iface::import_global_settings
+{
+ ScDocumentImport& mrDoc;
+ formula::FormulaGrammar::Grammar meCalcGrammar;
+ orcus::spreadsheet::formula_grammar_t meOrcusGrammar;
+ rtl_TextEncoding mnTextEncoding;
+
+public:
+ ScOrcusGlobalSettings(ScDocumentImport& rDoc);
+
+ virtual void set_origin_date(int year, int month, int day) override;
+ virtual void set_character_set(orcus::character_set_t cs) override;
+
+ virtual void set_default_formula_grammar(orcus::spreadsheet::formula_grammar_t grammar) override;
+ virtual orcus::spreadsheet::formula_grammar_t get_default_formula_grammar() const override;
+
+ formula::FormulaGrammar::Grammar getCalcGrammar() const
+ {
+ return meCalcGrammar;
+ }
+
+ rtl_TextEncoding getTextEncoding() const
+ {
+ return mnTextEncoding;
+ }
+
+ ScDocumentImport& getDoc() const
+ {
+ return mrDoc;
+ }
+};
+
+class ScOrcusRefResolver : public orcus::spreadsheet::iface::import_reference_resolver
+{
+ const ScOrcusGlobalSettings& mrGlobalSettings;
+
+public:
+ ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS );
+
+ orcus::spreadsheet::src_address_t resolve_address(std::string_view address) override;
+ orcus::spreadsheet::src_range_t resolve_range(std::string_view range) override;
+};
+
+class ScOrcusNamedExpression : public orcus::spreadsheet::iface::import_named_expression
+{
+ ScDocumentImport& mrDoc;
+ const ScOrcusGlobalSettings& mrGlobalSettings;
+ ScAddress maBasePos;
+ OUString maName;
+ OUString maExpr;
+ const SCTAB mnTab; //< negative if global, else >= 0 for sheet-local named expressions.
+
+public:
+ ScOrcusNamedExpression( ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab = -1 );
+
+ void reset();
+
+ virtual void set_base_position(const orcus::spreadsheet::src_address_t& pos) override;
+ virtual void set_named_expression(std::string_view name, std::string_view expression) override;
+ virtual void set_named_range(std::string_view name, std::string_view range) override;
+ virtual void commit() override;
+};
+
+class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_strings
+{
+ ScOrcusFactory& mrFactory;
+
+ OStringBuffer maCurSegment;
+public:
+ ScOrcusSharedStrings(ScOrcusFactory& rFactory);
+
+ virtual size_t append(std::string_view s) override;
+ virtual size_t add(std::string_view s) override;
+
+ virtual void set_segment_bold(bool b) override;
+ virtual void set_segment_italic(bool b) override;
+ virtual void set_segment_font(size_t font_index) override;
+ virtual void set_segment_font_name(std::string_view s) override;
+ virtual void set_segment_font_size(double point) override;
+ virtual void set_segment_font_color(orcus::spreadsheet::color_elem_t alpha,
+ orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green,
+ orcus::spreadsheet::color_elem_t blue) override;
+ virtual void append_segment(std::string_view s) override;
+
+ virtual size_t commit_segments() override;
+};
+
+class ScOrcusConditionalFormat : public orcus::spreadsheet::iface::import_conditional_format
+{
+public:
+ ScOrcusConditionalFormat(SCTAB nTab, ScDocument& rDoc);
+ virtual ~ScOrcusConditionalFormat() override;
+
+ virtual void set_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override;
+
+ virtual void set_formula(std::string_view formula) override;
+
+ virtual void set_condition_type(orcus::spreadsheet::condition_type_t type) override;
+
+ virtual void set_date(orcus::spreadsheet::condition_date_t date) override;
+
+ virtual void commit_condition() override;
+
+ virtual void set_icon_name(std::string_view name) override;
+
+ virtual void set_databar_gradient(bool gradient) override;
+
+ virtual void set_databar_axis(orcus::spreadsheet::databar_axis_t axis) override;
+
+ virtual void set_databar_color_positive(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override;
+
+ virtual void set_databar_color_negative(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override;
+
+ virtual void set_min_databar_length(double length) override;
+
+ virtual void set_max_databar_length(double length) override;
+
+ virtual void set_show_value(bool show) override;
+
+ virtual void set_iconset_reverse(bool reverse) override;
+
+ virtual void set_xf_id(size_t xf) override;
+
+ virtual void set_operator(orcus::spreadsheet::condition_operator_t condition_type) override;
+
+ virtual void set_type(orcus::spreadsheet::conditional_format_t type) override;
+
+ virtual void commit_entry() override;
+
+ virtual void set_range(std::string_view range) override;
+
+ virtual void set_range(orcus::spreadsheet::row_t row_start, orcus::spreadsheet::col_t col_start,
+ orcus::spreadsheet::row_t row_end, orcus::spreadsheet::col_t col_end) override;
+
+ virtual void commit_format() override;
+
+private:
+
+ SCTAB mnTab;
+ ScDocument& mrDoc;
+
+ std::unique_ptr<ScConditionalFormat> mpCurrentFormat;
+
+ ScFormatEntry::Type meEntryType;
+};
+
+class ScOrcusAutoFilter : public orcus::spreadsheet::iface::import_auto_filter
+{
+public:
+ ScOrcusAutoFilter( const ScOrcusGlobalSettings& rGS );
+
+ virtual ~ScOrcusAutoFilter() override;
+
+ virtual void set_range(const orcus::spreadsheet::range_t& range) override;
+
+ virtual void set_column(orcus::spreadsheet::col_t col) override;
+
+ virtual void append_column_match_value(std::string_view value) override;
+
+ virtual void commit_column() override;
+
+ virtual void commit() override;
+
+private:
+ const ScOrcusGlobalSettings& mrGlobalSettings;
+ ScRange maRange;
+};
+
+class ScOrcusSheetProperties : public orcus::spreadsheet::iface::import_sheet_properties
+{
+ ScDocumentImport& mrDoc;
+ SCTAB mnTab;
+public:
+ ScOrcusSheetProperties(SCTAB nTab, ScDocumentImport& rDoc);
+ virtual ~ScOrcusSheetProperties() override;
+
+ virtual void set_column_width(orcus::spreadsheet::col_t col, double width, orcus::length_unit_t unit) override;
+
+ virtual void set_column_hidden(orcus::spreadsheet::col_t col, bool hidden) override;
+
+ virtual void set_row_height(orcus::spreadsheet::row_t row, double height, orcus::length_unit_t unit) override;
+
+ virtual void set_row_hidden(orcus::spreadsheet::row_t row, bool hidden) override;
+
+ virtual void set_merge_cell_range(const orcus::spreadsheet::range_t& range) override;
+};
+
+class ScOrcusFormula : public orcus::spreadsheet::iface::import_formula
+{
+ enum class ResultType { NotSet, String, Value, Empty };
+
+ friend class ScOrcusSheet;
+
+ ScOrcusSheet& mrSheet;
+
+ SCCOL mnCol;
+ SCROW mnRow;
+ OUString maFormula;
+ formula::FormulaGrammar::Grammar meGrammar;
+ size_t mnSharedFormulaIndex;
+ bool mbShared;
+
+ ResultType meResType;
+ OUString maResult; // result string.
+ double mfResult;
+
+ void reset();
+
+public:
+ ScOrcusFormula( ScOrcusSheet& rSheet );
+ virtual ~ScOrcusFormula() override;
+
+ virtual void set_position(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col) override;
+ virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, std::string_view formula) override;
+ virtual void set_shared_formula_index(size_t index) override;
+ virtual void set_result_value(double value) override;
+ virtual void set_result_string(std::string_view value) override;
+ virtual void set_result_empty() override;
+ virtual void set_result_bool(bool value) override;
+ virtual void commit() override;
+};
+
+class ScOrcusArrayFormula : public orcus::spreadsheet::iface::import_array_formula
+{
+ friend class ScOrcusSheet;
+
+ ScOrcusSheet& mrSheet;
+
+ SCCOL mnCol;
+ SCROW mnRow;
+ uint32_t mnColRange;
+ uint32_t mnRowRange;
+ OUString maFormula;
+ formula::FormulaGrammar::Grammar meGrammar;
+
+ void reset();
+
+public:
+ ScOrcusArrayFormula( ScOrcusSheet& rSheet );
+ virtual ~ScOrcusArrayFormula() override;
+
+ virtual void set_range(const orcus::spreadsheet::range_t& range) override;
+ virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, std::string_view formula) override;
+ virtual void set_result_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value) override;
+ virtual void set_result_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, std::string_view value) override;
+ virtual void set_result_empty(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col) override;
+ virtual void set_result_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value) override;
+ virtual void commit() override;
+};
+
+class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet
+{
+ friend class ScOrcusFormula;
+ friend class ScOrcusArrayFormula;
+
+ ScDocumentImport& mrDoc;
+ SCTAB mnTab;
+ ScOrcusFactory& mrFactory;
+ ScOrcusStyles& mrStyles;
+ sc::SharedFormulaGroups maFormulaGroups;
+
+ ScOrcusAutoFilter maAutoFilter;
+ ScOrcusSheetProperties maProperties;
+ ScOrcusConditionalFormat maConditionalFormat;
+ ScOrcusNamedExpression maNamedExpressions;
+ ScOrcusFormula maFormula;
+ ScOrcusArrayFormula maArrayFormula;
+
+ int mnCellCount;
+
+ void cellInserted();
+
+ ScDocumentImport& getDoc();
+
+public:
+ ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory);
+
+ virtual orcus::spreadsheet::iface::import_auto_filter* get_auto_filter() override;
+ virtual orcus::spreadsheet::iface::import_table* get_table() override;
+ virtual orcus::spreadsheet::iface::import_sheet_properties* get_sheet_properties() override;
+ virtual orcus::spreadsheet::iface::import_conditional_format* get_conditional_format() override;
+ virtual orcus::spreadsheet::iface::import_named_expression* get_named_expression() override;
+ virtual orcus::spreadsheet::iface::import_formula* get_formula() override;
+ virtual orcus::spreadsheet::iface::import_array_formula* get_array_formula() override;
+
+ // Orcus import interface
+ virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, std::string_view value) override;
+ virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::string_id_t sindex) override;
+ virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value) override;
+ virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value) override;
+ virtual void set_date_time(
+ orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, int year, int month, int day, int hour, int minute, double second) override;
+
+ virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index) override;
+ virtual void set_format(orcus::spreadsheet::row_t row_start, orcus::spreadsheet::col_t col_start,
+ orcus::spreadsheet::row_t row_end, orcus::spreadsheet::col_t col_end, size_t xf_index) override;
+
+ virtual orcus::spreadsheet::range_size_t get_sheet_size() const override;
+
+ virtual void fill_down_cells(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::row_t range_size) override;
+
+ SCTAB getIndex() const { return mnTab; }
+
+ const sc::SharedFormulaGroups& getSharedFormulaGroups() const;
+ sc::SharedFormulaGroups& getSharedFormulaGroups();
+ ScOrcusFactory& getFactory();
+};
+
+class ScOrcusStyles : public orcus::spreadsheet::iface::import_styles
+{
+private:
+ ScOrcusFactory& mrFactory;
+
+ struct font
+ {
+ std::optional<OUString> maName;
+ std::optional<double> mnSize;
+ std::optional<Color> maColor;
+ std::optional<bool> mbBold;
+ std::optional<bool> mbItalic;
+ std::optional<FontLineStyle> meUnderline;
+ std::optional<Color> maUnderlineColor;
+ std::optional<FontStrikeout> meStrikeout;
+
+ void applyToItemSet(SfxItemSet& rSet) const;
+ };
+
+ font maCurrentFont;
+ std::vector<font> maFonts;
+
+ struct fill
+ {
+ std::optional<orcus::spreadsheet::fill_pattern_t> mePattern;
+ std::optional<Color> maFgColor;
+ std::optional<Color> maBgColor; // currently not used.
+
+ void applyToItemSet(SfxItemSet& rSet) const;
+ };
+
+ fill maCurrentFill;
+ std::vector<fill> maFills;
+
+ struct border
+ {
+ struct border_line
+ {
+ std::optional<SvxBorderLineStyle> meStyle;
+ std::optional<Color> maColor;
+ std::optional<double> mnWidth;
+ };
+
+ std::map<orcus::spreadsheet::border_direction_t, border_line> maBorders;
+
+ void applyToItemSet(SfxItemSet& rSet) const;
+ };
+
+ border maCurrentBorder;
+ std::vector<border> maBorders;
+
+ struct protection
+ {
+ std::optional<bool> mbLocked;
+ std::optional<bool> mbHidden;
+ std::optional<bool> mbPrintContent;
+ std::optional<bool> mbFormulaHidden;
+
+ void applyToItemSet(SfxItemSet& rSet) const;
+ };
+
+ protection maCurrentProtection;
+ std::vector<protection> maProtections;
+
+ struct number_format
+ {
+ std::optional<OUString> maCode;
+
+ void applyToItemSet(SfxItemSet& rSet, const ScDocument& rDoc) const;
+ };
+
+ number_format maCurrentNumberFormat;
+ std::vector<number_format> maNumberFormats;
+
+ struct xf
+ {
+ size_t mnFontId;
+ size_t mnFillId;
+ size_t mnBorderId;
+ size_t mnProtectionId;
+ size_t mnNumberFormatId;
+ size_t mnStyleXf;
+ bool mbAlignment;
+
+ SvxCellHorJustify meHorAlignment;
+ SvxCellVerJustify meVerAlignment;
+ SvxCellJustifyMethod meHorAlignMethod;
+ SvxCellJustifyMethod meVerAlignMethod;
+
+ xf();
+ };
+
+ xf maCurrentXF;
+ std::vector<xf> maCellStyleXfs;
+ std::vector<xf> maCellXfs;
+
+ struct cell_style
+ {
+ OUString maName;
+ OUString maParentName;
+ size_t mnXFId;
+ size_t mnBuiltInId;
+
+ cell_style();
+ };
+
+ cell_style maCurrentCellStyle;
+
+ void applyXfToItemSet(SfxItemSet& rSet, const xf& rXf);
+
+public:
+ ScOrcusStyles( ScOrcusFactory& rFactory, bool bSkipDefaultStyles=false );
+
+ void applyXfToItemSet(SfxItemSet& rSet, size_t xfId);
+
+ // font
+
+ virtual void set_font_count(size_t n) override;
+ virtual void set_font_bold(bool b) override;
+ virtual void set_font_italic(bool b) override;
+ virtual void set_font_name(std::string_view name) override;
+ virtual void set_font_size(double point) override;
+ virtual void set_font_underline(orcus::spreadsheet::underline_t e) override;
+ virtual void set_font_underline_width(orcus::spreadsheet::underline_width_t e) override;
+ virtual void set_font_underline_mode(orcus::spreadsheet::underline_mode_t e) override;
+ virtual void set_font_underline_type(orcus::spreadsheet::underline_type_t e) override;
+ virtual void set_font_underline_color(orcus::spreadsheet::color_elem_t alpha,
+ orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green,
+ orcus::spreadsheet::color_elem_t blue) override;
+ virtual void set_font_color( orcus::spreadsheet::color_elem_t alpha,
+ orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green,
+ orcus::spreadsheet::color_elem_t blue) override;
+ virtual void set_strikethrough_style(orcus::spreadsheet::strikethrough_style_t s) override;
+ virtual void set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t s) override;
+ virtual void set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t s) override;
+ virtual void set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t s) override;
+ virtual size_t commit_font() override;
+
+ // fill
+
+ virtual void set_fill_count(size_t n) override;
+ virtual void set_fill_pattern_type(orcus::spreadsheet::fill_pattern_t fp) override;
+ virtual void set_fill_fg_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override;
+ virtual void set_fill_bg_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override;
+ virtual size_t commit_fill() override;
+
+ // border
+
+ virtual void set_border_count(size_t n) override;
+
+ virtual void set_border_style(orcus::spreadsheet::border_direction_t dir, orcus::spreadsheet::border_style_t style) override;
+ virtual void set_border_color(orcus::spreadsheet::border_direction_t dir,
+ orcus::spreadsheet::color_elem_t alpha,
+ orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green,
+ orcus::spreadsheet::color_elem_t blue) override;
+ virtual void set_border_width(orcus::spreadsheet::border_direction_t dir, double val, orcus::length_unit_t unit) override;
+ virtual size_t commit_border() override;
+
+ // cell protection
+ virtual void set_cell_hidden(bool b) override;
+ virtual void set_cell_locked(bool b) override;
+ virtual void set_cell_print_content(bool b) override;
+ virtual void set_cell_formula_hidden(bool b) override;
+ virtual size_t commit_cell_protection() override;
+
+ // number format
+ virtual void set_number_format_count(size_t n) override;
+ virtual void set_number_format_identifier(size_t n) override;
+ virtual void set_number_format_code(std::string_view s) override;
+ virtual size_t commit_number_format() override;
+
+ // cell style xf
+
+ virtual void set_cell_style_xf_count(size_t n) override;
+ virtual size_t commit_cell_style_xf() override;
+
+ // cell xf
+
+ virtual void set_cell_xf_count(size_t n) override;
+ virtual size_t commit_cell_xf() override;
+
+ // dxf
+ virtual void set_dxf_count(size_t count) override;
+ virtual size_t commit_dxf() override;
+
+ // xf (cell format) - used both by cell xf and cell style xf.
+
+ virtual void set_xf_number_format(size_t index) override;
+ virtual void set_xf_font(size_t index) override;
+ virtual void set_xf_fill(size_t index) override;
+ virtual void set_xf_border(size_t index) override;
+ virtual void set_xf_protection(size_t index) override;
+ virtual void set_xf_style_xf(size_t index) override;
+ virtual void set_xf_apply_alignment(bool b) override;
+ virtual void set_xf_horizontal_alignment(orcus::spreadsheet::hor_alignment_t align) override;
+ virtual void set_xf_vertical_alignment(orcus::spreadsheet::ver_alignment_t align) override;
+
+ // cell style entry
+
+ virtual void set_cell_style_count(size_t n) override;
+ virtual void set_cell_style_name(std::string_view name) override;
+ virtual void set_cell_style_xf(size_t index) override;
+ virtual void set_cell_style_builtin(size_t index) override;
+ virtual void set_cell_style_parent_name(std::string_view name) override;
+ virtual size_t commit_cell_style() override;
+};
+
+class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory
+{
+ struct CellStoreToken
+ {
+ enum class Type : sal_uInt8
+ {
+ Auto,
+ Numeric,
+ String,
+ Formula,
+ FormulaWithResult,
+ SharedFormula,
+ SharedFormulaWithResult,
+ Matrix,
+ FillDownCells
+ };
+
+
+ OUString maStr1;
+ OUString maStr2;
+ double mfValue;
+
+ ScAddress maPos;
+ Type meType;
+
+ uint32_t mnIndex1;
+ uint32_t mnIndex2;
+ formula::FormulaGrammar::Grammar meGrammar;
+
+ CellStoreToken( const ScAddress& rPos, Type eType );
+ CellStoreToken( const ScAddress& rPos, double fValue );
+ CellStoreToken( const ScAddress& rPos, uint32_t nIndex );
+ CellStoreToken( const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar );
+ };
+
+ typedef std::unordered_map<OUString, size_t> StringHashType;
+ typedef std::vector<CellStoreToken> CellStoreTokensType;
+
+ ScDocumentImport maDoc;
+
+ std::vector<OUString> maStrings;
+ StringHashType maStringHash;
+
+ CellStoreTokensType maCellStoreTokens;
+ ScOrcusGlobalSettings maGlobalSettings;
+ ScOrcusSharedStrings maSharedStrings;
+ ScOrcusNamedExpression maNamedExpressions;
+ std::vector<std::unique_ptr<ScOrcusSheet>> maSheets;
+ ScOrcusStyles maStyles;
+
+ int mnProgress;
+
+ css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator;
+
+public:
+ ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles=false);
+
+ virtual orcus::spreadsheet::iface::import_sheet* append_sheet(
+ orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name) override;
+ virtual orcus::spreadsheet::iface::import_sheet* get_sheet(std::string_view sheet_name) override;
+ virtual orcus::spreadsheet::iface::import_sheet* get_sheet(orcus::spreadsheet::sheet_t sheet_index) override;
+ virtual orcus::spreadsheet::iface::import_global_settings* get_global_settings() override;
+ virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings() override;
+ virtual orcus::spreadsheet::iface::import_named_expression* get_named_expression() override;
+ virtual orcus::spreadsheet::iface::import_styles* get_styles() override;
+ virtual void finalize() override;
+
+ ScDocumentImport& getDoc();
+
+ size_t appendString(const OUString& rStr);
+ size_t addString(const OUString& rStr);
+ const OUString* getString(size_t nIndex) const;
+
+ void pushCellStoreAutoToken( const ScAddress& rPos, const OUString& rVal );
+ void pushCellStoreToken( const ScAddress& rPos, uint32_t nStrIndex );
+ void pushCellStoreToken( const ScAddress& rPos, double fValue );
+ void pushCellStoreToken(
+ const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar );
+ void pushFillDownCellsToken( const ScAddress& rPos, uint32_t nFillSize );
+
+ void pushSharedFormulaToken( const ScAddress& rPos, uint32_t nIndex );
+ void pushMatrixFormulaToken(
+ const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar,
+ uint32_t nRowRange, uint32_t nColRange );
+
+ void pushFormulaResult( const ScAddress& rPos, double fValue );
+ void pushFormulaResult( const ScAddress& rPos, const OUString& rValue );
+
+ void incrementProgress();
+
+ void setStatusIndicator(const css::uno::Reference<css::task::XStatusIndicator>& rIndicator);
+
+ const ScOrcusGlobalSettings& getGlobalSettings() const;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */