use more concrete type in TableParagraph

Change-Id: I758822bd78339449cdcd0a7090080946f75418ea
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200225
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin
2026-02-25 09:11:52 +01:00
parent 4e4ef13452
commit 13c16ba3fd
4 changed files with 22 additions and 19 deletions
@@ -5421,7 +5421,8 @@ void DomainMapper::finishParagraph(const bool bRemove, const bool bNoNumbering)
{
if (m_pImpl->m_pSdtHelper->getControlType() == SdtControlType::datePicker)
m_pImpl->m_pSdtHelper->createDateContentControl();
m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove, bNoNumbering);
auto pParaContext = static_cast<ParagraphPropertyMap*>(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH).get());
m_pImpl->finishParagraph(pParaContext, bRemove, bNoNumbering);
if (bRemove || mbIsLastPara)
m_pImpl->RemoveLastParagraph();
mbIsLastPara = false; // handle other subdocuments
@@ -2152,7 +2152,7 @@ static sal_Int32 lcl_getListId(const StyleSheetEntryPtr& rEntry, const StyleShee
/// 9 indicates that numbering should be at body level (aka disabled) - rarely used by MSWord.
/// 0-8 are the nine valid numbering levels.
sal_Int16 DomainMapper_Impl::GetListLevel(const StyleSheetEntryPtr& pEntry,
const PropertyMapPtr& pParaContext)
const ParagraphPropertyMapPtr& pParaContext)
{
sal_Int16 nListLevel = -1;
if (pParaContext)
@@ -2225,7 +2225,7 @@ void DomainMapper_Impl::ValidateListLevel(const OUString& sStyleIdentifierD)
}
}
void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove, const bool bNoNumbering )
void DomainMapper_Impl::finishParagraph( const ParagraphPropertyMapPtr& pParaContext, const bool bRemove, const bool bNoNumbering )
{
if (m_bDiscardHeaderFooter)
return;
@@ -2248,7 +2248,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
if (pFieldContext->GetFieldId() == FIELD_IF || pFieldContext->GetFieldId() == FIELD_REF)
{
// Conditional text fields can't contain newlines, finish the paragraph later.
FieldParagraph aFinish{pPropertyMap, bRemove};
FieldParagraph aFinish{pParaContext, bRemove};
pFieldContext->GetParagraphsToFinish().push_back(aFinish);
return;
}
@@ -2259,7 +2259,6 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
TagLogger::getInstance().startElement("finishParagraph");
#endif
ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pPropertyMap.get() );
if (m_aTextAppendStack.empty())
return;
TextAppendContext& rAppendContext = m_aTextAppendStack.top();
@@ -2406,7 +2405,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
// apply INHERITED autospacing only if top margin is not set
if ( bIsAutoSet || bNoTopmargin )
{
GetAnyProperty(PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, pPropertyMap) >>= nBeforeAutospacing;
GetAnyProperty(PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, pParaContext.get()) >>= nBeforeAutospacing;
// tdf#137655 only w:beforeAutospacing=0 was specified, but not PARA_TOP_MARGIN
// (see default_spacing = -1 in processing of LN_CT_Spacing_beforeAutospacing)
if (bNoTopmargin && nBeforeAutospacing == convertTwipToMm100(-1))
@@ -2442,7 +2441,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
bool bAppliedBottomAutospacing = false;
if (bIsAutoSet || bNoBottomMargin)
{
GetAnyProperty(PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, pPropertyMap) >>= nAfterAutospacing;
GetAnyProperty(PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, pParaContext.get()) >>= nAfterAutospacing;
if (bNoBottomMargin && nAfterAutospacing == convertTwipToMm100(-1))
{
sal_Int32 nStyleAuto = -1;
@@ -2482,7 +2481,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
// The paragraph style is vital to knowing all the frame properties.
std::optional<PropertyMap::Property> aParaStyle
= pPropertyMap->getProperty(PROP_PARA_STYLE_NAME);
= pParaContext->getProperty(PROP_PARA_STYLE_NAME);
if (aParaStyle)
{
OUString sName;
@@ -2666,11 +2665,11 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
lcl_AddRange(pToBeSavedProperties, xTextAppend, rAppendContext);
}
}
applyToggleAttributes(pPropertyMap); // for paragraph marker formatting
applyToggleAttributes(pParaContext.get()); // for paragraph marker formatting
std::vector<beans::PropertyValue> aProperties;
if (pPropertyMap)
if (pParaContext)
{
aProperties = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(pPropertyMap->GetPropertyValues());
aProperties = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(pParaContext->GetPropertyValues());
// tdf#64222 filter out the "paragraph marker" formatting and
// set it as a separate paragraph property, not a empty hint at
@@ -2937,7 +2936,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
}
}
sal_Int16 nCurrentLevel = GetListLevel(pEntry, pPropertyMap);
sal_Int16 nCurrentLevel = GetListLevel(pEntry, pParaContext);
if (nCurrentLevel == -1)
nCurrentLevel = 0;
@@ -3211,7 +3210,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
xParaProps->setPropertyValue(u"ParaLeftMargin"_ustr, aMargin);
else if (isNumberingViaStyle)
{
const sal_Int32 nParaLeftMargin = getNumberingProperty(nListId, GetListLevel(pEntry, pPropertyMap), u"IndentAt"_ustr);
const sal_Int32 nParaLeftMargin = getNumberingProperty(nListId, GetListLevel(pEntry, pParaContext), u"IndentAt"_ustr);
if (nParaLeftMargin != 0)
xParaProps->setPropertyValue(u"ParaLeftMargin"_ustr, uno::Any(nParaLeftMargin));
}
@@ -3229,7 +3228,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con
xParaProps->setPropertyValue(u"ParaFirstLineIndent"_ustr, aMargin);
else if (isNumberingViaStyle)
{
const sal_Int32 nFirstLineIndent = getNumberingProperty(nListId, GetListLevel(pEntry, pPropertyMap), u"FirstLineIndent"_ustr);
const sal_Int32 nFirstLineIndent = getNumberingProperty(nListId, GetListLevel(pEntry, pParaContext), u"FirstLineIndent"_ustr);
if (nFirstLineIndent != 0)
xParaProps->setPropertyValue(u"ParaFirstLineIndent"_ustr, uno::Any(nFirstLineIndent));
}
@@ -7279,7 +7278,8 @@ DomainMapper_Impl::StartIndexSectionChecked(std::u16string_view sServiceName)
{
if (m_StreamStateStack.top().bParaChanged)
{
finishParagraph(GetTopContextOfType(CONTEXT_PARAGRAPH), false); // resets bParaChanged
auto pParaContext = static_cast<ParagraphPropertyMap*>(GetTopContextOfType(CONTEXT_PARAGRAPH).get());
finishParagraph(pParaContext, false); // resets bParaChanged
PopProperties(CONTEXT_PARAGRAPH);
PushProperties(CONTEXT_PARAGRAPH);
SetIsFirstRun(true);
@@ -283,7 +283,7 @@ struct SubstreamContext
/// Information about a paragraph to be finished after a field end.
struct FieldParagraph
{
PropertyMapPtr m_pPropertyMap;
ParagraphPropertyMapPtr m_pPropertyMap;
bool m_bRemove = false;
};
@@ -828,7 +828,7 @@ public:
void setParaSdtEndDeferred(bool bParaSdtEndDeferred);
bool isParaSdtEndDeferred() const;
void finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove = false, const bool bNoNumbering = false);
void finishParagraph( const ParagraphPropertyMapPtr& pPropertyMap, const bool bRemove = false, const bool bNoNumbering = false);
void applyToggleAttributes( const PropertyMapPtr& pPropertyMap );
void MergeAtContentImageRedlineWithNext(const css::uno::Reference<css::text::XTextAppend>& xTextAppend);
void appendTextPortion( const OUString& rString, const PropertyMapPtr& pPropertyMap );
@@ -1150,7 +1150,7 @@ public:
SectionPropertyMap * GetSectionContext();
sal_Int16 GetListLevel(const StyleSheetEntryPtr& pEntry, const PropertyMapPtr& pParaContext = nullptr);
sal_Int16 GetListLevel(const StyleSheetEntryPtr& pEntry, const ParagraphPropertyMapPtr& pParaContext = nullptr);
void ValidateListLevel(const OUString& sStyleIdentifierD);
/**
@@ -604,6 +604,8 @@ public:
explicit ParagraphPropertyMap() {}
};
typedef tools::SvRef< ParagraphPropertyMap > ParagraphPropertyMapPtr;
class TablePropertyMap
: public PropertyMap
{
@@ -653,7 +655,7 @@ struct TableParagraph
{
rtl::Reference<SwXTextCursor> m_rStartParagraph;
rtl::Reference<SwXTextCursor> m_rEndParagraph;
PropertyMapPtr m_pPropertyMap;
ParagraphPropertyMapPtr m_pPropertyMap;
css::uno::Reference<css::beans::XPropertySet> m_rPropertySet;
};