[Libreoffice-commits] core.git: sc/source

Samuel Mehrbrodt (via logerrit) logerrit at kemper.freedesktop.org
Tue Aug 6 08:13:52 UTC 2019


 sc/source/ui/drawfunc/drtxtob.cxx |   60 ++++++--------------------------------
 sc/source/ui/view/editsh.cxx      |   16 +++-------
 2 files changed, 16 insertions(+), 60 deletions(-)

New commits:
commit 967644f09b8b7abe3b86d1647820f14e0196f8b4
Author:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Tue Jul 30 11:55:34 2019 +0200
Commit:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Tue Aug 6 10:13:00 2019 +0200

    Improve hyperlink selection in sc
    
    Change-Id: Ia8c6b9f9994cbe3e503061b4762dbd8648a4b857
    Reviewed-on: https://gerrit.libreoffice.org/76598
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>

diff --git a/sc/source/ui/drawfunc/drtxtob.cxx b/sc/source/ui/drawfunc/drtxtob.cxx
index 9a039034dd35..58943add8cbd 100644
--- a/sc/source/ui/drawfunc/drtxtob.cxx
+++ b/sc/source/ui/drawfunc/drtxtob.cxx
@@ -273,40 +273,14 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq )
                     bool bDone = false;
                     if (eMode == HLINK_DEFAULT || eMode == HLINK_FIELD)
                     {
-                        const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
-                        if (pFieldItem)
-                        {
-                            const SvxFieldData* pField = pFieldItem->GetField();
-                            if ( dynamic_cast<const SvxURLField*>( pField) )
-                            {
-                                //  select old field
-
-                                ESelection aSel = pOutView->GetSelection();
-                                aSel.Adjust();
-                                aSel.nEndPara = aSel.nStartPara;
-                                aSel.nEndPos = aSel.nStartPos + 1;
-                                pOutView->SetSelection( aSel );
-                            }
-                        }
+                        pOutView->GetFieldAtCursor();
 
                         //  insert new field
-
                         SvxURLField aURLField( rURL, rName, SvxURLFormat::Repr );
                         aURLField.SetTargetFrame( rTarget );
                         SvxFieldItem aURLItem( aURLField, EE_FEATURE_FIELD );
                         pOutView->InsertField( aURLItem );
 
-                        //  select new field
-
-                        ESelection aSel = pOutView->GetSelection();
-                        if ( aSel.nStartPos == aSel.nEndPos && aSel.nStartPos > 0 )
-                        {
-                            //  Cursor is behind the inserted field -> extend selection to the left
-
-                            --aSel.nStartPos;
-                            pOutView->SetSelection( aSel );
-                        }
-
                         bDone = true;
                     }
 
@@ -319,9 +293,8 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq )
             break;
 
         case SID_OPEN_HYPERLINK:
-            if (const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection())
+            if (const SvxFieldData* pField = pOutView->GetFieldAtCursor())
             {
-                const SvxFieldData* pField = pFieldItem->GetField();
                 if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
                 {
                     ScGlobal::OpenURL(pURLField->GetURL(), pURLField->GetTargetFrame(), true);
@@ -397,18 +370,15 @@ void ScDrawTextObjectBar::GetState( SfxItemSet& rSet )
         if ( pOutView )
         {
             bool bField = false;
-            const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
-            if (pFieldItem)
+            const SvxFieldData* pField = pOutView->GetFieldAtCursor();
+            if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
             {
-                const SvxFieldData* pField = pFieldItem->GetField();
-                if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
-                {
-                    aHLinkItem.SetName( pURLField->GetRepresentation() );
-                    aHLinkItem.SetURL( pURLField->GetURL() );
-                    aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() );
-                    bField = true;
-                }
+                aHLinkItem.SetName( pURLField->GetRepresentation() );
+                aHLinkItem.SetURL( pURLField->GetURL() );
+                aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() );
+                bField = true;
             }
+
             if (!bField)
             {
                 // use selected text as name for urls
@@ -427,17 +397,7 @@ void ScDrawTextObjectBar::GetState( SfxItemSet& rSet )
     {
         SdrView* pView = pViewData->GetScDrawView();
         OutlinerView* pOutView = pView->GetTextEditOutlinerView();
-        bool bEnable = false;
-        if ( pOutView )
-        {
-            const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
-            if ( pFieldItem )
-            {
-                const SvxFieldData* pField = pFieldItem->GetField();
-                bEnable = dynamic_cast<const SvxURLField*>( pField) !=  nullptr;
-            }
-        }
-        if( !bEnable )
+        if( !URLFieldHelper::IsCursorAtURLField(pOutView) )
         {
             rSet.DisableItem( SID_OPEN_HYPERLINK );
             rSet.DisableItem( SID_EDIT_HYPERLINK );
diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx
index c2e3e3a4c118..7140f7499c06 100644
--- a/sc/source/ui/view/editsh.cxx
+++ b/sc/source/ui/view/editsh.cxx
@@ -819,16 +819,12 @@ const SvxURLField* ScEditShell::GetURLField()
 {
     ScInputHandler* pHdl = GetMyInputHdl();
     EditView* pActiveView = pHdl ? pHdl->GetActiveView() : pEditView;
-    if ( pActiveView )
-    {
-        const SvxFieldItem* pFieldItem = pActiveView->GetFieldAtSelection();
-        if (pFieldItem)
-        {
-            const SvxFieldData* pField = pFieldItem->GetField();
-            if ( auto pURLField = dynamic_cast<const SvxURLField*>( pField) )
-                return pURLField;
-        }
-    }
+    if (!pActiveView)
+        return nullptr;
+
+    const SvxFieldData* pField = pActiveView->GetFieldAtCursor();
+    if (auto pURLField = dynamic_cast<const SvxURLField*>(pField))
+        return pURLField;
 
     return nullptr;
 }


More information about the Libreoffice-commits mailing list