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

Reply via email to