svx/source/svdraw/svdotext.cxx | 52 ++++++++++++++++++++++++++-- svx/source/svdraw/svdotextdecomposition.cxx | 3 + 2 files changed, 53 insertions(+), 2 deletions(-)
New commits: commit 8e7192c5e053684aaaa930e82a5c6bd53905ac2a Author: matteocam <matteo.campane...@gmail.com> Date: Wed Jul 29 18:56:51 2015 +0200 Check GetNicChainingEvent before chaining in static mode Change-Id: Ie3e4aeea896ae3269ee196d17d80505e2491eb71 diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index b627b77..25feda4 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -1425,6 +1425,9 @@ void SdrTextObj::impGetScrollTextTiming(drawinglayer::animation::AnimationEntryL void SdrTextObj::impHandleChainingEventsDuringDecomposition(SdrOutliner &rOutliner) const { + if (GetTextChain()->GetNilChainingEvent(this)) + return; + GetTextChain()->SetNilChainingEvent(this, true); TextChainFlow aTxtChainFlow(const_cast<SdrTextObj*>(this)); commit 452ac5b3b37dc3c06ff0dbe958cc65417f2ed064 Author: matteocam <matteo.campane...@gmail.com> Date: Wed Jul 29 18:54:55 2015 +0200 Set link at calls of IsChainable. (not working) Change-Id: Ia6b57c560f20abac8cac98c29880d7aa5b962d7c diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index ca28046..46b1bbc 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -1984,12 +1984,60 @@ void SdrTextObj::onEditOutlinerStatusEvent( EditStatus* pEditStatus ) } } +// XXX: Make it a method somewhere? +SdrObject *ImpGetObjByName(SdrObjList *pObjList, OUString aObjName) +{ + // scan the whole list + size_t nObjCount = pObjList->GetObjCount(); + for (unsigned i = 0; i < nObjCount; i++) { + SdrObject *pCurObj = pObjList->GetObj(i); + + if (pCurObj->GetName() == aObjName) { + return pCurObj; + } + } + // not found + return NULL; +} + +// XXX: Make it a (private) method of SdrTextObj +void ImpUpdateChainLinks(SdrTextObj *pTextObj, OUString aNextLinkName) +{ + // XXX: Current implementation constraints text boxes to be on the same page + + // No next link + if (aNextLinkName == "") { + pTextObj->SetNextLinkInChain(NULL); + return; + } + + SdrPage *pPage = pTextObj->GetPage(); + assert(pPage); + SdrTextObj *pNextTextObj = dynamic_cast< SdrTextObj * > + (ImpGetObjByName(pPage, aNextLinkName)); + if (!pNextTextObj) { + fprintf(stderr, "[CHAINING] Can't find object as next link.\n"); + return; + } + + pTextObj->SetNextLinkInChain(pNextTextObj); +} + bool SdrTextObj::IsChainable() const { // Read it as item const SfxItemSet& rSet = GetObjectItemSet(); - OUString aNextName = static_cast<const SfxStringItem&>(rSet.Get(SDRATTR_TEXT_CHAINNEXTNAME)).GetValue(); - return aNextName != ""; // XXX: Should we also check for GetNilChainingEvent? (see old code below) + OUString aNextLinkName = static_cast<const SfxStringItem&>(rSet.Get(SDRATTR_TEXT_CHAINNEXTNAME)).GetValue(); + + // Update links if any inconsistency is found + bool bNextLinkUnsetYet = (aNextLinkName != "") && !mpNextInChain; + bool bInconsistentNextLink = mpNextInChain && mpNextInChain->GetName() != aNextLinkName; + // if the link is not set despite there should be one OR if it has changed + if (bNextLinkUnsetYet || bInconsistentNextLink) { + ImpUpdateChainLinks(const_cast<SdrTextObj *>(this), aNextLinkName); + } + + return aNextLinkName != ""; // XXX: Should we also check for GetNilChainingEvent? (see old code below) /* // Check that no overflow is going on _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits