summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2019-07-12 10:37:41 +0200
committerSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2019-07-15 08:53:22 +0200
commit86cb2a1f98c0585d2121e6ae34fe62f072ef9a63 (patch)
tree0942e25c030c99bf7d2efd2542b40483a2e348ef
parent349c525fd30121ad2148f6061d155815b8c83303 (diff)
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>
-rw-r--r--editeng/source/misc/urlfieldhelper.cxx17
-rw-r--r--include/editeng/urlfieldhelper.hxx1
-rw-r--r--sd/source/ui/view/drviewsf.cxx18
-rw-r--r--sw/sdi/drwtxtsh.sdi12
-rw-r--r--sw/source/uibase/shells/drwtxtex.cxx25
-rw-r--r--sw/uiconfig/swriter/popupmenu/drawtext.xml3
6 files changed, 59 insertions, 17 deletions
diff --git a/editeng/source/misc/urlfieldhelper.cxx b/editeng/source/misc/urlfieldhelper.cxx
index 961a946ca142..f2499dbf3792 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 698a22077225..a2f20b560065 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 df68fa2fb0a5..d420c6f49f03 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 2046fdf585da..c5a0e6477c0e 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 16f5ca169daf..898cc8743fe5 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 e13990ca0af9..7536d60f7fd7 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>