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

matteocam matteo.campanelli at gmail.com
Wed Sep 3 13:47:59 PDT 2014


 editeng/source/editeng/editeng.cxx   |    6 ++++++
 editeng/source/editeng/impedit.hxx   |    2 ++
 editeng/source/editeng/impedit4.cxx  |    8 ++++++++
 editeng/source/outliner/outliner.cxx |   13 ++++++++++---
 include/editeng/editeng.hxx          |    2 ++
 svx/source/svdraw/svdotxed.cxx       |    2 +-
 6 files changed, 29 insertions(+), 4 deletions(-)

New commits:
commit 764d0fdb8ff6069b2486d5a52b8a01b300cb20e5
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Wed Sep 3 22:47:10 2014 +0200

    First para-s overflowing are chained correctly: no more null text obj-s
    
    Change-Id: If496de707743b9ac69cb7c440662ac7d4200b456

diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 9e6f25d..35e6515 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -1494,6 +1494,12 @@ EditTextObject* EditEngine::CreateTextObject( const ESelection& rESelection )
     return pImpEditEngine->CreateTextObject( aSel );
 }
 
+EditTextObject* EditEngine::GetEmptyTextObject() const
+{
+    return pImpEditEngine->GetEmptyTextObject();
+}
+
+
 void EditEngine::SetText( const EditTextObject& rTextObject )
 {
     pImpEditEngine->EnterBlockNotifications();
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index e8ede1b..559a1dd 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -534,6 +534,8 @@ private:
     void                ParaAttribsToCharAttribs( ContentNode* pNode );
     void                GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const;
 
+    EditTextObject* GetEmptyTextObject();
+
     EditTextObject*     CreateTextObject( EditSelection aSelection, SfxItemPool*, bool bAllowBigObjects = false, sal_Int32 nBigObjStart = 0 );
     EditSelection       InsertTextObject( const EditTextObject&, EditPaM aPaM );
     EditSelection       InsertText( ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& rxDataObj, const OUString& rBaseURL, const EditPaM& rPaM, bool bUseSpecial );
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
index 77827e4..ebfc4a9 100644
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -991,6 +991,14 @@ sal_uInt32 ImpEditEngine::WriteHTML( SvStream&, EditSelection )
     return 0;
 }
 
+EditTextObject* ImpEditEngine::GetEmptyTextObject()
+{
+    EditSelection aEmptySel;
+    aEmptySel.Min() = aEditDoc.GetStartPaM();
+    aEmptySel.Max() = aEditDoc.GetStartPaM();
+
+    return CreateTextObject( aEmptySel );
+}
 
 EditTextObject* ImpEditEngine::CreateTextObject()
 {
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 38f66f2..52a0f18 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -2112,9 +2112,16 @@ OutlinerParaObject *Outliner::GetNonOverflowingParaObject() const
         return NULL;
     }
 
-    if ( nCount == 0 ) // Only overflowing text
-        return NULL;
-    else if (nCount < 0) // No overflowing Text
+    if ( nCount == 0 ) // Only overflowing text, i.e. 1st paragraph overflowing
+    {
+        EditTextObject *pEmptyText = pEditEngine->GetEmptyTextObject();
+        OutlinerParaObject* pPObj = new OutlinerParaObject( *pEmptyText );
+        pPObj->SetOutlinerMode(GetMode());
+
+        delete pEmptyText;
+        return pPObj;
+
+    } else if (nCount < 0) // No overflowing Text
         nCount = GetParagraphCount();
 
     // code inspired from Outliner::CreateParaObject
diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx
index 7bd1656..dda4e29 100644
--- a/include/editeng/editeng.hxx
+++ b/include/editeng/editeng.hxx
@@ -290,6 +290,8 @@ public:
     EditTextObject* CreateTextObject( const ESelection& rESelection );
     void            SetText( const EditTextObject& rTextObject );
 
+    EditTextObject* GetEmptyTextObject() const;
+
     void            RemoveParagraph(sal_Int32 nPara);
     void            InsertParagraph(sal_Int32 nPara, const EditTextObject& rTxtObj);
     void            InsertParagraph(sal_Int32 nPara, const OUString& rText);
diff --git a/svx/source/svdraw/svdotxed.cxx b/svx/source/svdraw/svdotxed.cxx
index 5ca8a05..840fbe3 100644
--- a/svx/source/svdraw/svdotxed.cxx
+++ b/svx/source/svdraw/svdotxed.cxx
@@ -277,7 +277,7 @@ void SdrTextObj::EndTextEdit(SdrOutliner& rOutl)
         if ( IsToBeChained() && GetNextLinkInChain() != this) // XXX: defensive check
         {
             // set non overflow part of text to current box
-            pNewText = rOutl.GetNonOverflowingParaObject();
+            pNewText = rOutl.GetNonOverflowingParaObject(); // empty text obj. if 1st para is overflowing
             // set overflowing text for SdrChainedTextPrimitive2D
             pNextText = rOutl.GetOverflowingParaObject();
             mpOverflowingText = pNextText;


More information about the Libreoffice-commits mailing list