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

matteocam matteo.campanelli at gmail.com
Fri Aug 14 12:01:02 PDT 2015


 editeng/source/outliner/outliner.cxx       |    3 -
 editeng/source/outliner/overflowingtxt.cxx |   82 ++++++++++++++++++-----------
 include/editeng/outliner.hxx               |    2 
 include/editeng/overflowingtxt.hxx         |   25 ++++++--
 include/svx/textchainflow.hxx              |    8 +-
 svx/source/svdraw/svdotext.cxx             |    4 -
 svx/source/svdraw/textchainflow.cxx        |   14 ++--
 7 files changed, 85 insertions(+), 53 deletions(-)

New commits:
commit 416b183144fc54eb3aeaee6b0fc584fa91d46dfb
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Fri Aug 14 20:36:48 2015 +0200

    [unbuildable] use transferable
    
    Change-Id: Id7a44157500b99d475c75e08db32c4942619fd4c

diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index e921f1b..30b7633 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -2226,9 +2226,8 @@ OverflowingText *Outliner::GetOverflowingText() const
     sal_Int32 nLastParaLen = GetText(GetParagraph(nLastPara)).getLength();
     aOverflowingTextSel = ESelection(nOverflowingPara, nLen,
                                      nLastPara, nLastParaLen);
+    return new OverflowingText(pEditEngine->CreateTransferable(aOverflowingTextSel));
 
-    EditTextObject *pTObj = pEditEngine->CreateTextObject(aOverflowingTextSel);
-    return new OverflowingText(pTObj);
 }
 
 void Outliner::ClearOverflowingParaNum()
diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx
index b765550..a443a82 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -24,6 +24,9 @@
 #include <editeng/outliner.hxx>
 #include <editeng/outlobj.hxx>
 #include <editeng/editobj.hxx>
+#include <editeng/editdata.hxx>
+
+#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
 
 
 /* Helper functions for *OverflowingText classes  */
@@ -115,15 +118,18 @@ OutlinerParaObject *impGetDeeplyMergedParaObject(Outliner *pOutl,
 
 // class OverflowingText
 
-OverflowingText::OverflowingText(EditTextObject *pTObj)
-    : mpContentTextObj(pTObj->Clone())
+OverflowingText::OverflowingText(com::sun::star::uno::Reference<
+        com::sun::star::datatransfer::XTransferable> xOverflowingContent) :
+        mxOverflowingContent(xOverflowingContent)
 {
-    // XXX: may have to delete pTObj
+
 }
 
+
 ESelection OverflowingText::GetInsertionPointSel() const
 {
-    return getLastPositionSel(mpContentTextObj);
+    assert(0);
+    return getLastPositionSel(NULL);
 }
 
 // class NonOverflowingText
@@ -163,19 +169,26 @@ ESelection NonOverflowingText::GetOverflowPointSel() const
 
 // The equivalent of ToParaObject for OverflowingText. Here we are prepending the overflowing text to the old dest box's text
 // XXX: In a sense a better name for OverflowingText and NonOverflowingText are respectively DestLinkText and SourceLinkText
-OutlinerParaObject *OverflowingText::GetJuxtaposedParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj)
+OutlinerParaObject *OverflowingText::JuxtaposeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj)
 {
-    if (mpContentTextObj == NULL) {
-        fprintf(stderr, "[Chaining] OverflowingText's mpContentTextObj is NULL!\n");
-        return NULL;
+    if (!pNextPObj) {
+        pOutl->SetToEmptyText();
+    } else {
+        pOutl->SetText(*pNextPObj);
     }
 
-    OutlinerParaObject *pOverflowingPObj = new OutlinerParaObject(*mpContentTextObj);
-    // the OutlinerParaObject constr. at the prev line gives no valid outliner mode, so we set it
-    pOverflowingPObj->SetOutlinerMode(pOutl->GetOutlinerMode());
+    // XXX: this code should be moved in Outliner directly
+    //          creating Outliner::InsertText(...transferable...)
+    EditSelection aStartSel(pOutl->pEditEngine->CreateSelection(ESelection(0,0)));
+    EditPaM aPaM = pOutl->pEditEngine->InsertText(mxOverflowingContent,
+                                                  OUString(),
+                                                  aStartSel.Min(),
+                                                  true);
 
-    // Simply Juxtaposing; no within-para merging
-    return impGetJuxtaposedParaObject(pOutl, pOverflowingPObj, pNextPObj);
+    // Separate Paragraphs
+    pOutl->pEditEngine->InsertParaBreak(EditSelection(aPaM, aPaM));
+
+    return pOutl->CreateParaObject();
 }
 
 OutlinerParaObject *OverflowingText::impMakeOverflowingParaObject(Outliner *pOutliner)
@@ -194,11 +207,24 @@ OutlinerParaObject *OverflowingText::impMakeOverflowingParaObject(Outliner *pOut
 }
 
 
-OutlinerParaObject *OverflowingText::GetDeeplyMergedParaObject(Outliner *pOutliner, OutlinerParaObject *pNextPObj)
+OutlinerParaObject *OverflowingText::DeeplyMergeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj)
 {
-    OutlinerParaObject *pOverflowingPObj = impMakeOverflowingParaObject(pOutliner);
 
-    return impGetDeeplyMergedParaObject(pOutliner, pOverflowingPObj, pNextPObj);
+    if (!pNextPObj) {
+        pOutl->SetToEmptyText();
+    } else {
+        pOutl->SetText(*pNextPObj);
+    }
+
+    // XXX: this code should be moved in Outliner directly
+    //          creating Outliner::InsertText(...transferable...)
+    EditSelection aStartSel(pOutl->pEditEngine->CreateSelection(ESelection(0,0)));
+    EditPaM aPaM = pOutl->pEditEngine->InsertText(mxOverflowingContent,
+                                                  OUString(),
+                                                  aStartSel.Min(),
+                                                  true);
+
+    return pOutl->CreateParaObject();
 }
 
 // class OFlowChainedText
