[Libreoffice-commits] core.git: Branch 'feature/gsoc14-draw-chained-text-boxes' - svx/source

matteocam matteo.campanelli at gmail.com
Thu Jul 23 17:15:40 PDT 2015


 svx/source/svdraw/textchain.cxx       |   10 +++++-----
 svx/source/svdraw/textchaincursor.cxx |   23 ++++++++++++++++++-----
 2 files changed, 23 insertions(+), 10 deletions(-)

New commits:
commit 7afcf37661e01bcc75271a82a067892ce98ce627
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Fri Jul 24 02:14:16 2015 +0200

    Handle Left Arrow and Prev Link
    
    Change-Id: I08f56fc5fc747d097d90313f4bfec14091b6f5a7

diff --git a/svx/source/svdraw/textchain.cxx b/svx/source/svdraw/textchain.cxx
index 86357c2..7cfa0a4 100644
--- a/svx/source/svdraw/textchain.cxx
+++ b/svx/source/svdraw/textchain.cxx
@@ -89,17 +89,17 @@ SdrTextObj *TextChain::impGetNextLink(const SdrTextObj *pTextObj) const
 
 SdrTextObj *TextChain::impGetPrevLink(const SdrTextObj *pTextObj) const
 {
-    SdrTextObj *pNextTextObj = NULL;
+    SdrTextObj *pPrevTextObj = NULL;
     SdrPage *pPage = pTextObj->pPage;
 
     if ( pPage && pPage->GetObjCount() > 1) {
 
-        sal_uInt32 nextIndex = (pTextObj->GetOrdNum()-1);
+        sal_Int32 prevIndex = (pTextObj->GetOrdNum()-1);
 
-        if (nextIndex > 0)
-            pNextTextObj =  dynamic_cast< SdrTextObj * >( pPage->GetObj( nextIndex ) );
+        if (prevIndex >= 0)
+            pPrevTextObj =  dynamic_cast< SdrTextObj * >( pPage->GetObj( prevIndex ) );
 
-        return pNextTextObj;
+        return pPrevTextObj;
     } else {
         fprintf(stderr, "Make New Object please\n");
         return NULL;
diff --git a/svx/source/svdraw/textchaincursor.cxx b/svx/source/svdraw/textchaincursor.cxx
index 7ca44f7..3952d8b 100644
--- a/svx/source/svdraw/textchaincursor.cxx
+++ b/svx/source/svdraw/textchaincursor.cxx
@@ -58,6 +58,9 @@ void TextChainCursorManager::impDetectEvent(const KeyEvent& rKEvt,
     SdrOutliner *pOutl = mpEditView->GetTextEditOutliner();
     OutlinerView *pOLV = mpEditView->GetTextEditOutlinerView();
 
+    SdrTextObj *pNextLink = mpTextObj->GetNextLinkInChain();
+    SdrTextObj *pPrevLink = mpTextObj->GetPrevLinkInChain();
+
     KeyFuncType eFunc = rKEvt.GetKeyCode().GetFunction();
 
     // We need to have this KeyFuncType
@@ -74,17 +77,27 @@ void TextChainCursorManager::impDetectEvent(const KeyEvent& rKEvt,
     OUString aLastParaText = pOutl->GetText(pOutl->GetParagraph(nLastPara));
     sal_Int32 nLastParaLen = aLastParaText.getLength();
 
-    bool bAtEndOfTextContent =
-        (aCurSel.nEndPara == nLastPara) &&
-        (aCurSel.nEndPos == nLastParaLen);
+    ESelection aEndSel = ESelection(nLastPara, nLastParaLen);
+    bool bAtEndOfTextContent = aCurSel.IsEqual(aEndSel);
 
-    if (nCode == KEY_RIGHT && bAtEndOfTextContent)
+    // Are we "pushing" at the end of the object?
+    if (nCode == KEY_RIGHT && bAtEndOfTextContent && pNextLink)
     {
         *pOutCursorEvt = CursorChainingEvent::TO_NEXT_LINK;
         // Selection unchanged: we are at the beginning of the box
+        return;
     }
 
-    // if (nCode == KEY_LEFT && bAtStartOfTextContent) ...
+    ESelection aStartSel = ESelection(0, 0);
+    bool bAtStartOfTextContent = aCurSel.IsEqual(aStartSel);
+
+    // Are we "pushing" at the start of the object?
+    if (nCode == KEY_LEFT && bAtStartOfTextContent && pPrevLink)
+    {
+        *pOutCursorEvt = CursorChainingEvent::TO_PREV_LINK;
+        *pOutSel = ESelection(100000, 100000); // Set at end of selection
+        return;
+    }
 
     // If arrived here there is no event detected
     *pOutCursorEvt = CursorChainingEvent::NULL_EVENT;


More information about the Libreoffice-commits mailing list