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

matteocam matteo.campanelli at gmail.com
Mon Jul 6 12:58:54 PDT 2015


 include/svx/svdedxv.hxx         |    2 +-
 include/svx/textchain.hxx       |   11 +++++++++++
 svx/source/svdraw/svdedxv.cxx   |   31 +++++++++++++++++++------------
 svx/source/svdraw/textchain.cxx |   13 +++++++++++++
 4 files changed, 44 insertions(+), 13 deletions(-)

New commits:
commit 5d5b0c29b59557ace847ffd34a1aa15220c806cd
Author: matteocam <matteo.campanelli at gmail.com>
Date:   Mon Jul 6 15:57:03 2015 -0400

    Adds CursorChainEvent and related code in SdrObjEditView
    
    Change-Id: Ife00e7cd5c67ec127961ef7c89f8cf6b3a87f5a5

diff --git a/include/svx/svdedxv.hxx b/include/svx/svdedxv.hxx
index 67945b58b..010032e 100644
--- a/include/svx/svdedxv.hxx
+++ b/include/svx/svdedxv.hxx
@@ -125,7 +125,7 @@ protected:
     void ImpMacroUp(const Point& rUpPos);
     void ImpMacroDown(const Point& rDownPos);
 
-       DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos* );
+    DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos* );
     DECL_LINK( EndPasteOrDropHdl, PasteOrDropInfos* );
 
 protected:
diff --git a/include/svx/textchain.hxx b/include/svx/textchain.hxx
index 8032747..730489b 100644
--- a/include/svx/textchain.hxx
+++ b/include/svx/textchain.hxx
@@ -32,6 +32,12 @@ namespace rtl {
 typedef rtl::OUString ChainLinkId;
 typedef std::map< ChainLinkId, ImpChainLinkProperties *> LinkPropertiesMap;
 
+enum class CursorChainingEvent
+{
+    TO_NEXT_LINK,
+    TO_PREV_LINK,
+    UNCHANGED
+};
 
 class ImpChainLinkProperties
 {
@@ -40,7 +46,9 @@ class ImpChainLinkProperties
 
     ImpChainLinkProperties();
 
+    // NOTE: Remember to set default value in contructor when adding field
     bool bNilChainingEvent;
+    CursorChainingEvent aCursorEvent; // XXX: replace with enum instead of bool?
 };
 
 
@@ -54,6 +62,9 @@ class TextChain {
     bool IsLinkInChain(SdrTextObj *) const;
     SdrTextObj *GetNextLink(SdrTextObj *) const;
 
+    CursorChainingEvent GetCursorEvent(SdrTextObj *);
+    void SetCursorEvent(SdrTextObj *, CursorChainingEvent);
+
     ChainLinkId GetId(SdrTextObj *) const;
     ImpChainLinkProperties *GetLinkProperties(SdrTextObj *);
 
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index 74a14e1..bc5bfb0 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -51,6 +51,7 @@
 #include "svx/svdstr.hrc"
 #include "svdglob.hxx"
 #include "svx/globl3d.hxx"
+#include <svx/textchain.hxx>
 #include <editeng/outliner.hxx>
 #include <editeng/adjustitem.hxx>
 #include <svtools/colorcfg.hxx>
@@ -495,8 +496,24 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl)
             // trigger actual chaining
             pTextObj->onChainingEvent();
 
+            // XXX: this logic could be put in a separate approppriate class
             /* Cursor motion stuff */
+            CursorChainingEvent aCursorEvent = pTextObj->GetTextChain()->GetCursorEvent(pTextObj);
+            SdrTextObj *pNextLink = pTextObj->GetNextLinkInChain();
 
+            switch (aCursorEvent) {
+
+            case CursorChainingEvent::UNCHANGED:
+                    pOLV->SetSelection(aPreChainingSel);
+                    break;
+            case CursorChainingEvent::TO_NEXT_LINK:
+                    SdrEndTextEdit();
+                    SdrBeginTextEdit(pNextLink);
+                    break;
+            case CursorChainingEvent::TO_PREV_LINK:
+                    // XXX: To be handled
+                    break;
+            }
 
             // Find last Para
             /*
@@ -508,8 +525,6 @@ IMPL_LINK_NOARG(SdrObjEditView,ImpChainingEventHdl)
             ESelection aEndSel(nLastParaIndex,nLenLastPara,nLastParaIndex,nLenLastPara);
             */
 
-            pOLV->SetSelection(aPreChainingSel);
-
         } else {
             // XXX
             fprintf(stderr, "[OnChaining] No Edit Outliner View\n");
@@ -758,7 +773,8 @@ bool SdrObjEditView::SdrBeginTextEdit(
 
             pTextEditOutlinerView->ShowCursor();
             pTextEditOutliner->SetStatusEventHdl(LINK(this,SdrObjEditView,ImpOutlinerStatusEventHdl));
-            pTextEditOutliner->SetChainingEventHdl(LINK(this,SdrObjEditView,ImpChainingEventHdl) );
+            if (pTextObj->IsChainable())
+                pTextEditOutliner->SetChainingEventHdl(LINK(this,SdrObjEditView,ImpChainingEventHdl) );
 
 #ifdef DBG_UTIL
             if (pItemBrowser!=nullptr) pItemBrowser->SetDirty();
@@ -808,15 +824,6 @@ bool SdrObjEditView::SdrBeginTextEdit(
                 }
             }
 
-            // FIXME(matteocam)
-            // XXX: Trying to get to the next text obj directly
-            if (pTextObj->IsChainable()) {
-                SdrTextObj *pNextLink = pTextObj->GetNextLinkInChain();
-                SdrEndTextEdit();
-                SdrBeginTextEdit(pNextLink);
-            }
-
-
             return true; // ran fine, let TextEdit run now
         }
         else
diff --git a/svx/source/svdraw/textchain.cxx b/svx/source/svdraw/textchain.cxx
index 09911f4..37bca69 100644
--- a/svx/source/svdraw/textchain.cxx
+++ b/svx/source/svdraw/textchain.cxx
@@ -25,6 +25,7 @@ ImpChainLinkProperties::ImpChainLinkProperties()
 {
     // give defaults
     bNilChainingEvent = false;
+    aCursorEvent = CursorChainingEvent::UNCHANGED;
 }
 
 // XXX: All getters in the class assume that the guy is in the chain
@@ -53,6 +54,18 @@ SdrTextObj *TextChain::GetNextLink(SdrTextObj *) const
     return NULL; // XXX: To be changed. It'd be a mess to implement now
 }
 
+CursorChainingEvent TextChain::GetCursorEvent(SdrTextObj *pTarget)
+{
+    ImpChainLinkProperties *pLinkProperties = GetLinkProperties(pTarget);
+    return pLinkProperties->aCursorEvent;
+}
+
+void TextChain::SetCursorEvent(SdrTextObj *pTarget, CursorChainingEvent aCursorEvent)
+{
+    ImpChainLinkProperties *pLinkProperties = GetLinkProperties(pTarget);
+    pLinkProperties->aCursorEvent = aCursorEvent;
+}
+
 bool TextChain::GetLinksHaveMergeableFirstPara(SdrTextObj* /* pPrevLink */, SdrTextObj* /* pNextLink */)
 {
     // XXX


More information about the Libreoffice-commits mailing list