@@ -221,18 +247,18 @@ ESelection OFlowChainedText::GetOverflowPointSel() const
     return mpNonOverflowingTxt->GetOverflowPointSel();
 }
 
-OutlinerParaObject *OFlowChainedText::CreateOverflowingParaObject(Outliner *pOutliner, OutlinerParaObject *pTextToBeMerged)
+OutlinerParaObject *OFlowChainedText::InsertOverflowingText(Outliner *pOutliner, OutlinerParaObject *pTextToBeMerged)
 {
     // Just return the roughly merged paras for now
-    if (mpOverflowingTxt == NULL || pTextToBeMerged == NULL)
+    if (mpOverflowingTxt == NULL)
         return NULL;
 
     if (mbIsDeepMerge) {
         fprintf(stderr, "[TEXTCHAINFLOW - OF] Deep merging paras\n" );
-        return mpOverflowingTxt->GetDeeplyMergedParaObject(pOutliner, pTextToBeMerged );
+        return mpOverflowingTxt->DeeplyMergeParaObject(pOutliner, pTextToBeMerged );
     } else {
         fprintf(stderr, "[TEXTCHAINFLOW - OF] Juxtaposing paras\n" );
-        return mpOverflowingTxt->GetJuxtaposedParaObject(pOutliner, pTextToBeMerged );
+        return mpOverflowingTxt->JuxtaposeParaObject(pOutliner, pTextToBeMerged );
     }
 }
 
diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx
index 7374b4f..07d9215 100644
--- a/include/editeng/outliner.hxx
+++ b/include/editeng/outliner.hxx
@@ -585,6 +585,8 @@ class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster
     friend class OutlinerUndoCheckPara;
     friend class OutlinerUndoChangeParaFlags;
 
+    friend class NonOverflowingText;
+
     OutlinerEditEng*    pEditEngine;
 
     ParagraphList*      pParaList;
diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx
index f395b8b..8fb4b97 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -24,6 +24,13 @@
 #include <editeng/editengdllapi.h>
 #include <editeng/editdata.hxx>
 
+#include <com/sun/star/uno/Reference.h>
+
+namespace com { namespace sun { namespace star {
+  namespace datatransfer {
+    class XTransferable;
+} } } }
+
 class OUString;
 
 
