summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrash419 <rashesh.padia@collabora.com>2022-09-15 18:02:06 +0530
committerSzymon Kłos <szymon.klos@collabora.com>2022-09-27 11:15:56 +0200
commitfb3597932ad9322feb58115528ca1dae070edfa5 (patch)
tree8f1e7f79de4fb6fdfc44768e5b15064d63466498
parentd8b04077bb63f05efa256f353bfd6acb409a6983 (diff)
svx: extended SvxHyperlinkItem to have a new property sReplacementText
this property is use to pass text that needs to be replaced when executing uno:SetHyperlink command in online for inserting the mention Signed-off-by: rash419 <rashesh.padia@collabora.com> Change-Id: I48fba347bda0652f7b657524f23c2dd837cd8186 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140015 Reviewed-by: Szymon Kłos <szymon.klos@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r--include/svx/hlnkitem.hxx8
-rw-r--r--include/svx/svxids.hrc1
-rw-r--r--svx/sdi/svxitems.sdi11
-rw-r--r--svx/source/items/hlnkitem.cxx17
-rw-r--r--sw/source/uibase/shells/textfld.cxx15
5 files changed, 42 insertions, 10 deletions
diff --git a/include/svx/hlnkitem.hxx b/include/svx/hlnkitem.hxx
index 5d6ac5689401..7c6501c7777d 100644
--- a/include/svx/hlnkitem.hxx
+++ b/include/svx/hlnkitem.hxx
@@ -26,6 +26,7 @@
#include <svx/svxdllapi.h>
#include <o3tl/typed_flags_set.hxx>
#include <memory>
+#include <rtl/ustrbuf.hxx>
enum class HyperDialogEvent {
NONE = 0x0000,
@@ -51,6 +52,7 @@ class SVX_DLLPUBLIC SvxHyperlinkItem final : public SfxPoolItem
OUString sURL;
OUString sTarget;
SvxLinkInsertMode eType;
+ OUString sReplacementText;
OUString sIntName;
std::unique_ptr<SvxMacroTableDtor> pMacroTable;
@@ -67,7 +69,8 @@ public:
const OUString& rTarget, const OUString& rIntName,
SvxLinkInsertMode eTyp,
HyperDialogEvent nEvents,
- SvxMacroTableDtor const *pMacroTbl );
+ SvxMacroTableDtor const *pMacroTbl,
+ const OUString& rReplacementText = OUString());
virtual bool operator==( const SfxPoolItem& ) const override;
virtual SvxHyperlinkItem* Clone( SfxItemPool *pPool = nullptr ) const override;
@@ -97,6 +100,9 @@ public:
void SetMacroEvents (const HyperDialogEvent nEvents) { nMacroEvents = nEvents; }
HyperDialogEvent GetMacroEvents() const { return nMacroEvents; }
+ const OUString& GetReplacementText() const { return sReplacementText; }
+ void SetReplacementText(const OUString& rReplacementText) { sReplacementText = rReplacementText; }
+
};
#endif
diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
index f8e162a973a6..e19f5121d5de 100644
--- a/include/svx/svxids.hrc
+++ b/include/svx/svxids.hrc
@@ -67,6 +67,7 @@ class SdrAngleItem;
#define MID_HLINK_TARGET 0x71
#define MID_HLINK_TYPE 0x72
#define MID_HLINK_TEXT 0x73
+#define MID_HLINK_REPLACEMENTTEXT 0x74
#define MID_VIEWLAYOUT_COLUMNS 0x77
#define MID_VIEWLAYOUT_BOOKMODE 0x78
diff --git a/svx/sdi/svxitems.sdi b/svx/sdi/svxitems.sdi
index 549ffc3f3227..b34a317b3449 100644
--- a/svx/sdi/svxitems.sdi
+++ b/svx/sdi/svxitems.sdi
@@ -343,11 +343,12 @@ item SvxLongULSpace SvxLongULSpaceItem;
struct SvxHyperlink
{
- String Text MID_HLINK_TEXT;
- String URL MID_HLINK_URL;
- String Target MID_HLINK_TARGET;
- String Name MID_HLINK_NAME;
- INT32 Type MID_HLINK_TYPE;
+ String Text MID_HLINK_TEXT;
+ String URL MID_HLINK_URL;
+ String Target MID_HLINK_TARGET;
+ String Name MID_HLINK_NAME;
+ INT32 Type MID_HLINK_TYPE;
+ String ReplacementText MID_HLINK_REPLACEMENTTEXT
};
item SvxHyperlink SvxHyperlinkItem;
diff --git a/svx/source/items/hlnkitem.cxx b/svx/source/items/hlnkitem.cxx
index 7a092b36fc5a..f8500277316a 100644
--- a/svx/source/items/hlnkitem.cxx
+++ b/svx/source/items/hlnkitem.cxx
@@ -33,6 +33,7 @@ SvxHyperlinkItem::SvxHyperlinkItem( const SvxHyperlinkItem& rHyperlinkItem ):
eType = rHyperlinkItem.eType;
sIntName = rHyperlinkItem.sIntName;
nMacroEvents = rHyperlinkItem.nMacroEvents;
+ sReplacementText = rHyperlinkItem.sReplacementText;
if( rHyperlinkItem.GetMacroTable() )
pMacroTable.reset( new SvxMacroTableDtor( *rHyperlinkItem.GetMacroTable() ) );
@@ -41,14 +42,15 @@ SvxHyperlinkItem::SvxHyperlinkItem( const SvxHyperlinkItem& rHyperlinkItem ):
SvxHyperlinkItem::SvxHyperlinkItem( sal_uInt16 _nWhich, const OUString& rName, const OUString& rURL,
const OUString& rTarget, const OUString& rIntName, SvxLinkInsertMode eTyp,
- HyperDialogEvent nEvents, SvxMacroTableDtor const *pMacroTbl ):
+ HyperDialogEvent nEvents, SvxMacroTableDtor const *pMacroTbl, const OUString& rReplacementText):
SfxPoolItem (_nWhich),
sName (rName),
sURL (rURL),
sTarget (rTarget),
eType (eTyp),
sIntName (rIntName),
- nMacroEvents (nEvents)
+ nMacroEvents (nEvents),
+ sReplacementText (rReplacementText)
{
if (pMacroTbl)
pMacroTable.reset( new SvxMacroTableDtor ( *pMacroTbl ) );
@@ -70,7 +72,8 @@ bool SvxHyperlinkItem::operator==( const SfxPoolItem& rAttr ) const
sTarget == rItem.sTarget &&
eType == rItem.eType &&
sIntName == rItem.sIntName &&
- nMacroEvents == rItem.nMacroEvents);
+ nMacroEvents == rItem.nMacroEvents &&
+ sReplacementText == rItem.sReplacementText);
if (!bRet)
return false;
@@ -135,6 +138,9 @@ bool SvxHyperlinkItem::QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId ) co
case MID_HLINK_TYPE:
rVal <<= static_cast<sal_Int32>(eType);
break;
+ case MID_HLINK_REPLACEMENTTEXT:
+ rVal <<= sReplacementText;
+ break;
default:
return false;
}
@@ -174,6 +180,11 @@ bool SvxHyperlinkItem::PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId
return false;
eType = static_cast<SvxLinkInsertMode>(static_cast<sal_uInt16>(nVal));
break;
+ case MID_HLINK_REPLACEMENTTEXT:
+ if(!(rVal >>= aStr))
+ return false;
+ sReplacementText = aStr;
+ break;
default:
return false;
}
diff --git a/sw/source/uibase/shells/textfld.cxx b/sw/source/uibase/shells/textfld.cxx
index 9a1cbe76e040..474d76ce0030 100644
--- a/sw/source/uibase/shells/textfld.cxx
+++ b/sw/source/uibase/shells/textfld.cxx
@@ -976,6 +976,7 @@ void SwTextShell::InsertHyperlink(const SvxHyperlinkItem& rHlnkItem)
const OUString& rName = rHlnkItem.GetName();
const OUString& rURL = rHlnkItem.GetURL();
const OUString& rTarget = rHlnkItem.GetTargetFrame();
+ const OUString& rReplacementText = rHlnkItem.GetReplacementText();
sal_uInt16 nType = o3tl::narrowing<sal_uInt16>(rHlnkItem.GetInsertMode());
nType &= ~HLINK_HTMLMODE;
const SvxMacroTableDtor* pMacroTable = rHlnkItem.GetMacroTable();
@@ -1015,7 +1016,19 @@ void SwTextShell::InsertHyperlink(const SvxHyperlinkItem& rHlnkItem)
aINetFormat.SetMacro(SvMacroItemId::OnMouseOut, *pMacro);
}
rSh.SttSelect();
- rSh.InsertURL( aINetFormat, rName, true );
+ // inserting mention
+ if (comphelper::LibreOfficeKit::isActive() && !rReplacementText.isEmpty())
+ {
+ SwPaM* pCursorPos = rSh.GetCursor();
+ // move cursor backwards to select @mention
+ for(int i=0; i < rReplacementText.getLength(); i++)
+ pCursorPos->Move(fnMoveBackward);
+ rSh.InsertURL( aINetFormat, rName, false );
+ }
+ else
+ {
+ rSh.InsertURL( aINetFormat, rName, true );
+ }
rSh.EndSelect();
}
break;