summaryrefslogtreecommitdiff
path: root/include/svx
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 /include/svx
parent962719df881a8aefdec7f564293d1e0cd42a5540 (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.hxx4
-rw-r--r--include/svx/galmisc.hxx2
-rw-r--r--include/svx/objfac3d.hxx8
-rw-r--r--include/svx/svdetc.hxx29
-rw-r--r--include/svx/svdobj.hxx43
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;