diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-03-12 17:51:07 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-03-12 19:32:19 +0100 |
commit | 64ffabbdb2725e93de997171708bb31c33c93a55 (patch) | |
tree | 2f27a4aa75990e5f9f2e7b5ec8cbada99a7714e0 /sw/source/uibase | |
parent | 6db71f70a3b200d4074f6cda8ce445e9861d3296 (diff) |
sw bibliography, refer to a page: make the biblio field clickable
- add support for this in SwWrtShell::ClickToField()
- restrict this to ctrl-click by default (similar to hyperlinks)
- ignore empty URLs
- extend the tooltip to hint the URL
- change pointer to hint that the field is clickable
- downgrade the assert to SAL_WARN in
SwAuthorityFieldType::RemoveField(), that currently fires every time a
biblio field is de-selected
Change-Id: I3b4a12d8a7661f7d8d41804f104505c7594debd6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112400
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'sw/source/uibase')
-rw-r--r-- | sw/source/uibase/docvw/edtwin.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/docvw/edtwin2.cxx | 7 | ||||
-rw-r--r-- | sw/source/uibase/inc/wrtsh.hxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/shells/basesh.cxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/wrtsh/wrtsh2.cxx | 21 |
5 files changed, 30 insertions, 4 deletions
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx index 1f95f9bdea31..93560ec91f3b 100644 --- a/sw/source/uibase/docvw/edtwin.cxx +++ b/sw/source/uibase/docvw/edtwin.cxx @@ -4809,7 +4809,7 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) } else { - rSh.ClickToField( *aContentAtPos.aFnd.pField ); + rSh.ClickToField(*aContentAtPos.aFnd.pField, bExecHyperlinks); // a bit of a mystery what this is good for? // in this case we assume it's valid since we // just selected a field diff --git a/sw/source/uibase/docvw/edtwin2.cxx b/sw/source/uibase/docvw/edtwin2.cxx index 645878cd855f..c3af8bd54149 100644 --- a/sw/source/uibase/docvw/edtwin2.cxx +++ b/sw/source/uibase/docvw/edtwin2.cxx @@ -347,6 +347,13 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt) = static_cast<const SwAuthorityField*>(pField); sText = pAuthorityField->GetAuthority(aContentAtPos.pFndTextAttr, rSh.GetLayout()); + if (pAuthorityField->HasURL()) + { + const OUString& rURL + = pAuthorityField->GetAuthEntry()->GetAuthorField( + AUTH_FIELD_URL); + sText += "\n" + SfxHelp::GetURLHelpText(rURL); + } break; } diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx index cd50a2f3f7a9..67b626dc70bc 100644 --- a/sw/source/uibase/inc/wrtsh.hxx +++ b/sw/source/uibase/inc/wrtsh.hxx @@ -437,7 +437,7 @@ typedef bool (SwWrtShell::*FNSimpleMove)(); // a click at the given field. the cursor is on it. // execute the predefined actions. - void ClickToField( const SwField& rField ); + void ClickToField( const SwField& rField, bool bExecHyperlinks ); void ClickToINetAttr( const SwFormatINetFormat& rItem, LoadUrlFlags nFilter = LoadUrlFlags::NONE ); bool ClickToINetGrf( const Point& rDocPt, LoadUrlFlags nFilter ); inline bool IsInClickToEdit() const ; diff --git a/sw/source/uibase/shells/basesh.cxx b/sw/source/uibase/shells/basesh.cxx index 4ec9dccd3113..c91fab016851 100644 --- a/sw/source/uibase/shells/basesh.cxx +++ b/sw/source/uibase/shells/basesh.cxx @@ -773,7 +773,7 @@ void SwBaseShell::Execute(SfxRequest &rReq) bool bRet = rSh.MoveFieldType( pFieldType, nSlot == FN_GOTO_NEXT_MARK ); SwField* pCurField = bRet ? rSh.GetCurField() : nullptr; if (pCurField) - rSh.ClickToField(*pCurField); + rSh.ClickToField(*pCurField, /*bExecHyperlinks=*/false); rReq.SetReturnValue(SfxBoolItem( nSlot, bRet)); } } diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx index c179383bd28a..cbda31185fed 100644 --- a/sw/source/uibase/wrtsh/wrtsh2.cxx +++ b/sw/source/uibase/wrtsh/wrtsh2.cxx @@ -46,6 +46,7 @@ #include <cmdid.h> #include <swabstdlg.hxx> #include <SwRewriter.hxx> +#include <authfld.hxx> #include <com/sun/star/document/XDocumentProperties.hpp> #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> @@ -334,7 +335,7 @@ void SwWrtShell::UpdateTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet) // handler for click on the field given as parameter. // the cursor is positioned on the field. -void SwWrtShell::ClickToField( const SwField& rField ) +void SwWrtShell::ClickToField(const SwField& rField, bool bExecHyperlinks) { // cross reference field must not be selected because it moves the cursor if (SwFieldIds::GetRef != rField.GetTyp()->Which()) @@ -396,6 +397,24 @@ void SwWrtShell::ClickToField( const SwField& rField ) } break; + case SwFieldIds::TableOfAuthorities: + { + if (!bExecHyperlinks) + { + break; + } + + auto pField = static_cast<const SwAuthorityField*>(&rField); + if (!pField->HasURL()) + { + break; + } + + const OUString& rURL = pField->GetAuthEntry()->GetAuthorField(AUTH_FIELD_URL); + ::LoadURL(*this, rURL, LoadUrlFlags::NewView, /*rTargetFrameName=*/OUString()); + } + break; + case SwFieldIds::GetRef: StartAllAction(); SwCursorShell::GotoRefMark( static_cast<const SwGetRefField&>(rField).GetSetRefName(), |