editeng/source/outliner/outliner.cxx | 21 ++++++++++++ editeng/source/outliner/overflowingtxt.cxx | 4 ++ include/editeng/overflowingtxt.hxx | 48 +++++++++++++---------------- svx/source/svdraw/textchainflow.cxx | 1 4 files changed, 48 insertions(+), 26 deletions(-)
New commits: commit 70a2ad32027cb16163e6075a994a4a5ffc47e551 Author: matteocam <matteo.campane...@gmail.com> Date: Tue Jun 30 17:59:43 2015 -0400 Using EditTextObject for NonOverflowingText Change-Id: I148835df1e6f856913e9b6146ccc5431ff4fca97 diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx index e63c7ff..4fde0ce 100644 --- a/editeng/source/outliner/outliner.cxx +++ b/editeng/source/outliner/outliner.cxx @@ -2147,6 +2147,27 @@ NonOverflowingText *Outliner::GetNonOverflowingText() const nLen += GetLineLen(nOverflowingPara, nLine); } + /* BEGIN Experiment with ESelection and EditTextobject */ + sal_Int32 nStartPara = 0; + sal_Int32 nStartPos = 0; + 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 + sal_Int32 nParaLen = GetText(GetParagraph(nOverflowingPara-1)).getLength(); + aNonOverflowingTextSelection = + ESelection(nStartPara, nStartPos, nOverflowingPara-1, nParaLen); + } else { + // We take until we have to from the overflowing paragraph + aNonOverflowingTextSelection = + ESelection(nStartPara, nStartPos, nOverflowingPara, nLen); + } + 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); } diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index 6565a44..23246fb 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -22,10 +22,14 @@ #include <editeng/overflowingtxt.hxx> #include <editeng/outliner.hxx> +#include <editeng/outlobj.hxx> OutlinerParaObject *NonOverflowingText::ToParaObject(Outliner *pOutliner) const { + if (mpContentTextObj) + return new OutlinerParaObject(*mpContentTextObj); + // XXX: Possibility: let the NonUnderflowingParaObject just be a TextEditObject created by the Outliner (by means of a selection). /* The overflow in SdrTextObj can occur: diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index b559921..12e1e7c 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -30,9 +30,6 @@ class OutlinerParaObject; class EditTextObject; class Outliner; -typedef EditTextObject FormattedTextPortion; - - class OverflowingText { @@ -64,21 +61,26 @@ class NonOverflowingText { // NOTE: mPreOverflowingTxt might be empty // Constructor - NonOverflowingText( - const OutlinerParaObject *pHeadParas, - const OUString &preOverflowingTxt) - : mpHeadParas(pHeadParas), - mPreOverflowingTxt(preOverflowingTxt) - { - if (pHeadParas == NULL) // Redundant line for debugging - DBG_ASSERT( pHeadParas != NULL, "pHeadParas is null?! All text is overflowing then" ); - } + 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) + { } OutlinerParaObject *ToParaObject(Outliner *) const; private: const OutlinerParaObject *mpHeadParas; OUString mPreOverflowingTxt; + + const EditTextObject *mpContentTextObj; }; @@ -90,35 +92,31 @@ class NonOverflowingText { class EDITENG_DLLPUBLIC OFlowChainedText { public: - OFlowChainedText(Outliner *); + OFlowChainedText(Outliner *); - OutlinerParaObject *CreateOverflowingParaObject(Outliner *, OutlinerParaObject *); - OutlinerParaObject *CreateNonOverflowingParaObject(Outliner *); + OutlinerParaObject *CreateOverflowingParaObject(Outliner *, OutlinerParaObject *); + OutlinerParaObject *CreateNonOverflowingParaObject(Outliner *); protected: - void impSetOutlinerToEmptyTxt(Outliner *); + void impSetOutlinerToEmptyTxt(Outliner *); private: - - NonOverflowingText *mpNonOverflowingTxt; - OverflowingText *mpOverflowingTxt; - + NonOverflowingText *mpNonOverflowingTxt; + OverflowingText *mpOverflowingTxt; }; // UFlowChainedText is a simpler class than OFlowChainedText: it almost only joins para-objects class EDITENG_DLLPUBLIC UFlowChainedText { public: - UFlowChainedText(Outliner *); - - OutlinerParaObject *CreateMergedUnderflowParaObject(Outliner *, OutlinerParaObject *); + UFlowChainedText(Outliner *); + OutlinerParaObject *CreateMergedUnderflowParaObject(Outliner *, OutlinerParaObject *); protected: - private: - OutlinerParaObject *mpUnderflowPObj; + OutlinerParaObject *mpUnderflowPObj; }; #endif diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index 2d23aa5..036327c 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -266,7 +266,6 @@ void EditingTextChainFlow::impSetFlowOutlinerParams(SdrOutliner *pFlowOutl, SdrO * * Some notes on how to set style sheets: * - save whole edittexts instead of strings only for (Non)OverflowingText; this can be done by the EditEngine::CreateTextObject method and using a selection - probably from ImpEditEngine) - * - first, refactor the impGet*ParaObject stuff moving it in some (static?) class in overflowingtxt.hxx. Probably each of these methods should be split in smaller routines. * - for the refactoring of the previous point we may also add an option for whether we are joining paragraphs or not * - When making new OutlinerParaObjs and joining paragraphs we need to first add the string (as we already do) and then, with the appropriate selection, use Outliner::QuickSetAttribs(SfxItemSet(txtObj->GetPool()), aSelectionOfTheNewText) * - having all this in a whole class that contains Overflowing and NonOverflowingText would not be bad. This same class could be used to handle a cursor later on. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits