summaryrefslogtreecommitdiff
path: root/svx/inc
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@suse.cz>2011-03-25 17:33:24 +0100
committerLuboš Luňák <l.lunak@suse.cz>2011-03-25 17:33:24 +0100
commitb95a6c26809b1fa18bde2596594b5079ae41a48f (patch)
tree65f1bad80db294e7febbb34d5bfb687d82f7680f /svx/inc
parenta99622adb690c8850162bb2f3302516f9630c622 (diff)
more sensible SdrObject::Clone() and SdrObject::operator=()
Virtual operator=() is IMO pointless, and especially in a class hierarchy like SdrObject it's pretty unlikely one could reasonably assign any SdrObject-based object to any other one. Moreover, it was actually only used in Clone(), which was almost never reimplemented, so the more sensible choice is to have non-virtual operator= and virtual Clone() always being reimplemented and using that. This commit also fixes various smaller or bigger, er, interesting details in the various operator= implementations.
Diffstat (limited to 'svx/inc')
-rwxr-xr-xsvx/inc/svx/cube3d.hxx2
-rwxr-xr-xsvx/inc/svx/extrud3d.hxx2
-rwxr-xr-xsvx/inc/svx/lathe3d.hxx2
-rwxr-xr-xsvx/inc/svx/obj3d.hxx6
-rwxr-xr-xsvx/inc/svx/polygn3d.hxx2
-rwxr-xr-xsvx/inc/svx/polysc3d.hxx1
-rwxr-xr-xsvx/inc/svx/scene3d.hxx3
-rwxr-xr-xsvx/inc/svx/sphere3d.hxx2
-rwxr-xr-xsvx/inc/svx/svdoashp.hxx3
-rwxr-xr-xsvx/inc/svx/svdobj.hxx26
-rwxr-xr-xsvx/inc/svx/svdocapt.hxx2
-rwxr-xr-xsvx/inc/svx/svdocirc.hxx2
-rwxr-xr-xsvx/inc/svx/svdoedge.hxx3
-rwxr-xr-xsvx/inc/svx/svdograf.hxx3
-rwxr-xr-xsvx/inc/svx/svdogrp.hxx3
-rwxr-xr-xsvx/inc/svx/svdomeas.hxx2
-rwxr-xr-xsvx/inc/svx/svdomedia.hxx3
-rwxr-xr-xsvx/inc/svx/svdoole2.hxx3
-rwxr-xr-xsvx/inc/svx/svdopage.hxx3
-rwxr-xr-xsvx/inc/svx/svdopath.hxx3
-rwxr-xr-xsvx/inc/svx/svdorect.hxx2
-rwxr-xr-xsvx/inc/svx/svdotable.hxx3
-rwxr-xr-xsvx/inc/svx/svdotext.hxx3
-rwxr-xr-xsvx/inc/svx/svdouno.hxx3
-rwxr-xr-xsvx/inc/svx/svdovirt.hxx4
-rwxr-xr-xsvx/inc/svx/svdpage.hxx2
26 files changed, 64 insertions, 29 deletions
diff --git a/svx/inc/svx/cube3d.hxx b/svx/inc/svx/cube3d.hxx
index c3aca2e648..c748c7a8ee 100755
--- a/svx/inc/svx/cube3d.hxx
+++ b/svx/inc/svx/cube3d.hxx
@@ -73,7 +73,7 @@ public:
virtual sal_uInt16 GetObjIdentifier() const;
virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier) const;
- virtual void operator=(const SdrObject&);
+ virtual E3dCubeObj* Clone() const;
// Set local parameters with geometry recreation
void SetCubePos(const basegfx::B3DPoint& rNew);
diff --git a/svx/inc/svx/extrud3d.hxx b/svx/inc/svx/extrud3d.hxx
index 0df8d1eac5..6cd65bb2e0 100755
--- a/svx/inc/svx/extrud3d.hxx
+++ b/svx/inc/svx/extrud3d.hxx
@@ -92,7 +92,7 @@ public:
virtual sal_uInt16 GetObjIdentifier() const;
- virtual void operator=(const SdrObject&);
+ virtual E3dExtrudeObj* Clone() const;
// TakeObjName...() is for the display in the UI (for example "3 frames selected")
virtual void TakeObjNameSingul(String& rName) const;
diff --git a/svx/inc/svx/lathe3d.hxx b/svx/inc/svx/lathe3d.hxx
index 5e5e86ab30..2d1f23b816 100755
--- a/svx/inc/svx/lathe3d.hxx
+++ b/svx/inc/svx/lathe3d.hxx
@@ -102,7 +102,7 @@ private:
virtual sal_uInt16 GetObjIdentifier() const;
void ReSegment(sal_uInt32 nHSegs, sal_uInt32 nVSegs);
- virtual void operator=(const SdrObject&);
+ virtual E3dLatheObj* Clone() const;
virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier) const;
diff --git a/svx/inc/svx/obj3d.hxx b/svx/inc/svx/obj3d.hxx
index 953a9cd8c8..c28e304f45 100755
--- a/svx/inc/svx/obj3d.hxx
+++ b/svx/inc/svx/obj3d.hxx
@@ -196,7 +196,8 @@ public:
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
sal_uInt16 GetLogicalGroup() { return 0; }
- virtual void operator=(const SdrObject&);
+ virtual E3dObject* Clone() const;
+ E3dObject& operator=( const E3dObject& rObj );
virtual SdrObjGeoData *NewGeoData() const;
virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
@@ -316,8 +317,7 @@ public :
sal_Bool GetCreateTexture() const { return bCreateTexture; }
void SetCreateTexture(sal_Bool bNew);
- // copy operator
- virtual void operator=(const SdrObject&);
+ virtual E3dCompoundObject* Clone() const;
// material of the object
const Color& GetMaterialAmbientColor() const { return aMaterialAmbientColor; }
diff --git a/svx/inc/svx/polygn3d.hxx b/svx/inc/svx/polygn3d.hxx
index 907cb69ecb..5fd24a36ba 100755
--- a/svx/inc/svx/polygn3d.hxx
+++ b/svx/inc/svx/polygn3d.hxx
@@ -80,7 +80,7 @@ public:
virtual sal_uInt16 GetObjIdentifier() const;
virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier) const;
- virtual void operator=(const SdrObject&);
+ virtual E3dPolygonObj* Clone() const;
// LineOnly?
sal_Bool GetLineOnly() { return bLineOnly; }
diff --git a/svx/inc/svx/polysc3d.hxx b/svx/inc/svx/polysc3d.hxx
index f31929a387..dddddf59e7 100755
--- a/svx/inc/svx/polysc3d.hxx
+++ b/svx/inc/svx/polysc3d.hxx
@@ -46,6 +46,7 @@ public:
E3dPolyScene(E3dDefaultAttributes& rDefault);
virtual sal_uInt16 GetObjIdentifier() const;
+ virtual E3dPolyScene* Clone() const;
};
#endif // _E3D_POLYSC3D_HXX
diff --git a/svx/inc/svx/scene3d.hxx b/svx/inc/svx/scene3d.hxx
index e56f8bb0b4..0ba52d41c3 100755
--- a/svx/inc/svx/scene3d.hxx
+++ b/svx/inc/svx/scene3d.hxx
@@ -210,7 +210,8 @@ public:
const Camera3D& GetCamera() const { return aCamera; }
void removeAllNonSelectedObjects();
- virtual void operator=(const SdrObject&);
+ virtual E3dScene* Clone() const;
+ E3dScene& operator=(const E3dScene&);
virtual SdrObjGeoData *NewGeoData() const;
virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
diff --git a/svx/inc/svx/sphere3d.hxx b/svx/inc/svx/sphere3d.hxx
index 6c71b797ee..4e6271e081 100755
--- a/svx/inc/svx/sphere3d.hxx
+++ b/svx/inc/svx/sphere3d.hxx
@@ -71,7 +71,7 @@ public:
virtual sal_uInt16 GetObjIdentifier() const;
virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier) const;
- virtual void operator=(const SdrObject&);
+ virtual E3dSphereObj* Clone() const;
void ReSegment(sal_uInt32 nHorzSegments, sal_uInt32 nVertSegments);
const basegfx::B3DPoint& Center() const { return aCenter; }
diff --git a/svx/inc/svx/svdoashp.hxx b/svx/inc/svx/svdoashp.hxx
index 7727a35e98..4a7f8688d9 100755
--- a/svx/inc/svx/svdoashp.hxx
+++ b/svx/inc/svx/svdoashp.hxx
@@ -225,7 +225,8 @@ public:
virtual void TakeTextAnchorRect( Rectangle& rAnchorRect ) const;
virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false,
Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrObjCustomShape* Clone() const;
+ SdrObjCustomShape& operator=(const SdrObjCustomShape& rObj);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdobj.hxx b/svx/inc/svx/svdobj.hxx
index f1660702ef..4cf6bd4c5e 100755
--- a/svx/inc/svx/svdobj.hxx
+++ b/svx/inc/svx/svdobj.hxx
@@ -30,6 +30,7 @@
#define _SVDOBJ_HXX
#include <memory>
+#include <typeinfo>
#include <cppuhelper/weakref.hxx>
#include <vcl/mapmod.hxx>
#include <tools/weakbase.hxx>
@@ -686,9 +687,16 @@ public:
sal_Bool SingleObjectPainter(OutputDevice& rOut) const;
sal_Bool LineGeometryUsageIsNecessary() const;
- // Clone() soll eine komplette Kopie des Objektes erzeugen.
+ /**
+ Returns a copy of the object. Every inherited class must reimplement this (in class Foo
+ it should be sufficient to do "virtual Foo* Clone() const { return CloneHelper< Foo >(); }".
+ Note that this function uses operator= internally.
+ */
virtual SdrObject* Clone() const;
- virtual void operator=(const SdrObject& rObj);
+ /**
+ Implemented mainly for the purposes of Clone().
+ */
+ SdrObject& operator=(const SdrObject& rObj);
// TakeObjName...() ist fuer die Anzeige in der UI, z.B. "3 Rahmen selektiert".
virtual void TakeObjNameSingul(String& rName) const;
@@ -1129,6 +1137,11 @@ public:
protected:
void impl_setUnoShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxUnoShape );
+ /**
+ Helper function for reimplementing Clone().
+ */
+ template< typename T > T* CloneHelper() const;
+
private:
/** only for internal use!
*/
@@ -1183,6 +1196,15 @@ public:
typedef tools::WeakReference< SdrObject > SdrObjectWeakRef;
+template< typename T > T* SdrObject::CloneHelper() const
+{
+ OSL_ASSERT( typeid( T ) == typeid( *this ));
+ T* pObj = dynamic_cast< T* >( SdrObjFactory::MakeNewObject(GetObjInventor(),GetObjIdentifier(),NULL));
+ if (pObj!=NULL)
+ *pObj=*static_cast< const T* >( this );
+ return pObj;
+}
+
#endif //_SVDOBJ_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/inc/svx/svdocapt.hxx b/svx/inc/svx/svdocapt.hxx
index 454a6b1471..9c90a1e533 100755
--- a/svx/inc/svx/svdocapt.hxx
+++ b/svx/inc/svx/svdocapt.hxx
@@ -94,7 +94,7 @@ public:
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
virtual sal_uInt16 GetObjIdentifier() const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrCaptionObj* Clone() const;
// for calc: special shadow only for text box
void SetSpecialTextBoxShadow() { mbSpecialTextBoxShadow = sal_True; }
diff --git a/svx/inc/svx/svdocirc.hxx b/svx/inc/svx/svdocirc.hxx
index 9b65e459fd..9522cbf623 100755
--- a/svx/inc/svx/svdocirc.hxx
+++ b/svx/inc/svx/svdocirc.hxx
@@ -110,7 +110,7 @@ public:
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrCircObj* Clone() const;
virtual void RecalcSnapRect();
virtual void NbcSetSnapRect(const Rectangle& rRect);
virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
diff --git a/svx/inc/svx/svdoedge.hxx b/svx/inc/svx/svdoedge.hxx
index 6186670b85..abc369004b 100755
--- a/svx/inc/svx/svdoedge.hxx
+++ b/svx/inc/svx/svdoedge.hxx
@@ -247,7 +247,8 @@ public:
virtual void RecalcSnapRect();
virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrEdgeObj* Clone() const;
+ SdrEdgeObj& operator=(const SdrEdgeObj& rObj);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdograf.hxx b/svx/inc/svx/svdograf.hxx
index f361f01adc..4944bb3064 100755
--- a/svx/inc/svx/svdograf.hxx
+++ b/svx/inc/svx/svdograf.hxx
@@ -181,7 +181,8 @@ public:
// #i25616#
virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrGrafObj* Clone() const;
+ SdrGrafObj& operator=(const SdrGrafObj& rObj);
virtual sal_uInt32 GetHdlCount() const;
virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const;
diff --git a/svx/inc/svx/svdogrp.hxx b/svx/inc/svx/svdogrp.hxx
index c34ff7210f..1792a8955d 100755
--- a/svx/inc/svx/svdogrp.hxx
+++ b/svx/inc/svx/svdogrp.hxx
@@ -80,7 +80,8 @@ public:
virtual const Rectangle& GetCurrentBoundRect() const;
virtual const Rectangle& GetSnapRect() const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrObjGroup* Clone() const;
+ SdrObjGroup& operator=(const SdrObjGroup& rObj);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdomeas.hxx b/svx/inc/svx/svdomeas.hxx
index e635256128..044ef991f5 100755
--- a/svx/inc/svx/svdomeas.hxx
+++ b/svx/inc/svx/svdomeas.hxx
@@ -102,7 +102,7 @@ public:
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
virtual sal_uInt16 GetObjIdentifier() const;
virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrMeasureObj* Clone() const;
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdomedia.hxx b/svx/inc/svx/svdomedia.hxx
index 87ed2f5e78..3234a1cdd3 100755
--- a/svx/inc/svx/svdomedia.hxx
+++ b/svx/inc/svx/svdomedia.hxx
@@ -62,7 +62,8 @@ public:
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrMediaObj* Clone() const;
+ SdrMediaObj& operator=(const SdrMediaObj& rObj);
virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false );
diff --git a/svx/inc/svx/svdoole2.hxx b/svx/inc/svx/svdoole2.hxx
index 515ad8d214..c480cc2a2b 100755
--- a/svx/inc/svx/svdoole2.hxx
+++ b/svx/inc/svx/svdoole2.hxx
@@ -145,7 +145,8 @@ public:
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
- virtual void operator=(const SdrObject& rObj);
+ SdrOle2Obj* Clone() const;
+ SdrOle2Obj& operator=(const SdrOle2Obj& rObj);
virtual void NbcMove(const Size& rSize);
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
diff --git a/svx/inc/svx/svdopage.hxx b/svx/inc/svx/svdopage.hxx
index 31c607edb0..bbd074ee21 100755
--- a/svx/inc/svx/svdopage.hxx
+++ b/svx/inc/svx/svdopage.hxx
@@ -65,7 +65,8 @@ public:
virtual sal_uInt16 GetObjIdentifier() const;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrPageObj* Clone() const;
+ SdrPageObj& operator=(const SdrPageObj& rObj);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdopath.hxx b/svx/inc/svx/svdopath.hxx
index 57ebf01e81..0ecc3987b1 100755
--- a/svx/inc/svx/svdopath.hxx
+++ b/svx/inc/svx/svdopath.hxx
@@ -96,7 +96,8 @@ public:
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
virtual sal_uInt16 GetObjIdentifier() const;
virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrPathObj* Clone() const;
+ SdrPathObj& operator=(const SdrPathObj& rObj);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdorect.hxx b/svx/inc/svx/svdorect.hxx
index e17bd4a205..6114875891 100755
--- a/svx/inc/svx/svdorect.hxx
+++ b/svx/inc/svx/svdorect.hxx
@@ -99,7 +99,7 @@ public:
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrRectObj* Clone() const;
virtual void RecalcSnapRect();
virtual void NbcSetSnapRect(const Rectangle& rRect);
virtual void NbcSetLogicRect(const Rectangle& rRect);
diff --git a/svx/inc/svx/svdotable.hxx b/svx/inc/svx/svdotable.hxx
index 22f80d3462..3df9a2a78d 100755
--- a/svx/inc/svx/svdotable.hxx
+++ b/svx/inc/svx/svdotable.hxx
@@ -226,7 +226,8 @@ public:
virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrTableObj* Clone() const;
+ SdrTableObj& operator=(const SdrTableObj& rObj);
virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
virtual basegfx::B2DPolyPolygon TakeContour() const;
virtual void RecalcSnapRect();
diff --git a/svx/inc/svx/svdotext.hxx b/svx/inc/svx/svdotext.hxx
index 7148b74ed9..fb3a552f6d 100755
--- a/svx/inc/svx/svdotext.hxx
+++ b/svx/inc/svx/svdotext.hxx
@@ -438,7 +438,8 @@ public:
virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const;
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrTextObj* Clone() const;
+ SdrTextObj& operator=(const SdrTextObj& rObj);
virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
virtual basegfx::B2DPolyPolygon TakeContour() const;
virtual void RecalcSnapRect();
diff --git a/svx/inc/svx/svdouno.hxx b/svx/inc/svx/svdouno.hxx
index 09acde6f16..8bfee668cb 100755
--- a/svx/inc/svx/svdouno.hxx
+++ b/svx/inc/svx/svdouno.hxx
@@ -87,7 +87,8 @@ public:
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
virtual sal_uInt16 GetObjIdentifier() const;
- virtual void operator = (const SdrObject& rObj);
+ virtual SdrUnoObj* Clone() const;
+ SdrUnoObj& operator= (const SdrUnoObj& rObj);
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
virtual void NbcSetLayer(SdrLayerID nLayer);
diff --git a/svx/inc/svx/svdovirt.hxx b/svx/inc/svx/svdovirt.hxx
index 022638e498..52284ca1dc 100755
--- a/svx/inc/svx/svdovirt.hxx
+++ b/svx/inc/svx/svdovirt.hxx
@@ -79,8 +79,8 @@ public:
virtual const Rectangle& GetLastBoundRect() const;
virtual void RecalcBoundRect();
virtual void SetChanged();
- virtual SdrObject* Clone() const;
- virtual void operator=(const SdrObject& rObj);
+ virtual SdrVirtObj* Clone() const;
+ SdrVirtObj& operator=(const SdrVirtObj& rObj);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
diff --git a/svx/inc/svx/svdpage.hxx b/svx/inc/svx/svdpage.hxx
index d44fa604da..f09b6bc6c8 100755
--- a/svx/inc/svx/svdpage.hxx
+++ b/svx/inc/svx/svdpage.hxx
@@ -476,7 +476,7 @@ public:
SdrPage(const SdrPage& rSrcPage);
virtual ~SdrPage();
// pModel, pPage, pUpList, pOwnerObj und mbInserted werden Zuweisungeoperator nicht veraendert!
- virtual void operator=(const SdrPage& rSrcPage);
+ SdrPage& operator=(const SdrPage& rSrcPage);
virtual SdrPage* Clone() const;
virtual SdrPage* Clone(SdrModel* pNewModel) const;
bool IsMasterPage() const { return mbMaster; }