Kaydet (Commit) efcb9a70 authored tarafından Bjoern Michaelsen's avatar Bjoern Michaelsen Kaydeden (comit) Björn Michaelsen

use sw::WriterMultiListener instead of SwDepend in SwPageDesc

Change-Id: Ifaf9c808e04e736d0a1f7eaf884b8674ac78e0f3
Reviewed-on: https://gerrit.libreoffice.org/51189Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarBjörn Michaelsen <bjoern.michaelsen@libreoffice.org>
üst f59cf387
......@@ -146,7 +146,8 @@ class SW_DLLPUBLIC SwPageDesc : public SwModify
// FIXME epicycles growing here - page margins need to be stored differently
SwFrameFormat m_FirstMaster;
SwFrameFormat m_FirstLeft;
SwDepend m_Depend; ///< Because of grid alignment (Registerhaltigkeit).
sw::WriterMultiListener m_aDepends; ///< Because of grid alignment (Registerhaltigkeit).
mutable const SwTextFormatColl* m_pTextFormatColl;
SwPageDesc *m_pFollow;
sal_uInt16 m_nRegHeight; ///< Sentence spacing and fontascent of style.
sal_uInt16 m_nRegAscent; ///< For grid alignment (Registerhaltigkeit).
......@@ -177,7 +178,7 @@ class SW_DLLPUBLIC SwPageDesc : public SwModify
};
protected:
virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNewValue ) override;
virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
public:
const OUString& GetName() const { return m_StyleName; }
......
......@@ -45,7 +45,7 @@ SwPageDesc::SwPageDesc(const OUString& rName, SwFrameFormat *pFormat, SwDoc *con
, m_Left( pDoc->GetAttrPool(), rName, pFormat )
, m_FirstMaster( pDoc->GetAttrPool(), rName, pFormat )
, m_FirstLeft( pDoc->GetAttrPool(), rName, pFormat )
, m_Depend( this, nullptr )
, m_aDepends(*this)
, m_pFollow( this )
, m_nRegHeight( 0 )
, m_nRegAscent( 0 )
......@@ -65,7 +65,8 @@ SwPageDesc::SwPageDesc( const SwPageDesc &rCpy )
, m_Left( rCpy.GetLeft() )
, m_FirstMaster( rCpy.GetFirstMaster() )
, m_FirstLeft( rCpy.GetFirstLeft() )
, m_Depend( this, const_cast<SwModify*>(rCpy.m_Depend.GetRegisteredIn()) )
, m_aDepends(*this)
, m_pTextFormatColl(nullptr)
, m_pFollow( rCpy.m_pFollow )
, m_nRegHeight( rCpy.GetRegHeight() )
, m_nRegAscent( rCpy.GetRegAscent() )
......@@ -76,6 +77,11 @@ SwPageDesc::SwPageDesc( const SwPageDesc &rCpy )
, m_IsFootnoteInfo( rCpy.GetFootnoteInfo() )
, m_pdList( nullptr )
{
if(rCpy.m_pTextFormatColl && const_cast<sw::WriterMultiListener*>(&rCpy.m_aDepends)->IsListeningTo(rCpy.m_pTextFormatColl))
{
m_pTextFormatColl = rCpy.m_pTextFormatColl;
m_aDepends.StartListening(const_cast<SwTextFormatColl*>(m_pTextFormatColl));
}
}
SwPageDesc & SwPageDesc::operator = (const SwPageDesc & rSrc)
......@@ -86,6 +92,14 @@ SwPageDesc & SwPageDesc::operator = (const SwPageDesc & rSrc)
m_Left = rSrc.m_Left;
m_FirstMaster = rSrc.m_FirstMaster;
m_FirstLeft = rSrc.m_FirstLeft;
m_aDepends.EndListeningAll();
if(rSrc.m_pTextFormatColl && const_cast<sw::WriterMultiListener*>(&rSrc.m_aDepends)->IsListeningTo(rSrc.m_pTextFormatColl))
{
m_pTextFormatColl = rSrc.m_pTextFormatColl;
m_aDepends.StartListening(const_cast<SwTextFormatColl*>(m_pTextFormatColl));
}
else
m_pTextFormatColl = nullptr;
if (rSrc.m_pFollow == &rSrc)
m_pFollow = this;
......@@ -167,15 +181,13 @@ bool SwPageDesc::GetInfo( SfxPoolItem & rInfo ) const
}
/// set the style for the grid alignment
void SwPageDesc::SetRegisterFormatColl( const SwTextFormatColl* pFormat )
void SwPageDesc::SetRegisterFormatColl(const SwTextFormatColl* pFormat)
{
if( pFormat != GetRegisterFormatColl() )
if(pFormat != m_pTextFormatColl)
{
if( pFormat )
const_cast<SwTextFormatColl*>(pFormat)->Add(&m_Depend);
else
const_cast<SwTextFormatColl*>(GetRegisterFormatColl())->Remove(&m_Depend);
m_aDepends.EndListeningAll();
m_pTextFormatColl = pFormat;
m_aDepends.StartListening(const_cast<SwTextFormatColl*>(m_pTextFormatColl));
RegisterChange();
}
}
......@@ -183,8 +195,9 @@ void SwPageDesc::SetRegisterFormatColl( const SwTextFormatColl* pFormat )
/// retrieve the style for the grid alignment
const SwTextFormatColl* SwPageDesc::GetRegisterFormatColl() const
{
const SwModify* pReg = m_Depend.GetRegisteredIn();
return static_cast<const SwTextFormatColl*>(pReg);
if(!const_cast<sw::WriterMultiListener*>(&m_aDepends)->IsListeningTo(m_pTextFormatColl))
m_pTextFormatColl = nullptr;
return m_pTextFormatColl;
}
/// notify all affected page frames
......@@ -240,15 +253,28 @@ void SwPageDesc::RegisterChange()
}
/// special handling if the style of the grid alignment changes
void SwPageDesc::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
void SwPageDesc::SwClientNotify(const SwModify& rModify, const SfxHint& rHint)
{
const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
NotifyClients( pOld, pNew );
if ( (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich)
|| isCHRATR(nWhich) || (RES_PARATR_LINESPACING == nWhich) )
if(auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
{
RegisterChange();
const sal_uInt16 nWhich = pLegacyHint->m_pOld
? pLegacyHint->m_pOld->Which()
: pLegacyHint->m_pNew
? pLegacyHint->m_pNew->Which()
: 0;
NotifyClients(pLegacyHint->m_pOld, pLegacyHint->m_pNew);
if((RES_ATTRSET_CHG == nWhich)
|| (RES_FMT_CHG == nWhich)
|| isCHRATR(nWhich)
|| (RES_PARATR_LINESPACING == nWhich))
RegisterChange();
}
else if (auto pModifyChangedHint = dynamic_cast<const sw::ModifyChangedHint*>(&rHint))
{
if(m_pTextFormatColl == &rModify)
m_pTextFormatColl = static_cast<const SwTextFormatColl*>(pModifyChangedHint->m_pNew);
else
assert(false);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment