include/xmloff/txtimp.hxx | 4 +- sw/source/filter/xml/XMLRedlineImportHelper.cxx | 44 ++++++++++++++++++++++++ sw/source/filter/xml/XMLRedlineImportHelper.hxx | 3 + sw/source/filter/xml/xmltexti.cxx | 13 ++++++- sw/source/filter/xml/xmltexti.hxx | 3 + xmloff/source/text/txtimp.cxx | 8 +++- xmloff/source/text/txtparai.cxx | 5 ++ xmloff/source/text/txtparai.hxx | 3 + 8 files changed, 75 insertions(+), 8 deletions(-)
New commits: commit a6bc6c2b7138b7de5dcd45944eb5321fbd16d53b Author: Rosemary Sebastian <rosemary.s...@gmail.com> Date: Wed Jul 13 13:53:30 2016 +0530 WIP Insert redline into document Change-Id: I98857e98503176c812b0fb70a41cb8e79637da78 diff --git a/include/xmloff/txtimp.hxx b/include/xmloff/txtimp.hxx index 01045d0..01b3f0a 100644 --- a/include/xmloff/txtimp.hxx +++ b/include/xmloff/txtimp.hxx @@ -678,7 +678,9 @@ public: virtual bool CheckRedlineExists( /// ID used to RedlineAdd() call - const OUString& rId); + const OUString& rStartParaPos); + + virtual void InsertRedlinesWithinParagraph(const OUString& rStartParaPos, bool bStart, bool bIsOutsideOfParagraph); virtual void RedlineSetCursor( /// ID used to RedlineAdd() call diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.cxx b/sw/source/filter/xml/XMLRedlineImportHelper.cxx index 686d606..0767c50 100644 --- a/sw/source/filter/xml/XMLRedlineImportHelper.cxx +++ b/sw/source/filter/xml/XMLRedlineImportHelper.cxx @@ -503,6 +503,50 @@ bool XMLRedlineImportHelper::Check( return false; } +void XMLRedlineImportHelper::InsertWithinParagraph(const OUString& rParaPos, bool bStart, + Reference<XTextRange> & rRange, bool bIsOutsideOfParagraph) +{ + ::std::map<OUString, RedlineInfo*>::iterator aFind = aRedlineMap[rParaPos].begin(); + for( ; aRedlineMap[rParaPos].end() != aFind; ++aFind ) + { + // RedlineInfo found; now set Cursor + RedlineInfo* pInfo = aFind->second; + if (bIsOutsideOfParagraph) + { + // outside of paragraph: remember SwNodeIndex + if (bStart) + { + pInfo->aAnchorStart.SetAsNodeIndex(rRange); + } + else + { + pInfo->aAnchorEnd.SetAsNodeIndex(rRange); + } + + // also remember that we expect an adjustment for this redline + pInfo->bNeedsAdjustment = true; + } + else + { + // inside of a paragraph: use regular XTextRanges (bookmarks) + if (bStart) + pInfo->aAnchorStart.Set(rRange); + else + pInfo->aAnchorEnd.Set(rRange); + } + + // if this Cursor was the last missing info, we insert the + // node into the document + // then we can remove the entry from the map and destroy the object + if (IsReady(pInfo)) + { + InsertIntoDocument(pInfo); + delete pInfo; + } + } + aRedlineMap[rParaPos].clear(); +} + void XMLRedlineImportHelper::SetCursor( const OUString& rParaPos, const OUString& rTextPos, diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.hxx b/sw/source/filter/xml/XMLRedlineImportHelper.hxx index af3f6c9..adb5695 100644 --- a/sw/source/filter/xml/XMLRedlineImportHelper.hxx +++ b/sw/source/filter/xml/XMLRedlineImportHelper.hxx @@ -86,6 +86,9 @@ public: bool Check( const OUString& rParaPos); + void InsertWithinParagraph(const OUString& rParaPos, bool bStart, + css::uno::Reference<css::text::XTextRange> & rRange, bool bIsOusideOfParagraph); + // Set start or end position for a redline in the text body. // Accepts XTextRange objects. void SetCursor( diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx index 1c4b2c4..05c1cb6 100644 --- a/sw/source/filter/xml/xmltexti.cxx +++ b/sw/source/filter/xml/xmltexti.cxx @@ -1001,14 +1001,23 @@ uno::Reference<XTextCursor> SwXMLTextImportHelper::RedlineCreateText( } bool SwXMLTextImportHelper::CheckRedlineExists( - const OUString& rId) + const OUString& rStartParaPos) { if(pRedlineHelper != nullptr) - return pRedlineHelper->Check(rId); + return pRedlineHelper->Check(rStartParaPos); return false; // else: ignore redline (wasn't added before, else we'd have a helper) } +void SwXMLTextImportHelper::InsertRedlinesWithinParagraph(const OUString& rStartParaPos, bool bStart, bool bIsOutsideOfParagraph) +{ + if(pRedlineHelper != nullptr) + { + uno::Reference<XTextRange> xTextRange( GetCursor()->getStart() ); + pRedlineHelper->InsertWithinParagraph(rStartParaPos, bStart, xTextRange, bIsOutsideOfParagraph); + } +} + void SwXMLTextImportHelper::RedlineSetCursor( const OUString& rParaPos, const OUString& rTextPos, diff --git a/sw/source/filter/xml/xmltexti.hxx b/sw/source/filter/xml/xmltexti.hxx index 4b09805..79dae30 100644 --- a/sw/source/filter/xml/xmltexti.hxx +++ b/sw/source/filter/xml/xmltexti.hxx @@ -97,7 +97,8 @@ public: css::uno::Reference<css::text::XTextCursor> & rOldCursor, /// needed to get the document const OUString& rParPos, const OUString& rTextPos) override; /// ID used to RedlineAdd() call virtual bool CheckRedlineExists( - const OUString& rId) override; /// ID used to RedlineAdd() call + const OUString& rStartParaPos) override; /// ID used to RedlineAdd() call + virtual void InsertRedlinesWithinParagraph(const OUString& rStartParaPos, bool bStart, bool bIsOutsideOfParagraph) override; virtual void RedlineSetCursor( const OUString& rStartParaPos, const OUString& rStartTextPos, diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx index e97901d..1e7c58e 100644 --- a/xmloff/source/text/txtimp.cxx +++ b/xmloff/source/text/txtimp.cxx @@ -2161,7 +2161,7 @@ SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext( } pContext = new XMLParaContext( rImport, nPrefix, rLocalName, - xAttrList, bHeading, bInsertRedline ); + xAttrList, bHeading, bInsertRedline, sParaIdx ); if (m_xImpl->m_bProgress && XML_TEXT_TYPE_SHAPE != eType) { rImport.GetProgressBarHelper()->Increment(); @@ -2758,11 +2758,15 @@ Reference<XTextCursor> XMLTextImportHelper::RedlineCreateText( } bool XMLTextImportHelper::CheckRedlineExists( - const OUString& /*rId*/) + const OUString& /*rStartParaPos*/) { return true; } +void XMLTextImportHelper::InsertRedlinesWithinParagraph(const OUString& /*rStartParaPos*/, bool /*bStart*/, bool /*bIsOutsideOfParagraph*/) +{ +} + void XMLTextImportHelper::RedlineSetCursor( const OUString& /*rParaPos*/, const OUString& /*rTextPos*/, diff --git a/xmloff/source/text/txtparai.cxx b/xmloff/source/text/txtparai.cxx index 86c5736..f3c3c58 100644 --- a/xmloff/source/text/txtparai.cxx +++ b/xmloff/source/text/txtparai.cxx @@ -1820,7 +1820,8 @@ XMLParaContext::XMLParaContext( const OUString& rLName, const Reference< xml::sax::XAttributeList > & xAttrList, bool bHead, - bool bInsertRedln) : + bool bInsertRedln, + const OUString& rStartParaPos) : SvXMLImportContext( rImport, nPrfx, rLName ), xStart( rImport.GetTextImport()->GetCursorAsRange()->getStart() ), m_bHaveAbout(false), @@ -1831,6 +1832,7 @@ XMLParaContext::XMLParaContext( bIgnoreLeadingSpace( true ), bHeading( bHead ), bInsertRedline( bInsertRedln ), + sStartParaPos(rStartParaPos), bIsListHeader( false ), bIsRestart (false), nStartValue(0), @@ -2232,6 +2234,7 @@ void XMLParaContext::Characters( const OUString& rChars ) if(bInsertRedline) { GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace ); + GetImport().GetTextImport()->InsertRedlinesWithinParagraph(sStartParaPos, true, false); } else GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace ); diff --git a/xmloff/source/text/txtparai.hxx b/xmloff/source/text/txtparai.hxx index 8124806..e6fd5dc 100644 --- a/xmloff/source/text/txtparai.hxx +++ b/xmloff/source/text/txtparai.hxx @@ -50,6 +50,7 @@ class XMLParaContext : public SvXMLImportContext bool bIgnoreLeadingSpace; bool bHeading; bool bInsertRedline; + OUString sStartParaPos; bool bIsListHeader; bool bIsRestart; sal_Int16 nStartValue; @@ -63,7 +64,7 @@ public: const OUString& rLName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList, bool bHeading, - bool bInsertRedln = false ); + bool bInsertRedln = false, const OUString& rStartParaPos = OUString() ); virtual ~XMLParaContext(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits