include/svx/hlnkitem.hxx | 8 +++++++- include/svx/svxids.hrc | 1 + svx/sdi/svxitems.sdi | 11 ++++++----- svx/source/items/hlnkitem.cxx | 17 ++++++++++++++--- sw/source/uibase/shells/textfld.cxx | 15 ++++++++++++++- 5 files changed, 42 insertions(+), 10 deletions(-)
New commits: commit fb3597932ad9322feb58115528ca1dae070edfa5 Author: rash419 <rashesh.pa...@collabora.com> AuthorDate: Thu Sep 15 18:02:06 2022 +0530 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Tue Sep 27 11:15:56 2022 +0200 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.pa...@collabora.com> Change-Id: I48fba347bda0652f7b657524f23c2dd837cd8186 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140015 Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> 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;