[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - svx/source

matteocam matteo.campanelli at gmail.com
Mon Jun 1 11:51:08 PDT 2015


 svx/source/svdraw/svdotextdecomposition.cxx |   72 +++++++++++++++++++++++++---
 1 file changed, 66 insertions(+), 6 deletions(-)

New commits:
commit 50d8c0b1aabd184742cf1ea3ceaa3a65b7419205
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Mon Jun 1 14:50:11 2015 -0400

    Does copying in the right way. Still detached from source text
    
    Change-Id: I458062225d0270e05deb68c54911921483352d54

diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx
index 36fa13d..6f29f26 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -745,18 +745,78 @@ void SdrTextObj::impCopyTextInTextObj2(SdrTextObj *pNextTextObj) const
     rOutliner.SetStatusEventHdl1(LINK(this,SdrTextObj,ImpDecomposeChainedText));
 
     struct OverflowingText {
-        OUString headTxt;
-        OutlinerParaObject *tailParas;
+        OUString mHeadTxt;
+        const OutlinerParaObject *mpMidParas;
+        OUString mTailTxt;
+        // NOTE: mpMidParas and mTailTxt might be empty
+
+        // Constructor
+        OverflowingText(
+            const OUString &headTxt,
+            const OutlinerParaObject *pMidParas = NULL,
+            const OUString &tailTxt = "")
+                : mHeadTxt(headTxt),
+                  mpMidParas(pMidParas),
+                  mTailTxt(tailTxt)
+                { }
     };
 
+    OverflowingText aOverflowingTxt =
+        OverflowingText("headTxt (On its own) ", NULL, "I'm Appended to #");
+
     if (mpOverflowingText) {
-        // get first para of destination box
-        // XXX: Check it exists
+        // XXX: Not sure if necessary
+        rOutliner.Clear();
+
+        OutlinerParaObject *pCurTxt = pNextTextObj->GetOutlinerParaObject();
+        rOutliner.SetText(*pCurTxt);
+
+        // Get text of first paragraph of destination box
+        Paragraph *pOldPara0 = rOutliner.GetParagraph(0);
+        OUString aOldPara0Txt;
+        if (pOldPara0)
+            aOldPara0Txt = rOutliner.GetText(pOldPara0);
+
+        // Get other paras of destination box (from second on)
+        OutlinerParaObject *pOldParasTail =
+            rOutliner.CreateParaObject(1);
 
-        // Get other paras of destination box
-        // XXX: Check they exist
+        // Create ParaObject appending old first para in the dest. box
+        //   to last part of overflowing text
+        Paragraph *pTmpPara0 = NULL;
+        OutlinerParaObject *pJoiningPara = NULL;
+
+        if (pOldPara0) {
+            rOutliner.Clear();
+
+            pTmpPara0 = rOutliner.GetParagraph(0);
+            rOutliner.SetText(aOverflowingTxt.mTailTxt + aOldPara0Txt, pTmpPara0);
+            pJoiningPara = rOutliner.CreateParaObject();
+        }
 
+        // start actual composition
+        rOutliner.Clear();
 
+        // Set headText at the beginning of box
+        Paragraph *pNewPara0 = rOutliner.GetParagraph(0);
+        rOutliner.SetText(aOverflowingTxt.mHeadTxt, pNewPara0);
+
+        // Set all the intermediate Paras
+        if (aOverflowingTxt.mpMidParas)
+            rOutliner.AddText(*aOverflowingTxt.mpMidParas);
+
+        // Append old first para in the destination box to
+        //   last part of overflowing text
+        if (pJoiningPara)
+            rOutliner.AddText(*pJoiningPara);
+
+        // Append all other old paras
+        if (pOldParasTail)
+            rOutliner.AddText(*pOldParasTail);
+
+        // Draw everything
+        OutlinerParaObject *pNewText = rOutliner.CreateParaObject();
+        pNextTextObj->NbcSetOutlinerParaObject(pNewText);
     }
 
 }


More information about the Libreoffice-commits mailing list