@@ -41,8 +48,8 @@ class OverflowingText
 {
 
 public:
-        OutlinerParaObject *GetJuxtaposedParaObject(Outliner *, OutlinerParaObject *);
-        OutlinerParaObject *GetDeeplyMergedParaObject(Outliner *, OutlinerParaObject *);
+        OutlinerParaObject *JuxtaposeParaObject(Outliner *, OutlinerParaObject *);
+        OutlinerParaObject *DeeplyMergeParaObject(Outliner *, OutlinerParaObject *);
         ESelection GetInsertionPointSel() const;
 
         //OUString GetHeadingLines() const;
@@ -52,11 +59,15 @@ public:
 private:
     friend class Outliner;
     // Constructor
-    OverflowingText(EditTextObject *pTObj);
+    //OverflowingText(EditTextObject *pTObj);
+    OverflowingText(com::sun::star::uno::Reference<
+        com::sun::star::datatransfer::XTransferable> xOverflowingContent);
 
     OutlinerParaObject *impMakeOverflowingParaObject(Outliner *pOutliner);
 
-    const EditTextObject *mpContentTextObj;
+    //const EditTextObject *mpContentTextObj;
+    com::sun::star::uno::Reference<
+        com::sun::star::datatransfer::XTransferable> mxOverflowingContent;
 };
 
 class NonOverflowingText {
@@ -89,7 +100,7 @@ class EDITENG_DLLPUBLIC OFlowChainedText {
     public:
         OFlowChainedText(Outliner *, bool );
 
-        OutlinerParaObject *CreateOverflowingParaObject(Outliner *, OutlinerParaObject *);
+        OutlinerParaObject *InsertOverflowingText(Outliner *, OutlinerParaObject *);
         OutlinerParaObject *RemoveOverflowingText(Outliner *);
 
         ESelection GetInsertionPointSel() const;
diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx
index b569e14..94fac05 100644
--- a/svx/source/svdraw/textchainflow.cxx
+++ b/svx/source/svdraw/textchainflow.cxx
@@ -219,8 +219,11 @@ void TextChainFlow::impMoveChainedTextToNextLink(SdrOutliner *pOverflOutl)
         return;
     }
 
-    OutlinerParaObject *pNewText = impGetOverflowingParaObject(pOverflOutl);
+    OutlinerParaObject *pNewText =
+        mpOverflChText->InsertOverflowingText(pOverflOutl,
+                                              mpNextLink->GetOutlinerParaObject());
     fprintf(stderr, "[TEXTCHAINFLOW - OF] DEST box set to %d paras \n", pNewText->GetTextObject().GetParagraphCount());
+
     if (pNewText)
         mpNextLink->NbcSetOutlinerParaObject(pNewText);
 
commit 544f820347a38dfa7f4abf2393d059ece7f43c11
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Wed Aug 12 23:42:27 2015 +0200

    Change name to methods for leaving only non-overfl text
    
    Change-Id: Ifa04460fe54f03cc6e74ba4f786fee07a9d85596

diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx
index b11f6e4..b765550 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -147,13 +147,8 @@ bool NonOverflowingText::IsLastParaInterrupted() const
 }
 
 
-OutlinerParaObject *NonOverflowingText::ToParaObject(Outliner *pOutliner) const
+OutlinerParaObject *NonOverflowingText::RemoveOverflowingText(Outliner *pOutliner) const
 {
-    // XXX: Old code
-    //OutlinerParaObject *pPObj = new OutlinerParaObject(*mpContentTextObj);
-    //pPObj->SetOutlinerMode(pOutliner->GetOutlinerMode());
-    //return pPObj;
-
     pOutliner->QuickDelete(maContentSel);
     return pOutliner->CreateParaObject();
 }
@@ -242,12 +237,12 @@ OutlinerParaObject *OFlowChainedText::CreateOverflowingParaObject(Outliner *pOut
 }
 
 
-OutlinerParaObject *OFlowChainedText::CreateNonOverflowingParaObject(Outliner *pOutliner)
+OutlinerParaObject *OFlowChainedText::RemoveOverflowingText(Outliner *pOutliner)
 {
     if (mpNonOverflowingTxt == NULL)
         return NULL;
 
-    return mpNonOverflowingTxt->ToParaObject(pOutliner);
+    return mpNonOverflowingTxt->RemoveOverflowingText(pOutliner);
 }
 
 bool OFlowChainedText::IsLastParaInterrupted() const
diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx
index a2fb6c0..f395b8b 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -61,7 +61,7 @@ private:
 
 class NonOverflowingText {
 public:
-    OutlinerParaObject *ToParaObject(Outliner *) const;
+    OutlinerParaObject *RemoveOverflowingText(Outliner *) const;
     ESelection GetOverflowPointSel() const;
     bool IsLastParaInterrupted() const;
 
@@ -90,7 +90,7 @@ class EDITENG_DLLPUBLIC OFlowChainedText {
         OFlowChainedText(Outliner *, bool );
 
         OutlinerParaObject *CreateOverflowingParaObject(Outliner *, OutlinerParaObject *);
-        OutlinerParaObject *CreateNonOverflowingParaObject(Outliner *);
+        OutlinerParaObject *RemoveOverflowingText(Outliner *);
 
         ESelection GetInsertionPointSel() const;
         ESelection GetOverflowPointSel() const;
diff --git a/include/svx/textchainflow.hxx b/include/svx/textchainflow.hxx
index f96ce59..60afe75 100644
--- a/include/svx/textchainflow.hxx
+++ b/include/svx/textchainflow.hxx
@@ -69,6 +69,10 @@ class TextChainFlow {
     ESelection maOverflowPosSel;
     ESelection maPostChainingSel;
 
+    OFlowChainedText *mpOverflChText;
+    UFlowChainedText *mpUnderflChText;
+
+
 
     void impCheckForFlowEvents(SdrOutliner *, SdrOutliner *);
 
@@ -79,7 +83,6 @@ class TextChainFlow {
 
     virtual void impSetFlowOutlinerParams(SdrOutliner *, SdrOutliner *);
 
-    OutlinerParaObject *impGetNonOverflowingParaObject(SdrOutliner *pOutliner);
     OutlinerParaObject *impGetOverflowingParaObject(SdrOutliner *pOutliner);
     // impGetMergedUnderflowingParaObject merges underflowing text with the one in the next box
     OutlinerParaObject *impGetMergedUnderflowParaObject(SdrOutliner *pOutliner);
@@ -101,9 +104,6 @@ class TextChainFlow {
     bool bUnderflow;
     bool bOverflow;
 
-    OFlowChainedText *mpOverflChText;
-    UFlowChainedText *mpUnderflChText;
-
 };
 
 
diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx
index 71fd30f..b569e14 100644
--- a/svx/source/svdraw/textchainflow.cxx
+++ b/svx/source/svdraw/textchainflow.cxx
@@ -197,7 +197,7 @@ void TextChainFlow::ExecuteOverflow(SdrOutliner *pNonOverflOutl, SdrOutliner *pO
 
 void TextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl)
 {
-    OutlinerParaObject *pNewText = impGetNonOverflowingParaObject(pNonOverflOutl);
+    OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl);
 
     fprintf(stderr, "[TEXTCHAINFLOW - OF] SOURCE box set to %d paras \n", pNewText->GetTextObject().GetParagraphCount());
 
@@ -231,11 +231,6 @@ void TextChainFlow::impMoveChainedTextToNextLink(SdrOutliner *pOverflOutl)
                           mpOverflChText->IsLastParaInterrupted());
 }
 
-OutlinerParaObject *TextChainFlow::impGetNonOverflowingParaObject(SdrOutliner *pOutliner)
-{
-        return mpOverflChText->CreateNonOverflowingParaObject(pOutliner);
-}
-
 SdrTextObj *TextChainFlow::GetLinkTarget() const
 {
     return mpTargetLink;
@@ -295,7 +290,7 @@ void EditingTextChainFlow::CheckForFlowEvents(SdrOutliner *pFlowOutl)
 
 void EditingTextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl)
 {
-    OutlinerParaObject *pNewText = impGetNonOverflowingParaObject(pNonOverflOutl);
+    OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl);
     //impSetTextForEditingOutliner(pNewText); //XXX: Don't call it since we do everything with NonOverflowingText::ToParaObject
 
     GetLinkTarget()->NbcSetOutlinerParaObject(pNewText);
commit 16cf056f2e36d05fe2520f8fc708e994e9a471a5
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Wed Aug 12 23:27:03 2015 +0200

    Use Edit Outliner in Editing mode for leaving NonOverflowing txt only
    
    Change-Id: I0229b7dfece14e8bb23ea58e6ce10ea6375e0758

diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx
index 1c0769e..d8b773b 100644
--- a/svx/source/svdraw/svdotext.cxx
+++ b/svx/source/svdraw/svdotext.cxx
@@ -2060,8 +2060,8 @@ void SdrTextObj::onChainingEvent()
     if (aTxtChainFlow.IsOverflow()) {
         fprintf(stderr, "[CHAINING] Overflow going on\n");
         // One outliner is for non-overflowing text, the other for overflowing text
-        // In this case they can both be the drawing outliner
-        aTxtChainFlow.ExecuteOverflow(&aDrawOutliner, &aDrawOutliner);
+        // We remove text directly from the editing outliner
+        aTxtChainFlow.ExecuteOverflow(pEdtOutl, &aDrawOutliner);
     } else if (aTxtChainFlow.IsUnderflow()) {
         fprintf(stderr, "[CHAINING] Underflow going on\n");
         // underflow-induced overflow
commit eb72173773a4c4a450d5f784e7164dae87cdbc54
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Wed Aug 12 23:05:35 2015 +0200

    GetOverflowPointSel returns a position instead of a selection
    
    Change-Id: I1fd78ecc503cbd01e999513b18fd278f4de56d8c

diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx
index 92c6ca8..b11f6e4 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -161,8 +161,9 @@ OutlinerParaObject *NonOverflowingText::ToParaObject(Outliner *pOutliner) const
 ESelection NonOverflowingText::GetOverflowPointSel() const
 {
     //return getLastPositionSel(mpContentTextObj);
-    // XXX: Not sure this can work properly
-    return maContentSel;
+
+    // return the starting point of the selection we are removing
+    return ESelection(maContentSel.nStartPara, maContentSel.nStartPos); //XXX
 }
 
 // The equivalent of ToParaObject for OverflowingText. Here we are prepending the overflowing text to the old dest box's text


More information about the Libreoffice-commits mailing list