/src/libreoffice/sc/inc/documentimport.hxx
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /* |
3 | | * This file is part of the LibreOffice project. |
4 | | * |
5 | | * This Source Code Form is subject to the terms of the Mozilla Public |
6 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
7 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
8 | | */ |
9 | | |
10 | | #pragma once |
11 | | |
12 | | #include "scdllapi.h" |
13 | | #include "address.hxx" |
14 | | #include "attarray.hxx" |
15 | | |
16 | | #include <rtl/ustring.hxx> |
17 | | |
18 | | #include <memory> |
19 | | #include <vector> |
20 | | |
21 | | class EditTextObject; |
22 | | class ScDocument; |
23 | | class ScColumn; |
24 | | class ScPatternAttr; |
25 | | class ScTokenArray; |
26 | | class ScFormulaCell; |
27 | | class ScStyleSheet; |
28 | | struct ScSetStringParam; |
29 | | struct ScTabOpParam; |
30 | | struct ScDocumentImportImpl; |
31 | | enum class SvtScriptType : sal_uInt8; |
32 | | |
33 | | /** |
34 | | * Accessor class to ScDocument. Its purpose is to allow import filter to |
35 | | * fill the document model and nothing but that. Filling the document via |
36 | | * this class does not trigger any kind of broadcasting, drawing object |
37 | | * position calculation, or anything else that requires expensive |
38 | | * computation which are unnecessary and undesirable during import. |
39 | | */ |
40 | | class SC_DLLPUBLIC ScDocumentImport |
41 | | { |
42 | | std::unique_ptr<ScDocumentImportImpl> mpImpl; |
43 | | |
44 | | public: |
45 | | |
46 | | struct SC_DLLPUBLIC Attrs |
47 | | { |
48 | | std::vector<ScAttrEntry> mvData; |
49 | | |
50 | | bool mbLatinNumFmtOnly; |
51 | | |
52 | | Attrs(); |
53 | | ~Attrs(); |
54 | | Attrs& operator=( Attrs const & ) = delete; // MSVC2015 workaround |
55 | | Attrs( Attrs const & ) = delete; // MSVC2015 workaround |
56 | | bool operator==(const Attrs& other) const |
57 | 120M | { |
58 | 120M | return mvData == other.mvData && mbLatinNumFmtOnly == other.mbLatinNumFmtOnly; |
59 | 120M | } |
60 | 290k | Attrs& operator=( Attrs&& attrs ) = default; |
61 | | }; |
62 | | |
63 | | ScDocumentImport() = delete; |
64 | | ScDocumentImport(ScDocument& rDoc); |
65 | | ScDocumentImport(const ScDocumentImport&) = delete; |
66 | | const ScDocumentImport& operator=(const ScDocumentImport&) = delete; |
67 | | ~ScDocumentImport(); |
68 | | |
69 | | ScDocument& getDoc(); |
70 | | const ScDocument& getDoc() const; |
71 | | |
72 | | /** |
73 | | * Initialize the storage for all sheets after all the sheet instances |
74 | | * have been created in the document. |
75 | | */ |
76 | | void initForSheets(); |
77 | | |
78 | | void setDefaultNumericScript(SvtScriptType nScript); |
79 | | |
80 | | /** |
81 | | * Apply specified cell style to an entire sheet. |
82 | | */ |
83 | | void setCellStyleToSheet(SCTAB nTab, const ScStyleSheet& rStyle); |
84 | | |
85 | | /** |
86 | | * @param rName sheet name. |
87 | | * |
88 | | * @return 0-based sheet index, or -1 in case no sheet is found by |
89 | | * specified name. |
90 | | */ |
91 | | SCTAB getSheetIndex(const OUString& rName) const; |
92 | | SCTAB getSheetCount() const; |
93 | | bool appendSheet(const OUString& rName); |
94 | | void setSheetName(SCTAB nTab, const OUString& rName); |
95 | | |
96 | | void setOriginDate(sal_uInt16 nYear, sal_uInt16 nMonth, sal_uInt16 nDay); |
97 | | |
98 | | void setAutoInput(const ScAddress& rPos, const OUString& rStr, |
99 | | const ScSetStringParam* pStringParam = nullptr); |
100 | | void setNumericCell(const ScAddress& rPos, double fVal); |
101 | | void setStringCell(const ScAddress& rPos, const OUString& rStr); |
102 | | void setEditCell(const ScAddress& rPos, std::unique_ptr<EditTextObject> pEditText); |
103 | | |
104 | | void setFormulaCell( |
105 | | const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar, |
106 | | const double* pResult = nullptr ); |
107 | | |
108 | | void setFormulaCell( |
109 | | const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar, |
110 | | const OUString& rResult ); |
111 | | |
112 | | void setFormulaCell(const ScAddress& rPos, std::unique_ptr<ScTokenArray> pArray); |
113 | | void setFormulaCell(const ScAddress& rPos, ScFormulaCell* pCell); |
114 | | |
115 | | void setMatrixCells( |
116 | | const ScRange& rRange, const ScTokenArray& rArray, formula::FormulaGrammar::Grammar eGrammar); |
117 | | |
118 | | void setTableOpCells(const ScRange& rRange, const ScTabOpParam& rParam); |
119 | | |
120 | | void fillDownCells(const ScAddress& rPos, SCROW nFillSize); |
121 | | |
122 | | /** |
123 | | * Set an array of cell attributes to specified range of columns. This call |
124 | | * transfers the ownership of the ScAttrEntry array from the caller to the |
125 | | * column. |
126 | | */ |
127 | | void setAttrEntries( SCTAB nTab, SCCOL nColStart, SCCOL nColEnd, Attrs&& rAttrs ); |
128 | | |
129 | | void setRowsVisible(SCTAB nTab, SCROW nRowStart, SCROW nRowEnd, bool bVisible); |
130 | | |
131 | | void setMergedCells(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2); |
132 | | |
133 | | void invalidateBlockPositionSet(SCTAB nTab); |
134 | | |
135 | | void finalize(); |
136 | | |
137 | | /** Broadcast all formula cells that are marked with |
138 | | FormulaTokenArray::IsRecalcModeMustAfterImport() for a subsequent |
139 | | ScDocument::CalcFormulaTree(). |
140 | | */ |
141 | | void broadcastRecalcAfterImport(); |
142 | | |
143 | | /** small cache for hot call during import */ |
144 | | bool isLatinScript(sal_uInt32 nFormat); |
145 | | bool isLatinScript(const ScPatternAttr&); |
146 | | |
147 | | private: |
148 | | void initColumn(ScColumn& rCol); |
149 | | static void broadcastRecalcAfterImportColumn(ScColumn& rCol); |
150 | | }; |
151 | | |
152 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |