diff options
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/core/fields/authfld.cxx | 48 | ||||
-rw-r--r-- | sw/source/uibase/docvw/edtwin2.cxx | 9 |
2 files changed, 57 insertions, 0 deletions
diff --git a/sw/source/core/fields/authfld.cxx b/sw/source/core/fields/authfld.cxx index 53867c809673..4728e48fd60b 100644 --- a/sw/source/core/fields/authfld.cxx +++ b/sw/source/core/fields/authfld.cxx @@ -554,6 +554,54 @@ OUString SwAuthorityField::GetDescription() const return SwResId(STR_AUTHORITY_ENTRY); } +OUString SwAuthorityField::GetAuthority(const SwTextAttr* pTextAttr, + const SwRootFrame* pLayout) const +{ + OUString aText; + + SwForm aForm(TOX_AUTHORITIES); + if (!pTextAttr) + { + return aText; + } + + auto& rFormatField = const_cast<SwFormatField&>(pTextAttr->GetFormatField()); + SwTextField* pTextField = rFormatField.GetTextField(); + if (!pTextField) + { + return aText; + } + + const SwTextNode& rNode = pTextField->GetTextNode(); + const auto pFieldType = static_cast<const SwAuthorityFieldType*>(GetTyp()); + std::unique_ptr<SwTOXInternational> pIntl(pFieldType->CreateTOXInternational()); + SwTOXAuthority aAuthority(rNode, rFormatField, *pIntl); + sal_uInt16 nLevel = aAuthority.GetLevel(); + SwFormTokens aPattern = aForm.GetPattern(nLevel); + aAuthority.InitText(pLayout); + for (const auto& rToken : aPattern) + { + switch (rToken.eTokenType) + { + case TOKEN_TEXT: + { + aText += rToken.sText; + break; + } + case TOKEN_AUTHORITY: + { + sal_uInt16 eField = rToken.nAuthorityField; + aText += aAuthority.GetText(eField, pLayout); + break; + } + default: + break; + } + } + + return aText; +} + const char* const aFieldNames[] = { "Identifier", diff --git a/sw/source/uibase/docvw/edtwin2.cxx b/sw/source/uibase/docvw/edtwin2.cxx index 5770afbd4c05..f3b975dfb546 100644 --- a/sw/source/uibase/docvw/edtwin2.cxx +++ b/sw/source/uibase/docvw/edtwin2.cxx @@ -52,6 +52,7 @@ #include <ndtxt.hxx> #include <FrameControlsManager.hxx> #include <comphelper/lok.hxx> +#include <authfld.hxx> static OUString lcl_GetRedlineHelp( const SwRangeRedline& rRedl, bool bBalloon ) { @@ -340,6 +341,14 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt) } break; } + case SwFieldIds::TableOfAuthorities: + { + const auto pAuthorityField + = static_cast<const SwAuthorityField*>(pField); + sText = pAuthorityField->GetAuthority(aContentAtPos.pFndTextAttr, + rSh.GetLayout()); + break; + } default: break; } |