xref: /AOO41X/main/sc/source/filter/xml/XMLStylesExportHelper.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 
24 #ifndef SC_XMLSTYLESEXPORTHELPER_HXX
25 #define SC_XMLSTYLESEXPORTHELPER_HXX
26 
27 #include <vector>
28 #include <list>
29 #include <com/sun/star/uno/Any.h>
30 #include <com/sun/star/table/CellRangeAddress.hpp>
31 #include <com/sun/star/table/CellAddress.hpp>
32 #include <com/sun/star/sheet/ConditionOperator.hpp>
33 #include <com/sun/star/sheet/ValidationAlertStyle.hpp>
34 #include <com/sun/star/sheet/ValidationType.hpp>
35 
36 class ScDocument;
37 class ScXMLExport;
38 
39 struct ScMyValidation
40 {
41     rtl::OUString               sName;
42     rtl::OUString               sErrorMessage;
43     rtl::OUString               sErrorTitle;
44     rtl::OUString               sImputMessage;
45     rtl::OUString               sImputTitle;
46     rtl::OUString               sFormula1;
47     rtl::OUString               sFormula2;
48     com::sun::star::table::CellAddress          aBaseCell;
49     com::sun::star::sheet::ValidationAlertStyle aAlertStyle;
50     com::sun::star::sheet::ValidationType       aValidationType;
51     com::sun::star::sheet::ConditionOperator    aOperator;
52     sal_Int16                   nShowList;
53     sal_Bool                    bShowErrorMessage;
54     sal_Bool                    bShowImputMessage;
55     sal_Bool                    bIgnoreBlanks;
56 
57                                 ScMyValidation();
58                                 ~ScMyValidation();
59 
60     sal_Bool                    IsEqual(const ScMyValidation& aVal) const;
61 };
62 
63 typedef std::vector<ScMyValidation>         ScMyValidationVec;
64 
65 class ScMyValidationsContainer
66 {
67 private:
68     ScMyValidationVec           aValidationVec;
69     const rtl::OUString         sEmptyString;
70     const rtl::OUString         sERRALSTY;
71     const rtl::OUString         sIGNOREBL;
72     const rtl::OUString         sSHOWLIST;
73     const rtl::OUString         sTYPE;
74     const rtl::OUString         sSHOWINP;
75     const rtl::OUString         sSHOWERR;
76     const rtl::OUString         sINPTITLE;
77     const rtl::OUString         sINPMESS;
78     const rtl::OUString         sERRTITLE;
79     const rtl::OUString         sERRMESS;
80     const rtl::OUString         sOnError;
81     const rtl::OUString         sEventType;
82     const rtl::OUString         sStarBasic;
83     const rtl::OUString         sScript;
84     const rtl::OUString         sLibrary;
85     const rtl::OUString         sMacroName;
86 
87 public:
88                                 ScMyValidationsContainer();
89                                 ~ScMyValidationsContainer();
90     sal_Bool                    AddValidation(const com::sun::star::uno::Any& aAny,
91                                     sal_Int32& nValidationIndex);
92     rtl::OUString               GetCondition(ScXMLExport& rExport, const ScMyValidation& aValidation);
93     rtl::OUString               GetBaseCellAddress(ScDocument* pDoc, const com::sun::star::table::CellAddress& aCell);
94     void                        WriteMessage(ScXMLExport& rExport,
95                                     const rtl::OUString& sTitle, const rtl::OUString& sMessage,
96                                     const sal_Bool bShowMessage, const sal_Bool bIsHelpMessage);
97     void                        WriteValidations(ScXMLExport& rExport);
98     const rtl::OUString&        GetValidationName(const sal_Int32 nIndex);
99 };
100 
101 //==============================================================================
102 
103 struct ScMyDefaultStyle
104 {
105     sal_Int32   nIndex;
106     sal_Int32   nRepeat;
107     sal_Bool    bIsAutoStyle;
108 
ScMyDefaultStyleScMyDefaultStyle109     ScMyDefaultStyle() : nIndex(-1), nRepeat(1),
110         bIsAutoStyle(sal_True) {}
111 };
112 
113 typedef std::vector<ScMyDefaultStyle> ScMyDefaultStyleList;
114 
115 class ScFormatRangeStyles;
116 
117 class ScMyDefaultStyles
118 {
119     ScMyDefaultStyleList* pRowDefaults;
120     ScMyDefaultStyleList* pColDefaults;
121 
122     sal_Int32 GetStyleNameIndex(const ScFormatRangeStyles* pCellStyles,
123         const sal_Int32 nTable, const sal_Int32 nPos,
124         const sal_Int32 i, const sal_Bool bRow, sal_Bool& bIsAutoStyle);
125     void FillDefaultStyles(const sal_Int32 nTable,
126         const sal_Int32 nLastRow, const sal_Int32 nLastCol,
127         const ScFormatRangeStyles* pCellStyles, ScDocument* pDoc,
128         const sal_Bool bRow);
129 public:
ScMyDefaultStyles()130     ScMyDefaultStyles() : pRowDefaults(NULL), pColDefaults(NULL) {}
131     ~ScMyDefaultStyles();
132 
133     void FillDefaultStyles(const sal_Int32 nTable,
134         const sal_Int32 nLastRow, const sal_Int32 nLastCol,
135         const ScFormatRangeStyles* pCellStyles, ScDocument* pDoc);
136 
GetRowDefaults()137     const ScMyDefaultStyleList* GetRowDefaults() { return pRowDefaults; }
GetColDefaults()138     const ScMyDefaultStyleList* GetColDefaults() { return pColDefaults; }
139 };
140 
141 struct ScMyRowFormatRange
142 {
143     sal_Int32   nStartColumn;
144     sal_Int32   nRepeatColumns;
145     sal_Int32   nRepeatRows;
146     sal_Int32   nIndex;
147     sal_Int32   nValidationIndex;
148     sal_Bool    bIsAutoStyle;
149 
150     ScMyRowFormatRange();
151     sal_Bool operator<(const ScMyRowFormatRange& rRange) const;
152 };
153 
154 typedef std::list<ScMyRowFormatRange> ScMyRowFormatRangesList;
155 
156 class ScRowFormatRanges
157 {
158     ScMyRowFormatRangesList     aRowFormatRanges;
159     const ScMyDefaultStyleList* pRowDefaults;
160     const ScMyDefaultStyleList* pColDefaults;
161     sal_uInt32                  nSize;
162 
163     void AddRange(const sal_Int32 nPrevStartCol, const sal_Int32 nRepeat, const sal_Int32 nPrevIndex,
164         const sal_Bool bPrevAutoStyle, const ScMyRowFormatRange& rFormatRange);
165 
166 public:
167     ScRowFormatRanges();
168     ScRowFormatRanges(const ScRowFormatRanges* pRanges);
169     ~ScRowFormatRanges();
170 
SetRowDefaults(const ScMyDefaultStyleList * pDefaults)171     void SetRowDefaults(const ScMyDefaultStyleList* pDefaults) { pRowDefaults = pDefaults; }
SetColDefaults(const ScMyDefaultStyleList * pDefaults)172     void SetColDefaults(const ScMyDefaultStyleList* pDefaults) { pColDefaults = pDefaults; }
173     void Clear();
174     void AddRange(ScMyRowFormatRange& rFormatRange, const sal_Int32 nStartRow);
175     sal_Bool GetNext(ScMyRowFormatRange& rFormatRange);
176     sal_Int32 GetMaxRows();
177     sal_Int32 GetSize();
178     void Sort();
179 };
180 
181 typedef std::vector<rtl::OUString*>     ScMyOUStringVec;
182 
183 struct ScMyFormatRange
184 {
185     com::sun::star::table::CellRangeAddress aRangeAddress;
186     sal_Int32                               nStyleNameIndex;
187     sal_Int32                               nValidationIndex;
188     sal_Int32                               nNumberFormat;
189     sal_Bool                                bIsAutoStyle;
190 
191     ScMyFormatRange();
192     sal_Bool operator< (const ScMyFormatRange& rRange) const;
193 };
194 
195 typedef std::list<ScMyFormatRange>          ScMyFormatRangeAddresses;
196 typedef std::vector<ScMyFormatRangeAddresses*>  ScMyFormatRangeListVec;
197 
198 class ScFormatRangeStyles
199 {
200     ScMyFormatRangeListVec      aTables;
201     ScMyOUStringVec             aStyleNames;
202     ScMyOUStringVec             aAutoStyleNames;
203     const ScMyDefaultStyleList* pRowDefaults;
204     const ScMyDefaultStyleList* pColDefaults;
205 
206 public:
207     ScFormatRangeStyles();
208     ~ScFormatRangeStyles();
209 
SetRowDefaults(const ScMyDefaultStyleList * pDefaults)210     void SetRowDefaults(const ScMyDefaultStyleList* pDefaults) { pRowDefaults = pDefaults; }
SetColDefaults(const ScMyDefaultStyleList * pDefaults)211     void SetColDefaults(const ScMyDefaultStyleList* pDefaults) { pColDefaults = pDefaults; }
212     void AddNewTable(const sal_Int32 nTable);
213     sal_Bool AddStyleName(rtl::OUString* pString, sal_Int32& rIndex, const sal_Bool bIsAutoStyle = sal_True);
214     sal_Int32 GetIndexOfStyleName(const rtl::OUString& rString, const rtl::OUString& rPrefix, sal_Bool& bIsAutoStyle);
215     // does not delete ranges
216     sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nColumn, const sal_Int32 nRow,
217         sal_Bool& bIsAutoStyle) const;
218     // deletes not necessary ranges if wanted
219     sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nColumn, const sal_Int32 nRow,
220         sal_Bool& bIsAutoStyle, sal_Int32& nValidationIndex, sal_Int32& nNumberFormat, const sal_Int32 nRemoveBeforeRow);
221     void GetFormatRanges(const sal_Int32 nStartColumn, const sal_Int32 nEndColumn, const sal_Int32 nRow,
222                     const sal_Int32 nTable, ScRowFormatRanges* pFormatRanges);
223     void AddRangeStyleName(const com::sun::star::table::CellRangeAddress aCellRangeAddress, const sal_Int32 nStringIndex,
224                     const sal_Bool bIsAutoStyle, const sal_Int32 nValidationIndex, const sal_Int32 nNumberFormat);
225     rtl::OUString* GetStyleNameByIndex(const sal_Int32 nIndex, const sal_Bool bIsAutoStyle);
226     void Sort();
227 };
228 
229 class ScColumnRowStylesBase
230 {
231     ScMyOUStringVec             aStyleNames;
232 
233 public:
234     ScColumnRowStylesBase();
235     virtual ~ScColumnRowStylesBase();
236 
237     virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields) = 0;
238     sal_Int32 AddStyleName(rtl::OUString* pString);
239     sal_Int32 GetIndexOfStyleName(const rtl::OUString& rString, const rtl::OUString& rPrefix);
240     virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField) = 0;
241     rtl::OUString* GetStyleNameByIndex(const sal_Int32 nIndex);
242 };
243 
244 struct ScColumnStyle
245 {
246     sal_Int32   nIndex;
247     sal_Bool    bIsVisible;
248 
ScColumnStyleScColumnStyle249     ScColumnStyle() : nIndex(-1), bIsVisible(sal_True) {}
250 };
251 
252 
253 typedef std::vector<ScColumnStyle>  ScMyColumnStyleVec;
254 typedef std::vector<ScMyColumnStyleVec> ScMyColumnVectorVec;
255 
256 class ScColumnStyles : public ScColumnRowStylesBase
257 {
258     ScMyColumnVectorVec             aTables;
259 
260 public:
261     ScColumnStyles();
262     ~ScColumnStyles();
263 
264     virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields);
265     sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nField,
266         sal_Bool& bIsVisible);
267     void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nField, const sal_Int32 nStringIndex, const sal_Bool bIsVisible);
268     virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField);
269 };
270 
271 typedef std::vector<sal_Int32>  ScMysalInt32Vec;
272 typedef std::vector<ScMysalInt32Vec>    ScMyRowVectorVec;
273 
274 class ScRowStyles : public ScColumnRowStylesBase
275 {
276     ScMyRowVectorVec                aTables;
277 
278 public:
279     ScRowStyles();
280     ~ScRowStyles();
281 
282     virtual void AddNewTable(const sal_Int32 nTable, const sal_Int32 nFields);
283     sal_Int32 GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 nField);
284     void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nField, const sal_Int32 nStringIndex);
285     void AddFieldStyleName(const sal_Int32 nTable, const sal_Int32 nStartField, const sal_Int32 nStringIndex, const sal_Int32 nEndField);
286     virtual rtl::OUString* GetStyleName(const sal_Int32 nTable, const sal_Int32 nField);
287 };
288 
289 #endif
290 
291