xref: /AOO41X/main/sc/source/filter/xml/xmlcelli.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef SC_XMLCELLI_HXX
24 #define SC_XMLCELLI_HXX
25 
26 #include <memory>
27 #include "XMLDetectiveContext.hxx"
28 #include "XMLCellRangeSourceContext.hxx"
29 #include <xmloff/xmlictxt.hxx>
30 #include <xmloff/xmlimp.hxx>
31 #include <com/sun/star/table/XCell.hpp>
32 #include <tools/time.hxx>
33 #include <com/sun/star/util/DateTime.hpp>
34 #include <com/sun/star/table/XCellRange.hpp>
35 #include <com/sun/star/table/CellRangeAddress.hpp>
36 #include <com/sun/star/table/CellAddress.hpp>
37 #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
38 #include <com/sun/star/document/XActionLockable.hpp>
39 
40 #include "formula/grammar.hxx"
41 #include <boost/optional.hpp>
42 
43 class ScXMLImport;
44 struct ScXMLAnnotationData;
45 
46 class ScXMLTableRowCellContext : public SvXMLImportContext
47 {
48     typedef ::std::pair< ::rtl::OUString, ::rtl::OUString > FormulaWithNamespace;
49     com::sun::star::uno::Reference<com::sun::star::table::XCell> xBaseCell;
50     com::sun::star::uno::Reference<com::sun::star::document::XActionLockable> xLockable;
51     ::boost::optional< rtl::OUString > pOUTextValue;
52     ::boost::optional< rtl::OUString > pOUTextContent;
53     ::boost::optional< FormulaWithNamespace > pOUFormula;
54     rtl::OUString* pContentValidationName;
55     ::std::auto_ptr< ScXMLAnnotationData > mxAnnotationData;
56     ScMyImpDetectiveObjVec* pDetectiveObjVec;
57     ScMyImpCellRangeSource* pCellRangeSource;
58     double      fValue;
59     sal_Int32   nMergedRows, nMergedCols;
60     sal_Int32   nMatrixRows, nMatrixCols;
61     sal_Int32   nRepeatedRows;
62     sal_Int32   nCellsRepeated;
63     ScXMLImport& rXMLImport;
64     formula::FormulaGrammar::Grammar  eGrammar;
65     sal_Int16   nCellType;
66     sal_Bool    bIsMerged;
67     sal_Bool    bIsMatrix;
68     sal_Bool    bHasSubTable;
69     sal_Bool    bIsCovered;
70     sal_Bool    bIsEmpty;
71     sal_Bool    bHasTextImport;
72     sal_Bool    bIsFirstTextImport;
73     sal_Bool    bSolarMutexLocked;
74     sal_Bool    bFormulaTextResult;
75 
GetScImport() const76     const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
GetScImport()77     ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
78 
79     sal_Int16 GetCellType(const rtl::OUString& sOUValue) const;
80 
81     sal_Bool IsMerged (const com::sun::star::uno::Reference <com::sun::star::table::XCellRange>& xCellRange,
82                 const sal_Int32 nCol, const sal_Int32 nRow,
83                 com::sun::star::table::CellRangeAddress& aCellAddress) const;
84     void DoMerge(const com::sun::star::table::CellAddress& aCellPos,
85                 const sal_Int32 nCols, const sal_Int32 nRows);
86 
87     void SetContentValidation(com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& xPropSet);
88     void SetCellProperties(const com::sun::star::uno::Reference<com::sun::star::table::XCellRange>& xCellRange,
89                                                 const com::sun::star::table::CellAddress& aCellAddress);
90     void SetCellProperties(const com::sun::star::uno::Reference<com::sun::star::table::XCell>& xCell);
91 
92     void LockSolarMutex();
93     void UnlockSolarMutex();
94 
CellExists(const com::sun::star::table::CellAddress & aCellPos) const95     sal_Bool CellExists(const com::sun::star::table::CellAddress& aCellPos) const
96     {
97         return (aCellPos.Column <= MAXCOL && aCellPos.Row <= MAXROW);
98     }
99 
100 public:
101 
102     ScXMLTableRowCellContext( ScXMLImport& rImport, sal_uInt16 nPrfx,
103                        const ::rtl::OUString& rLName,
104                        const ::com::sun::star::uno::Reference<
105                                         ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
106                                         const sal_Bool bIsCovered, const sal_Int32 nRepeatedRows );
107 
108     virtual ~ScXMLTableRowCellContext();
109 
110     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
111                                      const ::rtl::OUString& rLocalName,
112                                      const ::com::sun::star::uno::Reference<
113                                         ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
114 
SetString(const rtl::OUString & rOUTempText)115     inline void SetString(const rtl::OUString& rOUTempText) { pOUTextContent.reset(rOUTempText); }
116     void SetCursorOnTextImport(const rtl::OUString& rOUTempText);
117 
118     void SetAnnotation(const ::com::sun::star::table::CellAddress& rPosition );
119     void SetDetectiveObj( const ::com::sun::star::table::CellAddress& rPosition );
120     void SetCellRangeSource( const ::com::sun::star::table::CellAddress& rPosition );
121 
122     virtual void EndElement();
123 };
124 
125 #endif
126 
127