[Libreoffice-commits] core.git: sc/qa sd/inc sd/source
Noel Power
noel.power at suse.com
Mon Jun 24 13:41:13 PDT 2013
sc/qa/unit/subsequent_filters-test.cxx | 6 +--
sd/inc/drawdoc.hxx | 1
sd/inc/shapelist.hxx | 21 +++++--------
sd/source/core/drawdoc.cxx | 11 +++---
sd/source/core/drawdoc4.cxx | 10 ++++--
sd/source/core/sdpage.cxx | 39 +++++++++++++++---------
sd/source/core/sdpage2.cxx | 6 +--
sd/source/core/shapelist.cxx | 49 ++++++-------------------------
sd/source/ui/view/drviews1.cxx | 7 ++--
sd/source/ui/view/sdview5.cxx | 5 +--
sd/source/ui/view/viewoverlaymanager.cxx | 5 +--
11 files changed, 73 insertions(+), 87 deletions(-)
New commits:
commit ee51444ed1f7003dafc93c8181b5f8c1b0fd165b
Author: Noel Power <noel.power at suse.com>
Date: Mon Jun 24 21:40:32 2013 +0100
fix borders unit test ( test values have changed )
Change-Id: I1205eddf83781bef655abe4a1293c691bc5f1c41
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 17bfc32..f4aa9ec 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -766,19 +766,19 @@ void ScFiltersTest::testBorderXLS()
CPPUNIT_ASSERT(pRight);
CPPUNIT_ASSERT_EQUAL(pRight->GetBorderLineStyle(),
table::BorderLineStyle::SOLID);
- CPPUNIT_ASSERT_EQUAL(pRight->GetWidth(),4L);
+ CPPUNIT_ASSERT_EQUAL(pRight->GetWidth(),1L);
pDoc->GetBorderLines( 3, 5, 0, &pLeft, &pTop, &pRight, &pBottom );
CPPUNIT_ASSERT(pRight);
CPPUNIT_ASSERT_EQUAL(pRight->GetBorderLineStyle(),
table::BorderLineStyle::SOLID);
- CPPUNIT_ASSERT_EQUAL(pRight->GetWidth(),12L);
+ CPPUNIT_ASSERT_EQUAL(pRight->GetWidth(),20L);
pDoc->GetBorderLines( 5, 7, 0, &pLeft, &pTop, &pRight, &pBottom );
CPPUNIT_ASSERT(pRight);
CPPUNIT_ASSERT_EQUAL(pRight->GetBorderLineStyle(),
table::BorderLineStyle::SOLID);
- CPPUNIT_ASSERT_EQUAL(pRight->GetWidth(),16L);
+ CPPUNIT_ASSERT_EQUAL(pRight->GetWidth(),30L);
}
struct Border
{
diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index 77ac6b6..1d05eb3 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -145,6 +145,7 @@ private:
Timer* mpWorkStartupTimer;
Timer* mpOnlineSpellingTimer;
sd::ShapeList* mpOnlineSpellingList;
+ sd::ShapeList::const_iterator maShapeListIterator;
SvxSearchItem* mpOnlineSearchItem;
std::vector<sd::FrameView*> maFrameViewList;
SdCustomShowList* mpCustomShowList;
diff --git a/sd/inc/shapelist.hxx b/sd/inc/shapelist.hxx
index f828ebc6..2d759a2 100644
--- a/sd/inc/shapelist.hxx
+++ b/sd/inc/shapelist.hxx
@@ -29,6 +29,10 @@ namespace sd
class ShapeList : public sdr::ObjectUser
{
public:
+ /** const_iterator guarantee only that the list itself is not
+ altered. The objects referenced by the list are still mutable. */
+ typedef std::list< SdrObject* >::const_iterator const_iterator;
+
ShapeList();
virtual ~ShapeList();
@@ -48,26 +52,17 @@ namespace sd
/** @return true if given shape is part of this list */
bool hasShape( SdrObject& rObject ) const;
- /** returns the shape the internal iterator points to, or 0 if
- * the list end is reached. moves the internal iterator to the
- * next shape. */
- SdrObject* getNextShape();
-
- /** Sets the internal iterator to the shape at given index. */
- void seekShape( sal_uInt32 nIndex );
-
- /**
- */
- bool hasMore() const;
+ /** @return const_iterator pointing to the first element */
+ const_iterator cbegin() const;
- const std::list< SdrObject* >& getList() const { return maShapeList; }
+ /** @return const_iterator pointing to the list termination element */
+ const_iterator cend() const;
private:
virtual void ObjectInDestruction(const SdrObject& rObject);
typedef std::list< SdrObject* > ListImpl;
ListImpl maShapeList;
- ListImpl::iterator maIter;
};
}
diff --git a/sd/source/core/drawdoc.cxx b/sd/source/core/drawdoc.cxx
index aca4996..ed8d1fc 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -144,6 +144,7 @@ SdDrawDocument::SdDrawDocument(DocumentType eType, SfxObjectShell* pDrDocSh)
, mpWorkStartupTimer(NULL)
, mpOnlineSpellingTimer(NULL)
, mpOnlineSpellingList(NULL)
+, maShapeListIterator()
, mpOnlineSearchItem(NULL)
, mpCustomShowList(NULL)
, mpDocSh(static_cast< ::sd::DrawDocShell*>(pDrDocSh))
@@ -694,7 +695,7 @@ void SdDrawDocument::UpdateAllLinks()
*/
void SdDrawDocument::NewOrLoadCompleted( SdPage* pPage, SdStyleSheetPool* pSPool )
{
- sd::ShapeList& rPresentationShapes( pPage->GetPresentationShapeList() );
+ const sd::ShapeList& rPresentationShapes( pPage->GetPresentationShapeList() );
if(!rPresentationShapes.isEmpty())
{
// Create lists of title and outline styles
@@ -706,13 +707,13 @@ void SdDrawDocument::NewOrLoadCompleted( SdPage* pPage, SdStyleSheetPool* pSPool
SfxStyleSheet* pTitleSheet = (SfxStyleSheet*)pSPool->GetTitleSheet(aName);
- SdrObject* pObj = 0;
- rPresentationShapes.seekShape(0);
-
// Now look for title and outline text objects, then make those objects
// listeners.
- while( (pObj = rPresentationShapes.getNextShape()) )
+ for( ShapeList::const_iterator aIter (rPresentationShapes.cbegin() );
+ aIter != rPresentationShapes.cend(); ++aIter )
{
+ SdrObject* pObj = *aIter;
+
if (pObj->GetObjInventor() == SdrInventor)
{
OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject();
diff --git a/sd/source/core/drawdoc4.cxx b/sd/source/core/drawdoc4.cxx
index 6954913..6c90cac 100644
--- a/sd/source/core/drawdoc4.cxx
+++ b/sd/source/core/drawdoc4.cxx
@@ -755,6 +755,7 @@ void SdDrawDocument::StartOnlineSpelling(sal_Bool bForceSpelling)
pOutl->SetDefaultLanguage( meLanguage );
mpOnlineSpellingList = new ShapeList;
+ maShapeListIterator = mpOnlineSpellingList->cend();
sal_uInt16 nPage;
for ( nPage = 0; nPage < GetPageCount(); nPage++ )
@@ -769,7 +770,7 @@ void SdDrawDocument::StartOnlineSpelling(sal_Bool bForceSpelling)
FillOnlineSpellingList((SdPage*) GetMasterPage(nPage));
}
- mpOnlineSpellingList->seekShape(0);
+ maShapeListIterator = mpOnlineSpellingList->cbegin();
mpOnlineSpellingTimer = new Timer();
mpOnlineSpellingTimer->SetTimeoutHdl( LINK(this, SdDrawDocument, OnlineSpellingHdl) );
mpOnlineSpellingTimer->SetTimeout(250);
@@ -823,11 +824,14 @@ void SdDrawDocument::FillOnlineSpellingList(SdPage* pPage)
// OnlineSpelling in the background
IMPL_LINK_NOARG(SdDrawDocument, OnlineSpellingHdl)
{
+ bool bHasMore = maShapeListIterator != mpOnlineSpellingList->cend();
+
if (mpOnlineSpellingList!=NULL
- && ( !mbOnlineSpell || mpOnlineSpellingList->hasMore()))
+ && ( !mbOnlineSpell || bHasMore))
{
// Spell next object
- SdrObject* pObj = mpOnlineSpellingList->getNextShape();
+ SdrObject* pObj = *maShapeListIterator;
+ ++maShapeListIterator;
if (pObj)
{
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 5f70417..ed7e022 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -155,11 +155,11 @@ SdrObject* SdPage::GetPresObj(PresObjKind eObjKind, int nIndex, bool bFuzzySearc
// first sort all matching shapes with z-order
std::vector< SdrObject* > aMatches;
- SdrObject* pObj = 0;
- maPresentationShapeList.seekShape(0);
-
- while( (pObj = maPresentationShapeList.getNextShape()) )
+ for( ShapeList::const_iterator aIter( maPresentationShapeList.cbegin() );
+ aIter != maPresentationShapeList.cend(); ++aIter )
{
+ SdrObject* pObj = *aIter;
+
SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pObj);
if( pInfo )
{
@@ -1576,27 +1576,38 @@ void SdPage::SetAutoLayout(AutoLayout eLayout, sal_Bool bInit, sal_Bool bCreate
// now delete all empty presentation objects that are no longer used by the new layout
if( bInit )
{
- SdrObject* pObj = 0;
- maPresentationShapeList.seekShape(0);
+ std::list< SdrObject* > aRemoveList;
- while( (pObj = maPresentationShapeList.getNextShape()) )
+ for( ShapeList::const_iterator aIter = maPresentationShapeList.cbegin();
+ aIter != maPresentationShapeList.cend(); ++aIter )
{
+ SdrObject* pObj = *aIter;
+
if( aUsedPresentationObjects.count(pObj) == 0 )
{
if( pObj->IsEmptyPresObj() )
{
- if( bUndo )
- pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
-
- RemoveObject( pObj->GetOrdNum() );
-
- if( !bUndo )
- SdrObject::Free( pObj );
+ // remove the object now would invalidate the iterator and lead to a seg fault
+ aRemoveList.push_back(pObj);
}
/* #i108541# keep non empty pres obj as pres obj even if they are not part of the current layout */
}
}
+
+ for( std::list<SdrObject*>::iterator aIter = aRemoveList.begin();
+ aIter != aRemoveList.end(); ++aIter )
+ {
+ SdrObject* pObj = *aIter;
+
+ if( bUndo )
+ pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
+
+ RemoveObject( pObj->GetOrdNum() );
+
+ if( !bUndo )
+ SdrObject::Free( pObj );
+ }
}
}
diff --git a/sd/source/core/sdpage2.cxx b/sd/source/core/sdpage2.cxx
index 1b4f9ab..ff88f06 100644
--- a/sd/source/core/sdpage2.cxx
+++ b/sd/source/core/sdpage2.cxx
@@ -379,10 +379,8 @@ SdPage::SdPage(const SdPage& rSrcPage)
mePageKind = rSrcPage.mePageKind;
meAutoLayout = rSrcPage.meAutoLayout;
- // use shape list directly to preserve constness of rSrcPage
- const std::list< SdrObject* >& rShapeList = rSrcPage.maPresentationShapeList.getList();
- for( std::list< SdrObject* >::const_iterator aIter = rShapeList.begin();
- aIter != rShapeList.end(); ++aIter )
+ for( ShapeList::const_iterator aIter( rSrcPage.maPresentationShapeList.cbegin() );
+ aIter != rSrcPage.maPresentationShapeList.cend(); ++aIter )
{
SdrObject* pObj = *aIter;
InsertPresObj(GetObj(pObj->GetOrdNum()), rSrcPage.GetPresObjKind(pObj));
diff --git a/sd/source/core/shapelist.cxx b/sd/source/core/shapelist.cxx
index a265e9c..c3aedde 100644
--- a/sd/source/core/shapelist.cxx
+++ b/sd/source/core/shapelist.cxx
@@ -26,7 +26,6 @@ using namespace sd;
ShapeList::ShapeList()
{
- maIter = maShapeList.end();
}
ShapeList::~ShapeList()
@@ -55,14 +54,9 @@ SdrObject* ShapeList::removeShape( SdrObject& rObject )
ListImpl::iterator aIter( std::find( maShapeList.begin(), maShapeList.end(), &rObject ) );
if( aIter != maShapeList.end() )
{
- bool bIterErased = aIter == maIter;
-
(*aIter)->RemoveObjectUser(*this);
aIter = maShapeList.erase( aIter );
- if( bIterErased )
- maIter = aIter;
-
if( aIter != maShapeList.end() )
return (*aIter);
}
@@ -83,8 +77,6 @@ void ShapeList::clear()
ListImpl::iterator aIter( aShapeList.begin() );
while( aIter != aShapeList.end() )
(*aIter++)->RemoveObjectUser(*this);
-
- maIter = aShapeList.end();
}
/** returns true if this list is empty */
@@ -99,46 +91,27 @@ bool ShapeList::hasShape( SdrObject& rObject ) const
return std::find( maShapeList.begin(), maShapeList.end(), &rObject ) != maShapeList.end();
}
-void ShapeList::ObjectInDestruction(const SdrObject& rObject)
+ShapeList::const_iterator ShapeList::cbegin() const
{
- ListImpl::iterator aIter( std::find( maShapeList.begin(), maShapeList.end(), &rObject ) );
- if( aIter != maShapeList.end() )
- {
- bool bIterErased = aIter == maIter;
-
- aIter = maShapeList.erase( aIter );
+ return maShapeList.begin();
+}
- if( bIterErased )
- maIter = aIter;
- }
- else
- {
- OSL_FAIL("sd::ShapeList::ObjectInDestruction(), got a call from an unknown friend!");
- }
+ShapeList::const_iterator ShapeList::cend() const
+{
+ return maShapeList.end();
}
-SdrObject* ShapeList::getNextShape()
+void ShapeList::ObjectInDestruction(const SdrObject& rObject)
{
- if( maIter != maShapeList.end() )
+ ListImpl::iterator aIter( std::find( maShapeList.begin(), maShapeList.end(), &rObject ) );
+ if( aIter != maShapeList.end() )
{
- return (*maIter++);
+ maShapeList.erase( aIter );
}
else
{
- return 0;
+ OSL_FAIL("sd::ShapeList::ObjectInDestruction(), got a call from an unknown friend!");
}
}
-void ShapeList::seekShape( sal_uInt32 nIndex )
-{
- maIter = maShapeList.begin();
- while( nIndex-- && (maIter != maShapeList.end()) )
- maIter++;
-}
-
-bool ShapeList::hasMore() const
-{
- return maIter != maShapeList.end();
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx
index fe0f1dd..8ad0ce3 100644
--- a/sd/source/ui/view/drviews1.cxx
+++ b/sd/source/ui/view/drviews1.cxx
@@ -1059,11 +1059,12 @@ sal_Bool DrawViewShell::SwitchPage(sal_uInt16 nSelectedPage)
{
// set pages for all available handout presentation objects
sd::ShapeList& rShapeList = pMaster->GetPresentationShapeList();
- SdrObject* pObj = 0;
- rShapeList.seekShape(0);
- while( (pObj = rShapeList.getNextShape()) )
+ for( ShapeList::const_iterator aIter( rShapeList.cbegin() );
+ aIter != rShapeList.cend(); ++aIter )
{
+ SdrObject* pObj = *aIter;
+
if( pMaster->GetPresObjKind(pObj) == PRESOBJ_HANDOUT )
{
// #i105146# We want no content to be displayed for PK_HANDOUT,
diff --git a/sd/source/ui/view/sdview5.cxx b/sd/source/ui/view/sdview5.cxx
index 9023d02..3cb0829 100644
--- a/sd/source/ui/view/sdview5.cxx
+++ b/sd/source/ui/view/sdview5.cxx
@@ -101,9 +101,10 @@ SdrObject* View::GetEmptyPresentationObject( PresObjKind eKind )
// last try to find empty pres obj of multiple type
if( !pEmptyObj )
{
- const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList();
+ ShapeList& rShapeList = pPage->GetPresentationShapeList();
- for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); ++iter )
+ for( ShapeList::const_iterator iter( rShapeList.cbegin() );
+ iter != rShapeList.cend(); ++iter )
{
if( (*iter)->IsEmptyPresObj() && implIsMultiPresObj(pPage->GetPresObjKind(*iter)) )
{
diff --git a/sd/source/ui/view/viewoverlaymanager.cxx b/sd/source/ui/view/viewoverlaymanager.cxx
index e834999..f5c6bc6 100644
--- a/sd/source/ui/view/viewoverlaymanager.cxx
+++ b/sd/source/ui/view/viewoverlaymanager.cxx
@@ -546,9 +546,10 @@ bool ViewOverlayManager::CreateTags()
if( pPage && !pPage->IsMasterPage() && (pPage->GetPageKind() == PK_STANDARD) )
{
- const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList();
+ ShapeList& rShapeList = pPage->GetPresentationShapeList();
- for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); ++iter )
+ for( ShapeList::const_iterator iter( rShapeList.cbegin() );
+ iter != rShapeList.cend(); ++iter )
{
if( (*iter)->IsEmptyPresObj() && ((*iter)->GetObjIdentifier() == OBJ_OUTLINETEXT) && (mrBase.GetDrawView()->GetTextEditObject() != (*iter)) )
{
More information about the Libreoffice-commits
mailing list