Move IndexedStyleSheets to the Imp(l) class.
And remove #include <vector> which wasn't really used.
Change-Id: I05bbc7848c753795f859f80725be6332d8e5ce46
diff --git a/include/svl/style.hxx b/include/svl/style.hxx
index 78c1bc4..34ba57b 100644
--- a/include/svl/style.hxx
+++ b/include/svl/style.hxx
@@ -24,7 +24,6 @@
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <rtl/ref.hxx>
#include <vector>
#include <comphelper/weak.hxx>
#include <cppuhelper/implbase2.hxx>
#include <svl/svldllapi.h>
@@ -273,15 +272,6 @@ public:
* Not an actual public function. Do not call it from non-subclasses.
*/
SfxStyleSheetBase& Add( const SfxStyleSheetBase& );
private:
/** This member holds the indexed style sheets.
*
* @internal
* This member is private and not protected in order to have more control which style sheets are added
* where. Ideally, all calls which add/remove/change style sheets are done in the base class.
*/
boost::shared_ptr<svl::IndexedStyleSheets> mIndexedStyleSheets;
};
@@ -302,11 +292,7 @@ public:
virtual bool SetParent( const OUString& ) SAL_OVERRIDE;
protected:
SfxStyleSheet() // do not use! needed by MSVC at compile time to satisfy ImplInheritanceHelper2
: SfxStyleSheetBase(OUString("dummy"), NULL, SFX_STYLE_FAMILY_ALL, 0)
{
assert(false);
}
SfxStyleSheet(); // do not use! needed by MSVC at compile time to satisfy ImplInheritanceHelper2
virtual ~SfxStyleSheet();
};
diff --git a/svl/source/items/style.cxx b/svl/source/items/style.cxx
index 0f460c5..9d78b6c 100644
--- a/svl/source/items/style.cxx
+++ b/svl/source/items/style.cxx
@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <svl/style.hxx>
#include <com/sun/star/lang/XComponent.hpp>
#include <tools/tenccvt.hxx>
@@ -29,7 +31,6 @@
#include <svl/itempool.hxx>
#include <svl/IndexedStyleSheets.hxx>
#include <svl/itemiter.hxx>
#include <svl/style.hxx>
#include <unotools/syslocale.hxx>
#include <algorithm>
#include <comphelper/servicehelper.hxx>
@@ -80,10 +81,21 @@ SfxStyleSheetHint::SfxStyleSheetHint
{}
class SfxStyleSheetBasePool_Impl
class SfxStyleSheetBasePool_Impl : boost::noncopyable
{
public:
SfxStyleSheetIteratorPtr pIter;
/** This member holds the indexed style sheets.
*
* @internal
* This member is private and not protected in order to have more control which style sheets are added
* where. Ideally, all calls which add/remove/change style sheets are done in the base class.
*/
boost::shared_ptr<svl::IndexedStyleSheets> mpIndexedStyleSheets;
SfxStyleSheetBasePool_Impl() :
mpIndexedStyleSheets(new svl::IndexedStyleSheets) {}
};
@@ -433,16 +445,16 @@ sal_uInt16 SfxStyleSheetIterator::Count()
sal_uInt16 n = 0;
if( IsTrivialSearch())
{
n = (sal_uInt16) pBasePool->mIndexedStyleSheets->GetNumberOfStyleSheets();
n = (sal_uInt16) pBasePool->pImp->mpIndexedStyleSheets->GetNumberOfStyleSheets();
}
else if(nMask == SFXSTYLEBIT_ALL)
{
n = static_cast<sal_uInt16>(pBasePool->mIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily).size());
n = static_cast<sal_uInt16>(pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily).size());
}
else
{
DoesStyleMatchStyleSheetPredicate predicate(this);
n = pBasePool->mIndexedStyleSheets->GetNumberOfStyleSheetsWithPredicate(predicate);
n = pBasePool->pImp->mpIndexedStyleSheets->GetNumberOfStyleSheetsWithPredicate(predicate);
}
return n;
}
@@ -452,14 +464,14 @@ SfxStyleSheetBase* SfxStyleSheetIterator::operator[](sal_uInt16 nIdx)
SfxStyleSheetBase* retval = NULL;
if( IsTrivialSearch())
{
retval = pBasePool->mIndexedStyleSheets->GetStyleSheetByPosition(nIdx).get();
retval = pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetByPosition(nIdx).get();
nAktPosition = nIdx;
}
else if(nMask == SFXSTYLEBIT_ALL)
{
rtl::Reference< SfxStyleSheetBase > ref =
pBasePool->mIndexedStyleSheets->GetStyleSheetByPosition(
pBasePool->mIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily).at(nIdx))
pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetByPosition(
pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily).at(nIdx))
;
retval = ref.get();
nAktPosition = nIdx;
@@ -468,10 +480,10 @@ SfxStyleSheetBase* SfxStyleSheetIterator::operator[](sal_uInt16 nIdx)
{
DoesStyleMatchStyleSheetPredicate predicate(this);
rtl::Reference< SfxStyleSheetBase > ref =
pBasePool->mIndexedStyleSheets->GetNthStyleSheetThatMatchesPredicate(nIdx, predicate);
pBasePool->pImp->mpIndexedStyleSheets->GetNthStyleSheetThatMatchesPredicate(nIdx, predicate);
if (ref.get() != NULL)
{
nAktPosition = pBasePool->mIndexedStyleSheets->FindStyleSheetPosition(*ref);
nAktPosition = pBasePool->pImp->mpIndexedStyleSheets->FindStyleSheetPosition(*ref);
retval = ref.get();
}
}
@@ -501,34 +513,35 @@ SfxStyleSheetBase* SfxStyleSheetIterator::Next()
if ( IsTrivialSearch() )
{
unsigned nStyleSheets = pBasePool->mIndexedStyleSheets->GetNumberOfStyleSheets();
unsigned nStyleSheets = pBasePool->pImp->mpIndexedStyleSheets->GetNumberOfStyleSheets();
unsigned newPosition = nAktPosition +1;
if (nStyleSheets > newPosition)
{
nAktPosition = newPosition;
retval = pBasePool->mIndexedStyleSheets->GetStyleSheetByPosition(nAktPosition).get();
retval = pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetByPosition(nAktPosition).get();
}
}
else if(nMask == SFXSTYLEBIT_ALL)
{
unsigned newPosition = nAktPosition +1;
const std::vector<unsigned>& familyVector = pBasePool->mIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily);
const std::vector<unsigned>& familyVector =
pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetPositionsByFamily(nSearchFamily);
if (familyVector.size() > newPosition)
{
nAktPosition = newPosition;
unsigned stylePosition = familyVector.at(newPosition);
retval = pBasePool->mIndexedStyleSheets->GetStyleSheetByPosition(stylePosition).get();
retval = pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetByPosition(stylePosition).get();
}
}
else
{
DoesStyleMatchStyleSheetPredicate predicate(this);
rtl::Reference< SfxStyleSheetBase > ref =
pBasePool->mIndexedStyleSheets->GetNthStyleSheetThatMatchesPredicate(
pBasePool->pImp->mpIndexedStyleSheets->GetNthStyleSheetThatMatchesPredicate(
0, predicate, nAktPosition+1);
retval = ref.get();
if (retval != NULL) {
nAktPosition = pBasePool->mIndexedStyleSheets->FindStyleSheetPosition(*ref);
nAktPosition = pBasePool->pImp->mpIndexedStyleSheets->FindStyleSheetPosition(*ref);
}
}
pAktStyle = retval;
@@ -540,14 +553,14 @@ SfxStyleSheetBase* SfxStyleSheetIterator::Find(const OUString& rStr)
DoesStyleMatchStyleSheetPredicate predicate(this);
std::vector<unsigned> positions =
pBasePool->mIndexedStyleSheets->FindPositionsByNameAndPredicate(rStr, predicate,
pBasePool->pImp->mpIndexedStyleSheets->FindPositionsByNameAndPredicate(rStr, predicate,
svl::IndexedStyleSheets::RETURN_FIRST);
if (positions.empty()) {
return NULL;
}
unsigned pos = positions.front();
SfxStyleSheetBase* pStyle = pBasePool->mIndexedStyleSheets->GetStyleSheetByPosition(pos).get();
SfxStyleSheetBase* pStyle = pBasePool->pImp->mpIndexedStyleSheets->GetStyleSheetByPosition(pos).get();
nAktPosition = pos;
pAktStyle = pStyle;
return pAktStyle;
@@ -583,34 +596,31 @@ SfxStyleSheetIterator& SfxStyleSheetBasePool::GetIterator_Impl()
return *pImp->pIter;
}
SfxStyleSheetBasePool::SfxStyleSheetBasePool( SfxItemPool& r )
: aAppName(r.GetName())
, rPool(r)
, nSearchFamily(SFX_STYLE_FAMILY_PARA)
, nMask(SFXSTYLEBIT_ALL)
, mIndexedStyleSheets(new svl::IndexedStyleSheets)
SfxStyleSheetBasePool::SfxStyleSheetBasePool( SfxItemPool& r ) :
pImp(new SfxStyleSheetBasePool_Impl),
aAppName(r.GetName()),
rPool(r),
nSearchFamily(SFX_STYLE_FAMILY_PARA),
nMask(SFXSTYLEBIT_ALL)
{
#ifdef DBG_UTIL
aDbgStyleSheetReferences.mnPools++;
#endif
pImp = new SfxStyleSheetBasePool_Impl;
}
SfxStyleSheetBasePool::SfxStyleSheetBasePool( const SfxStyleSheetBasePool& r )
: SfxBroadcaster( r )
, comphelper::OWeakTypeObject()
, aAppName(r.aAppName)
, rPool(r.rPool)
, nSearchFamily(r.nSearchFamily)
, nMask( r.nMask )
, mIndexedStyleSheets(new svl::IndexedStyleSheets)
SfxStyleSheetBasePool::SfxStyleSheetBasePool( const SfxStyleSheetBasePool& r ) :
SfxBroadcaster( r ),
comphelper::OWeakTypeObject(),
pImp(new SfxStyleSheetBasePool_Impl),
aAppName(r.aAppName),
rPool(r.rPool),
nSearchFamily(r.nSearchFamily),
nMask( r.nMask )
{
#ifdef DBG_UTIL
aDbgStyleSheetReferences.mnPools++;
#endif
pImp = new SfxStyleSheetBasePool_Impl;
*this += r;
}
@@ -696,7 +706,7 @@ SfxStyleSheetBase& SfxStyleSheetBasePool::Add( const SfxStyleSheetBase& rSheet )
Remove( pOld );
}
rtl::Reference< SfxStyleSheetBase > xNew( Create( rSheet ) );
mIndexedStyleSheets->AddStyleSheet(xNew);
pImp->mpIndexedStyleSheets->AddStyleSheet(xNew);
Broadcast( SfxStyleSheetHint( SFX_STYLESHEET_CHANGED, *xNew.get() ) );
return *xNew.get();
}
@@ -731,7 +741,7 @@ SfxStyleSheetBasePool& SfxStyleSheetBasePool::operator+=( const SfxStyleSheetBas
if( &r != this )
{
AddStyleSheetCallback callback(this);
mIndexedStyleSheets->ApplyToAllStyleSheets(callback);
pImp->mpIndexedStyleSheets->ApplyToAllStyleSheets(callback);
}
return *this;
}
@@ -770,7 +780,7 @@ void SfxStyleSheetBasePool::Remove( SfxStyleSheetBase* p )
{
// Reference to keep p alive until after Broadcast call!
rtl::Reference<SfxStyleSheetBase> xP(p);
bool bWasRemoved = mIndexedStyleSheets->RemoveStyleSheet(xP);
bool bWasRemoved = pImp->mpIndexedStyleSheets->RemoveStyleSheet(xP);
if( bWasRemoved )
{
// Adapt all styles which have this style as parant
@@ -844,7 +854,7 @@ struct StyleSheetDisposerFunctor SAL_FINAL : public svl::StyleSheetDisposer
void SfxStyleSheetBasePool::Clear()
{
StyleSheetDisposerFunctor cleanup(this);
mIndexedStyleSheets->Clear(cleanup);
pImp->mpIndexedStyleSheets->Clear(cleanup);
}
void SfxStyleSheetBasePool::ChangeParent(const OUString& rOld,
@@ -874,8 +884,11 @@ void SfxStyleSheetBase::Store( SvStream& )
{
}
SfxStyleSheet::SfxStyleSheet() // do not use! needed by MSVC at compile time to satisfy ImplInheritanceHelper2
: SfxStyleSheetBase(OUString("dummy"), NULL, SFX_STYLE_FAMILY_ALL, 0)
{
assert(false);
}
SfxStyleSheet::SfxStyleSheet(const OUString &rName,
const SfxStyleSheetBasePool& r_Pool,
@@ -990,7 +1003,7 @@ SfxUnoStyleSheet* SfxUnoStyleSheet::getUnoStyleSheet( const ::com::sun::star::un
void
SfxStyleSheetBasePool::StoreStyleSheet(rtl::Reference< SfxStyleSheetBase > xStyle)
{
mIndexedStyleSheets->AddStyleSheet(xStyle);
pImp->mpIndexedStyleSheets->AddStyleSheet(xStyle);
}
namespace
@@ -1006,19 +1019,19 @@ const ::com::sun::star::uno::Sequence< ::sal_Int8 >& SfxUnoStyleSheet::getIdenti
void
SfxStyleSheetBasePool::Reindex()
{
mIndexedStyleSheets->Reindex();
pImp->mpIndexedStyleSheets->Reindex();
}
const svl::IndexedStyleSheets&
SfxStyleSheetBasePool::GetIndexedStyleSheets() const
{
return *mIndexedStyleSheets;
return *pImp->mpIndexedStyleSheets;
}
rtl::Reference<SfxStyleSheetBase>
SfxStyleSheetBasePool::GetStyleSheetByPositionInIndex(unsigned pos)
{
return mIndexedStyleSheets->GetStyleSheetByPosition(pos);
return pImp->mpIndexedStyleSheets->GetStyleSheetByPosition(pos);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */