editeng/source/outliner/outliner.cxx       |    6 +++
 editeng/source/outliner/overflowingtxt.cxx |   23 ++++++++++----
 include/editeng/outliner.hxx               |    2 +
 include/editeng/overflowingtxt.hxx         |   17 +++++++++-
 include/svx/textchainflow.hxx              |   11 +++---
 svx/source/svdraw/textchainflow.cxx        |   47 ++++++++++++-----------------
 6 files changed, 67 insertions(+), 39 deletions(-)

New commits:
commit 191ed1adffa8b33ffdb1b0c18a3555503c907123
Author: matteocam <matteo.campane...@gmail.com>
Date:   Tue Jun 30 13:04:25 2015 -0400

    Added UFlowChainedText constructor
    
    Change-Id: Iad9542c624148a4d717724a9f6bc7a453c650c90

diff --git a/editeng/source/outliner/overflowingtxt.cxx 
b/editeng/source/outliner/overflowingtxt.cxx
index 8ccbf6f..533be0d 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -149,6 +149,12 @@ OutlinerParaObject 
*OFlowChainedText::CreateNonOverflowingParaObject(Outliner *p
      return pOutliner->CreateParaObject();
 }
 
+
+UFlowChainedText::UFlowChainedText(Outliner *pOutl)
+{
+    mpUnderflowPObj = pOutl->CreateParaObject();
+}
+
 OutlinerParaObject *UFlowChainedText::CreateMergedUnderflowParaObject(Outliner 
*pOutl, OutlinerParaObject *pNextLinkWholeText)
 {
     OutlinerParaObject *pCurText = mpUnderflowPObj;
commit fa9b4a5d9782252417a89a1ba8ccdf6b3d93485b
Author: matteocam <matteo.campane...@gmail.com>
Date:   Tue Jun 30 13:02:34 2015 -0400

    UFlowChainedText used to deal with underflow
    
    Change-Id: I6942b09f016756a81f411ba27ba3f7fcc2fa1aa1

diff --git a/editeng/source/outliner/outliner.cxx 
b/editeng/source/outliner/outliner.cxx
index 060e628..e63c7ff 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -415,6 +415,12 @@ OutlinerParaObject* Outliner::CreateParaObject( sal_Int32 
nStartPara, sal_Int32
     return pPObj;
 }
 
+void Outliner::SetToEmptyText()
+{
+    OutlinerParaObject *pEmptyTxt =  GetEmptyParaObject();
+    SetText(*pEmptyTxt);
+}
+
 void Outliner::SetText( const OUString& rText, Paragraph* pPara )
 {
     DBG_ASSERT(pPara,"SetText:No Para");
diff --git a/editeng/source/outliner/overflowingtxt.cxx 
b/editeng/source/outliner/overflowingtxt.cxx
index 9e1ee3d..8ccbf6f 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -71,7 +71,7 @@ OutlinerParaObject 
*OFlowChainedText::CreateOverflowingParaObject(Outliner *pOut
 
     if (pOldPara0) {
         //pOutliner->Clear(); // you need a clear outliner here
-        impSetOutlinerToEmptyTxt(pOutliner);
+        pOutliner->SetToEmptyText();
 
         pTmpPara0 = pOutliner->GetParagraph(0);
         pOutliner->SetText(mpOverflowingTxt->GetEndingLines() + aOldPara0Txt, 
pTmpPara0);
@@ -84,7 +84,7 @@ OutlinerParaObject 
*OFlowChainedText::CreateOverflowingParaObject(Outliner *pOut
 
     // start actual composition
     //pOutliner->Clear();
-    impSetOutlinerToEmptyTxt(pOutliner);
+    pOutliner->SetToEmptyText();
 
     // Set headText at the beginning of box
     OUString aHeadTxt = mpOverflowingTxt->GetHeadingLines();
@@ -127,7 +127,7 @@ OutlinerParaObject 
*OFlowChainedText::CreateNonOverflowingParaObject(Outliner *p
     } else { // We have to include the non-overflowing lines from the overfl. 
para
 
         // first make a ParaObject for the strings
-        impSetOutlinerToEmptyTxt(pOutliner);
+        pOutliner->SetToEmptyText();
         Paragraph *pTmpPara0 = pOutliner->GetParagraph(0);
         pOutliner->SetText(mpNonOverflowingTxt->mPreOverflowingTxt, pTmpPara0);
         OutlinerParaObject *pPObj = pOutliner->CreateParaObject();
@@ -149,11 +149,16 @@ OutlinerParaObject 
*OFlowChainedText::CreateNonOverflowingParaObject(Outliner *p
      return pOutliner->CreateParaObject();
 }
 
-void OFlowChainedText::impSetOutlinerToEmptyTxt(Outliner *pOutliner)
+OutlinerParaObject *UFlowChainedText::CreateMergedUnderflowParaObject(Outliner 
*pOutl, OutlinerParaObject *pNextLinkWholeText)
 {
-    OutlinerParaObject *pEmptyTxt = pOutliner->GetEmptyParaObject();
-    pOutliner->SetText(*pEmptyTxt);
-}
+    OutlinerParaObject *pCurText = mpUnderflowPObj;
+
+    // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox)
+    pOutl->SetText(*pCurText);
+    pOutl->AddText(*pNextLinkWholeText);
+    OutlinerParaObject *pNewText = pOutl->CreateParaObject();
 
+    return pNewText;
 
+}
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx
index 0cef0cc..ffbb1b7 100644
--- a/include/editeng/outliner.hxx
+++ b/include/editeng/outliner.hxx
@@ -698,6 +698,8 @@ public:
     void            SetText( const OUString& rText, Paragraph* pParagraph );
     OUString        GetText( Paragraph* pPara, sal_Int32 nParaCount=1 ) const;
 
+    void            SetToEmptyText();
+
     OutlinerParaObject* CreateParaObject( sal_Int32 nStartPara = 0, sal_Int32 
nParaCount = EE_PARA_ALL ) const;
 
     const SfxItemSet& GetEmptyItemSet() const;
diff --git a/include/editeng/overflowingtxt.hxx 
b/include/editeng/overflowingtxt.hxx
index a2602ad..58ff247 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -79,10 +79,11 @@ class EDITENG_DLLPUBLIC NonOverflowingText {
 // XXX: Do we also need a class for Underflow here?
 
 /*
- * class ChainedText:
+ * classes ?FlowChainedText:
  * contains and handles the state of a text broken _after_ a flow event.
  *
 */
+
 class EDITENG_DLLPUBLIC OFlowChainedText {
     public:
     OFlowChainedText(Outliner *);
@@ -102,6 +103,20 @@ class EDITENG_DLLPUBLIC OFlowChainedText {
 
 };
 
+// UFlowChainedText is a simpler class than OFlowChainedText: it almost only 
joins para-objects
+class EDITENG_DLLPUBLIC UFlowChainedText {
+    public:
+    UFlowChainedText(Outliner *);
+
+    OutlinerParaObject *CreateMergedUnderflowParaObject(Outliner *, 
OutlinerParaObject *);
+
+    protected:
+
+
+    private:
+    OutlinerParaObject *mpUnderflowPObj;
+};
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/textchainflow.hxx b/include/svx/textchainflow.hxx
index ce6d728..5489bb1 100644
--- a/include/svx/textchainflow.hxx
+++ b/include/svx/textchainflow.hxx
@@ -27,6 +27,7 @@ class OverflowingText;
 class TextChain;
 class OutlinerParaObject;
 class OFlowChainedText;
+class UFlowChainedText;
 
 // XXX: const qualifiers?
 
@@ -40,7 +41,7 @@ class TextChainFlow {
     // Check for flow events in Outliner
     virtual void CheckForFlowEvents(SdrOutliner *);
 
-    void ExecuteUnderflow(SdrOutliner *);
+    virtual void ExecuteUnderflow(SdrOutliner *);
 
     // Uses two outliners: one for the non-overfl text and one for overflowing 
(might be the same)
     virtual void ExecuteOverflow(SdrOutliner *, SdrOutliner *);
@@ -54,6 +55,7 @@ class TextChainFlow {
     SdrTextObj *GetNextLink() const;
 
     OFlowChainedText *GetOverflowChainedText() const;
+    UFlowChainedText *GetUnderflowChainedText() const;
 
     //  -- Protected Members --
     protected:
@@ -70,7 +72,7 @@ class TextChainFlow {
     OutlinerParaObject *impGetNonOverflowingParaObject(SdrOutliner *pOutliner);
     OutlinerParaObject *impGetOverflowingParaObject(SdrOutliner *pOutliner);
     // impGetMergedUnderflowingParaObject merges underflowing text with the 
one in the next box
-    OutlinerParaObject *impGetMergedUnderflowingParaObject(SdrOutliner 
*pOutliner);
+    OutlinerParaObject *impGetMergedUnderflowParaObject(SdrOutliner 
*pOutliner);
 
     //  -- Private Members --
     private:
@@ -85,11 +87,8 @@ class TextChainFlow {
     bool bOverflow;
 
     OFlowChainedText *mpOverflChText;
+    UFlowChainedText *mpUnderflChText;
 
-    //OverflowingText *mpOverflowingTxt;
-    //NonOverflowingText *mpNonOverflowingTxt;
-
-    OutlinerParaObject *mpUnderflowingPObj;
 
 };
 
diff --git a/svx/source/svdraw/textchainflow.cxx 
b/svx/source/svdraw/textchainflow.cxx
index 93bb2f1..2d23aa5 100644
--- a/svx/source/svdraw/textchainflow.cxx
+++ b/svx/source/svdraw/textchainflow.cxx
@@ -35,12 +35,7 @@ TextChainFlow::TextChainFlow(SdrTextObj *pChainTarget)
     bUnderflow = bOverflow = false;
 
     mpOverflChText = NULL;
-    //mpOverflowingTxt = NULL;
-    //mpNonOverflowingTxt = NULL;
-
-    mpUnderflowingPObj = NULL;
-
-    // XXX: Set the next link here?
+    mpUnderflChText = NULL;
 
 
 }
@@ -69,10 +64,11 @@ void TextChainFlow::impCheckForFlowEvents(SdrOutliner 
*pFlowOutl, SdrOutliner *p
     // NOTE: Nah you probably don't need this
     if (pParamOutl != NULL)
     {
-        // XXX: Set parameters
-        // XXX: does this work if you do it before setting the text? Seems so.
+        // We need this since it's required to check overflow
         pFlowOutl->SetUpdateMode(true);
-       impSetFlowOutlinerParams(pFlowOutl, pParamOutl);
+
+        // XXX: does this work if you do it before setting the text? Seems so.
+        impSetFlowOutlinerParams(pFlowOutl, pParamOutl);
     }
 
     bool bIsPageOverflow = pFlowOutl->IsPageOverflow();
@@ -86,14 +82,11 @@ void TextChainFlow::impCheckForFlowEvents(SdrOutliner 
*pFlowOutl, SdrOutliner *p
     bOverflow = bIsPageOverflow && mpNextLink;
     bUnderflow = !bIsPageOverflow &&  mpNextLink && mpNextLink->HasText();
 
-    // Set (Non)OverflowingTxt here
+    // Set (Non)OverflowingTxt here (if any)
     mpOverflChText = bOverflow ? new OFlowChainedText(pFlowOutl) : NULL;
 
-    //mpOverflowingTxt = bOverflow ? pFlowOutl->GetOverflowingText() : NULL;
-    //mpNonOverflowingTxt = bOverflow ? pFlowOutl->GetNonOverflowingText() : 
NULL;
-
     // Set current underflowing text (if any)
-    mpUnderflowingPObj = bUnderflow ? pFlowOutl->CreateParaObject() : NULL;
+    mpUnderflChText = bUnderflow ? new UFlowChainedText(pFlowOutl) : NULL;
 
 }
 
@@ -119,26 +112,17 @@ bool TextChainFlow::IsUnderflow() const
 // XXX:Would it be possible to unify undeflow and its possibly following 
overrflow?
 void TextChainFlow::ExecuteUnderflow(SdrOutliner *pOutl)
 {
-    OutlinerParaObject *pNextLinkWholeText = 
mpNextLink->GetOutlinerParaObject();
-
     // making whole text
-    OutlinerParaObject *pCurText;
-    // We saved this text already
-    pCurText = mpUnderflowingPObj;
+    OutlinerParaObject *pNewText = impGetMergedUnderflowParaObject(pOutl);
 
-    // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox)
-    pOutl->SetText(*pCurText);
-    pOutl->AddText(*pNextLinkWholeText);
-    OutlinerParaObject *pNewText = pOutl->CreateParaObject();
-
-    // Set the other box empty so if overflow does not occur we are fine
+    // Set the other box empty; it will be replaced by the rest of the text if 
overflow occurs
     if (!mpTargetLink->GetPreventChainable())
         mpNextLink->NbcSetOutlinerParaObject(pOutl->GetEmptyParaObject());
 
     mpTargetLink->NbcSetOutlinerParaObject(pNewText);
 
     // Check for new overflow
-    CheckForFlowEvents(pOutl); // XXX: How do you know you don't need to set 
parameters here?
+    CheckForFlowEvents(pOutl);
 }
 
 void TextChainFlow::ExecuteOverflow(SdrOutliner *pNonOverflOutl, SdrOutliner 
*pOverflOutl)
@@ -196,6 +180,12 @@ OutlinerParaObject 
*TextChainFlow::impGetOverflowingParaObject(SdrOutliner *pOut
     return mpOverflChText->CreateOverflowingParaObject(pOutliner, 
mpNextLink->GetOutlinerParaObject());
 }
 
+OutlinerParaObject *TextChainFlow::impGetMergedUnderflowParaObject(SdrOutliner 
*pOutliner)
+{
+    // Should check whether to merge paragraphs or not
+    return mpUnderflChText->CreateMergedUnderflowParaObject(pOutliner, 
mpNextLink->GetOutlinerParaObject());
+}
+
 TextChain *TextChainFlow::GetTextChain()
 {
     return mpTextChain;
@@ -206,6 +196,11 @@ OFlowChainedText *TextChainFlow::GetOverflowChainedText() 
const
     return mpOverflChText;
 }
 
+UFlowChainedText *TextChainFlow::GetUnderflowChainedText() const
+{
+    return mpUnderflChText;
+}
+
 
 // EditingTextChainFlow
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to