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 /include/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 'include/svx')
-rw-r--r-- | include/svx/fmobjfac.hxx | 4 | ||||
-rw-r--r-- | include/svx/galmisc.hxx | 2 | ||||
-rw-r--r-- | include/svx/objfac3d.hxx | 8 | ||||
-rw-r--r-- | include/svx/svdetc.hxx | 29 | ||||
-rw-r--r-- | include/svx/svdobj.hxx | 43 |
5 files changed, 36 insertions, 50 deletions
diff --git a/include/svx/fmobjfac.hxx b/include/svx/fmobjfac.hxx index c5eac5e51182..fa8515102ab1 100644 --- a/include/svx/fmobjfac.hxx +++ b/include/svx/fmobjfac.hxx @@ -24,6 +24,8 @@ #include <svx/svxdllapi.h> class SdrObjFactory; +class SdrObject; +struct SdrObjCreatorParams; class SVX_DLLPUBLIC FmFormObjFactory { @@ -31,7 +33,7 @@ public: FmFormObjFactory(); ~FmFormObjFactory(); - DECL_STATIC_LINK_TYPED(FmFormObjFactory, MakeObject, SdrObjFactory*, void); + DECL_STATIC_LINK_TYPED(FmFormObjFactory, MakeObject, SdrObjCreatorParams, SdrObject* ); }; #endif // _FM_FMOBJFAC_HXX diff --git a/include/svx/galmisc.hxx b/include/svx/galmisc.hxx index 8f535d556784..f58a8096f773 100644 --- a/include/svx/galmisc.hxx +++ b/include/svx/galmisc.hxx @@ -130,7 +130,7 @@ public: SgaUserDataFactory() { SdrObjFactory::InsertMakeUserDataHdl( LINK(this,SgaUserDataFactory,MakeUserData) ); } ~SgaUserDataFactory() { SdrObjFactory::RemoveMakeUserDataHdl( LINK(this,SgaUserDataFactory,MakeUserData) ); } - DECL_STATIC_LINK_TYPED( SgaUserDataFactory, MakeUserData, SdrObjFactory*, void ); + DECL_STATIC_LINK_TYPED( SgaUserDataFactory, MakeUserData, SdrObjUserDataCreatorParams, SdrObjUserData* ); }; class GraphicFilter; diff --git a/include/svx/objfac3d.hxx b/include/svx/objfac3d.hxx index 6376a9cbcbbe..b06020c276d9 100644 --- a/include/svx/objfac3d.hxx +++ b/include/svx/objfac3d.hxx @@ -21,6 +21,7 @@ #define INCLUDED_SVX_OBJFAC3D_HXX #include <svx/svxdllapi.h> +#include <tools/link.hxx> /************************************************************************* @@ -30,9 +31,8 @@ \************************************************************************/ class SdrObjFactory; - - -#include <tools/link.hxx> +class SdrObject; +struct SdrObjCreatorParams; class SVX_DLLPUBLIC E3dObjFactory { @@ -40,7 +40,7 @@ public: E3dObjFactory(); ~E3dObjFactory(); - DECL_STATIC_LINK_TYPED(E3dObjFactory, MakeObject, SdrObjFactory*, void); + DECL_STATIC_LINK_TYPED(E3dObjFactory, MakeObject, SdrObjCreatorParams, SdrObject*); }; diff --git a/include/svx/svdetc.hxx b/include/svx/svdetc.hxx index 20750c6a4a0b..c2bcefb44431 100644 --- a/include/svx/svdetc.hxx +++ b/include/svx/svdetc.hxx @@ -26,6 +26,7 @@ #include <tools/link.hxx> #include <tools/fract.hxx> #include <vcl/outdev.hxx> +#include <svx/svdobj.hxx> /** @@ -168,26 +169,8 @@ public: }; -class SdrObjFactory; - -class SdrLinkList -{ - std::vector<Link<SdrObjFactory*,void> > aList; -protected: - unsigned FindEntry(const Link<SdrObjFactory*,void>& rLink) const; -public: - SdrLinkList(): aList() {} - ~SdrLinkList() { Clear(); } - SVX_DLLPUBLIC void Clear(); - unsigned GetLinkCount() const { return (unsigned)aList.size(); } - Link<SdrObjFactory*,void>& GetLink(unsigned nNum) { return aList[nNum]; } - const Link<SdrObjFactory*,void>& GetLink(unsigned nNum) const { return aList[nNum]; } - void InsertLink(const Link<SdrObjFactory*,void>& rLink); - void RemoveLink(const Link<SdrObjFactory*,void>& rLink); -}; - -SdrLinkList& ImpGetUserMakeObjHdl(); -SdrLinkList& ImpGetUserMakeObjUserDataHdl(); +std::vector<Link<SdrObjCreatorParams, SdrObject*>>& ImpGetUserMakeObjHdl(); +std::vector<Link<SdrObjUserDataCreatorParams, SdrObjUserData*>>& ImpGetUserMakeObjUserDataHdl(); class SdrOle2Obj; class AutoTimer; @@ -221,8 +204,10 @@ class SVX_DLLPUBLIC SdrGlobalData const SvtSysLocale* pSysLocale; // follows always locale settings const LocaleDataWrapper* pLocaleData; // follows always SysLocale public: - SdrLinkList aUserMakeObjHdl; - SdrLinkList aUserMakeObjUserDataHdl; + std::vector<Link<SdrObjCreatorParams, SdrObject*>> + aUserMakeObjHdl; + std::vector<Link<SdrObjUserDataCreatorParams, SdrObjUserData*>> + aUserMakeObjUserDataHdl; SdrEngineDefaults* pDefaults; ResMgr* pResMgr; OLEObjCache aOLEObjCache; diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index a762127bdc79..9d913bc71cb4 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -20,7 +20,6 @@ #ifndef INCLUDED_SVX_SVDOBJ_HXX #define INCLUDED_SVX_SVDOBJ_HXX -#include <typeinfo> #include <com/sun/star/uno/Any.hxx> #include <cppuhelper/weakref.hxx> #include <rtl/ustring.hxx> @@ -35,6 +34,8 @@ #include <tools/weakbase.hxx> #include <tools/mapunit.hxx> #include <tools/gen.hxx> +#include <typeinfo> +#include <functional> class SfxBroadcaster; class Pointer; @@ -972,6 +973,18 @@ private: bool mbDoNotInsertIntoPageAutomatically; }; +struct SdrObjCreatorParams +{ + sal_uInt32 nInventor; + sal_uInt16 nObjIdentifier; +}; +struct SdrObjUserDataCreatorParams +{ + sal_uInt32 nInventor; + sal_uInt16 nObjIdentifier; + SdrObject* pObject; +}; + /** * Whoever creates his own objects must set a link in the SdrObjFactory class. * The handler must have the following signature: @@ -983,32 +996,18 @@ private: class SVX_DLLPUBLIC SdrObjFactory { public: - sal_uInt32 nInventor; - sal_uInt16 nIdentifier; - - // for MakeNewObj(): - SdrPage* pPage; - SdrModel* pModel; - SdrObject* pNewObj; - - // for MakeNewObjUserData(): - SdrObject* pObj; - SdrObjUserData* pNewData; + static SdrObject* MakeNewObject(sal_uInt32 nInventor, sal_uInt16 nObjIdentifier, SdrPage* pPage, SdrModel* pModel=nullptr); + static SdrObject* MakeNewObject(sal_uInt32 nInventor, sal_uInt16 nObjIdentifier, const Rectangle& rSnapRect, SdrPage* pPage); + static void InsertMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink); + static void RemoveMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink); + static void InsertMakeUserDataHdl(Link<SdrObjUserDataCreatorParams, SdrObjUserData*> const & rLink); + static void RemoveMakeUserDataHdl(Link<SdrObjUserDataCreatorParams, SdrObjUserData*> const & rLink); private: - static SVX_DLLPRIVATE SdrObject* CreateObjectFromFactory( sal_uInt32 nInventor, sal_uInt16 nIdentifier, SdrPage* pPage, SdrModel* pModel ); - SVX_DLLPRIVATE SdrObjFactory(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pNewPage, SdrModel* pNewModel); - -public: - static SdrObject* MakeNewObject(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pPage, SdrModel* pModel=nullptr); - static SdrObject* MakeNewObject( sal_uInt32 nInventor, sal_uInt16 nIdentifier, const Rectangle& rSnapRect, SdrPage* pPage ); - static void InsertMakeObjectHdl(const Link<SdrObjFactory*,void>& rLink); - static void RemoveMakeObjectHdl(const Link<SdrObjFactory*,void>& rLink); - static void InsertMakeUserDataHdl(const Link<SdrObjFactory*,void>& rLink); - static void RemoveMakeUserDataHdl(const Link<SdrObjFactory*,void>& rLink); + SdrObjFactory() = delete; }; typedef tools::WeakReference< SdrObject > SdrObjectWeakRef; |