[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - editeng/source include/editeng
matteocam
matteo.campanelli at gmail.com
Wed Jul 1 12:16:56 PDT 2015
editeng/source/outliner/outliner.cxx | 64 +++++------------------------
editeng/source/outliner/overflowingtxt.cxx | 56 ++-----------------------
include/editeng/overflowingtxt.hxx | 31 +-------------
3 files changed, 22 insertions(+), 129 deletions(-)
New commits:
commit d82ca32c357d35b3e00379273e695281dafc22e1
Author: matteocam <matteo.campanelli at gmail.com>
Date: Wed Jul 1 15:16:21 2015 -0400
All chaining code converted to EditTextObject approach
Change-Id: I4a80b9424eafb7e14f9912e965caf03b42b42e65
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 961f1bd..df1b54a 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -2113,7 +2113,6 @@ NonOverflowingText *Outliner::GetNonOverflowingText() const
// last non-overflowing paragraph is before the first overflowing one
sal_Int32 nCount = pEditEngine->GetOverflowingParaNum();
sal_Int32 nOverflowLine = pEditEngine->GetOverflowingLineNum();
- OUString aPreOverflowingTxt("");
// Defensive check: oveflowing para index beyond actual # of paragraphs?
if ( nCount > GetParagraphCount()-1) {
@@ -2124,20 +2123,23 @@ NonOverflowingText *Outliner::GetNonOverflowingText() const
return NULL;
}
+ if (nCount < 0)
+ {
+ fprintf(stderr,
+ "[Overflowing] No Overflowing text but GetNonOverflowinText called?!\n");
+ return NULL;
+ }
+
// Only overflowing text, i.e. 1st line of 1st paragraph overflowing
- if ( nCount == 0 && nOverflowLine == 0)
+ bool bItAllOverflew = nCount == 0 && nOverflowLine == 0;
+ if ( bItAllOverflew )
{
- OutlinerParaObject* pEmptyPObj = GetEmptyParaObject();
- return new NonOverflowingText(pEmptyPObj, "");
-
- } else if (nCount < 0) { // No overflowing Text: all para-s included
- nCount = GetParagraphCount();
- // aPreOverflowingText == ""
+ ESelection aEmptySel(0,0,0,0);
+ EditTextObject *pTObj = pEditEngine->CreateTextObject(aEmptySel);
+ return new NonOverflowingText(pTObj);
} else { // Get the lines that of the overflowing para fit in the box
- // XXX: Is there a proper method to join lines in a single string?
sal_Int32 nOverflowingPara = nCount;
- OUString aWholeTxtHeadPara = GetText(GetParagraph(nOverflowingPara));
sal_uInt32 nLen = 0;
for ( sal_Int32 nLine = 0;
@@ -2153,7 +2155,7 @@ NonOverflowingText *Outliner::GetNonOverflowingText() const
ESelection aNonOverflowingTextSelection;
if (nLen == 0) {
// XXX: What happens inside this case might be dependent on the joining paragraps or not-thingy
- // Overflowing paragraph is empty: it's not "Non-Overflowing" text then
+ // Overflowing paragraph is empty or first line overflowing: it's not "Non-Overflowing" text then
sal_Int32 nParaLen = GetText(GetParagraph(nOverflowingPara-1)).getLength();
aNonOverflowingTextSelection =
ESelection(nStartPara, nStartPos, nOverflowingPara-1, nParaLen);
@@ -2164,21 +2166,7 @@ NonOverflowingText *Outliner::GetNonOverflowingText() const
}
EditTextObject *pTObj = pEditEngine->CreateTextObject(aNonOverflowingTextSelection);
return new NonOverflowingText(pTObj);
-
-
- /* END Experiment with ESelection and EditTextobject */
-
- // XXX: Any separator to be included?
- aPreOverflowingTxt = aWholeTxtHeadPara.copy(0, nLen);
}
-
- OutlinerParaObject *pHeadParas;
- if (nCount == 0) // No text to save expect for the one in the overflowing para (i.e. aPreOverflowingTxt)
- pHeadParas = NULL;
- else
- pHeadParas = CreateParaObject(0, nCount);
-
- return new NonOverflowingText(pHeadParas, aPreOverflowingTxt);
}
OutlinerParaObject *Outliner::GetEmptyParaObject() const
@@ -2206,19 +2194,10 @@ OverflowingText *Outliner::GetOverflowingText() const
return NULL;
}
- OUString aHeadTxt, aTailTxt("");
- OutlinerParaObject *pMidParas = NULL;
sal_Int32 nHeadPara = pEditEngine->GetOverflowingParaNum();
sal_uInt32 nParaCount = GetParagraphCount();
- sal_Int32 nTailPara = nParaCount-1;
- sal_Int32 nMidParas = nTailPara-nHeadPara-1;
-
- // Set the head text
- // XXX: Is there a proper method to join lines in a single string?
- OUString aWholeTxtHeadPara = GetText(GetParagraph(nHeadPara));
-
sal_uInt32 nLen = 0;
for ( sal_Int32 nLine = 0;
@@ -2240,23 +2219,6 @@ OverflowingText *Outliner::GetOverflowingText() const
/* END experiment ESel */
- // XXX: Any separator to be included?
- aHeadTxt = aWholeTxtHeadPara.copy(nLen);
-
-
- // If there is at least one more paragraph overflowing
- if (nTailPara > nHeadPara) {
- // Get text of last paragraph
- aTailTxt = GetText(GetParagraph(nTailPara));
- }
-
- if (nMidParas > 0) {
- // Get everything between first and last overflowing para
- pMidParas = CreateParaObject(nHeadPara+1, nMidParas);
- }
-
- // XXX: Who deletes this?
- return new OverflowingText(aHeadTxt, pMidParas, aTailTxt);
}
void Outliner::ClearOverflowingParaNum()
diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx
index 666f53b..3e40b92 100644
--- a/editeng/source/outliner/overflowingtxt.cxx
+++ b/editeng/source/outliner/overflowingtxt.cxx
@@ -26,57 +26,12 @@
OutlinerParaObject *NonOverflowingText::ToParaObject(Outliner *pOutliner) const
{
-
- if (mpContentTextObj)
- {
- OutlinerParaObject *pPObj = new OutlinerParaObject(*mpContentTextObj);
- pPObj->SetOutlinerMode(pOutliner->GetOutlinerMode());
- return pPObj;
- }
-
- // XXX: Possibility: let the NonUnderflowingParaObject just be a TextEditObject created by the Outliner (by means of a selection).
-
- /* The overflow in SdrTextObj can occur:
- * (a) exactly at the end of a paragraph, or
- * (b) in the middle of a paragraph.
- *
- * In case (a), a NonUnderflowingText object contains only the
- * paragraphs occurred before the overflow.
- * In case (b), a NonUnderflowingText contains also the text of the
- * paragraph that was cut by overflow.
- */
-
- bool bOverflowOccurredAtEndOfPara =
- (mPreOverflowingTxt == "") &&
- (mpHeadParas != NULL);
-
- if (bOverflowOccurredAtEndOfPara) {
- // Case (a) above:
- // Only (possibly empty) paragraphs before overflowing one.
- pOutliner->SetText(*mpHeadParas);
- } else {
- // Case (b): some text is non included in any OutlinerParaObject.
- // We have to include the non-overflowing lines from the overfl. para
-
- // first make a ParaObject for the strings
- pOutliner->SetToEmptyText();
- Paragraph *pTmpPara0 = pOutliner->GetParagraph(0);
- pOutliner->SetText(mPreOverflowingTxt, pTmpPara0);
- OutlinerParaObject *pPObj = pOutliner->CreateParaObject();
-
- if (mpHeadParas != NULL) {
- pOutliner->SetText(*mpHeadParas);
- pOutliner->AddText(*pPObj);
- } else if (mPreOverflowingTxt != "") { // only preoverflowing txt
- pOutliner->SetText(*pPObj);
- } else { // no text // This case is redundant but it doesn't hurt for now
- pOutliner->SetToEmptyText();
- }
- }
-
- return pOutliner->CreateParaObject();
+ OutlinerParaObject *pPObj = new OutlinerParaObject(*mpContentTextObj);
+ pPObj->SetOutlinerMode(pOutliner->GetOutlinerMode());
+ return pPObj;
}
+/*
OUString OverflowingText::GetEndingLines() const
{
// If the only overflowing part is some lines in a paragraph,
@@ -91,6 +46,7 @@ OUString OverflowingText::GetHeadingLines() const
{
return mHeadTxt;
}
+* */
OutlinerParaObject *OverflowingText::GetJuxtaposedParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj)
{
@@ -99,7 +55,7 @@ OutlinerParaObject *OverflowingText::GetJuxtaposedParaObject(Outliner *pOutl, Ou
return NULL;
}
- // Simply Juxtaposing; no within para-merging
+ // Simply Juxtaposing; no within-para merging
OutlinerParaObject *pOverflowingPObj = new OutlinerParaObject(*mpContentTextObj);
pOutl->SetText(*pOverflowingPObj);
pOutl->AddText(*pNextPObj);
diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx
index 3e9ce3a..797264b 100644
--- a/include/editeng/overflowingtxt.hxx
+++ b/include/editeng/overflowingtxt.hxx
@@ -35,20 +35,7 @@ class OverflowingText
{
public:
- OUString mHeadTxt;
- const OutlinerParaObject *mpMidParas;
- OUString mTailTxt;
- // NOTE: mpMidParas and mTailTxt might be empty
-
// Constructor
- OverflowingText(
- const OUString &headTxt,
- const OutlinerParaObject *pMidParas,
- const OUString &tailTxt)
- : mHeadTxt(headTxt),
- mpMidParas(pMidParas),
- mTailTxt(tailTxt)
- { }
OverflowingText(EditTextObject *pTObj) : mpContentTextObj(pTObj)
{
@@ -56,9 +43,9 @@ public:
OutlinerParaObject *GetJuxtaposedParaObject(Outliner *, OutlinerParaObject *);
- OUString GetHeadingLines() const;
- OUString GetEndingLines() const;
- bool HasOtherParas() const { return !(mTailTxt == "" && mpMidParas == NULL); }
+ //OUString GetHeadingLines() const;
+ //OUString GetEndingLines() const;
+ //bool HasOtherParas() const { return !(mTailTxt == "" && mpMidParas == NULL); }
private:
const EditTextObject *mpContentTextObj;
@@ -70,15 +57,6 @@ class NonOverflowingText {
// NOTE: mPreOverflowingTxt might be empty
// Constructor
- NonOverflowingText(const OutlinerParaObject *pHeadParas,
- const OUString &preOverflowingTxt)
- : mpHeadParas(pHeadParas),
- mPreOverflowingTxt(preOverflowingTxt), mpContentTextObj(NULL)
- {
- if (pHeadParas == NULL) // Redundant line for debugging
- DBG_ASSERT( pHeadParas != NULL, "pHeadParas is null?! All text is overflowing then" );
- }
-
NonOverflowingText(const EditTextObject *pTObj)
: mpContentTextObj(pTObj)
{ }
@@ -86,9 +64,6 @@ class NonOverflowingText {
OutlinerParaObject *ToParaObject(Outliner *) const;
private:
- const OutlinerParaObject *mpHeadParas;
- OUString mPreOverflowingTxt;
-
const EditTextObject *mpContentTextObj;
};
More information about the Libreoffice-commits
mailing list