tdf#112543 Add Edit/Remove hyperlink to text boxes/shapes in Writer
Change-Id: I9052387cf39135c2324b9db03662dc0365323400
Reviewed-on: https://gerrit.libreoffice.org/75479
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
diff --git a/editeng/source/misc/urlfieldhelper.cxx b/editeng/source/misc/urlfieldhelper.cxx
index 961a946..f2499db 100644
--- a/editeng/source/misc/urlfieldhelper.cxx
+++ b/editeng/source/misc/urlfieldhelper.cxx
@@ -24,4 +24,21 @@ void URLFieldHelper::RemoveURLField(Outliner* pOutl, OutlinerView* pOLV)
}
}
bool URLFieldHelper::IsCursorAtURLField(OutlinerView* pOLV)
{
if (!pOLV)
return false;
const SvxFieldItem* pFieldItem = pOLV->GetFieldUnderMousePointer();
if (!pFieldItem)
pFieldItem = pOLV->GetFieldAtSelection();
if (pFieldItem)
{
const SvxFieldData* pField = pFieldItem->GetField();
if (dynamic_cast<const SvxURLField*>(pField))
return true;
}
return false;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/include/editeng/urlfieldhelper.hxx b/include/editeng/urlfieldhelper.hxx
index 698a220..a2f20b5 100644
--- a/include/editeng/urlfieldhelper.hxx
+++ b/include/editeng/urlfieldhelper.hxx
@@ -17,6 +17,7 @@ class EDITENG_DLLPUBLIC URLFieldHelper
{
public:
static void RemoveURLField(Outliner* pOutl, OutlinerView* pOLV);
static bool IsCursorAtURLField(OutlinerView* pOLV);
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sd/source/ui/view/drviewsf.cxx b/sd/source/ui/view/drviewsf.cxx
index df68fa2..d420c6f 100644
--- a/sd/source/ui/view/drviewsf.cxx
+++ b/sd/source/ui/view/drviewsf.cxx
@@ -475,22 +475,8 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet )
case SID_REMOVE_HYPERLINK:
{
OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
if (pOLV)
{
bool bField = false;
const SvxFieldItem* pFieldItem = pOLV->GetFieldUnderMousePointer();
if (!pFieldItem)
pFieldItem = pOLV->GetFieldAtSelection();
if (pFieldItem)
{
const SvxFieldData* pField = pFieldItem->GetField();
if (dynamic_cast<const SvxURLField*>(pField))
bField = true;
}
if (!bField)
rSet.DisableItem(nWhich);
}
if (!URLFieldHelper::IsCursorAtURLField(mpDrawView->GetTextEditOutlinerView()))
rSet.DisableItem(nWhich);
}
break;
diff --git a/sw/sdi/drwtxtsh.sdi b/sw/sdi/drwtxtsh.sdi
index 2046fdf..c5a0e64 100644
--- a/sw/sdi/drwtxtsh.sdi
+++ b/sw/sdi/drwtxtsh.sdi
@@ -546,6 +546,18 @@ interface TextDrawText
[
StateMethod = StateInsert ;
]
FN_EDIT_HYPERLINK
[
ExecMethod = Execute ;
StateMethod = GetState;
DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
]
FN_REMOVE_HYPERLINK
[
ExecMethod = Execute ;
StateMethod = GetState;
DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
]
SID_TRANSLITERATE_SENTENCE_CASE
[
ExecMethod = ExecTransliteration;
diff --git a/sw/source/uibase/shells/drwtxtex.cxx b/sw/source/uibase/shells/drwtxtex.cxx
index 16f5ca1..898cc87 100644
--- a/sw/source/uibase/shells/drwtxtex.cxx
+++ b/sw/source/uibase/shells/drwtxtex.cxx
@@ -47,6 +47,7 @@
#include <editeng/contouritem.hxx>
#include <editeng/postitem.hxx>
#include <editeng/frmdiritem.hxx>
#include <editeng/urlfieldhelper.hxx>
#include <svx/svdoutl.hxx>
#include <sfx2/viewfrm.hxx>
#include <svl/stritem.hxx>
@@ -485,6 +486,21 @@ void SwDrawTextShell::Execute( SfxRequest &rReq )
}
break;
case FN_EDIT_HYPERLINK:
{
// Ensure the field is selected first
pOLV->GetFieldAtCursor();
GetView().GetViewFrame()->GetDispatcher()->Execute(SID_HYPERLINK_DIALOG);
}
break;
case FN_REMOVE_HYPERLINK:
{
URLFieldHelper::RemoveURLField(pSdrView->GetTextEditOutliner(),
pOLV);
}
break;
case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
// Shell switch!
@@ -884,12 +900,19 @@ void SwDrawTextShell::GetState(SfxItemSet& rSet)
rSet.DisableItem(nWhich);
}
break;
case FN_REMOVE_HYPERLINK:
case FN_EDIT_HYPERLINK:
{
if (!URLFieldHelper::IsCursorAtURLField(pOLV))
rSet.DisableItem(nWhich);
}
break;
default:
nSlotId = 0; // don't know this slot
break;
}
if (nSlotId)
if (nSlotId && bFlag)
rSet.Put(SfxBoolItem(nWhich, bFlag));
nWhich = aIter.NextWhich();
diff --git a/sw/uiconfig/swriter/popupmenu/drawtext.xml b/sw/uiconfig/swriter/popupmenu/drawtext.xml
index e13990c..7536d60 100644
--- a/sw/uiconfig/swriter/popupmenu/drawtext.xml
+++ b/sw/uiconfig/swriter/popupmenu/drawtext.xml
@@ -25,5 +25,8 @@
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ThesaurusFromContext"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:EditHyperlink"/>
<menu:menuitem menu:id=".uno:RemoveHyperlink"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ResetAttributes"/>
</menu:menupopup>