diff options
Diffstat (limited to 'sw/source/filter/xml/XMLRedlineImportHelper.hxx')
-rw-r--r-- | sw/source/filter/xml/XMLRedlineImportHelper.hxx | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.hxx b/sw/source/filter/xml/XMLRedlineImportHelper.hxx new file mode 100644 index 000000000000..ab8f31f5e3a0 --- /dev/null +++ b/sw/source/filter/xml/XMLRedlineImportHelper.hxx @@ -0,0 +1,164 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _XMLREDLINEIMPORTHELPER_HXX +#define _XMLREDLINEIMPORTHELPER_HXX + +#include <rtl/ustring.hxx> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/util/DateTime.hpp> +#include "redline.hxx" + +#include <map> + +class RedlineInfo; +class SwRedlineData; +class SwDoc; +namespace com { namespace sun { namespace star { + namespace text { class XTextCursor; } + namespace text { class XTextRange; } + namespace frame { class XModel; } +} } } + + +typedef ::std::map< ::rtl::OUString, RedlineInfo* > RedlineMapType; + +class XMLRedlineImportHelper +{ + const ::rtl::OUString sEmpty; + const ::rtl::OUString sInsertion; + const ::rtl::OUString sDeletion; + const ::rtl::OUString sFormatChange; + const ::rtl::OUString sShowChanges; + const ::rtl::OUString sRecordChanges; + const ::rtl::OUString sRedlineProtectionKey; + + RedlineMapType aRedlineMap; + + /// if sal_True, no redlines should be inserted into document + /// (This typically happen when a document is loaded in 'insert'-mode.) + sal_Bool bIgnoreRedlines; + + /// save information for saving and reconstruction of the redline mode + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> xModelPropertySet; + ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> xImportInfoPropertySet; + sal_Bool bShowChanges; + sal_Bool bRecordChanges; + ::com::sun::star::uno::Sequence<sal_Int8> aProtectionKey; + +public: + + XMLRedlineImportHelper( + sal_Bool bIgnoreRedlines, /// ignore redlines mode + + // property sets of model + import info for saving + restoring the + // redline mode + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rModel, + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rImportInfoSet ); + virtual ~XMLRedlineImportHelper(); + + /// create a redline object + /// (The redline will be inserted into the document after both start + /// and end cursor has been set.) + void Add( + const ::rtl::OUString& rType, /// redline type (insert, del,... ) + const ::rtl::OUString& rId, /// use to identify this redline + const ::rtl::OUString& rAuthor, /// name of the author + const ::rtl::OUString& rComment, /// redline comment + const ::com::sun::star::util::DateTime& rDateTime, /// date+time + sal_Bool bMergeLastParagraph); /// merge last paragraph? + + /// create a text section for the redline, and return an + /// XText/XTextCursor that may be used to write into it. + ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextCursor> CreateRedlineTextSection( + ::com::sun::star::uno::Reference< /// needed to get the document + ::com::sun::star::text::XTextCursor> xOldCursor, + const ::rtl::OUString& rId); /// ID used to RedlineAdd() call + + /// Set start or end position for a redline in the text body. + /// Accepts XTextRange objects. + void SetCursor( + const ::rtl::OUString& rId, /// ID used in RedlineAdd() call + sal_Bool bStart, /// start or end Range + ::com::sun::star::uno::Reference< /// the actual XTextRange + ::com::sun::star::text::XTextRange> & rRange, + /// text range is (from an XML view) outside of a paragraph + /// (i.e. before a table) + sal_Bool bIsOusideOfParagraph); + + /** + * Adjust the start (end) position for a redline that begins in a + * start node. It takes the cursor positions _inside_ the redlined + * element (e.g. section or table). + * + * We will do sanity checking of the given text range: It will + * only be considered valid if it points to the next text node + * after the position given in a previous SetCursor */ + void AdjustStartNodeCursor( + const ::rtl::OUString& rId, /// ID used in RedlineAdd() call + sal_Bool bStart, + /// XTextRange _inside_ a table/section + ::com::sun::star::uno::Reference< + ::com::sun::star::text::XTextRange> & rRange); + + /// set redline mode: show changes + void SetShowChanges( sal_Bool bShowChanges ); + + /// set redline mode: record changes + void SetRecordChanges( sal_Bool bRecordChanges ); + + /// set redline protection key + void SetProtectionKey( + const ::com::sun::star::uno::Sequence<sal_Int8> & rKey ); + +private: + + inline sal_Bool IsReady(RedlineInfo* pRedline); + + void InsertIntoDocument(RedlineInfo* pRedline); + + SwRedlineData* ConvertRedline( + RedlineInfo* pRedline, /// RedlineInfo to be converted + SwDoc* pDoc); /// document needed for Author-ID conversion + + /** save the redline mode (if rPropertySet is non-null) */ + void SaveRedlineMode( + const ::com::sun::star::uno::Reference< + ::com::sun::star::beans::XPropertySet> & rPropertySet); + + /** don't restore the saved redline mode */ + void DontRestoreRedlineMode(); + +}; + +#endif + |