editeng/source/editeng/impedit3.cxx | 6 editeng/source/outliner/outliner.cxx | 2 editeng/source/outliner/outlvw.cxx | 13 + editeng/source/outliner/overflowingtxt.cxx | 193 +++++++++------------------- include/editeng/editeng.hxx | 2 include/editeng/outliner.hxx | 2 include/editeng/overflowingtxt.hxx | 40 +++-- include/svx/svdedxv.hxx | 4 svx/source/svdraw/svdedxv.cxx | 17 +- svx/source/svdraw/svdotext.cxx | 3 svx/source/svdraw/svdotextdecomposition.cxx | 11 + svx/source/svdraw/textchainflow.cxx | 12 + 12 files changed, 143 insertions(+), 162 deletions(-)
New commits: commit f821b15b200a9d35fbc70b39b79cf4b5832dd2bc Author: matteocam <matteo.campane...@gmail.com> Date: Thu Aug 20 00:25:37 2015 +0200 Add debugging output Change-Id: I95f62d7ab27fa45a40fa4511a360a3499c39312a diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index ec18975..7965a06 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -570,9 +570,10 @@ void ImpEditEngine::CheckPageOverflow() ? "YES Overflow!\n" : "NO Overflow!\n" ); */ // setting overflow status + fprintf(stderr, "[CONTROL_STATUS] AutoPageSize is %s", ( aStatus.GetControlWord() & EEControlBits::AUTOPAGESIZE ) ? "ON\n" : "OFF\n" ); + sal_uInt32 nBoxHeight = GetMaxAutoPaperSize().Height(); fprintf(stderr, "[OVERFLOW-CHECK] Current MaxAutoPaperHeight is %d\n", nBoxHeight); - fprintf(stderr, "[CONTROL_STATUS] AutoPageSize is %s", ( aStatus.GetControlWord() & EEControlBits::AUTOPAGESIZE ) ? "ON\n" : "OFF\n" ); sal_uInt32 nTxtHeight = CalcTextHeight(NULL); fprintf(stderr, "[OVERFLOW-CHECK] Current Text Height is %d\n", nTxtHeight); commit f146729d0a1465ce7b98ceeb404c29a5e4d6559b Author: matteocam <matteo.campane...@gmail.com> Date: Thu Aug 20 00:23:15 2015 +0200 Add debugging out Change-Id: I44ee885840eac60bc8ffed86242a3af3e772cce6 diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index d49e699..ec18975 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -571,10 +571,11 @@ void ImpEditEngine::CheckPageOverflow() // setting overflow status sal_uInt32 nBoxHeight = GetMaxAutoPaperSize().Height(); - fprintf(stderr, "[OVERFLOW-CHECK] Current MaxAutoPaperSize is %d\n", nBoxHeight); + fprintf(stderr, "[OVERFLOW-CHECK] Current MaxAutoPaperHeight is %d\n", nBoxHeight); fprintf(stderr, "[CONTROL_STATUS] AutoPageSize is %s", ( aStatus.GetControlWord() & EEControlBits::AUTOPAGESIZE ) ? "ON\n" : "OFF\n" ); sal_uInt32 nTxtHeight = CalcTextHeight(NULL); + fprintf(stderr, "[OVERFLOW-CHECK] Current Text Height is %d\n", nTxtHeight); sal_uInt32 nParaCount = GetParaPortions().Count(); sal_uInt32 nFirstLineCount = GetLineCount(0); diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx index 30b7633..11e299b 100644 --- a/editeng/source/outliner/outliner.cxx +++ b/editeng/source/outliner/outliner.cxx @@ -2208,8 +2208,6 @@ OverflowingText *Outliner::GetOverflowingText() const return NULL; } - - sal_Int32 nHeadPara = pEditEngine->GetOverflowingParaNum(); sal_uInt32 nParaCount = GetParagraphCount(); commit b3fe4c1539fff482558d356c90f30dfaf499f87c Author: matteocam <matteo.campane...@gmail.com> Date: Thu Aug 20 00:14:33 2015 +0200 Add debugging out Change-Id: Ia50dbcfdef7501c83797986d571058a6bf0c4c2d diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index d50c79c..b46ad22 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -149,6 +149,11 @@ bool NonOverflowingText::IsLastParaInterrupted() const OutlinerParaObject *NonOverflowingText::RemoveOverflowingText(Outliner *pOutliner) const { pOutliner->QuickDelete(maContentSel); + fprintf(stderr, "Deleting selection from (Para: %d, Pos: %d) to (Para: %d, Pos: %d)\n", + maContentSel.nStartPara, + maContentSel.nStartPos, + maContentSel.nEndPara, + maContentSel.nEndPos); return pOutliner->CreateParaObject(); } commit 2c6842cf2df903b73e3c3b1a9fadbdf4d8f85d3e Author: matteocam <matteo.campane...@gmail.com> Date: Thu Aug 20 00:06:40 2015 +0200 Don't set text for editing outl in editing mode Change-Id: I874a16e1727080d5747161e6f2868152da156385 diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index 7087aa8..9739eee 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -172,7 +172,9 @@ void TextChainFlow::ExecuteUnderflow(SdrOutliner *pOutl) // We store the size since NbcSetOutlinerParaObject can change it Size aOldSize = pOutl->GetMaxAutoPaperSize(); - mpTargetLink->NbcSetOutlinerParaObject(pNewText); + // This should not be done in editing mode!! //XXX + if (!mpTargetLink->IsInEditMode()) + mpTargetLink->NbcSetOutlinerParaObject(pNewText); // Restore size and set new text pOutl->SetMaxAutoPaperSize(aOldSize); commit 0def53aca20c2de4a8121dafaf9ca6b0fc5c650d Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 23:48:24 2015 +0200 Don't chain when editing next link Change-Id: I3657f458e3968e13e55199eb1f700aa1d8284a6a diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index d11e740..3f76a49 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -2183,8 +2183,8 @@ void SdrTextObj::SetPreventChainable() bool SdrTextObj::GetPreventChainable() const { - // Prevent changing it 1) during dragging && 2) when we are editing it - return mbIsUnchainableClone || IsInEditMode(); + // Prevent chaining it 1) during dragging && 2) when we are editing next link + return mbIsUnchainableClone || (GetNextLinkInChain() && GetNextLinkInChain()->IsInEditMode()); } SdrObject* SdrTextObj::getFullDragClone() const commit bbb292af490df17a5b7c3f1de89901fd4201d00c Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 23:42:28 2015 +0200 Don't chain when editing next link Change-Id: I26898d296ce52edee1cf03e692b9427a0b6598f0 diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index d8b773b..d11e740 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -2183,7 +2183,8 @@ void SdrTextObj::SetPreventChainable() bool SdrTextObj::GetPreventChainable() const { - return mbIsUnchainableClone; + // Prevent changing it 1) during dragging && 2) when we are editing it + return mbIsUnchainableClone || IsInEditMode(); } SdrObject* SdrTextObj::getFullDragClone() const commit e9fb2fa539f28206275560439d0564787be5af53 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 23:06:10 2015 +0200 Add debugging output Change-Id: I9a70674f3c2fa53855bb6c6b4c37d524aa8eb024 diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index 8bb6603..09c5ff6 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -1421,6 +1421,17 @@ void SdrTextObj::impHandleChainingEventsDuringDecomposition(SdrOutliner &rOutlin TextChainFlow aTxtChainFlow(const_cast<SdrTextObj*>(this)); bool bIsOverflow; + // Some debug output + size_t nObjCount = pPage->GetObjCount(); + for (unsigned i = 0; i < nObjCount; i++) { + SdrTextObj *pCurObj = (SdrTextObj *) pPage->GetObj(i); + + if (pCurObj == this) { + fprintf(stderr, "Working on TextBox %d\n", i); + break; + } + } + aTxtChainFlow.CheckForFlowEvents(&rOutliner); if (aTxtChainFlow.IsUnderflow() && !IsInEditMode()) diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index 9edf49f..7087aa8 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -310,7 +310,8 @@ void EditingTextChainFlow::CheckForFlowEvents(SdrOutliner *pFlowOutl) void EditingTextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl) { - OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); + //OutlinerParaObject *pNewText = + mpOverflChText->RemoveOverflowingText(pNonOverflOutl); //impSetTextForEditingOutliner(pNewText); //XXX: Don't call it since we do everything with NonOverflowingText::ToParaObject // XXX: You may need this for Underflow // XXX: I'm not sure whether we need this (after all operations such as Paste don't change this - as far as I understand) commit 86a83871e97567d57b359c1ce045b2c4a23161a4 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 22:52:21 2015 +0200 Don't set text during editing mode for OF Change-Id: Ie0987ac6eed3b30a0c6c6616b59388f954e0c88d diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index e0aaf61..9edf49f 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -313,7 +313,8 @@ void EditingTextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverf OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); //impSetTextForEditingOutliner(pNewText); //XXX: Don't call it since we do everything with NonOverflowingText::ToParaObject // XXX: You may need this for Underflow - GetLinkTarget()->NbcSetOutlinerParaObject(pNewText); + // XXX: I'm not sure whether we need this (after all operations such as Paste don't change this - as far as I understand) + //GetLinkTarget()->NbcSetOutlinerParaObject(pNewText); } void EditingTextChainFlow::impSetTextForEditingOutliner(OutlinerParaObject *pNewText) commit 112a628b28ec5525626bd0d3a081045128e83d31 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 22:06:53 2015 +0200 Use appropriate selection for whole text Change-Id: I43b9e8e5404143d3f3b1e4791ccb3b0d2cf591dc diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index b6b2ab7..d50c79c 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -88,9 +88,11 @@ OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject( TranferableText TextChainingUtils::CreateTransferableFromText(Outliner *pOutl) { - ESelection aWholeTextSel(0,0, 1000000, 1000000); + const EditEngine &rEditEngine = pOutl->GetEditEngine(); + sal_Int32 nLastPara = rEditEngine.GetParagraphCount()-1; + ESelection aWholeTextSel(0, 0, nLastPara, rEditEngine.GetTextLen(nLastPara)); - return pOutl->GetEditEngine().CreateTransferable(aWholeTextSel); + return rEditEngine.CreateTransferable(aWholeTextSel); } commit 0bcd37fedace6e61577931bf660cd4a594db9e47 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 21:51:51 2015 +0200 Make Underflow use TextChainingUtils Change-Id: I3dfe64c4b62747b54feb023411a722c20fbdb437 diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index 1d3ba7c..b6b2ab7 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -108,79 +108,6 @@ ESelection getLastPositionSel(const EditTextObject *pTObj) return aEndPos; } -// Put a para next to each other in the same OutlinerParaObject -OutlinerParaObject *impGetJuxtaposedParaObject(Outliner *pOutl, - OutlinerParaObject *pPObj1, - OutlinerParaObject *pPObj2) -{ - assert(pOutl && pPObj1 && pPObj2); - - pOutl->SetText(*pPObj1); - pOutl->AddText(*pPObj2); - OutlinerParaObject *pPObj = pOutl->CreateParaObject(); - - return pPObj; -} - -// In a deep merge parts of text are not only juxtaposed but the last and first para become the same -OutlinerParaObject *impGetDeeplyMergedParaObject(Outliner *pOutl, - OutlinerParaObject *pPObj1, - OutlinerParaObject *pPObj2) -{ - assert(pOutl && pPObj1 && pPObj2); - - const EditTextObject rTObj1 = pPObj1->GetTextObject(); - const EditTextObject rTObj2 = pPObj2->GetTextObject(); - sal_Int32 nParaCount1 = rTObj1.GetParagraphCount(); - - // If no paras in the first text, just use second text - if (nParaCount1 == 0) { - pOutl->SetText(*pPObj2); - return pOutl->CreateParaObject(); - } - - - sal_Int32 nLastPara1 = nParaCount1 - 1; - - // If last para of first text is empty, discard it and just juxtapose - if (rTObj1.GetText(nLastPara1) == "" && nParaCount1 >= 2) { - pOutl->SetText(*pPObj1); - return impGetJuxtaposedParaObject( - pOutl, - pOutl->CreateParaObject(0, nParaCount1 - 1), - pPObj2); - } - - /* --- Standard procedure: when pPObj1 is 'fine' --- */ - - - // Cut first para of second object - OUString aFirstParaTxt2 = rTObj2.GetText(0); - - // Prepare remainder for text 2 - OutlinerParaObject *pRemainderPObj2 = NULL; - if (rTObj2.GetParagraphCount() > 1) { - pOutl->SetText(*pPObj2); - pRemainderPObj2 = pOutl->CreateParaObject(1); // from second para on - } else { // No text to append - pRemainderPObj2 = NULL; - } - - // Set first object as text - pOutl->SetText(*pPObj1); - - // Merges LastPara(pPObj1) with FirstPara(pPObj2) - Paragraph *pLastPara1 = pOutl->GetParagraph(nLastPara1); - OUString aLastParaTxt1 = pOutl->GetText(pLastPara1); - pOutl->SetText(aLastParaTxt1 + aFirstParaTxt2, pLastPara1); // XXX: This way it screws up attributes! - - // add the remainder of the second text - if (pRemainderPObj2) - pOutl->AddText(*pRemainderPObj2); - - return pOutl->CreateParaObject(); -} - // class OverflowingText OverflowingText::OverflowingText(TranferableText xOverflowingContent) : @@ -297,22 +224,21 @@ bool OFlowChainedText::IsLastParaInterrupted() const UFlowChainedText::UFlowChainedText(Outliner *pOutl, bool bIsDeepMerge) { - mpUnderflowPObj = pOutl->CreateParaObject(); + mxUnderflowingTxt = TextChainingUtils::CreateTransferableFromText(pOutl); mbIsDeepMerge = bIsDeepMerge; } OutlinerParaObject *UFlowChainedText::CreateMergedUnderflowParaObject(Outliner *pOutl, OutlinerParaObject *pNextLinkWholeText) { OutlinerParaObject *pNewText = NULL; - OutlinerParaObject *pCurText = mpUnderflowPObj; if (mbIsDeepMerge) { fprintf(stderr, "[TEXTCHAINFLOW - UF] Deep merging paras\n" ); - pNewText = impGetDeeplyMergedParaObject(pOutl, pCurText, pNextLinkWholeText); + pNewText = TextChainingUtils::DeeplyMergeParaObject(mxUnderflowingTxt, pOutl, pNextLinkWholeText); } else { // NewTextForCurBox = Txt(CurBox) ++ Txt(NextBox) fprintf(stderr, "[TEXTCHAINFLOW - UF] Juxtaposing paras\n" ); - pNewText = impGetJuxtaposedParaObject(pOutl, pCurText, pNextLinkWholeText); + pNewText = TextChainingUtils::JuxtaposeParaObject(mxUnderflowingTxt, pOutl, pNextLinkWholeText); } return pNewText; diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index fb08572..9fbdebf 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -143,7 +143,7 @@ class EDITENG_DLLPUBLIC UFlowChainedText { protected: private: - OutlinerParaObject *mpUnderflowPObj; + TranferableText mxUnderflowingTxt; bool mbIsDeepMerge; }; commit 3bd7833f6f2513208b30c2b17188ad0da5699eb8 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 21:45:43 2015 +0200 Use reference to editengine Change-Id: I6e13725b418251b7d02a2b9280f9104635e39cfd diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index 20cd921..1d3ba7c 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -44,16 +44,18 @@ OutlinerParaObject *TextChainingUtils::JuxtaposeParaObject( pOutl->SetText(*pNextPObj); } + EditEngine &rEditEngine = const_cast<EditEngine &>(pOutl->GetEditEngine()); + // XXX: this code should be moved in Outliner directly // creating Outliner::InsertText(...transferable...) - EditSelection aStartSel(pOutl->pEditEngine->CreateSelection(ESelection(0,0))); - EditSelection aNewSel = pOutl->pEditEngine->InsertText(xOverflowingContent, - OUString(), - aStartSel.Min(), - true); + EditSelection aStartSel(rEditEngine.CreateSelection(ESelection(0,0))); + EditSelection aNewSel = rEditEngine.InsertText(xOverflowingContent, + OUString(), + aStartSel.Min(), + true); // Separate Paragraphs - pOutl->pEditEngine->InsertParaBreak(aNewSel); + rEditEngine.InsertParaBreak(aNewSel); return pOutl->CreateParaObject(); } @@ -69,15 +71,17 @@ OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject( pOutl->SetText(*pNextPObj); } + EditEngine &rEditEngine = const_cast<EditEngine &>(pOutl->GetEditEngine()); + // XXX: this code should be moved in Outliner directly // creating Outliner::InsertText(...transferable...) - EditSelection aStartSel(pOutl->pEditEngine->CreateSelection(ESelection(0,0))); + EditSelection aStartSel(rEditEngine.CreateSelection(ESelection(0,0))); // We don't need to mark the selection // EditSelection aNewSel = - pOutl->pEditEngine->InsertText(xOverflowingContent, - OUString(), - aStartSel.Min(), - true); + rEditEngine.InsertText(xOverflowingContent, + OUString(), + aStartSel.Min(), + true); return pOutl->CreateParaObject(); } @@ -85,7 +89,8 @@ OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject( TranferableText TextChainingUtils::CreateTransferableFromText(Outliner *pOutl) { ESelection aWholeTextSel(0,0, 1000000, 1000000); - return pOutl->pEditEngine->CreateTransferable(aWholeTextSel); + + return pOutl->GetEditEngine().CreateTransferable(aWholeTextSel); } commit 5ea932dc094f0578144dc95fb20ef5a6c7ae3cea Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 21:37:49 2015 +0200 Added CreateTransferableFromText; Add typedef Change-Id: I128f9f426948deaf742231b09af667b84a95a6c8 diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index 126e438..20cd921 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -34,8 +34,7 @@ OutlinerParaObject *TextChainingUtils::JuxtaposeParaObject( - com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> xOverflowingContent, + TranferableText xOverflowingContent, Outliner *pOutl, OutlinerParaObject *pNextPObj) { @@ -60,8 +59,7 @@ OutlinerParaObject *TextChainingUtils::JuxtaposeParaObject( } OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject( - com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> xOverflowingContent, + TranferableText xOverflowingContent, Outliner *pOutl, OutlinerParaObject *pNextPObj) { @@ -84,6 +82,12 @@ OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject( return pOutl->CreateParaObject(); } +TranferableText TextChainingUtils::CreateTransferableFromText(Outliner *pOutl) +{ + ESelection aWholeTextSel(0,0, 1000000, 1000000); + return pOutl->pEditEngine->CreateTransferable(aWholeTextSel); +} + /* Helper functions for *OverflowingText classes */ @@ -174,8 +178,7 @@ OutlinerParaObject *impGetDeeplyMergedParaObject(Outliner *pOutl, // class OverflowingText -OverflowingText::OverflowingText(com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> xOverflowingContent) : +OverflowingText::OverflowingText(TranferableText xOverflowingContent) : mxOverflowingContent(xOverflowingContent) { diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index 810c7be..fb08572 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -31,6 +31,9 @@ namespace com { namespace sun { namespace star { class XTransferable; } } } } +typedef com::sun::star::uno::Reference< + com::sun::star::datatransfer::XTransferable> TranferableText; + class OUString; @@ -41,19 +44,20 @@ class Outliner; /* * A collection of static methods for attaching text. - * Strongly coupled with some of the classes in this files + * Strongly coupled with some of the classes in this file. */ class TextChainingUtils { public: + + static TranferableText CreateTransferableFromText(Outliner *); + static OutlinerParaObject *JuxtaposeParaObject( - com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> xOverflowingContent, + TranferableText xOverflowingContent, Outliner *, OutlinerParaObject *); static OutlinerParaObject *DeeplyMergeParaObject( - com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> xOverflowingContent, + TranferableText xOverflowingContent, Outliner *, OutlinerParaObject *); }; @@ -74,12 +78,10 @@ public: private: friend class Outliner; - OverflowingText(com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> xOverflowingContent); + OverflowingText(TranferableText xOverflowingContent); - com::sun::star::uno::Reference< - com::sun::star::datatransfer::XTransferable> mxOverflowingContent; + TranferableText mxOverflowingContent; }; class NonOverflowingText { commit e48cec46b1ce78d0391faef2e84ccfb5c9696393 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 21:24:50 2015 +0200 Minor code cleaning Change-Id: I53df8cffe04526d1b80d81f14afe5b91f8597e66 diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index aa56350..126e438 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -230,22 +230,6 @@ OutlinerParaObject *OverflowingText::JuxtaposeParaObject(Outliner *pOutl, Outlin return TextChainingUtils::JuxtaposeParaObject(mxOverflowingContent, pOutl, pNextPObj); } -// XXX: This method should probably be removed -OutlinerParaObject *OverflowingText::impMakeOverflowingParaObject(Outliner *) -{ - /* - // Simply Juxtaposing; no within-para merging - OutlinerParaObject *pOverflowingPObj = new OutlinerParaObject(*mpContentTextObj); - // the OutlinerParaObject constr. at the prev line gives no valid outliner mode, so we set it - pOverflowingPObj->SetOutlinerMode(pOutliner->GetOutlinerMode()); - - return pOverflowingPObj; - */ - assert(0); // Should not be called - return NULL; -} - - OutlinerParaObject *OverflowingText::DeeplyMergeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj) { return TextChainingUtils::DeeplyMergeParaObject(mxOverflowingContent, pOutl, pNextPObj); commit 1f163d68a3f015fbe485012534b7c36f1784654a Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 21:24:41 2015 +0200 Minor code cleaning Change-Id: I948867ff87a2f331a2765699351e02db53e41539 diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index 1e5c6e5..810c7be 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -72,20 +72,12 @@ public: OutlinerParaObject *DeeplyMergeParaObject(Outliner *, OutlinerParaObject *); ESelection GetInsertionPointSel() const; - //OUString GetHeadingLines() const; - //OUString GetEndingLines() const; - //bool HasOtherParas() const { return !(mTailTxt == "" && mpMidParas == NULL); } - private: friend class Outliner; - // Constructor - //OverflowingText(EditTextObject *pTObj); OverflowingText(com::sun::star::uno::Reference< com::sun::star::datatransfer::XTransferable> xOverflowingContent); - OutlinerParaObject *impMakeOverflowingParaObject(Outliner *pOutliner); - //const EditTextObject *mpContentTextObj; com::sun::star::uno::Reference< com::sun::star::datatransfer::XTransferable> mxOverflowingContent; }; diff --git a/include/svx/svdedxv.hxx b/include/svx/svdedxv.hxx index 194d657..b7c2d26 100644 --- a/include/svx/svdedxv.hxx +++ b/include/svx/svdedxv.hxx @@ -127,7 +127,9 @@ protected: // handler for AutoGrowing text with active Outliner DECL_LINK(ImpOutlinerStatusEventHdl,EditStatus*); - DECL_LINK(ImpChainingEventHdl,void*); + + // Chaining + void ImpChainingEventHdl(); DECL_LINK(ImpAfterCutOrPasteChainingEventHdl,void*); DECL_LINK_TYPED(ImpOutlinerCalcFieldValueHdl,EditFieldInfo*,void); diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 1430e80..b13b860 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -491,7 +491,7 @@ IMPL_LINK(SdrObjEditView,ImpOutlinerStatusEventHdl,EditStatus*,pEditStat) return 0; } -IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl) +void SdrObjEditView::ImpChainingEventHdl() { if(pTextEditOutliner ) { @@ -503,11 +503,11 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl) // XXX: IsChainable and GetNilChainingEvent are a bit mixed up atm if (!pTextObj->IsChainable()) { - return 0; + return; } // This is true during an underflow-caused overflow (with pEdtOutl->SetText()) if (pTextChain->GetNilChainingEvent(pTextObj)) { - return 0; + return; } // We prevent to trigger further handling of overflow/underflow for pTextObj @@ -549,7 +549,7 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl) fprintf(stderr, "[OnChaining] No Edit Outliner View\n"); } } - return 0; + } IMPL_LINK_NOARG(SdrObjEditView,ImpAfterCutOrPasteChainingEventHdl) @@ -557,7 +557,7 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpAfterCutOrPasteChainingEventHdl) SdrTextObj* pTextObj = dynamic_cast< SdrTextObj * >( GetTextEditObject()); if (!pTextObj) return 0; - ImpChainingEventHdl(NULL); + ImpChainingEventHdl(); TextChainCursorManager *pCursorManager = new TextChainCursorManager(this, pTextObj); ImpMoveCursorAfterChainingEvent(pCursorManager); return 0; @@ -829,7 +829,7 @@ bool SdrObjEditView::SdrBeginTextEdit( pTextEditOutlinerView->SetEndCutPasteLinkHdl(LINK(this,SdrObjEditView,ImpAfterCutOrPasteChainingEventHdl) ); /* We should call: * - ImpChainingEventHdl(NULL); + ImpChainingEventHdl(); TextChainCursorManager *pCursorManager = new TextChainCursorManager(this, pTextObj); ImpMoveCursorAfterChainingEvent(pCursorManager); */ @@ -1346,7 +1346,7 @@ bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) } /* Start chaining processing */ - ImpChainingEventHdl(NULL); + ImpChainingEventHdl(); ImpMoveCursorAfterChainingEvent(pCursorManager); /* End chaining processing */ commit babddd2eb9ff9169d3432d333db2574563e82e6e Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 20:56:09 2015 +0200 Delegate text chaining to TextChainingUtils for OverflowingText Change-Id: I88cf2eb50486737b4c009ffb5b29dde825b6884e diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index af2c884..aa56350 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -33,14 +33,55 @@ #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> -OutlinerParaObject *TextChainingUtils::JuxtaposeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj) +OutlinerParaObject *TextChainingUtils::JuxtaposeParaObject( + com::sun::star::uno::Reference< + com::sun::star::datatransfer::XTransferable> xOverflowingContent, + Outliner *pOutl, + OutlinerParaObject *pNextPObj) { - return NULL; + 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))); + EditSelection aNewSel = pOutl->pEditEngine->InsertText(xOverflowingContent, + OUString(), + aStartSel.Min(), + true); + + // Separate Paragraphs + pOutl->pEditEngine->InsertParaBreak(aNewSel); + + return pOutl->CreateParaObject(); } -OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj) +OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject( + com::sun::star::uno::Reference< + com::sun::star::datatransfer::XTransferable> xOverflowingContent, + Outliner *pOutl, + OutlinerParaObject *pNextPObj) { - return NULL; + 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))); + // We don't need to mark the selection + // EditSelection aNewSel = + pOutl->pEditEngine->InsertText(xOverflowingContent, + OUString(), + aStartSel.Min(), + true); + + return pOutl->CreateParaObject(); } @@ -186,24 +227,7 @@ ESelection NonOverflowingText::GetOverflowPointSel() const // XXX: In a sense a better name for OverflowingText and NonOverflowingText are respectively DestLinkText and SourceLinkText OutlinerParaObject *OverflowingText::JuxtaposeParaObject(Outliner *pOutl, OutlinerParaObject *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))); - EditSelection aNewSel = pOutl->pEditEngine->InsertText(mxOverflowingContent, - OUString(), - aStartSel.Min(), - true); - - // Separate Paragraphs - pOutl->pEditEngine->InsertParaBreak(aNewSel); - - return pOutl->CreateParaObject(); + return TextChainingUtils::JuxtaposeParaObject(mxOverflowingContent, pOutl, pNextPObj); } // XXX: This method should probably be removed @@ -224,24 +248,7 @@ OutlinerParaObject *OverflowingText::impMakeOverflowingParaObject(Outliner *) OutlinerParaObject *OverflowingText::DeeplyMergeParaObject(Outliner *pOutl, OutlinerParaObject *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))); - // We don't need to mark the selection - // EditSelection aNewSel = - pOutl->pEditEngine->InsertText(mxOverflowingContent, - OUString(), - aStartSel.Min(), - true); - - return pOutl->CreateParaObject(); + return TextChainingUtils::DeeplyMergeParaObject(mxOverflowingContent, pOutl, pNextPObj); } // class OFlowChainedText diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx index e5604461..7d8434d 100644 --- a/include/editeng/editeng.hxx +++ b/include/editeng/editeng.hxx @@ -145,7 +145,7 @@ class EDITENG_DLLPUBLIC EditEngine friend class EditDbg; friend class Outliner; - friend class OverflowingText; + friend class TextChainingUtils; public: typedef std::vector<EditView*> ViewsType; diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx index 833a9ad..b4cf0fd 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -585,7 +585,7 @@ class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster friend class OutlinerUndoCheckPara; friend class OutlinerUndoChangeParaFlags; - friend class OverflowingText; + friend class TextChainingUtils; OutlinerEditEng* pEditEngine; diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index 96f7cac..1e5c6e5 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -46,9 +46,16 @@ class Outliner; class TextChainingUtils { public: - static OutlinerParaObject *JuxtaposeParaObject(Outliner *, OutlinerParaObject *); - static OutlinerParaObject *DeeplyMergeParaObject(Outliner *, OutlinerParaObject *); - + static OutlinerParaObject *JuxtaposeParaObject( + com::sun::star::uno::Reference< + com::sun::star::datatransfer::XTransferable> xOverflowingContent, + Outliner *, + OutlinerParaObject *); + static OutlinerParaObject *DeeplyMergeParaObject( + com::sun::star::uno::Reference< + com::sun::star::datatransfer::XTransferable> xOverflowingContent, + Outliner *, + OutlinerParaObject *); }; /* commit b53ef7fcb5948a24a3bdf2cb17e25e28357d4c08 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 20:21:53 2015 +0200 Add class TextChainingUtils Change-Id: I459b149c6b1a160633326af57aa904c986201747 diff --git a/editeng/source/outliner/overflowingtxt.cxx b/editeng/source/outliner/overflowingtxt.cxx index 3454aee..af2c884 100644 --- a/editeng/source/outliner/overflowingtxt.cxx +++ b/editeng/source/outliner/overflowingtxt.cxx @@ -33,6 +33,17 @@ #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> +OutlinerParaObject *TextChainingUtils::JuxtaposeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj) +{ + return NULL; +} + +OutlinerParaObject *TextChainingUtils::DeeplyMergeParaObject(Outliner *pOutl, OutlinerParaObject *pNextPObj) +{ + return NULL; +} + + /* Helper functions for *OverflowingText classes */ ESelection getLastPositionSel(const EditTextObject *pTObj) diff --git a/include/editeng/overflowingtxt.hxx b/include/editeng/overflowingtxt.hxx index 8fb4b97..96f7cac 100644 --- a/include/editeng/overflowingtxt.hxx +++ b/include/editeng/overflowingtxt.hxx @@ -38,6 +38,19 @@ class OutlinerParaObject; class EditTextObject; class Outliner; + +/* + * A collection of static methods for attaching text. + * Strongly coupled with some of the classes in this files + */ +class TextChainingUtils +{ + public: + static OutlinerParaObject *JuxtaposeParaObject(Outliner *, OutlinerParaObject *); + static OutlinerParaObject *DeeplyMergeParaObject(Outliner *, OutlinerParaObject *); + +}; + /* * The classes OverflowingText and NonOverflowingText handle the * actual preparation of the OutlinerParaObjects to be used in destination diff --git a/svx/source/svdraw/textchainflow.cxx b/svx/source/svdraw/textchainflow.cxx index 872b4dc..e0aaf61 100644 --- a/svx/source/svdraw/textchainflow.cxx +++ b/svx/source/svdraw/textchainflow.cxx @@ -311,7 +311,7 @@ void EditingTextChainFlow::CheckForFlowEvents(SdrOutliner *pFlowOutl) void EditingTextChainFlow::impLeaveOnlyNonOverflowingText(SdrOutliner *pNonOverflOutl) { OutlinerParaObject *pNewText = mpOverflChText->RemoveOverflowingText(pNonOverflOutl); - //impSetTextForEditingOutliner(pNewText); //XXX: Don't call it since we do everything with NonOverflowingText::ToParaObject + //impSetTextForEditingOutliner(pNewText); //XXX: Don't call it since we do everything with NonOverflowingText::ToParaObject // XXX: You may need this for Underflow GetLinkTarget()->NbcSetOutlinerParaObject(pNewText); } commit 2e8693f0f8f2f2b78e250b08793affce644a9190 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 19:19:22 2015 +0200 Check null pointer before AddUndo in chaining Change-Id: I90d44cf78bd1ec21fd44596a6b3836933f0fc1bc diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 7ac8413..1430e80 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -536,7 +536,8 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl) } } - AddUndo(pTxtUndo); + if (pTxtUndo) + AddUndo(pTxtUndo); //maCursorEvent = new CursorChainingEvent(pTextChain->GetCursorEvent(pTextObj)); //SdrTextObj *pNextLink = pTextObj->GetNextLinkInChain(); commit 9920184dc1e5db9697973e26992ad73c813c1800 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Aug 19 18:47:29 2015 +0200 Handle Chaining as last thing in pasting Change-Id: Id8873c4d02f47704a651dd8677805e2e61969ffd diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx index 39f6321..3d7b908 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -708,13 +708,18 @@ void OutlinerView::PasteSpecial() pOwner->ImplSetLevelDependendStyleSheet( nPara ); } - // XXX: Chaining call - if (aEndCutPasteLink.IsSet()) - aEndCutPasteLink.Call(NULL); - pEditView->SetEditEngineUpdateMode( true ); pOwner->UndoActionEnd( OLUNDO_INSERT ); pEditView->ShowCursor( true, true ); + + // Chaining call + // NOTE: We need to do this last because it pEditView may be deleted if a switch of box occurs + // (If you you have it here you don't need to set updateMode=true everywhere in TextChainFlow) + // XXX: I wonder if it has to be within the Undo action for some reason though + + if (aEndCutPasteLink.IsSet()) + aEndCutPasteLink.Call(NULL); + } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits