summaryrefslogtreecommitdiff
path: root/svx/source
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2016-08-22 11:02:36 +0200
committerNoel Grandin <noel@peralex.com>2016-08-23 09:54:16 +0200
commitba263e124ce263c3c893542062d9c473f5aae589 (patch)
tree74b99db819c66eb333ab2188df0a65a0b7b8fc2e /svx/source
parent962719df881a8aefdec7f564293d1e0cd42a5540 (diff)
clean up the SdrObjFactory create callbacks
passing params by setting fields on yourself is just gross Change-Id: Iee98a9e8e266b56fc886c76eab470ab1ff7ff8e4
Diffstat (limited to 'svx/source')
-rw-r--r--svx/source/engine3d/objfac3d.cxx28
-rw-r--r--svx/source/form/fmobjfac.cxx14
-rw-r--r--svx/source/gallery2/galmisc.cxx7
-rw-r--r--svx/source/svdraw/svdetc.cxx43
-rw-r--r--svx/source/svdraw/svdobj.cxx71
5 files changed, 59 insertions, 104 deletions
diff --git a/svx/source/engine3d/objfac3d.cxx b/svx/source/engine3d/objfac3d.cxx
index 197c77cd3739..63d5264a405f 100644
--- a/svx/source/engine3d/objfac3d.cxx
+++ b/svx/source/engine3d/objfac3d.cxx
@@ -45,40 +45,34 @@ E3dObjFactory::~E3dObjFactory()
// Generate chart internal objects
-IMPL_STATIC_LINK_TYPED( E3dObjFactory, MakeObject, SdrObjFactory*, pObjFactory, void )
+IMPL_STATIC_LINK_TYPED( E3dObjFactory, MakeObject, SdrObjCreatorParams, aParams, SdrObject* )
{
- if ( pObjFactory->nInventor == E3dInventor )
+ if ( aParams.nInventor == E3dInventor )
{
- switch ( pObjFactory->nIdentifier )
+ switch ( aParams.nObjIdentifier )
{
case E3D_POLYSCENE_ID:
- pObjFactory->pNewObj = new E3dPolyScene();
- break;
+ return new E3dPolyScene();
case E3D_POLYGONOBJ_ID :
- pObjFactory->pNewObj = new E3dPolygonObj();
- break;
+ return new E3dPolygonObj();
case E3D_CUBEOBJ_ID :
- pObjFactory->pNewObj = new E3dCubeObj();
- break;
+ return new E3dCubeObj();
case E3D_SPHEREOBJ_ID:
// Gets the dummy constructor, as this is only called when
// loading documents. The actual number of segments is however
// determined only after loading the members. This will result
// in that the first sphere will be immediately destroyed,
// although it was never used.
- pObjFactory->pNewObj = new E3dSphereObj(123);
- break;
+ return new E3dSphereObj(123);
case E3D_EXTRUDEOBJ_ID:
- pObjFactory->pNewObj = new E3dExtrudeObj();
- break;
+ return new E3dExtrudeObj();
case E3D_LATHEOBJ_ID:
- pObjFactory->pNewObj = new E3dLatheObj();
- break;
+ return new E3dLatheObj();
case E3D_COMPOUNDOBJ_ID:
- pObjFactory->pNewObj = new E3dCompoundObject();
- break;
+ return new E3dCompoundObject();
}
}
+ return nullptr;
}
diff --git a/svx/source/form/fmobjfac.cxx b/svx/source/form/fmobjfac.cxx
index ded879ab6d73..84733dcfd42d 100644
--- a/svx/source/form/fmobjfac.cxx
+++ b/svx/source/form/fmobjfac.cxx
@@ -109,16 +109,17 @@ namespace
}
IMPL_STATIC_LINK_TYPED(
- FmFormObjFactory, MakeObject, SdrObjFactory*, pObjFactory, void)
+ FmFormObjFactory, MakeObject, SdrObjCreatorParams, aParams, SdrObject*)
{
- if (pObjFactory->nInventor == FmFormInventor)
+ SdrObject* pNewObj = nullptr;
+ if (aParams.nInventor == FmFormInventor)
{
OUString sServiceSpecifier;
typedef ::std::vector< ::std::pair< OUString, Any > > PropertyValueArray;
PropertyValueArray aInitialProperties;
- switch ( pObjFactory->nIdentifier )
+ switch ( aParams.nObjIdentifier )
{
case OBJ_FM_EDIT:
sServiceSpecifier = FM_COMPONENT_EDIT;
@@ -214,9 +215,9 @@ IMPL_STATIC_LINK_TYPED(
// create the actual object
if ( !sServiceSpecifier.isEmpty() )
- pObjFactory->pNewObj = new FmFormObj(sServiceSpecifier);
+ pNewObj = new FmFormObj(sServiceSpecifier);
else
- pObjFactory->pNewObj = new FmFormObj();
+ pNewObj = new FmFormObj();
// initialize some properties which we want to differ from the defaults
for ( PropertyValueArray::const_iterator aInitProp = aInitialProperties.begin();
@@ -225,12 +226,13 @@ IMPL_STATIC_LINK_TYPED(
)
{
lcl_initProperty(
- static_cast< FmFormObj* >( pObjFactory->pNewObj ),
+ static_cast< FmFormObj* >( pNewObj ),
aInitProp->first,
aInitProp->second
);
}
}
+ return pNewObj;
}
diff --git a/svx/source/gallery2/galmisc.cxx b/svx/source/gallery2/galmisc.cxx
index 570b19ce9e33..b0fa80e914fa 100644
--- a/svx/source/gallery2/galmisc.cxx
+++ b/svx/source/gallery2/galmisc.cxx
@@ -77,10 +77,11 @@ BitmapEx GalleryResGetBitmapEx( sal_uInt32 nId )
}
IMPL_STATIC_LINK_TYPED(
- SgaUserDataFactory, MakeUserData, SdrObjFactory*, pObjFactory, void )
+ SgaUserDataFactory, MakeUserData, SdrObjUserDataCreatorParams, aParams, SdrObjUserData* )
{
- if ( pObjFactory->nInventor == IV_IMAPINFO && pObjFactory->nIdentifier == ID_IMAPINFO )
- pObjFactory->pNewData = new SgaIMapInfo;
+ if ( aParams.nInventor == IV_IMAPINFO && aParams.nObjIdentifier == ID_IMAPINFO )
+ return new SgaIMapInfo;
+ return nullptr;
}
GalleryGraphicImportRet GalleryGraphicImport( const INetURLObject& rURL, Graphic& rGraphic,
diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx
index 1d72915d8f12..3ee78e9714b5 100644
--- a/svx/source/svdraw/svdetc.cxx
+++ b/svx/source/svdraw/svdetc.cxx
@@ -254,45 +254,6 @@ IMPL_LINK_NOARG_TYPED(OLEObjCache, UnloadCheckHdl, Timer*, void)
}
-void SdrLinkList::Clear()
-{
- aList.clear();
-}
-
-unsigned SdrLinkList::FindEntry(const Link<SdrObjFactory*,void>& rLink) const
-{
- unsigned nCount=GetLinkCount();
- for (unsigned i=0; i<nCount; i++) {
- if (GetLink(i)==rLink) return i;
- }
- return 0xFFFF;
-}
-
-void SdrLinkList::InsertLink(const Link<SdrObjFactory*,void>& rLink)
-{
- unsigned nFnd=FindEntry(rLink);
- if (nFnd==0xFFFF) {
- if (rLink.IsSet()) {
- aList.push_back(rLink);
- } else {
- OSL_FAIL("SdrLinkList::InsertLink(): Tried to insert a link that was not set already.");
- }
- } else {
- OSL_FAIL("SdrLinkList::InsertLink(): Link already in place.");
- }
-}
-
-void SdrLinkList::RemoveLink(const Link<SdrObjFactory*,void>& rLink)
-{
- unsigned nFnd=FindEntry(rLink);
- if (nFnd!=0xFFFF) {
- aList.erase( aList.begin() + nFnd );
- } else {
- OSL_FAIL("SdrLinkList::RemoveLink(): Link not found.");
- }
-}
-
-
bool GetDraftFillColor(const SfxItemSet& rSet, Color& rCol)
{
drawing::FillStyle eFill=static_cast<const XFillStyleItem&>(rSet.Get(XATTR_FILLSTYLE)).GetValue();
@@ -418,13 +379,13 @@ SdrOutliner* SdrMakeOutliner(OutlinerMode nOutlinerMode, SdrModel& rModel)
return pOutl;
}
-SdrLinkList& ImpGetUserMakeObjHdl()
+std::vector<Link<SdrObjCreatorParams, SdrObject*>>& ImpGetUserMakeObjHdl()
{
SdrGlobalData& rGlobalData=GetSdrGlobalData();
return rGlobalData.aUserMakeObjHdl;
}
-SdrLinkList& ImpGetUserMakeObjUserDataHdl()
+std::vector<Link<SdrObjUserDataCreatorParams, SdrObjUserData*>>& ImpGetUserMakeObjUserDataHdl()
{
SdrGlobalData& rGlobalData=GetSdrGlobalData();
return rGlobalData.aUserMakeObjUserDataHdl;
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index d7b37c2632b2..578c787fe397 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -3097,33 +3097,16 @@ bool SdrObject::HasText() const
return false;
}
-SdrObjFactory::SdrObjFactory(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pNewPage, SdrModel* pNewModel)
+SdrObject* SdrObjFactory::CreateObjectFromFactory( sal_uInt32 nInventor, sal_uInt16 nObjIdentifier, SdrPage* , SdrModel* )
{
- nInventor=nInvent;
- nIdentifier=nIdent;
- pNewObj=nullptr;
- pPage=pNewPage;
- pModel=pNewModel;
- pObj=nullptr;
- pNewData=nullptr;
-}
-
-SdrObject* SdrObjFactory::CreateObjectFromFactory( sal_uInt32 nInventor, sal_uInt16 nIdentifier, SdrPage* pPage, SdrModel* pModel )
-{
- std::unique_ptr<SdrObjFactory> pFact(new SdrObjFactory(nInventor, nIdentifier, pPage, pModel));
-
- SdrLinkList& rLL = ImpGetUserMakeObjHdl();
- unsigned n = rLL.GetLinkCount();
- unsigned i = 0;
- SdrObject* pObj = nullptr;
- while (i < n && !pObj)
- {
- rLL.GetLink(i).Call(pFact.get());
- pObj = pFact->pNewObj;
- i++;
+ SdrObjCreatorParams aParams { nInventor, nObjIdentifier };
+ for (const auto & i : ImpGetUserMakeObjHdl()) {
+ SdrObject* pObj = i.Call(aParams);
+ if (pObj) {
+ return pObj;
+ }
}
-
- return pObj;
+ return nullptr;
}
SdrObject* SdrObjFactory::MakeNewObject(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pPage, SdrModel* pModel)
@@ -3278,28 +3261,42 @@ SdrObject* SdrObjFactory::MakeNewObject(
return pObj;
}
-void SdrObjFactory::InsertMakeObjectHdl(const Link<SdrObjFactory*,void>& rLink)
+void SdrObjFactory::InsertMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink)
{
- SdrLinkList& rLL=ImpGetUserMakeObjHdl();
- rLL.InsertLink(rLink);
+ std::vector<Link<SdrObjCreatorParams, SdrObject*>>& rLL=ImpGetUserMakeObjHdl();
+ auto it = std::find(rLL.begin(), rLL.end(), rLink);
+ if (it != rLL.end()) {
+ OSL_FAIL("SdrObjFactory::InsertMakeObjectHdl(): Link already in place.");
+ } else {
+ rLL.push_back(rLink);
+ }
}
-void SdrObjFactory::RemoveMakeObjectHdl(const Link<SdrObjFactory*,void>& rLink)
+void SdrObjFactory::RemoveMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink)
{
- SdrLinkList& rLL=ImpGetUserMakeObjHdl();
- rLL.RemoveLink(rLink);
+ std::vector<Link<SdrObjCreatorParams, SdrObject*>>& rLL=ImpGetUserMakeObjHdl();
+ auto it = std::find(rLL.begin(), rLL.end(), rLink);
+ if (it != rLL.end())
+ rLL.erase(it);
}
-void SdrObjFactory::InsertMakeUserDataHdl(const Link<SdrObjFactory*,void>& rLink)
+void SdrObjFactory::InsertMakeUserDataHdl(Link<SdrObjUserDataCreatorParams, SdrObjUserData*> const & rLink)
{
- SdrLinkList& rLL=ImpGetUserMakeObjUserDataHdl();
- rLL.InsertLink(rLink);
+ std::vector<Link<SdrObjUserDataCreatorParams, SdrObjUserData*>>& rLL=ImpGetUserMakeObjUserDataHdl();
+ auto it = std::find(rLL.begin(), rLL.end(), rLink);
+ if (it != rLL.end()) {
+ OSL_FAIL("SdrObjFactory::InsertMakeUserDataHdl(): Link already in place.");
+ } else {
+ rLL.push_back(rLink);
+ }
}
-void SdrObjFactory::RemoveMakeUserDataHdl(const Link<SdrObjFactory*,void>& rLink)
+void SdrObjFactory::RemoveMakeUserDataHdl(Link<SdrObjUserDataCreatorParams, SdrObjUserData*> const & rLink)
{
- SdrLinkList& rLL=ImpGetUserMakeObjUserDataHdl();
- rLL.RemoveLink(rLink);
+ std::vector<Link<SdrObjUserDataCreatorParams, SdrObjUserData*>>& rLL=ImpGetUserMakeObjUserDataHdl();
+ auto it = std::find(rLL.begin(), rLL.end(), rLink);
+ if (it != rLL.end())
+ rLL.erase(it);
}
namespace svx