diff options
author | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2015-03-23 23:12:39 +0100 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2015-03-24 15:59:39 +0100 |
commit | a65e98af992d966ef0a9c4b2f197ab2893fcf47e (patch) | |
tree | fc81600091dab16fc0989eb04a67ccfbe86ef162 | |
parent | 1e120b0bf6968b39f2a1e834489f021ebdb27e33 (diff) |
Revert "Revert "make ClientIteratorBase only know about WriterListener""
This reverts commit 5fb7f222f51b93a9dfffa0fe211a5b3e0c83757e.
Conflicts:
sw/inc/calbck.hxx
Change-Id: If25df4d2bbb77328cbb59c003d56eb0f88c73c67
-rw-r--r-- | sw/inc/calbck.hxx | 39 | ||||
-rw-r--r-- | sw/source/core/fields/expfld.cxx | 2 |
2 files changed, 21 insertions, 20 deletions
diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx index c5f83bced7db..f97774d79935 100644 --- a/sw/inc/calbck.hxx +++ b/sw/inc/calbck.hxx @@ -98,6 +98,7 @@ class SW_DLLPUBLIC SwClient : ::sw::WriterListener // avoids making the details of the linked list and the callback method public friend class SwModify; friend class sw::ClientIteratorBase; + template<typename E, typename S> friend class SwIterator; SwModify *pRegisteredIn; ///< event source @@ -192,7 +193,7 @@ public: void Add(SwClient *pDepend); SwClient* Remove(SwClient *pDepend); - const SwClient* GetDepends() const { return static_cast<SwClient*>(pRoot); } + const sw::WriterListener* GetDepends() const { return pRoot; } // get information about attribute virtual bool GetInfo( SfxPoolItem& ) const SAL_OVERRIDE; @@ -250,11 +251,11 @@ namespace sw protected: const SwModify& m_rRoot; // the current object in an iteration - SwClient* m_pCurrent; + WriterListener* m_pCurrent; // in case the current object is already removed, the next object in the list // is marked down to become the current object in the next step // this is necessary because iteration requires access to members of the current object - SwClient* m_pPosition; + WriterListener* m_pPosition; static SW_DLLPUBLIC ClientIteratorBase* our_pClientIters; ClientIteratorBase( const SwModify& rModify ) @@ -262,15 +263,15 @@ namespace sw { MoveTo(our_pClientIters); our_pClientIters = this; - m_pCurrent = m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends()); + m_pCurrent = m_pPosition = const_cast<WriterListener*>(m_rRoot.GetDepends()); } - SwClient* GetLeftOfPos() { return static_cast<SwClient*>(m_pPosition->m_pLeft); } - SwClient* GetRightOfPos() { return static_cast<SwClient*>(m_pPosition->m_pRight); } - SwClient* GoStart() + WriterListener* GetLeftOfPos() { return m_pPosition->m_pLeft; } + WriterListener* GetRightOfPos() { return m_pPosition->m_pRight; } + WriterListener* GoStart() { - if((m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends()))) + if((m_pPosition = const_cast<WriterListener*>(m_rRoot.GetDepends()))) while( m_pPosition->m_pLeft ) - m_pPosition = static_cast<SwClient*>(m_pPosition->m_pLeft); + m_pPosition = m_pPosition->m_pLeft; return m_pCurrent = m_pPosition; } ~ClientIteratorBase() SAL_OVERRIDE @@ -285,7 +286,7 @@ namespace sw // SwModify::Add() asserts this bool IsChanged() const { return m_pPosition != m_pCurrent; } // ensures the iterator to point at a current client - SwClient* Sync() { return m_pCurrent = m_pPosition; } + WriterListener* Sync() { return m_pCurrent = m_pPosition; } }; } @@ -306,12 +307,12 @@ public: TElementType* Last() { if(!m_pPosition) - m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends()); + m_pPosition = const_cast<sw::WriterListener*>(m_rRoot.GetDepends()); if(!m_pPosition) return static_cast<TElementType*>(Sync()); while(GetRightOfPos()) m_pPosition = GetRightOfPos(); - if(m_pPosition->IsA(TYPE(TElementType))) + if(static_cast<SwClient*>(m_pPosition)->IsA(TYPE(TElementType))) return static_cast<TElementType*>(Sync()); return Previous(); } @@ -319,14 +320,14 @@ public: { if(!IsChanged()) m_pPosition = GetRightOfPos(); - while(m_pPosition && !m_pPosition->IsA( TYPE(TElementType) ) ) + while(m_pPosition && !static_cast<SwClient*>(m_pPosition)->IsA( TYPE(TElementType) ) ) m_pPosition = GetRightOfPos(); return static_cast<TElementType*>(Sync()); } TElementType* Previous() { m_pPosition = GetLeftOfPos(); - while(m_pPosition && !m_pPosition->IsA( TYPE(TElementType) ) ) + while(m_pPosition && !static_cast<SwClient*>(m_pPosition)->IsA( TYPE(TElementType) ) ) m_pPosition = GetLeftOfPos(); return static_cast<TElementType*>(Sync()); } @@ -339,27 +340,27 @@ template< typename TSource > class SwIterator<SwClient, TSource> SAL_FINAL : pri public: SwIterator( const TSource& rSrc ) : sw::ClientIteratorBase(rSrc) {} SwClient* First() - { return GoStart(); } + { return static_cast<SwClient*>(GoStart()); } SwClient* Last() { if(!m_pPosition) - m_pPosition = const_cast<SwClient*>(m_rRoot.GetDepends()); + m_pPosition = const_cast<sw::WriterListener*>(m_rRoot.GetDepends()); if(!m_pPosition) return m_pCurrent = nullptr; while(GetRightOfPos()) m_pPosition = GetRightOfPos(); - return Sync(); + return static_cast<SwClient*>(Sync()); } SwClient* Next() { if(!IsChanged()) m_pPosition = GetRightOfPos(); - return Sync(); + return static_cast<SwClient*>(Sync()); } SwClient* Previous() { m_pPosition = GetLeftOfPos(); - return Sync(); + return static_cast<SwClient*>(Sync()); } using sw::ClientIteratorBase::IsChanged; }; diff --git a/sw/source/core/fields/expfld.cxx b/sw/source/core/fields/expfld.cxx index 24ba569756fd..80b9acecc5fe 100644 --- a/sw/source/core/fields/expfld.cxx +++ b/sw/source/core/fields/expfld.cxx @@ -528,7 +528,7 @@ sal_uLong SwSetExpFieldType::GetSeqFormat() if( !GetDepends() ) return SVX_NUM_ARABIC; - const SwField *pFld = static_cast<const SwFmtFld*>(GetDepends())->GetField(); + const SwField *pFld = SwIterator<SwFmtFld,SwSetExpFieldType>(*this).First()->GetField(); return pFld->GetFormat(); } |