Kaydet (Commit) e7c96f3e authored tarafından Michael Stahl's avatar Michael Stahl

i#107771: sw: make SwXReferenceMark a client of its format poolitem

In other words, stop registering at SwDoc's "UnoCallBack"

Change-Id: I9e08966cf8e2d2a373867d81549c8887f73993c8
üst b684cd4b
...@@ -22,11 +22,15 @@ ...@@ -22,11 +22,15 @@
#include <rtl/ustring.hxx> #include <rtl/ustring.hxx>
#include <svl/poolitem.hxx> #include <svl/poolitem.hxx>
#include <calbck.hxx>
class SwTxtRefMark; class SwTxtRefMark;
// ATT_REFMARK // ATT_REFMARK
class SwFmtRefMark : public SfxPoolItem class SwFmtRefMark
: public SfxPoolItem
, public SwModify
{ {
friend class SwTxtRefMark; friend class SwTxtRefMark;
SwTxtRefMark* pTxtAttr; SwTxtRefMark* pTxtAttr;
...@@ -44,6 +48,8 @@ public: ...@@ -44,6 +48,8 @@ public:
virtual bool operator==( const SfxPoolItem& ) const SAL_OVERRIDE; virtual bool operator==( const SfxPoolItem& ) const SAL_OVERRIDE;
virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const SAL_OVERRIDE; virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const SAL_OVERRIDE;
void InvalidateRefMark();
const SwTxtRefMark *GetTxtRefMark() const { return pTxtAttr; } const SwTxtRefMark *GetTxtRefMark() const { return pTxtAttr; }
SwTxtRefMark *GetTxtRefMark() { return pTxtAttr; } SwTxtRefMark *GetTxtRefMark() { return pTxtAttr; }
......
...@@ -330,7 +330,6 @@ RES_MSG_BEGIN = RES_FMT_END, ...@@ -330,7 +330,6 @@ RES_MSG_BEGIN = RES_FMT_END,
RES_FINDNEARESTNODE, RES_FINDNEARESTNODE,
RES_CONTENT_VISIBLE, RES_CONTENT_VISIBLE,
RES_FOOTNOTE_DELETED, RES_FOOTNOTE_DELETED,
RES_REFMARK_DELETED,
RES_GRAPHIC_SWAPIN, RES_GRAPHIC_SWAPIN,
RES_FIELD_DELETED, RES_FIELD_DELETED,
RES_NAME_CHANGED, RES_NAME_CHANGED,
......
...@@ -174,7 +174,6 @@ void SwModify::NotifyClients( const SfxPoolItem* pOldValue, const SfxPoolItem* p ...@@ -174,7 +174,6 @@ void SwModify::NotifyClients( const SfxPoolItem* pOldValue, const SfxPoolItem* p
break; break;
case RES_FOOTNOTE_DELETED: case RES_FOOTNOTE_DELETED:
case RES_REFMARK_DELETED:
case RES_FIELD_DELETED: case RES_FIELD_DELETED:
bLockClientList = false; bLockClientList = false;
break; break;
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <frame.hxx> #include <frame.hxx>
#include <txtatr.hxx> #include <txtatr.hxx>
#include <tox.hxx> #include <tox.hxx>
#include <fmtrfmrk.hxx>
#include <docsh.hxx> #include <docsh.hxx>
#include <svl/smplhint.hxx> #include <svl/smplhint.hxx>
...@@ -303,7 +304,8 @@ void SwNodes::ChgNode( SwNodeIndex& rDelPos, sal_uLong nSz, ...@@ -303,7 +304,8 @@ void SwNodes::ChgNode( SwNodeIndex& rDelPos, sal_uLong nSz,
break; break;
case RES_TXTATR_REFMARK: case RES_TXTATR_REFMARK:
nDelMsg = RES_REFMARK_DELETED; static_cast<SwFmtRefMark&>(pAttr->GetAttr())
.InvalidateRefMark();
break; break;
case RES_TXTATR_META: case RES_TXTATR_META:
......
...@@ -55,10 +55,10 @@ private: ...@@ -55,10 +55,10 @@ private:
public: public:
SwXReferenceMark(SwDoc *const pDoc, const SwFmtRefMark *const pMark); SwXReferenceMark(SwDoc *const pDoc, SwFmtRefMark *const pMark);
static SwXReferenceMark * static SwXReferenceMark *
CreateXReferenceMark(SwDoc & rDoc, SwFmtRefMark const& rMarkFmt); CreateXReferenceMark(SwDoc & rDoc, SwFmtRefMark & rMarkFmt);
/// may return 0 /// may return 0
static SwXReferenceMark * static SwXReferenceMark *
GetReferenceMark(SwModify const& rUnoCB, SwFmtRefMark const& rMarkFmt); GetReferenceMark(SwModify const& rUnoCB, SwFmtRefMark const& rMarkFmt);
......
...@@ -17,9 +17,11 @@ ...@@ -17,9 +17,11 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 . * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/ */
#include <fmtrfmrk.hxx>
#include <hintids.hxx> #include <hintids.hxx>
#include <hints.hxx>
#include <txtrfmrk.hxx> #include <txtrfmrk.hxx>
#include <fmtrfmrk.hxx>
#include <swfont.hxx> #include <swfont.hxx>
SwFmtRefMark::~SwFmtRefMark( ) SwFmtRefMark::~SwFmtRefMark( )
...@@ -27,16 +29,18 @@ SwFmtRefMark::~SwFmtRefMark( ) ...@@ -27,16 +29,18 @@ SwFmtRefMark::~SwFmtRefMark( )
} }
SwFmtRefMark::SwFmtRefMark( const OUString& rName ) SwFmtRefMark::SwFmtRefMark( const OUString& rName )
: SfxPoolItem( RES_TXTATR_REFMARK ), : SfxPoolItem(RES_TXTATR_REFMARK)
pTxtAttr( 0 ), , SwModify(0)
aRefName( rName ) , pTxtAttr(0)
, aRefName(rName)
{ {
} }
SwFmtRefMark::SwFmtRefMark( const SwFmtRefMark& rAttr ) SwFmtRefMark::SwFmtRefMark( const SwFmtRefMark& rAttr )
: SfxPoolItem( RES_TXTATR_REFMARK ), : SfxPoolItem(RES_TXTATR_REFMARK)
pTxtAttr( 0 ), , SwModify(0)
aRefName( rAttr.aRefName ) , pTxtAttr(0)
, aRefName(rAttr.aRefName)
{ {
} }
...@@ -51,6 +55,13 @@ SfxPoolItem* SwFmtRefMark::Clone( SfxItemPool* ) const ...@@ -51,6 +55,13 @@ SfxPoolItem* SwFmtRefMark::Clone( SfxItemPool* ) const
return new SwFmtRefMark( *this ); return new SwFmtRefMark( *this );
} }
void SwFmtRefMark::InvalidateRefMark()
{
SwPtrMsgPoolItem const item(RES_REMOVE_UNO_OBJECT,
&static_cast<SwModify&>(*this)); // cast to base class (void*)
NotifyClients(&item, &item);
}
// Attribut fuer Inhalts-/Positions-Referenzen im Text // Attribut fuer Inhalts-/Positions-Referenzen im Text
SwTxtRefMark::SwTxtRefMark( SwFmtRefMark& rAttr, SwTxtRefMark::SwTxtRefMark( SwFmtRefMark& rAttr,
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <txtinet.hxx> #include <txtinet.hxx>
#include <txtflcnt.hxx> #include <txtflcnt.hxx>
#include <fmtfld.hxx> #include <fmtfld.hxx>
#include <fmtrfmrk.hxx>
#include <fmtanchr.hxx> #include <fmtanchr.hxx>
#include <fmtinfmt.hxx> #include <fmtinfmt.hxx>
#include <txtatr.hxx> #include <txtatr.hxx>
...@@ -1185,7 +1186,7 @@ void SwTxtNode::DestroyAttr( SwTxtAttr* pAttr ) ...@@ -1185,7 +1186,7 @@ void SwTxtNode::DestroyAttr( SwTxtAttr* pAttr )
break; break;
case RES_TXTATR_REFMARK: case RES_TXTATR_REFMARK:
nDelMsg = RES_REFMARK_DELETED; static_cast<SwFmtRefMark&>(pAttr->GetAttr()).InvalidateRefMark();
break; break;
case RES_TXTATR_META: case RES_TXTATR_META:
......
...@@ -1988,7 +1988,8 @@ SwXReferenceMark* SwXReferenceMarks::GetObject( SwDoc* pDoc, const SwFmtRefMark* ...@@ -1988,7 +1988,8 @@ SwXReferenceMark* SwXReferenceMarks::GetObject( SwDoc* pDoc, const SwFmtRefMark*
{ {
SolarMutexGuard aGuard; SolarMutexGuard aGuard;
return SwXReferenceMark::CreateXReferenceMark(*pDoc, *pMark); return SwXReferenceMark::CreateXReferenceMark(
*pDoc, *const_cast<SwFmtRefMark*>(pMark));
} }
void SwUnoCollection::Invalidate() void SwUnoCollection::Invalidate()
......
...@@ -491,8 +491,8 @@ lcl_CreateRefMarkPortion( ...@@ -491,8 +491,8 @@ lcl_CreateRefMarkPortion(
const SwTxtAttr & rAttr, const bool bEnd) const SwTxtAttr & rAttr, const bool bEnd)
{ {
SwDoc* pDoc = pUnoCrsr->GetDoc(); SwDoc* pDoc = pUnoCrsr->GetDoc();
const SwFmtRefMark& rRefMark = SwFmtRefMark& rRefMark = const_cast<SwFmtRefMark&>(
static_cast<const SwFmtRefMark&>(rAttr.GetAttr()); static_cast<const SwFmtRefMark&>(rAttr.GetAttr()));
Reference<XTextContent> xContent; Reference<XTextContent> xContent;
if (!xContent.is()) if (!xContent.is())
{ {
......
...@@ -53,8 +53,8 @@ public: ...@@ -53,8 +53,8 @@ public:
OUString m_sMarkName; OUString m_sMarkName;
Impl( SwXReferenceMark & rThis, Impl( SwXReferenceMark & rThis,
SwDoc *const pDoc, SwFmtRefMark const*const pRefMark) SwDoc *const pDoc, SwFmtRefMark *const pRefMark)
: SwClient((pDoc) ? pDoc->GetUnoCallBack() : 0) : SwClient(pRefMark)
, m_rThis(rThis) , m_rThis(rThis)
, m_EventListeners(m_Mutex) , m_EventListeners(m_Mutex)
, m_bIsDescriptor(0 == pRefMark) , m_bIsDescriptor(0 == pRefMark)
...@@ -96,23 +96,10 @@ void SwXReferenceMark::Impl::Modify( const SfxPoolItem* pOld, const SfxPoolItem ...@@ -96,23 +96,10 @@ void SwXReferenceMark::Impl::Modify( const SfxPoolItem* pOld, const SfxPoolItem
{ {
Invalidate(); Invalidate();
} }
else if (pOld)
{
switch (pOld->Which())
{
case RES_REFMARK_DELETED:
if (static_cast<const void*>(m_pMarkFmt) ==
static_cast<const SwPtrMsgPoolItem *>(pOld)->pObject)
{
Invalidate();
}
break;
}
}
} }
SwXReferenceMark::SwXReferenceMark( SwXReferenceMark::SwXReferenceMark(
SwDoc *const pDoc, SwFmtRefMark const*const pRefMark) SwDoc *const pDoc, SwFmtRefMark *const pRefMark)
: m_pImpl( new SwXReferenceMark::Impl(*this, pDoc, pRefMark) ) : m_pImpl( new SwXReferenceMark::Impl(*this, pDoc, pRefMark) )
{ {
} }
...@@ -133,10 +120,10 @@ SwXReferenceMark::GetReferenceMark( ...@@ -133,10 +120,10 @@ SwXReferenceMark::GetReferenceMark(
SwXReferenceMark * SwXReferenceMark *
SwXReferenceMark::CreateXReferenceMark( SwXReferenceMark::CreateXReferenceMark(
SwDoc & rDoc, SwFmtRefMark const& rMarkFmt) SwDoc & rDoc, SwFmtRefMark & rMarkFmt)
{ {
SwXReferenceMark *const pXMark( SwXReferenceMark *const pXMark(
GetReferenceMark(*rDoc.GetUnoCallBack(), rMarkFmt) ); GetReferenceMark(rMarkFmt, rMarkFmt) );
return (pXMark) return (pXMark)
? pXMark ? pXMark
: new SwXReferenceMark(&rDoc, &rMarkFmt); : new SwXReferenceMark(&rDoc, &rMarkFmt);
...@@ -266,7 +253,7 @@ void SwXReferenceMark::Impl::InsertRefMark(SwPaM& rPam, ...@@ -266,7 +253,7 @@ void SwXReferenceMark::Impl::InsertRefMark(SwPaM& rPam,
m_pMarkFmt = &pTxtAttr->GetRefMark(); m_pMarkFmt = &pTxtAttr->GetRefMark();
pDoc2->GetUnoCallBack()->Add(this); const_cast<SwFmtRefMark*>(m_pMarkFmt)->Add(this);
} }
void SAL_CALL void SAL_CALL
......
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