include/svx/textchainflow.hxx | 30 +++++--- svx/source/svdraw/svdotext.cxx | 1 svx/source/svdraw/textchainflow.cxx | 133 ++++++------------------------------ 3 files changed, 44 insertions(+), 120 deletions(-)
New commits: commit ffc855ced5099d07fa71230448ef376fe4ba33e3 Author: matteocam <matteo.campane...@gmail.com> Date: Tue Jun 30 11:13:09 2015 -0400 Use OFlowChainedText in TextChainFlow Change-Id: I2aaa472590ba90880c545ca767069860623b8089 diff --git a/include/svx/textchainflow.hxx b/include/svx/textchainflow.hxx index 776dc22..3215194 100644 --- a/include/svx/textchainflow.hxx +++ b/include/svx/textchainflow.hxx @@ -26,12 +26,13 @@ class NonOverflowingText; class OverflowingText; class TextChain; class OutlinerParaObject; +class OFlowChainedText; -// XXX: Specialize class for Editing mode and non editing mode? // XXX: const qualifiers? class TextChainFlow { + // -- Public Members -- public: TextChainFlow(SdrTextObj *pChainTarget); virtual ~TextChainFlow(); @@ -39,16 +40,22 @@ class TextChainFlow { // Check for flow events in Outliner virtual void CheckForFlowEvents(SdrOutliner *); - bool IsOverflow(); - bool IsUnderflow(); - 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 *); - SdrTextObj *GetLinkTarget(); + // Getters + + bool IsOverflow() const; + bool IsUnderflow() const; + + SdrTextObj *GetLinkTarget() const; + SdrTextObj *GetNextLink() const; + + OFlowChainedText *GetOverflowChainedText() const; + // -- Protected Members -- protected: void impCheckForFlowEvents(SdrOutliner *, SdrOutliner *); @@ -62,11 +69,11 @@ 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); + // -- Private Members -- private: - - void impSetOutlinerToEmptyTxt(SdrOutliner *pOutliner); - SdrTextObj *mpTargetLink; SdrTextObj *mpNextLink; @@ -77,8 +84,10 @@ class TextChainFlow { bool bUnderflow; bool bOverflow; - OverflowingText *mpOverflowingTxt; - NonOverflowingText *mpNonOverflowingTxt; + OFlowChainedText *mpOverflChText; + + //OverflowingText *mpOverflowingTxt; + //NonOverflowingText *mpNonOverflowingTxt; OutlinerParaObject *mpUnderflowingPObj; @@ -93,7 +102,6 @@ class EditingTextChainFlow : public TextChainFlow //virtual void ExecuteOverflow(SdrOutliner *, SdrOutliner *) SAL_OVERRIDE; - protected: virtual void impLeaveOnlyNonOverflowingText(SdrOutliner *) SAL_OVERRIDE; diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index d0443fa..fbb76d0 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -50,7 +50,6 @@ #include <svx/textchainflow.hxx> #include <svl/style.hxx> #include <editeng/editeng.hxx> -#include <editeng/overflowingtxt.hxx> #include <svl/itemiter.hxx> #include <svx/sdr/properties/textproperties.hxx> #include <vcl/metaact.hxx> diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index 1261175..0e4be0b 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -34,8 +34,9 @@ TextChainFlow::TextChainFlow(SdrTextObj *pChainTarget) bUnderflow = bOverflow = false; - mpOverflowingTxt = NULL; - mpNonOverflowingTxt = NULL; + mpOverflChText = NULL; + //mpOverflowingTxt = NULL; + //mpNonOverflowingTxt = NULL; mpUnderflowingPObj = NULL; @@ -86,9 +87,10 @@ void TextChainFlow::impCheckForFlowEvents(SdrOutliner *pFlowOutl, SdrOutliner *p bUnderflow = !bIsPageOverflow && mpNextLink && mpNextLink->HasText(); // Set (Non)OverflowingTxt here + mpOverflChText = bOverflow ? new OFlowChainedText(pFlowOutl, mpNextLink->GetOutlinerParaObject()) : NULL; - mpOverflowingTxt = bOverflow ? pFlowOutl->GetOverflowingText() : NULL; - mpNonOverflowingTxt = bOverflow ? pFlowOutl->GetNonOverflowingText() : NULL; + //mpOverflowingTxt = bOverflow ? pFlowOutl->GetOverflowingText() : NULL; + //mpNonOverflowingTxt = bOverflow ? pFlowOutl->GetNonOverflowingText() : NULL; // Set current underflowing text (if any) mpUnderflowingPObj = bUnderflow ? pFlowOutl->CreateParaObject() : NULL; @@ -101,12 +103,12 @@ void TextChainFlow::CheckForFlowEvents(SdrOutliner *pFlowOutl) } -bool TextChainFlow::IsOverflow() +bool TextChainFlow::IsOverflow() const { return bOverflow; } -bool TextChainFlow::IsUnderflow() +bool TextChainFlow::IsUnderflow() const { return bUnderflow; } @@ -178,118 +180,24 @@ void TextChainFlow::impMoveChainedTextToNextLink(SdrOutliner *pOverflOutl) OutlinerParaObject *TextChainFlow::impGetNonOverflowingParaObject(SdrOutliner *pOutliner) { - if (mpNonOverflowingTxt == NULL) - return NULL; - - if (mpNonOverflowingTxt->mPreOverflowingTxt == "" && - mpNonOverflowingTxt->mpHeadParas != NULL) { - // Only (possibly empty) paragraphs before overflowing one - pOutliner->SetText(*mpNonOverflowingTxt->mpHeadParas); - } else { // We have to include the non-overflowing lines from the overfl. para - - // first make a ParaObject for the strings - impSetOutlinerToEmptyTxt(pOutliner); - Paragraph *pTmpPara0 = pOutliner->GetParagraph(0); - pOutliner->SetText(mpNonOverflowingTxt->mPreOverflowingTxt, pTmpPara0); - OutlinerParaObject *pPObj = pOutliner->CreateParaObject(); - //pOutliner->Clear(); - //pOutliner->SetStyleSheet( 0, pEdtOutl->GetStyleSheet(0)); - - if (mpNonOverflowingTxt->mpHeadParas != NULL) { - pOutliner->SetText(*mpNonOverflowingTxt->mpHeadParas); - pOutliner->AddText(*pPObj); - } else if (mpNonOverflowingTxt->mPreOverflowingTxt != "") { // only preoverflowing txt - //OutlinerParaObject *pEmptyPObj = pOutliner->GetEmptyParaObject(); - //pOutliner->SetText(*pEmptyPObj); - pOutliner->SetText(*pPObj); - } else { // no text // This case is redundant but it doesn't hurt for now - pOutliner->Clear(); - } - } - - return pOutliner->CreateParaObject(); + return mpOverflChText->CreateNonOverflowingParaObject(pOutliner); } -void TextChainFlow::impSetOutlinerToEmptyTxt(SdrOutliner *pOutliner) + + +SdrTextObj *TextChainFlow::GetLinkTarget() const { - OutlinerParaObject *pEmptyTxt = pOutliner->GetEmptyParaObject(); - pOutliner->SetText(*pEmptyTxt); + return mpTargetLink; } -SdrTextObj *TextChainFlow::GetLinkTarget() +SdrTextObj *TextChainFlow::GetNextLink() const { - return mpTargetLink; + return mpNextLink; } OutlinerParaObject *TextChainFlow::impGetOverflowingParaObject(SdrOutliner *pOutliner) { - - if (mpOverflowingTxt == NULL) - return NULL; - - OutlinerParaObject *pCurTxt = mpNextLink->GetOutlinerParaObject(); - pOutliner->SetText(*pCurTxt); - - // Get text of first paragraph of destination box - Paragraph *pOldPara0 = pOutliner->GetParagraph(0); - OUString aOldPara0Txt; - if (pOldPara0) - aOldPara0Txt = pOutliner->GetText(pOldPara0); - - // Get other paras of destination box (from second on) - OutlinerParaObject *pOldParasTail = NULL; - if (pOutliner->GetParagraphCount() > 1) - pOldParasTail = pOutliner->CreateParaObject(1); - - // Create ParaObject appending old first para in the dest. box - // to last part of overflowing text - Paragraph *pTmpPara0 = NULL; - OutlinerParaObject *pJoiningPara = NULL; - - if (pOldPara0) { - //pOutliner->Clear(); // you need a clear outliner here - impSetOutlinerToEmptyTxt(pOutliner); - - pTmpPara0 = pOutliner->GetParagraph(0); - pOutliner->SetText(mpOverflowingTxt->GetEndingLines() + aOldPara0Txt, pTmpPara0); - pJoiningPara = pOutliner->CreateParaObject(); - } - - // Create a Para Object out of mpMidParas - // (in order to use the SfxItemPool of the current outliner - // instead of the ones currently in mpMidParas) - - // start actual composition - //pOutliner->Clear(); - impSetOutlinerToEmptyTxt(pOutliner); - - // Set headText at the beginning of box - OUString aHeadTxt = mpOverflowingTxt->GetHeadingLines(); - // If we haven't used heading text yet - if (mpOverflowingTxt->HasOtherParas()) { - Paragraph *pNewPara0 = pOutliner->GetParagraph(0); - pOutliner->SetText(aHeadTxt, pNewPara0); - } - - // Set all the intermediate Paras - if (mpOverflowingTxt->mpMidParas) - pOutliner->AddText(*mpOverflowingTxt->mpMidParas); - - // Append old first para in the destination box to - // last part of overflowing text - if (pJoiningPara && mpOverflowingTxt->HasOtherParas()) - pOutliner->AddText(*pJoiningPara); - // this second case is if there is to avoid getting an empty line before pJoiningPara - else if (pJoiningPara && !mpOverflowingTxt->HasOtherParas()) - pOutliner->SetText(*pJoiningPara); - - // Append all other old paras - if (pOldParasTail) - pOutliner->AddText(*pOldParasTail); - - // Draw everything - OutlinerParaObject *pNewText = pOutliner->CreateParaObject(); - return pNewText; + return mpOverflChText->CreateOverflowingParaObject(pOutliner); } TextChain *TextChainFlow::GetTextChain() @@ -297,6 +205,14 @@ TextChain *TextChainFlow::GetTextChain() return mpTextChain; } +OFlowChainedText *TextChainFlow::GetOverflowChainedText() const +{ + return mpOverflChText; +} + + +// EditingTextChainFlow + EditingTextChainFlow::EditingTextChainFlow(SdrTextObj *pLinkTarget) : TextChainFlow(pLinkTarget) { @@ -366,5 +282,6 @@ void EditingTextChainFlow::impSetFlowOutlinerParams(SdrOutliner *pFlowOutl, SdrO * * * + */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits