[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - include/svx svx/source
matteocam
matteo.campanelli at gmail.com
Thu Jul 23 14:48:35 PDT 2015
include/svx/textchaincursor.hxx | 15 +++++++++-
svx/source/svdraw/svdedxv.cxx | 48 ++++++----------------------------
svx/source/svdraw/textchaincursor.cxx | 44 ++++++++++++++++++++++++++++++-
3 files changed, 65 insertions(+), 42 deletions(-)
New commits:
commit cdc0e22b54d8b2c20950a955070488c5603e66c0
Author: matteocam <matteo.campanelli at gmail.com>
Date: Thu Jul 23 23:46:47 2015 +0200
Move code for right motion into TextChainCursorManager
Change-Id: Ifa6aecbd2c55763583f2d48b0883698f876cbc6c
diff --git a/include/svx/textchaincursor.hxx b/include/svx/textchaincursor.hxx
index 71dbc60..456d3c1 100644
--- a/include/svx/textchaincursor.hxx
+++ b/include/svx/textchaincursor.hxx
@@ -20,10 +20,21 @@
#ifndef INCLUDED_SVX_TEXTCHAINCURSOR_HXX
#define INCLUDED_SVX_TEXTCHAINCURSOR_HXX
+class SdrObjEditView;
+class SdrTextObj;
+class KeyEvent;
-class TextChainCursorHandler
+
+class TextChainCursorManager
{
- TextChainCursorHandler();
+public:
+ TextChainCursorManager(SdrObjEditView *pEditView, const SdrTextObj *pTextObj);
+
+ bool HandleKeyEvent( const KeyEvent& rKEvt ) const;
+
+private:
+ SdrObjEditView *mpEditView;
+ const SdrTextObj *mpTextObj;
};
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index 180ae2e..89e4902 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -52,6 +52,7 @@
#include "svdglob.hxx"
#include "svx/globl3d.hxx"
#include <svx/textchain.hxx>
+#include <svx/textchaincursor.hxx>
#include <editeng/outliner.hxx>
#include <editeng/adjustitem.hxx>
#include <svtools/colorcfg.hxx>
@@ -1282,49 +1283,20 @@ bool SdrObjEditView::IsTextEditFrameHit(const Point& rHit) const
bool SdrObjEditView::ImpHandleMotionThroughBoxesKeyInput(const KeyEvent& rKEvt, vcl::Window* pWin)
{
- // XXX: Find a clean way to do this (even cleaner than the code commented below)
- // if( pTextEditOutlinerView->IsKeyEventPushingOutOfPage(rKevt, pWin)
- // pWin = HandleKeyPushingOutOfBox(rKevt);
- KeyFuncType eFunc = rKEvt.GetKeyCode().GetFunction();
- sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
- ESelection aCurSel = pTextEditOutlinerView->GetSelection();
-
-
SdrTextObj* pTextObj = NULL;
if (mxTextEditObj.is())
pTextObj= dynamic_cast<SdrTextObj*>(mxTextEditObj.get());
+ else
+ return false;
- bool bHandled = false;
-
- // XXX: Add check for last position in the para
- if (pTextObj && pTextObj->IsChainable() && pTextObj->GetNextLinkInChain() &&
- eFunc == KeyFuncType::DONTKNOW)
- {
- SdrOutliner *pOutl = GetTextEditOutliner();
- sal_Int32 nLastPara = pOutl->GetParagraphCount()-1;
- OUString aLastParaText = pOutl->GetText(pOutl->GetParagraph(nLastPara));
- sal_Int32 nLastParaLen = aLastParaText.getLength();
-
- if (nCode == KEY_RIGHT &&
- aCurSel.nEndPara == nLastPara &&
- aCurSel.nEndPos == nLastParaLen
- )
- {
- fprintf(stderr, "[CHAIN - CURSOR] Trying to move to next box\n" );
-
- // Move to next box
- SdrEndTextEdit();
- SdrTextObj *pNextLink = pTextObj->GetNextLinkInChain();
- SdrBeginTextEdit(pNextLink);
- bHandled = true;
- }
-
+ TextChainCursorManager aCursorManager(this, pTextObj);
+ if( aCursorManager.HandleKeyEvent(rKEvt) ) {
+ // Possibly do other stuff here if necessary...
// XXX: Careful with the checks below (in KeyInput) for pWin and co. You should do them here I guess.
-
+ return true;
+ } else {
+ return false;
}
-
- return bHandled;
-
}
bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin)
@@ -1356,8 +1328,6 @@ bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin)
#endif
ImpMakeTextCursorAreaVisible();
-
-
return true;
}
}
diff --git a/svx/source/svdraw/textchaincursor.cxx b/svx/source/svdraw/textchaincursor.cxx
index 45f8533..37b5931 100644
--- a/svx/source/svdraw/textchaincursor.cxx
+++ b/svx/source/svdraw/textchaincursor.cxx
@@ -17,11 +17,53 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <svx/textchain.hxx>
#include <svx/textchaincursor.hxx>
+#include <svx/svdedxv.hxx>
+#include <svx/svdoutl.hxx>
-TextChainCursorHandler::TextChainCursorHandler()
+TextChainCursorManager::TextChainCursorManager(SdrObjEditView *pEditView, const SdrTextObj *pTextObj) :
+ mpEditView(pEditView),
+ mpTextObj(pTextObj)
{
}
+bool TextChainCursorManager::HandleKeyEvent( const KeyEvent& rKEvt ) const
+{
+ bool bHandled = false;
+
+ // XXX: Find a clean way to do this (even cleaner than the code commented below)
+ // if( pTextEditOutlinerView->IsKeyEventPushingOutOfPage(rKevt, pWin)
+ // pWin = HandleKeyPushingOutOfBox(rKevt);
+ KeyFuncType eFunc = rKEvt.GetKeyCode().GetFunction();
+ sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
+ ESelection aCurSel = mpEditView->GetTextEditOutlinerView()->GetSelection();
+
+ if (mpTextObj && mpTextObj->IsChainable() && mpTextObj->GetNextLinkInChain() &&
+ eFunc == KeyFuncType::DONTKNOW)
+ {
+ SdrOutliner *pOutl = mpEditView->GetTextEditOutliner();
+ sal_Int32 nLastPara = pOutl->GetParagraphCount()-1;
+ OUString aLastParaText = pOutl->GetText(pOutl->GetParagraph(nLastPara));
+ sal_Int32 nLastParaLen = aLastParaText.getLength();
+
+ if (nCode == KEY_RIGHT &&
+ aCurSel.nEndPara == nLastPara &&
+ aCurSel.nEndPos == nLastParaLen
+ )
+ {
+ fprintf(stderr, "[CHAIN - CURSOR] Trying to move to next box\n" );
+
+ // Move to next box
+ mpEditView->SdrEndTextEdit();
+ SdrTextObj *pNextLink = mpTextObj->GetNextLinkInChain();
+ mpEditView->SdrBeginTextEdit(pNextLink);
+ bHandled = true;
+ }
+
+ }
+ return bHandled;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list