update ooo310-m15
[ooovba.git] / sc / source / filter / xml / XMLTrackedChangesContext.cxx
blobf22477f72ee0bdf71817ec43981ae1d2a8dc4acf
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: XMLTrackedChangesContext.cxx,v $
10 * $Revision: 1.32 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sc.hxx"
34 #include "XMLTrackedChangesContext.hxx"
35 #include "xmlimprt.hxx"
36 #include "xmlconti.hxx"
37 #include "XMLConverter.hxx"
38 #include "cell.hxx"
39 #include "textuno.hxx"
40 #include "editutil.hxx"
41 #include <xmloff/xmltoken.hxx>
42 #include <xmloff/xmlnmspe.hxx>
43 #include <xmloff/nmspmap.hxx>
44 #include <xmloff/xmluconv.hxx>
45 #include <svtools/zforlist.hxx>
46 #include <com/sun/star/text/XTextCursor.hpp>
47 #include <com/sun/star/text/ControlCharacter.hpp>
49 using rtl::OUString;
50 using namespace com::sun::star;
51 using namespace xmloff::token;
53 //-----------------------------------------------------------------------------
55 class ScXMLChangeInfoContext : public SvXMLImportContext
57 ScMyActionInfo aInfo;
58 ::rtl::OUStringBuffer sAuthorBuffer;
59 ::rtl::OUStringBuffer sDateTimeBuffer;
60 ::rtl::OUStringBuffer sCommentBuffer;
61 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
62 sal_uInt32 nParagraphCount;
64 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
65 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
67 public:
68 ScXMLChangeInfoContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
69 const ::com::sun::star::uno::Reference<
70 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
71 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
72 virtual ~ScXMLChangeInfoContext();
74 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
75 const ::rtl::OUString& rLocalName,
76 const ::com::sun::star::uno::Reference<
77 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
79 virtual void EndElement();
82 //-----------------------------------------------------------------------------
84 class ScXMLBigRangeContext : public SvXMLImportContext
86 ScBigRange& rBigRange;
88 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
89 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
91 public:
92 ScXMLBigRangeContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
93 const ::com::sun::star::uno::Reference<
94 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
95 ScBigRange& rBigRange);
96 virtual ~ScXMLBigRangeContext();
98 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
99 const ::rtl::OUString& rLocalName,
100 const ::com::sun::star::uno::Reference<
101 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
103 virtual void EndElement();
106 //-----------------------------------------------------------------------------
108 class ScXMLCellContentDeletionContext : public SvXMLImportContext
110 rtl::OUString sFormulaAddress;
111 rtl::OUString sFormula;
112 rtl::OUString sInputString;
113 ScBigRange aBigRange;
114 double fValue;
115 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
116 ScBaseCell* pCell;
117 sal_uInt32 nID;
118 sal_Int32 nMatrixCols;
119 sal_Int32 nMatrixRows;
120 formula::FormulaGrammar::Grammar eGrammar;
121 sal_uInt16 nType;
122 sal_uInt8 nMatrixFlag;
123 sal_Bool bBigRange;
124 sal_Bool bContainsCell;
126 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
127 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
129 public:
130 ScXMLCellContentDeletionContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
131 const ::com::sun::star::uno::Reference<
132 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
133 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
134 virtual ~ScXMLCellContentDeletionContext();
136 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
137 const ::rtl::OUString& rLocalName,
138 const ::com::sun::star::uno::Reference<
139 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
141 virtual void EndElement();
144 //-----------------------------------------------------------------------------
146 class ScXMLDependenceContext : public SvXMLImportContext
148 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
150 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
151 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
153 public:
154 ScXMLDependenceContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
155 const ::com::sun::star::uno::Reference<
156 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
157 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
158 virtual ~ScXMLDependenceContext();
160 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
161 const ::rtl::OUString& rLocalName,
162 const ::com::sun::star::uno::Reference<
163 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
165 virtual void EndElement();
168 //-----------------------------------------------------------------------------
170 class ScXMLDependingsContext : public SvXMLImportContext
172 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
174 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
175 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
177 public:
178 ScXMLDependingsContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
179 const ::com::sun::star::uno::Reference<
180 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
181 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
182 virtual ~ScXMLDependingsContext();
184 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
185 const ::rtl::OUString& rLocalName,
186 const ::com::sun::star::uno::Reference<
187 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
189 virtual void EndElement();
192 //-----------------------------------------------------------------------------
194 class ScXMLChangeDeletionContext : public SvXMLImportContext
196 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
198 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
199 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
201 public:
202 ScXMLChangeDeletionContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
203 const ::com::sun::star::uno::Reference<
204 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
205 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
206 virtual ~ScXMLChangeDeletionContext();
208 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
209 const ::rtl::OUString& rLocalName,
210 const ::com::sun::star::uno::Reference<
211 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
213 virtual void EndElement();
216 //-----------------------------------------------------------------------------
218 class ScXMLDeletionsContext : public SvXMLImportContext
220 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
222 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
223 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
225 public:
226 ScXMLDeletionsContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
227 const ::com::sun::star::uno::Reference<
228 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
229 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
230 virtual ~ScXMLDeletionsContext();
232 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
233 const ::rtl::OUString& rLocalName,
234 const ::com::sun::star::uno::Reference<
235 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
237 virtual void EndElement();
240 //-----------------------------------------------------------------------------
242 class ScXMLChangeCellContext;
244 class ScXMLChangeTextPContext : public SvXMLImportContext
246 ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList> xAttrList;
247 rtl::OUString sLName;
248 rtl::OUStringBuffer sText;
249 ScXMLChangeCellContext* pChangeCellContext;
250 SvXMLImportContext* pTextPContext;
251 USHORT nPrefix;
253 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
254 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
256 public:
258 ScXMLChangeTextPContext( ScXMLImport& rImport, USHORT nPrfx,
259 const ::rtl::OUString& rLName,
260 const ::com::sun::star::uno::Reference<
261 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
262 ScXMLChangeCellContext* pChangeCellContext);
264 virtual ~ScXMLChangeTextPContext();
266 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
267 const ::rtl::OUString& rLocalName,
268 const ::com::sun::star::uno::Reference<
269 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
271 virtual void Characters( const ::rtl::OUString& rChars );
273 virtual void EndElement();
276 //-----------------------------------------------------------------------------
278 class ScXMLChangeCellContext : public SvXMLImportContext
280 rtl::OUString sText;
281 rtl::OUString& rInputString;
282 ScBaseCell*& rOldCell;
283 ScEditEngineTextObj* pEditTextObj;
284 double& rDateTimeValue;
285 double fValue;
286 sal_uInt16& rType;
287 // sal_Bool bIsMatrix;
288 // sal_Bool bIsCoveredMatrix;
289 sal_Bool bEmpty;
290 sal_Bool bFirstParagraph;
291 sal_Bool bString;
292 sal_Bool bFormula;
294 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
295 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
297 public:
298 ScXMLChangeCellContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
299 const ::com::sun::star::uno::Reference<
300 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
301 ScBaseCell*& rOldCell, rtl::OUString& sAddress, rtl::OUString& sFormula,
302 formula::FormulaGrammar::Grammar& rGrammar,
303 rtl::OUString& rInputString, double& fValue, sal_uInt16& nType,
304 sal_uInt8& nMatrixFlag, sal_Int32& nMatrixCols, sal_Int32& nMatrixRows);
305 virtual ~ScXMLChangeCellContext();
307 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
308 const ::rtl::OUString& rLocalName,
309 const ::com::sun::star::uno::Reference<
310 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
312 void CreateTextPContext(sal_Bool bIsNewParagraph);
313 sal_Bool IsEditCell() { return pEditTextObj != 0; }
314 void SetText(const rtl::OUString& sTempText) { sText = sTempText; }
316 virtual void EndElement();
319 //-----------------------------------------------------------------------------
321 class ScXMLPreviousContext : public SvXMLImportContext
323 rtl::OUString sFormulaAddress;
324 rtl::OUString sFormula;
325 rtl::OUString sInputString;
326 double fValue;
327 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
328 ScBaseCell* pOldCell;
329 sal_uInt32 nID;
330 sal_Int32 nMatrixCols;
331 sal_Int32 nMatrixRows;
332 formula::FormulaGrammar::Grammar eGrammar;
333 sal_uInt16 nType;
334 sal_uInt8 nMatrixFlag;
336 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
337 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
339 public:
340 ScXMLPreviousContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
341 const ::com::sun::star::uno::Reference<
342 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
343 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
344 virtual ~ScXMLPreviousContext();
346 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
347 const ::rtl::OUString& rLocalName,
348 const ::com::sun::star::uno::Reference<
349 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
351 virtual void EndElement();
354 //-----------------------------------------------------------------------------
356 class ScXMLContentChangeContext : public SvXMLImportContext
358 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
359 ScBigRange aBigRange;
361 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
362 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
364 public:
365 ScXMLContentChangeContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
366 const ::com::sun::star::uno::Reference<
367 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
368 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
369 virtual ~ScXMLContentChangeContext();
371 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
372 const ::rtl::OUString& rLocalName,
373 const ::com::sun::star::uno::Reference<
374 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
375 virtual void EndElement();
378 //-----------------------------------------------------------------------------
380 class ScXMLInsertionContext : public SvXMLImportContext
382 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
384 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
385 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
387 public:
388 ScXMLInsertionContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
389 const ::com::sun::star::uno::Reference<
390 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
391 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
392 virtual ~ScXMLInsertionContext();
394 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
395 const ::rtl::OUString& rLocalName,
396 const ::com::sun::star::uno::Reference<
397 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
398 virtual void EndElement();
401 //-----------------------------------------------------------------------------
403 class ScXMLInsertionCutOffContext : public SvXMLImportContext
405 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
407 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
408 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
410 public:
411 ScXMLInsertionCutOffContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
412 const ::com::sun::star::uno::Reference<
413 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
414 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
415 virtual ~ScXMLInsertionCutOffContext();
417 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
418 const ::rtl::OUString& rLocalName,
419 const ::com::sun::star::uno::Reference<
420 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
421 virtual void EndElement();
424 //-----------------------------------------------------------------------------
426 class ScXMLMovementCutOffContext : public SvXMLImportContext
428 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
430 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
431 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
433 public:
434 ScXMLMovementCutOffContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
435 const ::com::sun::star::uno::Reference<
436 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
437 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
438 virtual ~ScXMLMovementCutOffContext();
440 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
441 const ::rtl::OUString& rLocalName,
442 const ::com::sun::star::uno::Reference<
443 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
444 virtual void EndElement();
447 //-----------------------------------------------------------------------------
449 class ScXMLCutOffsContext : public SvXMLImportContext
451 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
453 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
454 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
456 public:
457 ScXMLCutOffsContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
458 const ::com::sun::star::uno::Reference<
459 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
460 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
461 virtual ~ScXMLCutOffsContext();
463 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
464 const ::rtl::OUString& rLocalName,
465 const ::com::sun::star::uno::Reference<
466 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
467 virtual void EndElement();
470 //-----------------------------------------------------------------------------
472 class ScXMLDeletionContext : public SvXMLImportContext
474 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
476 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
477 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
479 public:
480 ScXMLDeletionContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
481 const ::com::sun::star::uno::Reference<
482 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
483 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
484 virtual ~ScXMLDeletionContext();
486 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
487 const ::rtl::OUString& rLocalName,
488 const ::com::sun::star::uno::Reference<
489 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
490 virtual void EndElement();
493 //-----------------------------------------------------------------------------
495 class ScXMLMovementContext : public SvXMLImportContext
497 ScBigRange aSourceRange;
498 ScBigRange aTargetRange;
499 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
501 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
502 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
504 public:
505 ScXMLMovementContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
506 const ::com::sun::star::uno::Reference<
507 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
508 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
509 virtual ~ScXMLMovementContext();
511 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
512 const ::rtl::OUString& rLocalName,
513 const ::com::sun::star::uno::Reference<
514 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
515 virtual void EndElement();
518 //-----------------------------------------------------------------------------
520 class ScXMLRejectionContext : public SvXMLImportContext
522 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper;
524 const ScXMLImport& GetScImport() const { return (const ScXMLImport&)GetImport(); }
525 ScXMLImport& GetScImport() { return (ScXMLImport&)GetImport(); }
527 public:
528 ScXMLRejectionContext( ScXMLImport& rImport, USHORT nPrfx, const ::rtl::OUString& rLName,
529 const ::com::sun::star::uno::Reference<
530 ::com::sun::star::xml::sax::XAttributeList>& xAttrList,
531 ScXMLChangeTrackingImportHelper* pChangeTrackingImportHelper);
532 virtual ~ScXMLRejectionContext();
534 virtual SvXMLImportContext *CreateChildContext( USHORT nPrefix,
535 const ::rtl::OUString& rLocalName,
536 const ::com::sun::star::uno::Reference<
537 ::com::sun::star::xml::sax::XAttributeList>& xAttrList );
538 virtual void EndElement();
541 //------------------------------------------------------------------
543 ScXMLTrackedChangesContext::ScXMLTrackedChangesContext( ScXMLImport& rImport,
544 USHORT nPrfx,
545 const ::rtl::OUString& rLName,
546 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
547 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
548 SvXMLImportContext( rImport, nPrfx, rLName ),
549 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
551 rImport.LockSolarMutex();
552 pChangeTrackingImportHelper->SetChangeTrack(sal_True);
554 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
555 for( sal_Int16 i=0; i < nAttrCount; ++i )
557 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
558 rtl::OUString aLocalName;
559 sal_uInt16 nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
560 sAttrName, &aLocalName ));
561 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
562 if (nPrefix == XML_NAMESPACE_TABLE)
564 if (IsXMLToken(aLocalName, XML_PROTECTION_KEY))
566 if (sValue.getLength())
568 uno::Sequence<sal_Int8> aPass;
569 SvXMLUnitConverter::decodeBase64(aPass, sValue);
570 pChangeTrackingImportHelper->SetProtection(aPass);
577 ScXMLTrackedChangesContext::~ScXMLTrackedChangesContext()
579 GetScImport().UnlockSolarMutex();
582 SvXMLImportContext *ScXMLTrackedChangesContext::CreateChildContext( USHORT nPrefix,
583 const ::rtl::OUString& rLocalName,
584 const ::com::sun::star::uno::Reference<
585 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
587 SvXMLImportContext *pContext(0);
589 if (nPrefix == XML_NAMESPACE_TABLE)
591 if (IsXMLToken(rLocalName, XML_CELL_CONTENT_CHANGE))
593 pContext = new ScXMLContentChangeContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
595 else if (IsXMLToken(rLocalName, XML_INSERTION))
597 pContext = new ScXMLInsertionContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
599 else if (IsXMLToken(rLocalName, XML_DELETION))
601 pContext = new ScXMLDeletionContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
603 else if (IsXMLToken(rLocalName, XML_MOVEMENT))
605 pContext = new ScXMLMovementContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
607 else if (IsXMLToken(rLocalName, XML_REJECTION))
609 pContext = new ScXMLRejectionContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
613 if( !pContext )
614 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
616 return pContext;
619 void ScXMLTrackedChangesContext::EndElement()
623 ScXMLChangeInfoContext::ScXMLChangeInfoContext( ScXMLImport& rImport,
624 USHORT nPrfx,
625 const ::rtl::OUString& rLName,
626 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
627 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
628 SvXMLImportContext( rImport, nPrfx, rLName ),
629 aInfo(),
630 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper),
631 nParagraphCount(0)
633 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
634 for( sal_Int16 i=0; i < nAttrCount; ++i )
636 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
637 rtl::OUString aLocalName;
638 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
639 sAttrName, &aLocalName ));
640 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
642 if (nPrefix == XML_NAMESPACE_OFFICE)
644 if (IsXMLToken(aLocalName, XML_CHG_AUTHOR))
646 sAuthorBuffer = sValue;
648 else if (IsXMLToken(aLocalName, XML_CHG_DATE_TIME))
650 sDateTimeBuffer = sValue;
656 ScXMLChangeInfoContext::~ScXMLChangeInfoContext()
660 SvXMLImportContext *ScXMLChangeInfoContext::CreateChildContext( USHORT nPrefix,
661 const ::rtl::OUString& rLocalName,
662 const ::com::sun::star::uno::Reference<
663 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
665 SvXMLImportContext *pContext(0);
667 if( XML_NAMESPACE_DC == nPrefix )
669 if( IsXMLToken( rLocalName, XML_CREATOR ) )
670 pContext = new ScXMLContentContext(GetScImport(), nPrefix,
671 rLocalName, xAttrList, sAuthorBuffer);
672 else if( IsXMLToken( rLocalName, XML_DATE ) )
673 pContext = new ScXMLContentContext(GetScImport(), nPrefix,
674 rLocalName, xAttrList, sDateTimeBuffer);
676 else if ((nPrefix == XML_NAMESPACE_TEXT) && (IsXMLToken(rLocalName, XML_P)) )
678 if(nParagraphCount)
679 sCommentBuffer.append(static_cast<sal_Unicode>('\n'));
680 ++nParagraphCount;
681 pContext = new ScXMLContentContext( GetScImport(), nPrefix, rLocalName, xAttrList, sCommentBuffer);
684 if( !pContext )
685 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
687 return pContext;
690 void ScXMLChangeInfoContext::EndElement()
692 aInfo.sUser = sAuthorBuffer.makeStringAndClear();
693 GetScImport().GetMM100UnitConverter().convertDateTime(aInfo.aDateTime, sDateTimeBuffer.makeStringAndClear());
694 aInfo.sComment = sCommentBuffer.makeStringAndClear();
695 pChangeTrackingImportHelper->SetActionInfo(aInfo);
698 ScXMLBigRangeContext::ScXMLBigRangeContext( ScXMLImport& rImport,
699 USHORT nPrfx,
700 const ::rtl::OUString& rLName,
701 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
702 ScBigRange& rTempBigRange ) :
703 SvXMLImportContext( rImport, nPrfx, rLName ),
704 rBigRange(rTempBigRange)
706 sal_Bool bColumn(sal_False);
707 sal_Bool bRow(sal_False);
708 sal_Bool bTable(sal_False);
709 sal_Int32 nColumn(0);
710 sal_Int32 nRow(0);
711 sal_Int32 nTable(0);
712 sal_Int32 nStartColumn(0);
713 sal_Int32 nEndColumn(0);
714 sal_Int32 nStartRow(0);
715 sal_Int32 nEndRow(0);
716 sal_Int32 nStartTable(0);
717 sal_Int32 nEndTable(0);
718 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
719 for( sal_Int16 i=0; i < nAttrCount; ++i )
721 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
722 rtl::OUString aLocalName;
723 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
724 sAttrName, &aLocalName ));
725 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
727 if (nPrefix == XML_NAMESPACE_TABLE)
729 if (IsXMLToken(aLocalName, XML_COLUMN))
731 SvXMLUnitConverter::convertNumber(nColumn, sValue);
732 bColumn = sal_True;
734 else if (IsXMLToken(aLocalName, XML_ROW))
736 SvXMLUnitConverter::convertNumber(nRow, sValue);
737 bRow = sal_True;
739 else if (IsXMLToken(aLocalName, XML_TABLE))
741 SvXMLUnitConverter::convertNumber(nTable, sValue);
742 bTable = sal_True;
744 else if (IsXMLToken(aLocalName, XML_START_COLUMN))
745 SvXMLUnitConverter::convertNumber(nStartColumn, sValue);
746 else if (IsXMLToken(aLocalName, XML_END_COLUMN))
747 SvXMLUnitConverter::convertNumber(nEndColumn, sValue);
748 else if (IsXMLToken(aLocalName, XML_START_ROW))
749 SvXMLUnitConverter::convertNumber(nStartRow, sValue);
750 else if (IsXMLToken(aLocalName, XML_END_ROW))
751 SvXMLUnitConverter::convertNumber(nEndRow, sValue);
752 else if (IsXMLToken(aLocalName, XML_START_TABLE))
753 SvXMLUnitConverter::convertNumber(nStartTable, sValue);
754 else if (IsXMLToken(aLocalName, XML_END_TABLE))
755 SvXMLUnitConverter::convertNumber(nEndTable, sValue);
758 if (bColumn)
759 nStartColumn = nEndColumn = nColumn;
760 if (bRow)
761 nStartRow = nEndRow = nRow;
762 if (bTable)
763 nStartTable = nEndTable = nTable;
764 rBigRange.Set(nStartColumn, nStartRow, nStartTable,
765 nEndColumn, nEndRow, nEndTable);
768 ScXMLBigRangeContext::~ScXMLBigRangeContext()
772 SvXMLImportContext *ScXMLBigRangeContext::CreateChildContext( USHORT nPrefix,
773 const ::rtl::OUString& rLocalName,
774 const ::com::sun::star::uno::Reference<
775 ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
777 return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
780 void ScXMLBigRangeContext::EndElement()
784 ScXMLCellContentDeletionContext::ScXMLCellContentDeletionContext( ScXMLImport& rImport,
785 USHORT nPrfx,
786 const ::rtl::OUString& rLName,
787 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
788 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper) :
789 SvXMLImportContext( rImport, nPrfx, rLName ),
790 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper),
791 pCell(NULL),
792 nID(0),
793 nMatrixCols(0),
794 nMatrixRows(0),
795 nType(NUMBERFORMAT_ALL),
796 nMatrixFlag(MM_NONE),
797 bBigRange(sal_False),
798 bContainsCell(sal_False)
800 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
801 for( sal_Int16 i=0; i < nAttrCount; ++i )
803 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
804 rtl::OUString aLocalName;
805 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
806 sAttrName, &aLocalName ));
807 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
809 if (nPrefix == XML_NAMESPACE_TABLE)
811 if (IsXMLToken(aLocalName, XML_ID))
812 nID = pChangeTrackingImportHelper->GetIDFromString(sValue);
817 ScXMLCellContentDeletionContext::~ScXMLCellContentDeletionContext()
821 SvXMLImportContext *ScXMLCellContentDeletionContext::CreateChildContext( USHORT nPrefix,
822 const ::rtl::OUString& rLocalName,
823 const ::com::sun::star::uno::Reference<
824 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
826 SvXMLImportContext *pContext(0);
828 if (nPrefix == XML_NAMESPACE_TABLE)
830 if (IsXMLToken(rLocalName, XML_CHANGE_TRACK_TABLE_CELL))
832 bContainsCell = sal_True;
833 pContext = new ScXMLChangeCellContext(GetScImport(), nPrefix, rLocalName, xAttrList,
834 pCell, sFormulaAddress, sFormula, eGrammar, sInputString, fValue, nType, nMatrixFlag, nMatrixCols, nMatrixRows );
836 else if (IsXMLToken(rLocalName, XML_CELL_ADDRESS))
838 DBG_ASSERT(!nID, "a action with a ID should not contain a BigRange");
839 bBigRange = sal_True;
840 pContext = new ScXMLBigRangeContext(GetScImport(), nPrefix, rLocalName, xAttrList, aBigRange);
844 if( !pContext )
845 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
847 return pContext;
850 void ScXMLCellContentDeletionContext::EndElement()
852 ScMyCellInfo* pCellInfo(new ScMyCellInfo(pCell, sFormulaAddress, sFormula, eGrammar, sInputString, fValue, nType,
853 nMatrixFlag, nMatrixCols, nMatrixRows));
854 if (nID)
855 pChangeTrackingImportHelper->AddDeleted(nID, pCellInfo);
856 else
857 pChangeTrackingImportHelper->AddGenerated(pCellInfo, aBigRange);
860 ScXMLDependenceContext::ScXMLDependenceContext( ScXMLImport& rImport,
861 USHORT nPrfx,
862 const ::rtl::OUString& rLName,
863 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
864 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
865 SvXMLImportContext( rImport, nPrfx, rLName ),
866 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
868 sal_uInt32 nID(0);
869 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
870 for( sal_Int16 i=0; i < nAttrCount; ++i )
872 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
873 rtl::OUString aLocalName;
874 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
875 sAttrName, &aLocalName ));
876 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
878 if (nPrefix == XML_NAMESPACE_TABLE)
880 if (IsXMLToken(aLocalName, XML_ID))
881 nID = pChangeTrackingImportHelper->GetIDFromString(sValue);
884 pChangeTrackingImportHelper->AddDependence(nID);
887 ScXMLDependenceContext::~ScXMLDependenceContext()
891 SvXMLImportContext *ScXMLDependenceContext::CreateChildContext( USHORT nPrefix,
892 const ::rtl::OUString& rLocalName,
893 const ::com::sun::star::uno::Reference<
894 ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
896 return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
899 void ScXMLDependenceContext::EndElement()
903 ScXMLDependingsContext::ScXMLDependingsContext( ScXMLImport& rImport,
904 USHORT nPrfx,
905 const ::rtl::OUString& rLName,
906 const uno::Reference<xml::sax::XAttributeList>& /* xAttrList */,
907 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
908 SvXMLImportContext( rImport, nPrfx, rLName ),
909 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
911 // here are no attributes
914 ScXMLDependingsContext::~ScXMLDependingsContext()
918 SvXMLImportContext *ScXMLDependingsContext::CreateChildContext( USHORT nPrefix,
919 const ::rtl::OUString& rLocalName,
920 const ::com::sun::star::uno::Reference<
921 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
923 SvXMLImportContext *pContext(0);
925 if (nPrefix == XML_NAMESPACE_TABLE)
927 // #i80033# read both old (dependence) and new (dependency) elements
928 if (IsXMLToken(rLocalName, XML_DEPENDENCE) || IsXMLToken(rLocalName, XML_DEPENDENCY))
929 pContext = new ScXMLDependenceContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
932 if( !pContext )
933 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
935 return pContext;
938 void ScXMLDependingsContext::EndElement()
942 ScXMLChangeDeletionContext::ScXMLChangeDeletionContext( ScXMLImport& rImport,
943 USHORT nPrfx,
944 const ::rtl::OUString& rLName,
945 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
946 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
947 SvXMLImportContext( rImport, nPrfx, rLName ),
948 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
950 sal_uInt32 nID(0);
951 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
952 for( sal_Int16 i=0; i < nAttrCount; ++i )
954 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
955 rtl::OUString aLocalName;
956 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
957 sAttrName, &aLocalName ));
958 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
960 if (nPrefix == XML_NAMESPACE_TABLE)
962 if (IsXMLToken(aLocalName, XML_ID))
963 nID = pChangeTrackingImportHelper->GetIDFromString(sValue);
966 pChangeTrackingImportHelper->AddDeleted(nID);
969 ScXMLChangeDeletionContext::~ScXMLChangeDeletionContext()
973 SvXMLImportContext *ScXMLChangeDeletionContext::CreateChildContext( USHORT nPrefix,
974 const ::rtl::OUString& rLocalName,
975 const ::com::sun::star::uno::Reference<
976 ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
978 return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
981 void ScXMLChangeDeletionContext::EndElement()
985 ScXMLDeletionsContext::ScXMLDeletionsContext( ScXMLImport& rImport,
986 USHORT nPrfx,
987 const ::rtl::OUString& rLName,
988 const uno::Reference<xml::sax::XAttributeList>& /* xAttrList */,
989 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
990 SvXMLImportContext( rImport, nPrfx, rLName ),
991 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
993 // here are no attributes
996 ScXMLDeletionsContext::~ScXMLDeletionsContext()
1000 SvXMLImportContext *ScXMLDeletionsContext::CreateChildContext( USHORT nPrefix,
1001 const ::rtl::OUString& rLocalName,
1002 const ::com::sun::star::uno::Reference<
1003 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1005 SvXMLImportContext *pContext(0);
1007 if (nPrefix == XML_NAMESPACE_TABLE)
1009 if (IsXMLToken(rLocalName, XML_CHANGE_DELETION))
1010 pContext = new ScXMLChangeDeletionContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1011 else if (IsXMLToken(rLocalName, XML_CELL_CONTENT_DELETION))
1012 pContext = new ScXMLCellContentDeletionContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1015 if( !pContext )
1016 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1018 return pContext;
1021 void ScXMLDeletionsContext::EndElement()
1025 ScXMLChangeTextPContext::ScXMLChangeTextPContext( ScXMLImport& rImport,
1026 USHORT nPrfx,
1027 const ::rtl::OUString& rLName,
1028 const ::com::sun::star::uno::Reference<
1029 ::com::sun::star::xml::sax::XAttributeList>& xTempAttrList,
1030 ScXMLChangeCellContext* pTempChangeCellContext) :
1031 SvXMLImportContext( rImport, nPrfx, rLName ),
1032 xAttrList(xTempAttrList),
1033 sLName(rLName),
1034 sText(),
1035 pChangeCellContext(pTempChangeCellContext),
1036 pTextPContext(NULL),
1037 nPrefix(nPrfx)
1039 // here are no attributes
1042 ScXMLChangeTextPContext::~ScXMLChangeTextPContext()
1044 if (pTextPContext)
1045 delete pTextPContext;
1048 SvXMLImportContext *ScXMLChangeTextPContext::CreateChildContext( USHORT nTempPrefix,
1049 const ::rtl::OUString& rLName,
1050 const ::com::sun::star::uno::Reference<
1051 ::com::sun::star::xml::sax::XAttributeList>& xTempAttrList )
1053 SvXMLImportContext *pContext(0);
1055 if ((nPrefix == XML_NAMESPACE_TEXT) && (IsXMLToken(rLName, XML_S)) && !pTextPContext)
1057 sal_Int32 nRepeat(0);
1058 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1059 for( sal_Int16 i=0; i < nAttrCount; ++i )
1061 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1062 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1063 rtl::OUString aLocalName;
1064 USHORT nPrfx(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1065 sAttrName, &aLocalName ));
1066 if ((nPrfx == XML_NAMESPACE_TEXT) && (IsXMLToken(aLocalName, XML_C)))
1067 nRepeat = sValue.toInt32();
1069 if (nRepeat)
1070 for (sal_Int32 j = 0; j < nRepeat; ++j)
1071 sText.append(static_cast<sal_Unicode>(' '));
1072 else
1073 sText.append(static_cast<sal_Unicode>(' '));
1075 else
1077 if (!pChangeCellContext->IsEditCell())
1078 pChangeCellContext->CreateTextPContext(sal_False);
1079 sal_Bool bWasContext (sal_True);
1080 if (!pTextPContext)
1082 bWasContext = sal_False;
1083 pTextPContext = GetScImport().GetTextImport()->CreateTextChildContext(
1084 GetScImport(), nPrefix, sLName, xAttrList);
1086 if (pTextPContext)
1088 if (!bWasContext)
1089 pTextPContext->Characters(sText.makeStringAndClear());
1090 pContext = pTextPContext->CreateChildContext(nTempPrefix, rLName, xTempAttrList);
1094 if( !pContext )
1095 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName );
1097 return pContext;
1100 void ScXMLChangeTextPContext::Characters( const ::rtl::OUString& rChars )
1102 if (!pTextPContext)
1103 sText.append(rChars);
1104 else
1105 pTextPContext->Characters(rChars);
1108 void ScXMLChangeTextPContext::EndElement()
1110 if (!pTextPContext)
1111 pChangeCellContext->SetText(sText.makeStringAndClear());
1114 ScXMLChangeCellContext::ScXMLChangeCellContext( ScXMLImport& rImport,
1115 USHORT nPrfx,
1116 const ::rtl::OUString& rLName,
1117 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1118 ScBaseCell*& rTempOldCell, rtl::OUString& rAddress, rtl::OUString& rFormula,
1119 formula::FormulaGrammar::Grammar& rGrammar,
1120 rtl::OUString& rTempInputString, double& fDateTimeValue, sal_uInt16& nType,
1121 sal_uInt8& nMatrixFlag, sal_Int32& nMatrixCols, sal_Int32& nMatrixRows ) :
1122 SvXMLImportContext( rImport, nPrfx, rLName ),
1123 rInputString(rTempInputString),
1124 rOldCell(rTempOldCell),
1125 pEditTextObj(NULL),
1126 rDateTimeValue(fDateTimeValue),
1127 rType(nType),
1128 bEmpty(sal_True),
1129 bFirstParagraph(sal_True),
1130 bString(sal_True),
1131 bFormula(sal_False)
1133 const formula::FormulaGrammar::Grammar eStorageGrammar = rGrammar = GetScImport().GetDocument()->GetStorageGrammar();
1134 sal_Bool bIsMatrix(sal_False);
1135 sal_Bool bIsCoveredMatrix(sal_False);
1136 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1137 for( sal_Int16 i=0; i < nAttrCount; ++i )
1139 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1140 rtl::OUString aLocalName;
1141 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1142 sAttrName, &aLocalName ));
1143 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1145 if (nPrefix == XML_NAMESPACE_TABLE)
1147 if (IsXMLToken(aLocalName, XML_FORMULA))
1149 bEmpty = sal_False;
1150 sal_uInt16 nFormulaPrefix = GetImport().GetNamespaceMap().
1151 _GetKeyByAttrName( sValue, &rFormula, sal_False );
1153 if (!ScXMLImport::IsAcceptedFormulaNamespace( nFormulaPrefix,
1154 sValue, rGrammar, eStorageGrammar))
1155 rFormula = sValue;
1156 bFormula = sal_True;
1158 else if (IsXMLToken(aLocalName, XML_CELL_ADDRESS))
1160 rAddress = sValue;
1162 else if (IsXMLToken(aLocalName, XML_MATRIX_COVERED))
1164 bIsCoveredMatrix = IsXMLToken(sValue, XML_TRUE);
1166 else if (IsXMLToken(aLocalName, XML_NUMBER_MATRIX_COLUMNS_SPANNED))
1168 bIsMatrix = sal_True;
1169 SvXMLUnitConverter::convertNumber(nMatrixCols, sValue);
1171 else if (IsXMLToken(aLocalName, XML_NUMBER_MATRIX_ROWS_SPANNED))
1173 bIsMatrix = sal_True;
1174 SvXMLUnitConverter::convertNumber(nMatrixRows, sValue);
1177 else if (nPrefix == XML_NAMESPACE_OFFICE)
1179 if (IsXMLToken(aLocalName, XML_VALUE_TYPE))
1181 if (IsXMLToken(sValue, XML_FLOAT))
1182 bString = sal_False;
1183 else if (IsXMLToken(sValue, XML_DATE))
1185 rType = NUMBERFORMAT_DATE;
1186 bString = sal_False;
1188 else if (IsXMLToken(sValue, XML_TIME))
1190 rType = NUMBERFORMAT_TIME;
1191 bString = sal_False;
1194 else if (IsXMLToken(aLocalName, XML_VALUE))
1196 SvXMLUnitConverter::convertDouble(fValue, sValue);
1197 bEmpty = sal_False;
1199 else if (IsXMLToken(aLocalName, XML_DATE_VALUE))
1201 bEmpty = sal_False;
1202 if (GetScImport().GetMM100UnitConverter().setNullDate(GetScImport().GetModel()))
1203 GetScImport().GetMM100UnitConverter().convertDateTime(rDateTimeValue, sValue);
1204 fValue = rDateTimeValue;
1206 else if (IsXMLToken(aLocalName, XML_TIME_VALUE))
1208 bEmpty = sal_False;
1209 GetScImport().GetMM100UnitConverter().convertTime(rDateTimeValue, sValue);
1210 fValue = rDateTimeValue;
1214 if (bIsCoveredMatrix)
1215 nMatrixFlag = MM_REFERENCE;
1216 else if (bIsMatrix && nMatrixRows && nMatrixCols)
1217 nMatrixFlag = MM_FORMULA;
1220 ScXMLChangeCellContext::~ScXMLChangeCellContext()
1224 SvXMLImportContext *ScXMLChangeCellContext::CreateChildContext( USHORT nPrefix,
1225 const ::rtl::OUString& rLocalName,
1226 const ::com::sun::star::uno::Reference<
1227 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1229 SvXMLImportContext *pContext(0);
1231 if ((nPrefix == XML_NAMESPACE_TEXT) && (IsXMLToken(rLocalName, XML_P)))
1233 bEmpty = sal_False;
1234 if (bFirstParagraph)
1236 pContext = new ScXMLChangeTextPContext(GetScImport(), nPrefix, rLocalName, xAttrList, this);
1237 bFirstParagraph = sal_False;
1239 else
1241 if (!pEditTextObj)
1242 CreateTextPContext(sal_True);
1243 pContext = GetScImport().GetTextImport()->CreateTextChildContext(
1244 GetScImport(), nPrefix, rLocalName, xAttrList);
1248 if( !pContext )
1249 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1251 return pContext;
1254 void ScXMLChangeCellContext::CreateTextPContext(sal_Bool bIsNewParagraph)
1256 if (GetScImport().GetDocument())
1258 pEditTextObj = new ScEditEngineTextObj();
1259 pEditTextObj->acquire();
1260 pEditTextObj->GetEditEngine()->SetEditTextObjectPool(GetScImport().GetDocument()->GetEditPool());
1261 uno::Reference <text::XText> xText(pEditTextObj);
1262 if (xText.is())
1264 uno::Reference<text::XTextCursor> xTextCursor(xText->createTextCursor());
1265 if (bIsNewParagraph)
1267 xText->setString(sText);
1268 xTextCursor->gotoEnd(sal_False);
1269 uno::Reference < text::XTextRange > xTextRange (xTextCursor, uno::UNO_QUERY);
1270 if (xTextRange.is())
1271 xText->insertControlCharacter(xTextRange, text::ControlCharacter::PARAGRAPH_BREAK, sal_False);
1273 GetScImport().GetTextImport()->SetCursor(xTextCursor);
1278 void ScXMLChangeCellContext::EndElement()
1280 if (!bEmpty)
1282 if (pEditTextObj)
1284 if (GetImport().GetTextImport()->GetCursor().is())
1286 //GetImport().GetTextImport()->GetCursor()->gotoEnd(sal_False);
1287 if( GetImport().GetTextImport()->GetCursor()->goLeft( 1, sal_True ) )
1289 OUString sEmpty;
1290 GetImport().GetTextImport()->GetText()->insertString(
1291 GetImport().GetTextImport()->GetCursorAsRange(), sEmpty,
1292 sal_True );
1295 if (GetScImport().GetDocument())
1296 rOldCell = new ScEditCell(pEditTextObj->CreateTextObject(), GetScImport().GetDocument(), GetScImport().GetDocument()->GetEditPool());
1297 GetScImport().GetTextImport()->ResetCursor();
1298 // delete pEditTextObj;
1299 pEditTextObj->release();
1301 else
1303 if (!bFormula)
1305 if (sText.getLength() && bString)
1306 rOldCell = new ScStringCell(sText);
1307 else
1308 rOldCell = new ScValueCell(fValue);
1309 if (rType == NUMBERFORMAT_DATE || rType == NUMBERFORMAT_TIME)
1310 rInputString = sText;
1312 else
1314 // do nothing, this has to do later (on another place)
1315 /*ScAddress aCellPos;
1316 rOldCell = new ScFormulaCell(GetScImport().GetDocument(), aCellPos, sFormula);
1317 if (bString)
1318 static_cast<ScFormulaCell*>(rOldCell)->SetString(sValue);
1319 else
1320 static_cast<ScFormulaCell*>(rOldCell)->SetDouble(fValue);
1321 static_cast<ScFormulaCell*>(rOldCell)->SetInChangeTrack(sal_True);
1322 if (bIsCoveredMatrix)
1323 static_cast<ScFormulaCell*>(rOldCell)->SetMatrixFlag(MM_REFERENCE);
1324 else if (bIsMatrix && nMatrixRows && nMatrixCols)
1326 static_cast<ScFormulaCell*>(rOldCell)->SetMatrixFlag(MM_FORMULA);
1327 static_cast<ScFormulaCell*>(rOldCell)->SetMatColsRows(static_cast<SCCOL>(nMatrixCols), static_cast<SCROW>(nMatrixRows));
1332 else
1333 rOldCell = NULL;
1336 ScXMLPreviousContext::ScXMLPreviousContext( ScXMLImport& rImport,
1337 USHORT nPrfx,
1338 const ::rtl::OUString& rLName,
1339 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1340 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1341 SvXMLImportContext( rImport, nPrfx, rLName ),
1342 sFormulaAddress(),
1343 sFormula(),
1344 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper),
1345 pOldCell(NULL),
1346 nID(0),
1347 nMatrixCols(0),
1348 nMatrixRows(0),
1349 eGrammar( formula::FormulaGrammar::GRAM_STORAGE_DEFAULT),
1350 nType(NUMBERFORMAT_ALL),
1351 nMatrixFlag(MM_NONE)
1353 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1354 for( sal_Int16 i=0; i < nAttrCount; ++i )
1356 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1357 rtl::OUString aLocalName;
1358 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1359 sAttrName, &aLocalName ));
1360 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1362 if (nPrefix == XML_NAMESPACE_TABLE)
1364 if (IsXMLToken(aLocalName, XML_ID))
1365 nID = pChangeTrackingImportHelper->GetIDFromString(sValue);
1370 ScXMLPreviousContext::~ScXMLPreviousContext()
1374 SvXMLImportContext *ScXMLPreviousContext::CreateChildContext( USHORT nPrefix,
1375 const ::rtl::OUString& rLocalName,
1376 const ::com::sun::star::uno::Reference<
1377 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1379 SvXMLImportContext *pContext(0);
1381 if ((nPrefix == XML_NAMESPACE_TABLE) && (IsXMLToken(rLocalName, XML_CHANGE_TRACK_TABLE_CELL)))
1382 pContext = new ScXMLChangeCellContext(GetScImport(), nPrefix, rLocalName, xAttrList,
1383 pOldCell, sFormulaAddress, sFormula, eGrammar, sInputString, fValue, nType, nMatrixFlag, nMatrixCols, nMatrixRows);
1385 if( !pContext )
1386 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1388 return pContext;
1391 void ScXMLPreviousContext::EndElement()
1393 pChangeTrackingImportHelper->SetPreviousChange(nID, new ScMyCellInfo(pOldCell, sFormulaAddress, sFormula, eGrammar, sInputString,
1394 fValue, nType, nMatrixFlag, nMatrixCols, nMatrixRows));
1397 ScXMLContentChangeContext::ScXMLContentChangeContext( ScXMLImport& rImport,
1398 USHORT nPrfx,
1399 const ::rtl::OUString& rLName,
1400 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1401 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1402 SvXMLImportContext( rImport, nPrfx, rLName ),
1403 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1405 sal_uInt32 nActionNumber(0);
1406 sal_uInt32 nRejectingNumber(0);
1407 ScChangeActionState nActionState(SC_CAS_VIRGIN);
1409 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1410 for( sal_Int16 i=0; i < nAttrCount; ++i )
1412 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1413 rtl::OUString aLocalName;
1414 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1415 sAttrName, &aLocalName ));
1416 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1418 if (nPrefix == XML_NAMESPACE_TABLE)
1420 if (IsXMLToken(aLocalName, XML_ID))
1422 nActionNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1424 else if (IsXMLToken(aLocalName, XML_ACCEPTANCE_STATE))
1426 if (IsXMLToken(sValue, XML_ACCEPTED))
1427 nActionState = SC_CAS_ACCEPTED;
1428 else if (IsXMLToken(sValue, XML_REJECTED))
1429 nActionState = SC_CAS_REJECTED;
1431 else if (IsXMLToken(aLocalName, XML_REJECTING_CHANGE_ID))
1433 nRejectingNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1438 pChangeTrackingImportHelper->StartChangeAction(SC_CAT_CONTENT);
1439 pChangeTrackingImportHelper->SetActionNumber(nActionNumber);
1440 pChangeTrackingImportHelper->SetActionState(nActionState);
1441 pChangeTrackingImportHelper->SetRejectingNumber(nRejectingNumber);
1444 ScXMLContentChangeContext::~ScXMLContentChangeContext()
1448 SvXMLImportContext *ScXMLContentChangeContext::CreateChildContext( USHORT nPrefix,
1449 const ::rtl::OUString& rLocalName,
1450 const ::com::sun::star::uno::Reference<
1451 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1453 SvXMLImportContext *pContext(0);
1455 if ((nPrefix == XML_NAMESPACE_OFFICE) && (IsXMLToken(rLocalName, XML_CHANGE_INFO)))
1457 pContext = new ScXMLChangeInfoContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1459 else if (nPrefix == XML_NAMESPACE_TABLE)
1461 if (IsXMLToken(rLocalName, XML_CELL_ADDRESS))
1463 pContext = new ScXMLBigRangeContext(GetScImport(), nPrefix, rLocalName, xAttrList, aBigRange);
1465 else if (IsXMLToken(rLocalName, XML_DEPENDENCIES))
1467 pContext = new ScXMLDependingsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1469 else if (IsXMLToken(rLocalName, XML_DELETIONS))
1470 pContext = new ScXMLDeletionsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1471 else if (IsXMLToken(rLocalName, XML_PREVIOUS))
1473 pContext = new ScXMLPreviousContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1477 if( !pContext )
1478 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1480 return pContext;
1483 void ScXMLContentChangeContext::EndElement()
1485 pChangeTrackingImportHelper->SetBigRange(aBigRange);
1486 pChangeTrackingImportHelper->EndChangeAction();
1489 ScXMLInsertionContext::ScXMLInsertionContext( ScXMLImport& rImport,
1490 USHORT nPrfx,
1491 const ::rtl::OUString& rLName,
1492 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1493 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1494 SvXMLImportContext( rImport, nPrfx, rLName ),
1495 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1497 sal_uInt32 nActionNumber(0);
1498 sal_uInt32 nRejectingNumber(0);
1499 sal_Int32 nPosition(0);
1500 sal_Int32 nCount(1);
1501 sal_Int32 nTable(0);
1502 ScChangeActionState nActionState(SC_CAS_VIRGIN);
1503 ScChangeActionType nActionType(SC_CAT_INSERT_COLS);
1505 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1506 for( sal_Int16 i=0; i < nAttrCount; ++i )
1508 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1509 rtl::OUString aLocalName;
1510 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1511 sAttrName, &aLocalName ));
1512 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1514 if (nPrefix == XML_NAMESPACE_TABLE)
1516 if (IsXMLToken(aLocalName, XML_ID))
1518 nActionNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1520 else if (IsXMLToken(aLocalName, XML_ACCEPTANCE_STATE))
1522 if (IsXMLToken(sValue, XML_ACCEPTED))
1523 nActionState = SC_CAS_ACCEPTED;
1524 else if (IsXMLToken(sValue, XML_REJECTED))
1525 nActionState = SC_CAS_REJECTED;
1527 else if (IsXMLToken(aLocalName, XML_REJECTING_CHANGE_ID))
1529 nRejectingNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1531 else if (IsXMLToken(aLocalName, XML_TYPE))
1533 if (IsXMLToken(sValue, XML_ROW))
1534 nActionType = SC_CAT_INSERT_ROWS;
1535 else if (IsXMLToken(sValue, XML_TABLE))
1536 nActionType = SC_CAT_INSERT_TABS;
1538 else if (IsXMLToken(aLocalName, XML_POSITION))
1540 SvXMLUnitConverter::convertNumber(nPosition, sValue);
1542 else if (IsXMLToken(aLocalName, XML_TABLE))
1544 SvXMLUnitConverter::convertNumber(nTable, sValue);
1546 else if (IsXMLToken(aLocalName, XML_COUNT))
1548 SvXMLUnitConverter::convertNumber(nCount, sValue);
1553 pChangeTrackingImportHelper->StartChangeAction(nActionType);
1554 pChangeTrackingImportHelper->SetActionNumber(nActionNumber);
1555 pChangeTrackingImportHelper->SetActionState(nActionState);
1556 pChangeTrackingImportHelper->SetRejectingNumber(nRejectingNumber);
1557 pChangeTrackingImportHelper->SetPosition(nPosition, nCount, nTable);
1560 ScXMLInsertionContext::~ScXMLInsertionContext()
1564 SvXMLImportContext *ScXMLInsertionContext::CreateChildContext( USHORT nPrefix,
1565 const ::rtl::OUString& rLocalName,
1566 const ::com::sun::star::uno::Reference<
1567 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1569 SvXMLImportContext *pContext(0);
1571 if ((nPrefix == XML_NAMESPACE_OFFICE) && (IsXMLToken(rLocalName, XML_CHANGE_INFO)))
1573 pContext = new ScXMLChangeInfoContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1575 else if (nPrefix == XML_NAMESPACE_TABLE)
1577 if (IsXMLToken(rLocalName, XML_DEPENDENCIES))
1578 pContext = new ScXMLDependingsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1579 else if (IsXMLToken(rLocalName, XML_DELETIONS))
1580 pContext = new ScXMLDeletionsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1583 if( !pContext )
1584 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1586 return pContext;
1589 void ScXMLInsertionContext::EndElement()
1591 pChangeTrackingImportHelper->EndChangeAction();
1594 ScXMLInsertionCutOffContext::ScXMLInsertionCutOffContext( ScXMLImport& rImport,
1595 USHORT nPrfx,
1596 const ::rtl::OUString& rLName,
1597 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1598 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1599 SvXMLImportContext( rImport, nPrfx, rLName ),
1600 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1602 sal_uInt32 nID(0);
1603 sal_Int32 nPosition(0);
1604 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1605 for( sal_Int16 i=0; i < nAttrCount; ++i )
1607 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1608 rtl::OUString aLocalName;
1609 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1610 sAttrName, &aLocalName ));
1611 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1613 if (nPrefix == XML_NAMESPACE_TABLE)
1615 if (IsXMLToken(aLocalName, XML_ID))
1617 nID = pChangeTrackingImportHelper->GetIDFromString(sValue);
1619 else if (IsXMLToken(aLocalName, XML_POSITION))
1621 SvXMLUnitConverter::convertNumber(nPosition, sValue);
1625 pChangeTrackingImportHelper->SetInsertionCutOff(nID, nPosition);
1628 ScXMLInsertionCutOffContext::~ScXMLInsertionCutOffContext()
1632 SvXMLImportContext *ScXMLInsertionCutOffContext::CreateChildContext( USHORT nPrefix,
1633 const ::rtl::OUString& rLocalName,
1634 const ::com::sun::star::uno::Reference<
1635 ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
1637 return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1640 void ScXMLInsertionCutOffContext::EndElement()
1644 ScXMLMovementCutOffContext::ScXMLMovementCutOffContext( ScXMLImport& rImport,
1645 USHORT nPrfx,
1646 const ::rtl::OUString& rLName,
1647 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1648 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1649 SvXMLImportContext( rImport, nPrfx, rLName ),
1650 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1652 sal_uInt32 nID(0);
1653 sal_Int32 nPosition(0);
1654 sal_Int32 nStartPosition(0);
1655 sal_Int32 nEndPosition(0);
1656 sal_Bool bPosition(sal_False);
1657 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1658 for( sal_Int16 i=0; i < nAttrCount; ++i )
1660 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1661 rtl::OUString aLocalName;
1662 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1663 sAttrName, &aLocalName ));
1664 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1666 if (nPrefix == XML_NAMESPACE_TABLE)
1668 if (IsXMLToken(aLocalName, XML_ID))
1670 nID = pChangeTrackingImportHelper->GetIDFromString(sValue);
1672 else if (IsXMLToken(aLocalName, XML_POSITION))
1674 bPosition = sal_True;
1675 SvXMLUnitConverter::convertNumber(nPosition, sValue);
1677 else if (IsXMLToken(aLocalName, XML_START_POSITION))
1679 SvXMLUnitConverter::convertNumber(nStartPosition, sValue);
1681 else if (IsXMLToken(aLocalName, XML_END_POSITION))
1683 SvXMLUnitConverter::convertNumber(nEndPosition, sValue);
1687 if (bPosition)
1688 nStartPosition = nEndPosition = nPosition;
1689 pChangeTrackingImportHelper->AddMoveCutOff(nID, nStartPosition, nEndPosition);
1692 ScXMLMovementCutOffContext::~ScXMLMovementCutOffContext()
1696 SvXMLImportContext *ScXMLMovementCutOffContext::CreateChildContext( USHORT nPrefix,
1697 const ::rtl::OUString& rLocalName,
1698 const ::com::sun::star::uno::Reference<
1699 ::com::sun::star::xml::sax::XAttributeList>& /* xAttrList */ )
1701 return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1704 void ScXMLMovementCutOffContext::EndElement()
1708 ScXMLCutOffsContext::ScXMLCutOffsContext( ScXMLImport& rImport,
1709 USHORT nPrfx,
1710 const ::rtl::OUString& rLName,
1711 const uno::Reference<xml::sax::XAttributeList>& /* xAttrList */,
1712 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1713 SvXMLImportContext( rImport, nPrfx, rLName ),
1714 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1716 // here are no attributes
1719 ScXMLCutOffsContext::~ScXMLCutOffsContext()
1723 SvXMLImportContext *ScXMLCutOffsContext::CreateChildContext( USHORT nPrefix,
1724 const ::rtl::OUString& rLocalName,
1725 const ::com::sun::star::uno::Reference<
1726 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1728 SvXMLImportContext *pContext(0);
1730 if (nPrefix == XML_NAMESPACE_TABLE)
1732 if (IsXMLToken(rLocalName, XML_INSERTION_CUT_OFF))
1733 pContext = new ScXMLInsertionCutOffContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1734 else if (IsXMLToken(rLocalName, XML_MOVEMENT_CUT_OFF))
1735 pContext = new ScXMLMovementCutOffContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1738 if( !pContext )
1739 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1741 return pContext;
1744 void ScXMLCutOffsContext::EndElement()
1748 ScXMLDeletionContext::ScXMLDeletionContext( ScXMLImport& rImport,
1749 USHORT nPrfx,
1750 const ::rtl::OUString& rLName,
1751 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1752 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1753 SvXMLImportContext( rImport, nPrfx, rLName ),
1754 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1756 sal_uInt32 nActionNumber(0);
1757 sal_uInt32 nRejectingNumber(0);
1758 sal_Int32 nPosition(0);
1759 sal_Int32 nMultiSpanned(0);
1760 sal_Int32 nTable(0);
1761 ScChangeActionState nActionState(SC_CAS_VIRGIN);
1762 ScChangeActionType nActionType(SC_CAT_DELETE_COLS);
1764 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1765 for( sal_Int16 i=0; i < nAttrCount; i++ )
1767 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1768 rtl::OUString aLocalName;
1769 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1770 sAttrName, &aLocalName ));
1771 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1773 if (nPrefix == XML_NAMESPACE_TABLE)
1775 if (IsXMLToken(aLocalName, XML_ID))
1777 nActionNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1779 else if (IsXMLToken(aLocalName, XML_ACCEPTANCE_STATE))
1781 if (IsXMLToken(sValue, XML_ACCEPTED))
1782 nActionState = SC_CAS_ACCEPTED;
1783 else if (IsXMLToken(sValue, XML_REJECTED))
1784 nActionState = SC_CAS_REJECTED;
1786 else if (IsXMLToken(aLocalName, XML_REJECTING_CHANGE_ID))
1788 nRejectingNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1790 else if (IsXMLToken(aLocalName, XML_TYPE))
1792 if (IsXMLToken(sValue, XML_ROW))
1794 nActionType = SC_CAT_DELETE_ROWS;
1796 else if (IsXMLToken(aLocalName, XML_TABLE))
1798 nActionType = SC_CAT_DELETE_TABS;
1801 else if (IsXMLToken(aLocalName, XML_POSITION))
1803 SvXMLUnitConverter::convertNumber(nPosition, sValue);
1805 else if (IsXMLToken(aLocalName, XML_TABLE))
1807 SvXMLUnitConverter::convertNumber(nTable, sValue);
1809 else if (IsXMLToken(aLocalName, XML_MULTI_DELETION_SPANNED))
1811 SvXMLUnitConverter::convertNumber(nMultiSpanned, sValue);
1816 pChangeTrackingImportHelper->StartChangeAction(nActionType);
1817 pChangeTrackingImportHelper->SetActionNumber(nActionNumber);
1818 pChangeTrackingImportHelper->SetActionState(nActionState);
1819 pChangeTrackingImportHelper->SetRejectingNumber(nRejectingNumber);
1820 pChangeTrackingImportHelper->SetPosition(nPosition, 1, nTable);
1821 pChangeTrackingImportHelper->SetMultiSpanned(static_cast<sal_Int16>(nMultiSpanned));
1824 ScXMLDeletionContext::~ScXMLDeletionContext()
1828 SvXMLImportContext *ScXMLDeletionContext::CreateChildContext( USHORT nPrefix,
1829 const ::rtl::OUString& rLocalName,
1830 const ::com::sun::star::uno::Reference<
1831 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1833 SvXMLImportContext *pContext(0);
1835 if ((nPrefix == XML_NAMESPACE_OFFICE) && (IsXMLToken(rLocalName, XML_CHANGE_INFO)))
1837 pContext = new ScXMLChangeInfoContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1839 else if (nPrefix == XML_NAMESPACE_TABLE)
1841 if (IsXMLToken(rLocalName, XML_DEPENDENCIES))
1842 pContext = new ScXMLDependingsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1843 else if (IsXMLToken(rLocalName, XML_DELETIONS))
1844 pContext = new ScXMLDeletionsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1845 else if (IsXMLToken(rLocalName, XML_CUT_OFFS) || rLocalName.equalsAsciiL("cut_offs", 8))
1846 pContext = new ScXMLCutOffsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1847 else
1849 DBG_ERROR("don't know this");
1853 if( !pContext )
1854 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1856 return pContext;
1859 void ScXMLDeletionContext::EndElement()
1861 pChangeTrackingImportHelper->EndChangeAction();
1864 ScXMLMovementContext::ScXMLMovementContext( ScXMLImport& rImport,
1865 USHORT nPrfx,
1866 const ::rtl::OUString& rLName,
1867 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1868 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1869 SvXMLImportContext( rImport, nPrfx, rLName ),
1870 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1872 sal_uInt32 nActionNumber(0);
1873 sal_uInt32 nRejectingNumber(0);
1874 ScChangeActionState nActionState(SC_CAS_VIRGIN);
1876 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1877 for( sal_Int16 i=0; i < nAttrCount; ++i )
1879 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1880 rtl::OUString aLocalName;
1881 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1882 sAttrName, &aLocalName ));
1883 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1885 if (nPrefix == XML_NAMESPACE_TABLE)
1887 if (IsXMLToken(aLocalName, XML_ID))
1889 nActionNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1891 else if (IsXMLToken(aLocalName, XML_ACCEPTANCE_STATE))
1893 if (IsXMLToken(sValue, XML_ACCEPTED))
1894 nActionState = SC_CAS_ACCEPTED;
1895 else if (IsXMLToken(sValue, XML_REJECTED))
1896 nActionState = SC_CAS_REJECTED;
1898 else if (IsXMLToken(aLocalName, XML_REJECTING_CHANGE_ID))
1900 nRejectingNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1905 pChangeTrackingImportHelper->StartChangeAction(SC_CAT_MOVE);
1906 pChangeTrackingImportHelper->SetActionNumber(nActionNumber);
1907 pChangeTrackingImportHelper->SetActionState(nActionState);
1908 pChangeTrackingImportHelper->SetRejectingNumber(nRejectingNumber);
1911 ScXMLMovementContext::~ScXMLMovementContext()
1915 SvXMLImportContext *ScXMLMovementContext::CreateChildContext( USHORT nPrefix,
1916 const ::rtl::OUString& rLocalName,
1917 const ::com::sun::star::uno::Reference<
1918 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
1920 SvXMLImportContext *pContext(0);
1922 if ((nPrefix == XML_NAMESPACE_OFFICE) && (IsXMLToken(rLocalName, XML_CHANGE_INFO)))
1924 pContext = new ScXMLChangeInfoContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1926 else if (nPrefix == XML_NAMESPACE_TABLE)
1928 if (IsXMLToken(rLocalName, XML_DEPENDENCIES))
1929 pContext = new ScXMLDependingsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1930 else if (IsXMLToken(rLocalName, XML_DELETIONS))
1931 pContext = new ScXMLDeletionsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
1932 else if (IsXMLToken(rLocalName, XML_SOURCE_RANGE_ADDRESS))
1933 pContext = new ScXMLBigRangeContext(GetScImport(), nPrefix, rLocalName, xAttrList, aSourceRange);
1934 else if (IsXMLToken(rLocalName, XML_TARGET_RANGE_ADDRESS))
1935 pContext = new ScXMLBigRangeContext(GetScImport(), nPrefix, rLocalName, xAttrList, aTargetRange);
1938 if( !pContext )
1939 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1941 return pContext;
1944 void ScXMLMovementContext::EndElement()
1946 pChangeTrackingImportHelper->SetMoveRanges(aSourceRange, aTargetRange);
1947 pChangeTrackingImportHelper->EndChangeAction();
1950 ScXMLRejectionContext::ScXMLRejectionContext( ScXMLImport& rImport,
1951 USHORT nPrfx,
1952 const ::rtl::OUString& rLName,
1953 const uno::Reference<xml::sax::XAttributeList>& xAttrList,
1954 ScXMLChangeTrackingImportHelper* pTempChangeTrackingImportHelper ) :
1955 SvXMLImportContext( rImport, nPrfx, rLName ),
1956 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper)
1958 sal_uInt32 nActionNumber(0);
1959 sal_uInt32 nRejectingNumber(0);
1960 ScChangeActionState nActionState(SC_CAS_VIRGIN);
1962 sal_Int16 nAttrCount(xAttrList.is() ? xAttrList->getLength() : 0);
1963 for( sal_Int16 i=0; i < nAttrCount; ++i )
1965 const rtl::OUString& sAttrName(xAttrList->getNameByIndex( i ));
1966 rtl::OUString aLocalName;
1967 USHORT nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1968 sAttrName, &aLocalName ));
1969 const rtl::OUString& sValue(xAttrList->getValueByIndex( i ));
1971 if (nPrefix == XML_NAMESPACE_TABLE)
1973 if (IsXMLToken(aLocalName, XML_ID))
1975 nActionNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1977 else if (IsXMLToken(aLocalName, XML_ACCEPTANCE_STATE))
1979 if (IsXMLToken(sValue, XML_ACCEPTED))
1980 nActionState = SC_CAS_ACCEPTED;
1981 else if (IsXMLToken(sValue, XML_REJECTED))
1982 nActionState = SC_CAS_REJECTED;
1984 else if (IsXMLToken(aLocalName, XML_REJECTING_CHANGE_ID))
1986 nRejectingNumber = pChangeTrackingImportHelper->GetIDFromString(sValue);
1991 pChangeTrackingImportHelper->StartChangeAction(SC_CAT_MOVE);
1992 pChangeTrackingImportHelper->SetActionNumber(nActionNumber);
1993 pChangeTrackingImportHelper->SetActionState(nActionState);
1994 pChangeTrackingImportHelper->SetRejectingNumber(nRejectingNumber);
1997 ScXMLRejectionContext::~ScXMLRejectionContext()
2001 SvXMLImportContext *ScXMLRejectionContext::CreateChildContext( USHORT nPrefix,
2002 const ::rtl::OUString& rLocalName,
2003 const ::com::sun::star::uno::Reference<
2004 ::com::sun::star::xml::sax::XAttributeList>& xAttrList )
2006 SvXMLImportContext *pContext(0);
2008 if ((nPrefix == XML_NAMESPACE_OFFICE) && (IsXMLToken(rLocalName, XML_CHANGE_INFO)))
2010 pContext = new ScXMLChangeInfoContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
2012 else if (nPrefix == XML_NAMESPACE_TABLE)
2014 if (IsXMLToken(rLocalName, XML_DEPENDENCIES))
2015 pContext = new ScXMLDependingsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
2016 else if (IsXMLToken(rLocalName, XML_DELETIONS))
2017 pContext = new ScXMLDeletionsContext(GetScImport(), nPrefix, rLocalName, xAttrList, pChangeTrackingImportHelper);
2020 if( !pContext )
2021 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
2023 return pContext;
2026 void ScXMLRejectionContext::EndElement()
2028 pChangeTrackingImportHelper->EndChangeAction();