[Libreoffice-commits] core.git: 2 commits - include/svx xmloff/source
Noel Grandin
noel at peralex.com
Tue Jun 23 02:08:10 PDT 2015
include/svx/svdpage.hxx | 57 ++++++------
xmloff/source/draw/shapeimport.cxx | 165 +++++++++++++++++--------------------
2 files changed, 104 insertions(+), 118 deletions(-)
New commits:
commit af1c00c6428ec07d4e3d90b60772a600660a9651
Author: Noel Grandin <noel at peralex.com>
Date: Mon Jun 22 13:59:49 2015 +0200
move sorting code closer together
to make it easier to understand.
Also switch iteration to range-based for loops.
Change-Id: I39a3f565f40458fd5598bb2e97fe71a0fec1c09c
diff --git a/xmloff/source/draw/shapeimport.cxx b/xmloff/source/draw/shapeimport.cxx
index d7581a2..c155b54 100644
--- a/xmloff/source/draw/shapeimport.cxx
+++ b/xmloff/source/draw/shapeimport.cxx
@@ -778,18 +778,18 @@ public:
vector<ZOrderHint> maZOrderList;
vector<ZOrderHint> maUnsortedList;
- sal_Int32 mnCurrentZ;
- ShapeSortContext* mpParentContext;
- const OUString msZOrder;
+ sal_Int32 mnCurrentZ;
+ ShapeSortContext* mpParentContext;
ShapeSortContext( uno::Reference< drawing::XShapes >& rShapes, ShapeSortContext* pParentContext = NULL );
+ void popGroupAndSort();
+private:
void moveShape( sal_Int32 nSourcePos, sal_Int32 nDestPos );
};
ShapeSortContext::ShapeSortContext( uno::Reference< drawing::XShapes >& rShapes, ShapeSortContext* pParentContext )
-: mxShapes( rShapes ), mnCurrentZ( 0 ), mpParentContext( pParentContext ),
- msZOrder("ZOrder")
+: mxShapes( rShapes ), mnCurrentZ( 0 ), mpParentContext( pParentContext )
{
}
@@ -799,127 +799,116 @@ void ShapeSortContext::moveShape( sal_Int32 nSourcePos, sal_Int32 nDestPos )
uno::Reference< beans::XPropertySet > xPropSet;
aAny >>= xPropSet;
- if( xPropSet.is() && xPropSet->getPropertySetInfo()->hasPropertyByName( msZOrder ) )
+ if( xPropSet.is() && xPropSet->getPropertySetInfo()->hasPropertyByName( OUString("ZOrder") ) )
{
aAny <<= nDestPos;
- xPropSet->setPropertyValue( msZOrder, aAny );
+ xPropSet->setPropertyValue( OUString("ZOrder"), aAny );
- vector<ZOrderHint>::iterator aIter = maZOrderList.begin();
- vector<ZOrderHint>::iterator aEnd = maZOrderList.end();
-
- while( aIter != aEnd )
+ for( ZOrderHint& rHint : maZOrderList )
{
- if( (*aIter).nIs < nSourcePos )
+ if( rHint.nIs < nSourcePos )
{
- DBG_ASSERT( (*aIter).nIs >= nDestPos, "Shape sorting failed" );
- (*aIter).nIs++;
+ DBG_ASSERT(rHint.nIs >= nDestPos, "Shape sorting failed" );
+ rHint.nIs++;
}
- ++aIter;
}
- aIter = maUnsortedList.begin();
- aEnd = maUnsortedList.end();
-
- while( aIter != aEnd )
+ for( ZOrderHint& rHint : maUnsortedList )
{
- if( (*aIter).nIs < nSourcePos )
+ if( rHint.nIs < nSourcePos )
{
- DBG_ASSERT( (*aIter).nIs >= nDestPos, "shape sorting failed" );
- (*aIter).nIs++;
+ DBG_ASSERT( rHint.nIs >= nDestPos, "shape sorting failed" );
+ rHint.nIs++;
}
- ++aIter;
}
}
}
-void XMLShapeImportHelper::pushGroupForSorting( uno::Reference< drawing::XShapes >& rShapes )
+// sort shapes
+void ShapeSortContext::popGroupAndSort()
{
- mpImpl->mpSortContext = new ShapeSortContext( rShapes, mpImpl->mpSortContext );
-}
-
-void XMLShapeImportHelper::popGroupAndSort()
-{
- DBG_ASSERT( mpImpl->mpSortContext, "No context to sort!" );
- if( mpImpl->mpSortContext == NULL )
+ // only do something if we have shapes to sort
+ if( maZOrderList.empty() )
return;
- try
- {
- vector<ZOrderHint>& rZList = mpImpl->mpSortContext->maZOrderList;
- vector<ZOrderHint>& rUnsortedList = mpImpl->mpSortContext->maUnsortedList;
-
- // sort shapes
- if( !rZList.empty() )
- {
- // only do something if we have shapes to sort
+ // check if there are more shapes than inserted with ::shapeWithZIndexAdded()
+ // This can happen if there where already shapes on the page before import
+ // Since the writer may delete some of this shapes during import, we need
+ // to do this here and not in our c'tor anymore
- // check if there are more shapes than inserted with ::shapeWithZIndexAdded()
- // This can happen if there where already shapes on the page before import
- // Since the writer may delete some of this shapes during import, we need
- // to do this here and not in our c'tor anymore
+ // check if we have more shapes than we know of
+ sal_Int32 nCount = mxShapes->getCount();
- // check if we have more shapes than we know of
- sal_Int32 nCount = mpImpl->mpSortContext->mxShapes->getCount();
+ nCount -= maZOrderList.size();
+ nCount -= maUnsortedList.size();
- nCount -= rZList.size();
- nCount -= rUnsortedList.size();
+ if( nCount > 0 )
+ {
+ // first update offsets of added shapes
+ for (ZOrderHint& rHint : maZOrderList)
+ rHint.nIs += nCount;
+ for (ZOrderHint& rHint : maUnsortedList)
+ rHint.nIs += nCount;
- if( nCount > 0 )
- {
- // first update offsets of added shapes
- vector<ZOrderHint>::iterator aIter( rZList.begin() );
- while( aIter != rZList.end() )
- (*aIter++).nIs += nCount;
+ // second add the already existing shapes in the unsorted list
+ ZOrderHint aNewHint;
+ do
+ {
+ nCount--;
- aIter = rUnsortedList.begin();
- while( aIter != rUnsortedList.end() )
- (*aIter++).nIs += nCount;
+ aNewHint.nIs = nCount;
+ aNewHint.nShould = -1;
- // second add the already existing shapes in the unsorted list
- ZOrderHint aNewHint;
+ maUnsortedList.insert(maUnsortedList.begin(), aNewHint);
+ }
+ while( nCount );
+ }
- do
- {
- nCount--;
+ // sort z-ordered shapes by nShould field
+ std::sort(maZOrderList.begin(), maZOrderList.end());
- aNewHint.nIs = nCount;
- aNewHint.nShould = -1;
+ // this is the current index, all shapes before that
+ // index are finished
+ sal_Int32 nIndex = 0;
+ for (ZOrderHint& rHint : maZOrderList)
+ {
+ while( nIndex < rHint.nShould && !maUnsortedList.empty() )
+ {
+ ZOrderHint aGapHint( *maUnsortedList.begin() );
+ maUnsortedList.erase(maUnsortedList.begin());
- rUnsortedList.insert(rUnsortedList.begin(), aNewHint);
- }
- while( nCount );
- }
+ moveShape( aGapHint.nIs, nIndex++ );
+ }
- // sort z ordered shapes
- std::sort(rZList.begin(), rZList.end());
+ if(rHint.nIs != nIndex )
+ moveShape( rHint.nIs, nIndex );
- // this is the current index, all shapes before that
- // index are finished
- sal_Int32 nIndex = 0;
- while( !rZList.empty() )
- {
- while( nIndex < (*rZList.begin()).nShould && !rUnsortedList.empty() )
- {
- ZOrderHint aGapHint( *rUnsortedList.begin() );
- rUnsortedList.erase(rUnsortedList.begin());
+ nIndex++;
+ }
+ maZOrderList.clear();
+}
- mpImpl->mpSortContext->moveShape( aGapHint.nIs, nIndex++ );
- }
+void XMLShapeImportHelper::pushGroupForSorting( uno::Reference< drawing::XShapes >& rShapes )
+{
+ mpImpl->mpSortContext = new ShapeSortContext( rShapes, mpImpl->mpSortContext );
+}
- if( (*rZList.begin()).nIs != nIndex )
- mpImpl->mpSortContext->moveShape( (*rZList.begin()).nIs, nIndex );
+void XMLShapeImportHelper::popGroupAndSort()
+{
+ DBG_ASSERT( mpImpl->mpSortContext, "No context to sort!" );
+ if( mpImpl->mpSortContext == NULL )
+ return;
- rZList.erase(rZList.begin());
- nIndex++;
- }
- }
+ try
+ {
+ mpImpl->mpSortContext->popGroupAndSort();
}
catch( uno::Exception& )
{
OSL_FAIL("exception while sorting shapes, sorting failed!");
}
- // put parent on top and delete current context, were done
+ // put parent on top and delete current context, we are done
ShapeSortContext* pContext = mpImpl->mpSortContext;
mpImpl->mpSortContext = pContext->mpParentContext;
delete pContext;
commit bc7fba24dae271919cff15c73a87449bdd06a50a
Author: Noel Grandin <noel at peralex.com>
Date: Mon Jun 22 09:25:16 2015 +0200
clean up svdpage.hxx a little
Change-Id: I5da9f408a80fd5990336aac847574f74164b6f7b
diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx
index 4647772..2c83427 100644
--- a/include/svx/svdpage.hxx
+++ b/include/svx/svdpage.hxx
@@ -83,8 +83,7 @@ class SVX_DLLPUBLIC SdrObjList
SdrObjList &operator=(const SdrObjList& rSrcList) SAL_DELETED_FUNCTION;
private:
- typedef ::std::vector<SdrObject*> SdrObjectContainerType;
- SdrObjectContainerType maList;
+ ::std::vector<SdrObject*> maList;
protected:
friend class SdrObjListIter;
@@ -96,8 +95,8 @@ friend class SdrEditView;
Rectangle aOutRect;
Rectangle aSnapRect;
SdrObjListKind eListKind;
- bool bObjOrdNumsDirty;
- bool bRectsDirty;
+ bool bObjOrdNumsDirty;
+ bool bRectsDirty;
protected:
void RecalcRects();
@@ -127,19 +126,17 @@ public:
void SetUpList(SdrObjList* pNewUpList) { pUpList=pNewUpList; }
SdrObject* GetOwnerObj() const { return pOwnerObj; }
void SetOwnerObj(SdrObject* pNewOwner) { pOwnerObj=pNewOwner; }
- SdrPage* GetPage() const;
- void SetPage(SdrPage* pNewPage);
- SdrModel* GetModel() const;
- virtual void SetModel(SdrModel* pNewModel);
+ SdrPage* GetPage() const;
+ void SetPage(SdrPage* pNewPage);
+ SdrModel* GetModel() const;
+ virtual void SetModel(SdrModel* pNewModel);
/// recalculate order numbers / ZIndex
- void RecalcObjOrdNums();
- bool IsObjOrdNumsDirty() const { return bObjOrdNumsDirty; }
- virtual void NbcInsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE
- , const SdrInsertReason* pReason=NULL
- );
- virtual void InsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE
- , const SdrInsertReason* pReason=NULL
- );
+ void RecalcObjOrdNums();
+ bool IsObjOrdNumsDirty() const { return bObjOrdNumsDirty; }
+ virtual void NbcInsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE,
+ const SdrInsertReason* pReason=NULL);
+ virtual void InsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE,
+ const SdrInsertReason* pReason=NULL);
/// remove from list without delete
virtual SdrObject* NbcRemoveObject(size_t nObjNum);
virtual SdrObject* RemoveObject(size_t nObjNum);
@@ -248,8 +245,8 @@ public:
Otherwise this list is expected to contain all the shapes in the
called SdrObjList.
*/
- void SetNavigationOrder (const ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XIndexAccess>& rxOrder);
+ void SetNavigationOrder (const css::uno::Reference<
+ css::container::XIndexAccess>& rxOrder);
void dumpAsXml(struct _xmlTextWriter* pWriter) const;
@@ -333,7 +330,7 @@ public:
SdrPageGridFrameList(): aList() {}
~SdrPageGridFrameList() { Clear(); }
void Clear();
- sal_uInt16 GetCount() const { return sal_uInt16(aList.size()); }
+ sal_uInt16 GetCount() const { return sal_uInt16(aList.size()); }
void Insert(const SdrPageGridFrame& rGF) { aList.push_back(new SdrPageGridFrame(rGF)); }
void Insert(const SdrPageGridFrame& rGF, sal_uInt16 nPos)
{
@@ -453,7 +450,7 @@ protected:
SdrLayerAdmin* pLayerAdmin;
private:
SdrPageProperties* mpSdrPageProperties;
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoPage;
+ css::uno::Reference< css::uno::XInterface > mxUnoPage;
public:
SdrPageProperties& getSdrPageProperties() { return *mpSdrPageProperties; }
@@ -464,8 +461,8 @@ protected:
// new MasterPageDescriptorVector
sdr::MasterPageDescriptor* mpMasterPageDescriptor;
- SetOfByte aPrefVisiLayers;
- sal_uInt16 nPageNum;
+ SetOfByte aPrefVisiLayers;
+ sal_uInt16 nPageNum;
// bitfield
bool mbMaster : 1; // flag if this is a MasterPage
@@ -475,9 +472,9 @@ protected:
// #i93597#
bool mbPageBorderOnlyLeftRight : 1;
- void SetUnoPage(::com::sun::star::uno::Reference<
- ::com::sun::star::drawing::XDrawPage> const&);
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoPage();
+ void SetUnoPage(css::uno::Reference<
+ css::drawing::XDrawPage> const&);
+ virtual css::uno::Reference< css::uno::XInterface > createUnoPage();
// Copying of pages is split into two parts: construction and copying of page objects,
// because the copying might need access to fully initialized page. Clone() is responsible
@@ -493,10 +490,10 @@ public:
virtual ~SdrPage();
virtual SdrPage* Clone() const SAL_OVERRIDE;
virtual SdrPage* Clone(SdrModel* pNewModel) const;
- bool IsMasterPage() const { return mbMaster; }
- void SetInserted(bool bNew = true);
- bool IsInserted() const { return mbInserted; }
- void SetChanged();
+ bool IsMasterPage() const { return mbMaster; }
+ void SetInserted(bool bNew = true);
+ bool IsInserted() const { return mbInserted; }
+ void SetChanged();
// #i68775# React on PageNum changes (from Model in most cases)
void SetPageNum(sal_uInt16 nNew);
@@ -551,7 +548,7 @@ public:
bool IsObjectsNotPersistent() const { return mbObjectsNotPersistent; }
void SetObjectsNotPersistent(bool b) { mbObjectsNotPersistent = b; }
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoPage();
+ css::uno::Reference< css::uno::XInterface > getUnoPage();
virtual SfxStyleSheet* GetTextStyleSheetForObject( SdrObject* pObj ) const;
More information about the Libreoffice-commits
mailing list