diff options
author | Noel Grandin <noel@peralex.com> | 2016-08-22 11:02:36 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2016-08-23 09:54:16 +0200 |
commit | ba263e124ce263c3c893542062d9c473f5aae589 (patch) | |
tree | 74b99db819c66eb333ab2188df0a65a0b7b8fc2e /svx | |
parent | 962719df881a8aefdec7f564293d1e0cd42a5540 (diff) |
clean up the SdrObjFactory create callbacks
passing params by setting fields on yourself is just gross
Change-Id: Iee98a9e8e266b56fc886c76eab470ab1ff7ff8e4
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/engine3d/objfac3d.cxx | 28 | ||||
-rw-r--r-- | svx/source/form/fmobjfac.cxx | 14 | ||||
-rw-r--r-- | svx/source/gallery2/galmisc.cxx | 7 | ||||
-rw-r--r-- | svx/source/svdraw/svdetc.cxx | 43 | ||||
-rw-r--r-- | svx/source/svdraw/svdobj.cxx | 71 |
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 |