include/svx/textchaincursor.hxx | 4 +++ svx/source/svdraw/svdedxv.cxx | 31 +++--------------------- svx/source/svdraw/textchaincursor.cxx | 43 ++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 27 deletions(-)
New commits: commit 70ce299e1a6c4a1d7375ddb089acfb8b60a9e8c8 Author: matteocam <matteo.campane...@gmail.com> Date: Fri Jul 24 01:03:58 2015 +0200 Add specific method for cursor event handling Change-Id: I664e1ac9ac52d7d54e2f3ca35cbb429dc2e131cb diff --git a/include/svx/textchaincursor.hxx b/include/svx/textchaincursor.hxx index 456d3c1..ce5200f 100644 --- a/include/svx/textchaincursor.hxx +++ b/include/svx/textchaincursor.hxx @@ -31,10 +31,14 @@ public: TextChainCursorManager(SdrObjEditView *pEditView, const SdrTextObj *pTextObj); bool HandleKeyEvent( const KeyEvent& rKEvt ) const; + void HandleCursorEvent(const CursorChainingEvent aCurEvt, + const ESelection aNewSel) const; private: SdrObjEditView *mpEditView; const SdrTextObj *mpTextObj; + + void impChangeEditingTextObj(SdrTextObj *pTargetTextObj, ESelection aNewSel) const; }; diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index fe7f6c4..15e2228 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -536,39 +536,16 @@ void SdrObjEditView::ImpMoveCursorAfterChainingEvent() if (!pTextObj->IsChainable() || !pTextObj->GetNextLinkInChain()) return; - - SdrTextObj *pNextLink = pTextObj->GetNextLinkInChain(); - OutlinerView* pOLV = GetTextEditOutlinerView(); - TextChain *pTextChain = pTextObj->GetTextChain(); ESelection aNewSel = pTextChain->GetPostChainingSel(pTextObj); - switch ( pTextChain->GetCursorEvent(pTextObj) ) { - - case CursorChainingEvent::UNCHANGED: - // Set same selection as before the chaining (which is saved as PostChainingSel) - // We need an explicit set because the Outliner is messed up - // after text transfer and otherwise it brings us at arbitrary positions. - pOLV->SetSelection(aNewSel); - break; - case CursorChainingEvent::TO_NEXT_LINK: - SdrEndTextEdit(); - SdrBeginTextEdit(pNextLink); - // OutlinerView has changed, so we update the pointer - pOLV = GetTextEditOutlinerView(); - pOLV->SetSelection(aNewSel); // XXX - break; - case CursorChainingEvent::TO_PREV_LINK: - // XXX: To be handled - break; - case CursorChainingEvent::NULL_EVENT: - // Do nothing here - break; - } + TextChainCursorManager aCursorManager(this, pTextObj); + aCursorManager.HandleCursorEvent( + pTextChain->GetCursorEvent(pTextObj), + aNewSel); // Reset event pTextChain->SetCursorEvent(pTextObj, CursorChainingEvent::NULL_EVENT); - } IMPL_LINK(SdrObjEditView,ImpOutlinerCalcFieldValueHdl,EditFieldInfo*,pFI) diff --git a/svx/source/svdraw/textchaincursor.cxx b/svx/source/svdraw/textchaincursor.cxx index 37b5931..a0def07 100644 --- a/svx/source/svdraw/textchaincursor.cxx +++ b/svx/source/svdraw/textchaincursor.cxx @@ -22,6 +22,10 @@ #include <svx/svdedxv.hxx> #include <svx/svdoutl.hxx> +// XXX: Possible duplication of code in behavior with stuff in ImpEditView (or ImpEditEngine) and OutlinerView + +// XXX: We violate Demeter's Law several times here, I'm afraid + TextChainCursorManager::TextChainCursorManager(SdrObjEditView *pEditView, const SdrTextObj *pTextObj) : mpEditView(pEditView), mpTextObj(pTextObj) @@ -66,4 +70,43 @@ bool TextChainCursorManager::HandleKeyEvent( const KeyEvent& rKEvt ) const return bHandled; } +void TextChainCursorManager::HandleCursorEvent(const CursorChainingEvent aCurEvt, + const ESelection aNewSel) const +{ + OutlinerView* pOLV = mpEditView->GetTextEditOutlinerView(); + SdrTextObj *pNextLink = mpTextObj->GetNextLinkInChain(); + SdrTextObj *pPrevLink = mpTextObj->GetPrevLinkInChain(); + + switch ( aCurEvt ) { + case CursorChainingEvent::UNCHANGED: + // Set same selection as before the chaining (which is saved as PostChainingSel) + // We need an explicit set because the Outliner is messed up + // after text transfer and otherwise it brings us at arbitrary positions. + pOLV->SetSelection(aNewSel); + break; + case CursorChainingEvent::TO_NEXT_LINK: + impChangeEditingTextObj(pNextLink, aNewSel); + break; + case CursorChainingEvent::TO_PREV_LINK: + impChangeEditingTextObj(pPrevLink, aNewSel); + break; + case CursorChainingEvent::NULL_EVENT: + // Do nothing here + break; + } + +} + +void TextChainCursorManager::impChangeEditingTextObj(SdrTextObj *pTargetTextObj, ESelection aNewSel) const +{ + if (!pTargetTextObj) + return; + + mpEditView->SdrEndTextEdit(); + mpEditView->SdrBeginTextEdit(pTargetTextObj); + // OutlinerView has changed, so we update the pointer + OutlinerView *pOLV = mpEditView->GetTextEditOutlinerView(); + pOLV->SetSelection(aNewSel); // XXX +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits