[Libreoffice-commits] core.git: sd/inc sd/source
Noel Power
noel.power at suse.com
Tue Jun 25 03:03:41 PDT 2013
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 +--
10 files changed, 84 insertions(+), 70 deletions(-)
New commits:
commit 90ffe25cdda7f7922ea7def4a5bf99ff1671b0d3
Author: Noel Power <noel.power at suse.com>
Date: Tue Jun 25 11:01:52 2013 +0100
remove unwanted files added with ee51444ed1f7003dafc93c8181b5f8c1b0fd165b
<sigh> added some files that were part of a patch that I was testing
were not intended as part of commit
Change-Id: I34ed7f55de28fa09739c0dd8d5084824de676477
diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index 1d05eb3..77ac6b6 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -145,7 +145,6 @@ 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 2d759a2..f828ebc6 100644
--- a/sd/inc/shapelist.hxx
+++ b/sd/inc/shapelist.hxx
@@ -29,10 +29,6 @@ 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();
@@ -52,17 +48,26 @@ namespace sd
/** @return true if given shape is part of this list */
bool hasShape( SdrObject& rObject ) const;
- /** @return const_iterator pointing to the first element */
- const_iterator cbegin() 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 list termination element */
- const_iterator cend() const;
+ const std::list< SdrObject* >& getList() const { return maShapeList; }
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 ed8d1fc..aca4996 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -144,7 +144,6 @@ SdDrawDocument::SdDrawDocument(DocumentType eType, SfxObjectShell* pDrDocSh)
, mpWorkStartupTimer(NULL)
, mpOnlineSpellingTimer(NULL)
, mpOnlineSpellingList(NULL)
-, maShapeListIterator()
, mpOnlineSearchItem(NULL)
, mpCustomShowList(NULL)
, mpDocSh(static_cast< ::sd::DrawDocShell*>(pDrDocSh))
@@ -695,7 +694,7 @@ void SdDrawDocument::UpdateAllLinks()
*/
void SdDrawDocument::NewOrLoadCompleted( SdPage* pPage, SdStyleSheetPool* pSPool )
{
- const sd::ShapeList& rPresentationShapes( pPage->GetPresentationShapeList() );
+ sd::ShapeList& rPresentationShapes( pPage->GetPresentationShapeList() );
if(!rPresentationShapes.isEmpty())
{
// Create lists of title and outline styles
@@ -707,13 +706,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.
- for( ShapeList::const_iterator aIter (rPresentationShapes.cbegin() );
- aIter != rPresentationShapes.cend(); ++aIter )
+ while( (pObj = rPresentationShapes.getNextShape()) )
{
- 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 6c90cac..6954913 100644
--- a/sd/source/core/drawdoc4.cxx
+++ b/sd/source/core/drawdoc4.cxx
@@ -755,7 +755,6 @@ void SdDrawDocument::StartOnlineSpelling(sal_Bool bForceSpelling)
pOutl->SetDefaultLanguage( meLanguage );
mpOnlineSpellingList = new ShapeList;
- maShapeListIterator = mpOnlineSpellingList->cend();
sal_uInt16 nPage;
for ( nPage = 0; nPage < GetPageCount(); nPage++ )
@@ -770,7 +769,7 @@ void SdDrawDocument::StartOnlineSpelling(sal_Bool bForceSpelling)
FillOnlineSpellingList((SdPage*) GetMasterPage(nPage));
}
- maShapeListIterator = mpOnlineSpellingList->cbegin();
+ mpOnlineSpellingList->seekShape(0);
mpOnlineSpellingTimer = new Timer();
mpOnlineSpellingTimer->SetTimeoutHdl( LINK(this, SdDrawDocument, OnlineSpellingHdl) );
mpOnlineSpellingTimer->SetTimeout(250);
@@ -824,14 +823,11 @@ void SdDrawDocument::FillOnlineSpellingList(SdPage* pPage)
// OnlineSpelling in the background
IMPL_LINK_NOARG(SdDrawDocument, OnlineSpellingHdl)
{
- bool bHasMore = maShapeListIterator != mpOnlineSpellingList->cend();
-
if (mpOnlineSpellingList!=NULL
- && ( !mbOnlineSpell || bHasMore))
+ && ( !mbOnlineSpell || mpOnlineSpellingList->hasMore()))
{
// Spell next object
- SdrObject* pObj = *maShapeListIterator;
- ++maShapeListIterator;
+ SdrObject* pObj = mpOnlineSpellingList->getNextShape();
if (pObj)
{
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index ed7e022..5f70417 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;
- for( ShapeList::const_iterator aIter( maPresentationShapeList.cbegin() );
- aIter != maPresentationShapeList.cend(); ++aIter )
- {
- SdrObject* pObj = *aIter;
+ SdrObject* pObj = 0;
+ maPresentationShapeList.seekShape(0);
+ while( (pObj = maPresentationShapeList.getNextShape()) )
+ {
SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pObj);
if( pInfo )
{
@@ -1576,38 +1576,27 @@ 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 )
{
- std::list< SdrObject* > aRemoveList;
+ SdrObject* pObj = 0;
+ maPresentationShapeList.seekShape(0);
- for( ShapeList::const_iterator aIter = maPresentationShapeList.cbegin();
- aIter != maPresentationShapeList.cend(); ++aIter )
+ while( (pObj = maPresentationShapeList.getNextShape()) )
{
- SdrObject* pObj = *aIter;
-
if( aUsedPresentationObjects.count(pObj) == 0 )
{
if( pObj->IsEmptyPresObj() )
{
- // remove the object now would invalidate the iterator and lead to a seg fault
- aRemoveList.push_back(pObj);
+ if( bUndo )
+ pUndoManager->AddUndoAction(pModel->GetSdrUndoFactory().CreateUndoDeleteObject(*pObj));
+
+ RemoveObject( pObj->GetOrdNum() );
+
+ if( !bUndo )
+ SdrObject::Free( 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 ff88f06..1b4f9ab 100644
--- a/sd/source/core/sdpage2.cxx
+++ b/sd/source/core/sdpage2.cxx
@@ -379,8 +379,10 @@ SdPage::SdPage(const SdPage& rSrcPage)
mePageKind = rSrcPage.mePageKind;
meAutoLayout = rSrcPage.meAutoLayout;
- for( ShapeList::const_iterator aIter( rSrcPage.maPresentationShapeList.cbegin() );
- aIter != rSrcPage.maPresentationShapeList.cend(); ++aIter )
+ // 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 )
{
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 c3aedde..a265e9c 100644
--- a/sd/source/core/shapelist.cxx
+++ b/sd/source/core/shapelist.cxx
@@ -26,6 +26,7 @@ using namespace sd;
ShapeList::ShapeList()
{
+ maIter = maShapeList.end();
}
ShapeList::~ShapeList()
@@ -54,9 +55,14 @@ 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);
}
@@ -77,6 +83,8 @@ 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 */
@@ -91,22 +99,17 @@ bool ShapeList::hasShape( SdrObject& rObject ) const
return std::find( maShapeList.begin(), maShapeList.end(), &rObject ) != maShapeList.end();
}
-ShapeList::const_iterator ShapeList::cbegin() const
-{
- return maShapeList.begin();
-}
-
-ShapeList::const_iterator ShapeList::cend() const
-{
- return maShapeList.end();
-}
-
void ShapeList::ObjectInDestruction(const SdrObject& rObject)
{
ListImpl::iterator aIter( std::find( maShapeList.begin(), maShapeList.end(), &rObject ) );
if( aIter != maShapeList.end() )
{
- maShapeList.erase( aIter );
+ bool bIterErased = aIter == maIter;
+
+ aIter = maShapeList.erase( aIter );
+
+ if( bIterErased )
+ maIter = aIter;
}
else
{
@@ -114,4 +117,28 @@ void ShapeList::ObjectInDestruction(const SdrObject& rObject)
}
}
+SdrObject* ShapeList::getNextShape()
+{
+ if( maIter != maShapeList.end() )
+ {
+ return (*maIter++);
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+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 8ad0ce3..fe0f1dd 100644
--- a/sd/source/ui/view/drviews1.cxx
+++ b/sd/source/ui/view/drviews1.cxx
@@ -1059,12 +1059,11 @@ 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);
- for( ShapeList::const_iterator aIter( rShapeList.cbegin() );
- aIter != rShapeList.cend(); ++aIter )
+ while( (pObj = rShapeList.getNextShape()) )
{
- 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 3cb0829..9023d02 100644
--- a/sd/source/ui/view/sdview5.cxx
+++ b/sd/source/ui/view/sdview5.cxx
@@ -101,10 +101,9 @@ SdrObject* View::GetEmptyPresentationObject( PresObjKind eKind )
// last try to find empty pres obj of multiple type
if( !pEmptyObj )
{
- ShapeList& rShapeList = pPage->GetPresentationShapeList();
+ const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList();
- for( ShapeList::const_iterator iter( rShapeList.cbegin() );
- iter != rShapeList.cend(); ++iter )
+ for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); ++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 f5c6bc6..e834999 100644
--- a/sd/source/ui/view/viewoverlaymanager.cxx
+++ b/sd/source/ui/view/viewoverlaymanager.cxx
@@ -546,10 +546,9 @@ bool ViewOverlayManager::CreateTags()
if( pPage && !pPage->IsMasterPage() && (pPage->GetPageKind() == PK_STANDARD) )
{
- ShapeList& rShapeList = pPage->GetPresentationShapeList();
+ const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList();
- for( ShapeList::const_iterator iter( rShapeList.cbegin() );
- iter != rShapeList.cend(); ++iter )
+ for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); ++iter )
{
if( (*iter)->IsEmptyPresObj() && ((*iter)->GetObjIdentifier() == OBJ_OUTLINETEXT) && (mrBase.GetDrawView()->GetTextEditObject() != (*iter)) )
{
More information about the Libreoffice-commits
mailing list