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