xref: /trunk/main/xmloff/source/chart/SchXMLTableContext.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _SCH_XMLTABLECONTEXT_HXX_
28 #define _SCH_XMLTABLECONTEXT_HXX_
29 
30 #include <xmloff/xmlictxt.hxx>
31 #include "SchXMLImport.hxx"
32 // #include "SchXMLChartContext.hxx"
33 #include <com/sun/star/uno/Sequence.hxx>
34 
35 #include <com/sun/star/chart/ChartDataRowSource.hpp>
36 
37 #include "transporttypes.hxx"
38 
39 namespace com { namespace sun { namespace star {
40     namespace frame {
41         class XModel;
42     }
43     namespace xml { namespace sax {
44         class XAttributeList;
45     }}
46     namespace chart {
47         class XChartDocument;
48         struct ChartSeriesAddress;
49 }}}}
50 
51 // ========================================
52 
53 class SchXMLTableContext : public SvXMLImportContext
54 {
55 private:
56     SchXMLImportHelper& mrImportHelper;
57     SchXMLTable& mrTable;
58 
59     bool mbHasRowPermutation;
60     bool mbHasColumnPermutation;
61     ::com::sun::star::uno::Sequence< sal_Int32 > maRowPermutation;
62     ::com::sun::star::uno::Sequence< sal_Int32 > maColumnPermutation;
63 
64 public:
65     SchXMLTableContext( SchXMLImportHelper& rImpHelper,
66                         SvXMLImport& rImport,
67                         const rtl::OUString& rLocalName,
68                         SchXMLTable& aTable );
69     virtual ~SchXMLTableContext();
70 
71     virtual SvXMLImportContext* CreateChildContext(
72         sal_uInt16 nPrefix,
73         const rtl::OUString& rLocalName,
74         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList );
75     virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
76     virtual void EndElement();
77 
78     void setRowPermutation( const ::com::sun::star::uno::Sequence< sal_Int32 > & rPermutation );
79     void setColumnPermutation( const ::com::sun::star::uno::Sequence< sal_Int32 > & rPermutation );
80 };
81 
82 // ----------------------------------------
83 
84 class SchXMLTableHelper
85 {
86 private:
87     static void GetCellAddress( const rtl::OUString& rStr, sal_Int32& rCol, sal_Int32& rRow );
88     static sal_Bool GetCellRangeAddress( const rtl::OUString& rStr, SchNumericCellRangeAddress& rResult );
89     static void PutTableContentIntoSequence(
90         const SchXMLTable& rTable,
91         SchNumericCellRangeAddress& rAddress,
92         sal_Int32 nSeriesIndex,
93         com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< double > >& aSequence );
94     static void AdjustMax( const SchNumericCellRangeAddress& rAddr,
95                            sal_Int32& nRows, sal_Int32& nColumns );
96 
97 public:
98     static void applyTableToInternalDataProvider( const SchXMLTable& rTable,
99                             com::sun::star::uno::Reference< com::sun::star::chart2::XChartDocument > xChartDoc );
100 
101     /** This function reorders local data to fit the correct data structure.
102         Call it after the data series got their styles set.
103      */
104     static void switchRangesFromOuterToInternalIfNecessary( const SchXMLTable& rTable,
105                                   const tSchXMLLSequencesPerIndex & rLSequencesPerIndex,
106                                   com::sun::star::uno::Reference< com::sun::star::chart2::XChartDocument > xChartDoc,
107                                   ::com::sun::star::chart::ChartDataRowSource eDataRowSource );
108 };
109 
110 // ========================================
111 
112 // ----------------------------------------
113 // classes for columns
114 // ----------------------------------------
115 
116 /** With this context all column elements are parsed to
117     determine the index of the column containing
118     the row descriptions and probably get an estimate
119     for the altogether number of columns
120  */
121 class SchXMLTableColumnsContext : public SvXMLImportContext
122 {
123 private:
124     SchXMLImportHelper& mrImportHelper;
125     SchXMLTable& mrTable;
126 
127 public:
128     SchXMLTableColumnsContext( SchXMLImportHelper& rImpHelper,
129                                SvXMLImport& rImport,
130                                const rtl::OUString& rLocalName,
131                                SchXMLTable& aTable );
132     virtual ~SchXMLTableColumnsContext();
133 
134     virtual SvXMLImportContext* CreateChildContext(
135         sal_uInt16 nPrefix,
136         const rtl::OUString& rLocalName,
137         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList );
138 };
139 
140 // ----------------------------------------
141 
142 class SchXMLTableColumnContext : public SvXMLImportContext
143 {
144 private:
145     SchXMLImportHelper& mrImportHelper;
146     SchXMLTable& mrTable;
147 
148 public:
149     SchXMLTableColumnContext( SchXMLImportHelper& rImpHelper,
150                               SvXMLImport& rImport,
151                               const rtl::OUString& rLocalName,
152                               SchXMLTable& aTable );
153     virtual ~SchXMLTableColumnContext();
154     virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
155 };
156 
157 // ----------------------------------------
158 // classes for rows
159 // ----------------------------------------
160 
161 class SchXMLTableRowsContext : public SvXMLImportContext
162 {
163 private:
164     SchXMLImportHelper& mrImportHelper;
165     SchXMLTable& mrTable;
166 
167 public:
168     SchXMLTableRowsContext( SchXMLImportHelper& rImpHelper,
169                             SvXMLImport& rImport,
170                             const rtl::OUString& rLocalName,
171                             SchXMLTable& aTable );
172     virtual ~SchXMLTableRowsContext();
173 
174     virtual SvXMLImportContext* CreateChildContext(
175         sal_uInt16 nPrefix,
176         const rtl::OUString& rLocalName,
177         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList );
178 };
179 
180 // ----------------------------------------
181 
182 class SchXMLTableRowContext : public SvXMLImportContext
183 {
184 private:
185     SchXMLImportHelper& mrImportHelper;
186     SchXMLTable& mrTable;
187 
188 public:
189     SchXMLTableRowContext( SchXMLImportHelper& rImpHelper,
190                            SvXMLImport& rImport,
191                            const rtl::OUString& rLocalName,
192                            SchXMLTable& aTable );
193     virtual ~SchXMLTableRowContext();
194 
195     virtual SvXMLImportContext* CreateChildContext(
196         sal_uInt16 nPrefix,
197         const rtl::OUString& rLocalName,
198         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList );
199 };
200 
201 // ----------------------------------------
202 // classes for cells and their content
203 // ----------------------------------------
204 
205 class SchXMLTableCellContext : public SvXMLImportContext
206 {
207 private:
208     SchXMLImportHelper& mrImportHelper;
209     SchXMLTable& mrTable;
210     rtl::OUString maCellContent;
211     rtl::OUString maRangeId;
212     sal_Bool mbReadText;
213 
214 public:
215     SchXMLTableCellContext( SchXMLImportHelper& rImpHelper,
216                             SvXMLImport& rImport,
217                             const rtl::OUString& rLocalName,
218                             SchXMLTable& aTable );
219     virtual ~SchXMLTableCellContext();
220 
221     virtual SvXMLImportContext* CreateChildContext(
222         sal_uInt16 nPrefix,
223         const rtl::OUString& rLocalName,
224         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList );
225     virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
226     virtual void EndElement();
227 };
228 
229 #endif  // _SCH_XMLTABLECONTEXT_HXX_
230