editeng/source/outliner/overflowingtxt.cxx | 113 ++++++++++++++++++++++++++++- include/editeng/overflowingtxt.hxx | 5 + 2 files changed, 117 insertions(+), 1 deletion(-)
New commits: commit 094a55ed52794a9a676ec2d8a5e8fe401fbac13a Author: matteocam <matteo.campane...@gmail.com> Date: Tue Jun 30 10:58:21 2015 -0400 OFlowChainedText now creates OutlinerParaObject-s for chainging Change-Id: I1f3f37fa92472471f77362c029e9525523ea6d09 diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index ca0af38..85aa0b2 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -21,6 +21,7 @@ #include <tools/debug.hxx> #include <editeng/overflowingtxt.hxx> +#include <editeng/outliner.hxx> OUString OverflowingText::GetEndingLines() const @@ -42,7 +43,117 @@ OUString OverflowingText::GetHeadingLines() const OFlowChainedText::OFlowChainedText(Outliner *pOutl, OutlinerParaObject* pTextToBeMerged) : mpTextToBeMerged(pTextToBeMerged) { - // Initialize stuff here + mpOverflowingTxt = pOutl->GetOverflowingText(); + mpNonOverflowingTxt = pOutl->GetNonOverflowingText(); +} + +OutlinerParaObject *OFlowChainedText::CreateOverflowingParaObject(Outliner *pOutliner) +{ + if (mpOverflowingTxt == NULL) + return NULL; + + pOutliner->SetText(*mpTextToBeMerged); + + // 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; +} + +OutlinerParaObject *OFlowChainedText::CreateNonOverflowingParaObject(Outliner *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(); +} + +void OFlowChainedText::impSetOutlinerToEmptyTxt(Outliner *pOutliner) +{ + OutlinerParaObject *pEmptyTxt = pOutliner->GetEmptyParaObject(); + pOutliner->SetText(*pEmptyTxt); } diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index 0c42d53..3920af3 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -92,7 +92,12 @@ class EDITENG_DLLPUBLIC OFlowChainedText { OutlinerParaObject *GetTextToBeMerged() const { return mpTextToBeMerged; } + protected: + void impSetOutlinerToEmptyTxt(Outliner *); + private: + + NonOverflowingText *mpNonOverflowingTxt; OverflowingText *mpOverflowingTxt; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits