[Libreoffice-commits] core.git: sw/inc sw/source
Bjoern Michaelsen (via logerrit)
logerrit at kemper.freedesktop.org
Tue Feb 25 07:08:43 UTC 2020
sw/inc/fldbas.hxx | 1 +
sw/inc/fmtfld.hxx | 4 ++++
sw/source/core/fields/fldbas.cxx | 5 +++++
sw/source/core/txtnode/atrfld.cxx | 7 +++++++
sw/source/core/unocore/unofield.cxx | 20 +++++---------------
5 files changed, 22 insertions(+), 15 deletions(-)
New commits:
commit 619e757283037e2ba91cfe2038fa3778e5249dfd
Author: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Mon Feb 24 00:11:16 2020 +0100
Commit: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Tue Feb 25 08:08:05 2020 +0100
add GatherField member function
Change-Id: Ifa2ea333ccccec240cc10374fd6539a8b3f6df46
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89316
Tested-by: Jenkins
Reviewed-by: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
diff --git a/sw/inc/fldbas.hxx b/sw/inc/fldbas.hxx
index 92a94fb8a096..1cd3b0f85c68 100644
--- a/sw/inc/fldbas.hxx
+++ b/sw/inc/fldbas.hxx
@@ -279,6 +279,7 @@ public:
bool HasHiddenInformationNotes();
void GatherNodeIndex(std::vector<sal_uLong>& rvNodeIndex);
void GatherRefFields(std::vector<SwGetRefField*>& rvRFields, const sal_uInt16 nTyp);
+ void GatherFields(std::vector<SwFormatField*>& rvFormatFields) const;
};
inline void SwFieldType::UpdateFields() const
diff --git a/sw/inc/fmtfld.hxx b/sw/inc/fmtfld.hxx
index 3ddce1977d96..13145771096a 100644
--- a/sw/inc/fmtfld.hxx
+++ b/sw/inc/fmtfld.hxx
@@ -67,6 +67,10 @@ namespace sw {
const sal_uInt16 m_nType;
GatherRefFieldsHint(std::vector<SwGetRefField*>& rvRFields, const sal_uInt16 nType) : m_rvRFields(rvRFields), m_nType(nType) {};
};
+ struct GatherFieldsHint final : SfxHint {
+ std::vector<SwFormatField*>& m_rvFields;
+ GatherFieldsHint(std::vector<SwFormatField*>& rvFields) : m_rvFields(rvFields) {};
+ };
}
diff --git a/sw/source/core/fields/fldbas.cxx b/sw/source/core/fields/fldbas.cxx
index 921c69752935..5a96dfe29663 100644
--- a/sw/source/core/fields/fldbas.cxx
+++ b/sw/source/core/fields/fldbas.cxx
@@ -190,6 +190,11 @@ void SwFieldType::GatherRefFields(std::vector<SwGetRefField*>& rvRFields, const
CallSwClientNotify(sw::GatherRefFieldsHint(rvRFields, nTyp));
}
+void SwFieldType::GatherFields(std::vector<SwFormatField*>& rvFields) const
+{
+ CallSwClientNotify(sw::GatherFieldsHint(rvFields));
+}
+
void SwFieldTypes::dumpAsXml(xmlTextWriterPtr pWriter) const
{
xmlTextWriterStartElement(pWriter, BAD_CAST("SwFieldTypes"));
diff --git a/sw/source/core/txtnode/atrfld.cxx b/sw/source/core/txtnode/atrfld.cxx
index 99eb71787ec0..30b8f6aec960 100644
--- a/sw/source/core/txtnode/atrfld.cxx
+++ b/sw/source/core/txtnode/atrfld.cxx
@@ -273,6 +273,13 @@ void SwFormatField::SwClientNotify( const SwModify& rModify, const SfxHint& rHin
SwTextNode* pNd = GetTextField()->GetpTextNode();
if(pNd && pNd->GetNodes().IsDocNodes())
pGatherRefFieldsHint->m_rvRFields.push_back(static_cast<SwGetRefField*>(GetField()));
+ } else if (const auto pGatherFieldsHint = dynamic_cast<const sw::GatherFieldsHint*>( &rHint ))
+ {
+ if(!GetTextField())
+ return;
+ SwTextNode* pNd = GetTextField()->GetpTextNode();
+ if(pNd && pNd->GetNodes().IsDocNodes())
+ pGatherFieldsHint->m_rvFields.push_back(this);
}
}
diff --git a/sw/source/core/unocore/unofield.cxx b/sw/source/core/unocore/unofield.cxx
index 0067dff27216..6b14d9e8e295 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -3010,21 +3010,11 @@ SwXFieldEnumeration::SwXFieldEnumeration(SwDoc & rDoc)
const size_t nCount = pFieldTypes->size();
for(size_t nType = 0; nType < nCount; ++nType)
{
- const SwFieldType *pCurType = (*pFieldTypes)[nType].get();
- SwIterator<SwFormatField,SwFieldType> aIter( *pCurType );
- const SwFormatField* pCurFieldFormat = aIter.First();
- while (pCurFieldFormat)
- {
- const SwTextField *pTextField = pCurFieldFormat->GetTextField();
- // skip fields that are currently not in the document
- // e.g. fields in undo or redo array
- bool bSkip = !pTextField ||
- !pTextField->GetpTextNode()->GetNodes().IsDocNodes();
- if (!bSkip)
- m_pImpl->m_Items.push_back( SwXTextField::CreateXTextField(
- m_pImpl->m_pDoc, pCurFieldFormat));
- pCurFieldFormat = aIter.Next();
- }
+ const SwFieldType* pCurType = (*pFieldTypes)[nType].get();
+ std::vector<SwFormatField*> vFormatFields;
+ pCurType->GatherFields(vFormatFields);
+ std::for_each(vFormatFields.begin(), vFormatFields.end(),
+ [this](SwFormatField* pF) { m_pImpl->m_Items.push_back(SwXTextField::CreateXTextField(m_pImpl->m_pDoc, pF)); });
}
// now handle meta-fields, which are not SwFields
const std::vector< uno::Reference<text::XTextField> > MetaFields(
More information about the Libreoffice-commits
mailing list