Correct StyleSheet handling when cloning to different Model II

Until now the 'local' StyleSheet got set, but that may
not be the same as the original. It was/gets identified just
by searching by name and type, not comparing content.

What to do? We could...

(a) the Style-Friendly way:
 - check if StyleSheet is identical
  - if not, create a new in-between StyleSheet hosting missing Items
  - if yes, use, done.

(b) the pragmatic/practical way:
 - Just hard-attribute the Items that are detected as different
   similar to what BurnInStyleSheetAttributes does/did, but only
   for a view differing Items

(b) is the most simple for now, but will lead to more hard
attributes. The other possibilities will be better in the
long term. For now, I will use (b).

Note that there are more cases in that VERY complex and grown
stuff emerging from SdDrawDocument::PasteBookmarkAsPage. More
things will need to be fixed, see this as a 1st step.

Needed to adapt postProcessAfterCloneToDifferentModel due to
UT testTdf96206 failing, see comment there for details.

That 1st implementation showed weaknesses with those Items
critical and only on MasterPages, so decided to give up on
that and implement ContentCompare to SdPage::Equals. That
was easier than thought: No parameter needed, only used by
InsertBookmarkAsPage_FindDuplicateLayouts::operator(). Thus,
SdPage::Equals needs no change, just SdrObject::Equals.

Due to still problems with Items corrected in Objects on
MasterPages I will for now exclude this.

Could now isolate remaining problems, these are defaults
and/or PresObj things on MasterPages. Important is that I can
completely correct all Items for all Objects in
postProcessAfterCloneToDifferentModel. I can react to these
false-positives in the ContentCompare in SdrObject::Equals.

Signed-off-by: Armin Le Grand (collabora) <Armin.LeGrand@collabora.com>
Change-Id: I10e17c8d6a893dbe92ab716182f07bafce1f3284
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/6595
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Armin Le Grand <armin.legrand@collabora.com>
(cherry picked from commit 92ffaeac04c5c8586006b026f29ce12fba3674f1)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211729
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
This commit is contained in:
Armin Le Grand (collabora)
2026-10-05 08:52:54 +02:00
committed by Xisco Fauli
parent 1c0b50766a
commit 5519a3d407
105 changed files with 400 additions and 268 deletions
+1 -1
View File
@@ -901,7 +901,7 @@ SdrObjKind DlgEdObj::GetObjIdentifier() const
} }
} }
rtl::Reference<SdrObject> DlgEdObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> DlgEdObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new DlgEdObj(rTargetModel, *this); return new DlgEdObj(rTargetModel, *this);
} }
+2 -4
View File
@@ -47,15 +47,15 @@ class DlgEdObj: public SdrUnoObj
friend class DlgEdPropListenerImpl; friend class DlgEdPropListenerImpl;
friend class DlgEdForm; friend class DlgEdForm;
private:
bool bIsListening; bool bIsListening;
rtl::Reference<DlgEdForm> pDlgEdForm; rtl::Reference<DlgEdForm> pDlgEdForm;
rtl::Reference<DlgEdPropListenerImpl> m_xPropertyChangeListener; rtl::Reference<DlgEdPropListenerImpl> m_xPropertyChangeListener;
rtl::Reference<DlgEdEvtContListenerImpl> m_xContainerListener; rtl::Reference<DlgEdEvtContListenerImpl> m_xContainerListener;
private:
DlgEditor& GetDialogEditor (); DlgEditor& GetDialogEditor ();
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override; // not working yet
protected: protected:
DlgEdObj(SdrModel& rSdrModel); DlgEdObj(SdrModel& rSdrModel);
// copy constructor // copy constructor
@@ -98,8 +98,6 @@ public:
virtual SdrInventor GetObjInventor() const override; virtual SdrInventor GetObjInventor() const override;
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override; // not working yet
// FullDrag support // FullDrag support
virtual rtl::Reference<SdrObject> getFullDragClone() const override; virtual rtl::Reference<SdrObject> getFullDragClone() const override;
+1 -1
View File
@@ -38,7 +38,7 @@ public:
void setup(); void setup();
rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override; rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
SdrObjKind GetObjIdentifier() const override; SdrObjKind GetObjIdentifier() const override;
OUString TakeObjNameSingul() const override; OUString TakeObjNameSingul() const override;
+2 -3
View File
@@ -54,10 +54,11 @@ class SAL_WARN_UNUSED E3dCubeObj final : public E3dCompoundObject
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault); void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
virtual ~E3dCubeObj() override; virtual ~E3dCubeObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SVXCORE_DLLPUBLIC E3dCubeObj(SdrModel& rSdrModel, SVXCORE_DLLPUBLIC E3dCubeObj(SdrModel& rSdrModel,
const E3dDefaultAttributes& rDefault, const E3dDefaultAttributes& rDefault,
@@ -69,8 +70,6 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override; virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
// Set local parameters with geometry recreation // Set local parameters with geometry recreation
void SetCubePos(const basegfx::B3DPoint& rNew); void SetCubePos(const basegfx::B3DPoint& rNew);
const basegfx::B3DPoint& GetCubePos() const { return m_aCubePos; } const basegfx::B3DPoint& GetCubePos() const { return m_aCubePos; }
+2 -3
View File
@@ -47,10 +47,11 @@ class E3dLatheObj final : public E3dCompoundObject
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault); void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
virtual ~E3dLatheObj() override; virtual ~E3dLatheObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SVXCORE_DLLPUBLIC E3dLatheObj( SVXCORE_DLLPUBLIC E3dLatheObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -101,8 +102,6 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override; virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
// TakeObjName...() is for the display in the UI, for example "3 frames selected". // TakeObjName...() is for the display in the UI, for example "3 frames selected".
+5 -6
View File
@@ -61,11 +61,12 @@ public:
class SVXCORE_DLLPUBLIC E3dObject : public SdrAttrObj class SVXCORE_DLLPUBLIC E3dObject : public SdrAttrObj
{ {
private:
// Allow everything for E3dObjList and E3dDragMethod // Allow everything for E3dObjList and E3dDragMethod
friend class E3dDragMethod; friend class E3dDragMethod;
protected: virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected:
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
basegfx::B3DRange maLocalBoundVol; // surrounding volume of the object (from the geometry generation) basegfx::B3DRange maLocalBoundVol; // surrounding volume of the object (from the geometry generation)
@@ -125,7 +126,6 @@ public:
// TakeObjName...() is for the display in the UI, for example "3 frames selected". // TakeObjName...() is for the display in the UI, for example "3 frames selected".
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual std::unique_ptr<SdrObjGeoData> NewGeoData() const override; virtual std::unique_ptr<SdrObjGeoData> NewGeoData() const override;
virtual void SaveGeoData(SdrObjGeoData& rGeo) const override; virtual void SaveGeoData(SdrObjGeoData& rGeo) const override;
@@ -152,13 +152,14 @@ public:
class SVXCORE_DLLPUBLIC E3dCompoundObject : public E3dObject class SVXCORE_DLLPUBLIC E3dCompoundObject : public E3dObject
{ {
private:
// to allow sdr::properties::E3dCompoundProperties access to SetGeometryValid() // to allow sdr::properties::E3dCompoundProperties access to SetGeometryValid()
friend class sdr::properties::E3dCompoundProperties; friend class sdr::properties::E3dCompoundProperties;
friend class sdr::properties::E3dExtrudeProperties; friend class sdr::properties::E3dExtrudeProperties;
friend class sdr::properties::E3dLatheProperties; friend class sdr::properties::E3dLatheProperties;
friend class sdr::properties::E3dSphereProperties; friend class sdr::properties::E3dSphereProperties;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected: protected:
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
@@ -179,8 +180,6 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual void RecalcSnapRect() override; virtual void RecalcSnapRect() override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
}; };
#endif // INCLUDED_SVX_OBJ3D_HXX #endif // INCLUDED_SVX_OBJ3D_HXX
+2 -2
View File
@@ -73,6 +73,8 @@ class SVXCORE_DLLPUBLIC E3dScene final : public E3dObject, public SdrObjList
void SetDefaultAttributes(); void SetDefaultAttributes();
void ImpCleanup3DDepthMapper(); void ImpCleanup3DDepthMapper();
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
E3dScene(SdrModel& rSdrModel); E3dScene(SdrModel& rSdrModel);
E3dScene(SdrModel& rSdrModel, E3dScene const &); E3dScene(SdrModel& rSdrModel, E3dScene const &);
@@ -120,8 +122,6 @@ public:
const Camera3D& GetCamera() const { return m_aCamera; } const Camera3D& GetCamera() const { return m_aCamera; }
void removeAllNonSelectedObjects(); void removeAllNonSelectedObjects();
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual std::unique_ptr<SdrObjGeoData> NewGeoData() const override; virtual std::unique_ptr<SdrObjGeoData> NewGeoData() const override;
virtual void SaveGeoData(SdrObjGeoData& rGeo) const override; virtual void SaveGeoData(SdrObjGeoData& rGeo) const override;
virtual void RestoreGeoData(const SdrObjGeoData& rGeo) override; virtual void RestoreGeoData(const SdrObjGeoData& rGeo) override;
@@ -41,6 +41,9 @@ namespace sdr::properties
// Make sure the pool outlives any use via moItemSet: // Make sure the pool outlives any use via moItemSet:
rtl::Reference<SfxItemPool> m_itemPoolHolder; rtl::Reference<SfxItemPool> m_itemPoolHolder;
// Clone() operator, normally just calls the local copy constructor
SAL_DLLPRIVATE virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
protected: protected:
// the to be used ItemSet // the to be used ItemSet
mutable std::optional<SfxItemSet> moItemSet; mutable std::optional<SfxItemSet> moItemSet;
@@ -81,9 +84,6 @@ namespace sdr::properties
SAL_DLLPRIVATE void dumpAsXml(xmlTextWriterPtr pWriter) const override; SAL_DLLPRIVATE void dumpAsXml(xmlTextWriterPtr pWriter) const override;
// Clone() operator, normally just calls the local copy constructor
SAL_DLLPRIVATE virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// get itemset // get itemset
SAL_DLLPRIVATE virtual const SfxItemSet& GetObjectItemSet() const override; SAL_DLLPRIVATE virtual const SfxItemSet& GetObjectItemSet() const override;
+10 -3
View File
@@ -72,15 +72,16 @@ namespace sdr::properties
{ {
class SVXCORE_DLLPUBLIC BaseProperties class SVXCORE_DLLPUBLIC BaseProperties
{ {
private:
// the owner of this Properties. Set from constructor and not // the owner of this Properties. Set from constructor and not
// to be changed in any way. // to be changed in any way.
SdrObject& mrObject; SdrObject& mrObject;
// thje Clone-implementations, overloaded for each derivation
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const = 0;
protected: protected:
// internal access to SdrObject // internal access to SdrObject
const SdrObject& GetSdrObject() const; const SdrObject& GetSdrObject() const;
SdrObject& GetSdrObject(); SdrObject& GetSdrObject();
public: public:
@@ -90,11 +91,17 @@ namespace sdr::properties
// destructor // destructor
virtual ~BaseProperties(); virtual ~BaseProperties();
// create needed SfxItemSet, overloaded in all derivations as needed
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) = 0; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) = 0;
// Regulates Styles/Items between models when a Clone to another model
// was done. This is needed to evtl. also clone Styles and/or attributes
// to target model
virtual void postProcessAfterCloneToDifferentModel(const SdrObject& rSrcObj);
// Clone() operator, normally just calls the local copy constructor, // Clone() operator, normally just calls the local copy constructor,
// see above. // see above.
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const = 0; std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const;
// Get the local ItemSet. This directly returns the local ItemSet of the object. No // Get the local ItemSet. This directly returns the local ItemSet of the object. No
// merging of ItemSets is done for e.g. Group objects. // merging of ItemSets is done for e.g. Group objects.
+2 -4
View File
@@ -34,7 +34,6 @@ class E3dDefaultAttributes;
*/ */
class E3dSphereObj final : public E3dCompoundObject class E3dSphereObj final : public E3dCompoundObject
{ {
private:
basegfx::B3DPoint m_aCenter; basegfx::B3DPoint m_aCenter;
basegfx::B3DVector m_aSize; basegfx::B3DVector m_aSize;
@@ -42,10 +41,11 @@ private:
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault); void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
virtual ~E3dSphereObj() override; virtual ~E3dSphereObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SVXCORE_DLLPUBLIC E3dSphereObj( SVXCORE_DLLPUBLIC E3dSphereObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -70,8 +70,6 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override; virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
const basegfx::B3DPoint& Center() const { return m_aCenter; } const basegfx::B3DPoint& Center() const { return m_aCenter; }
const basegfx::B3DVector& Size() const { return m_aSize; } const basegfx::B3DVector& Size() const { return m_aSize; }
+2 -3
View File
@@ -74,11 +74,12 @@ struct SdrCustomShapeInteraction
class SVXCORE_DLLPUBLIC SdrObjCustomShape : public SdrTextObj class SVXCORE_DLLPUBLIC SdrObjCustomShape : public SdrTextObj
{ {
private:
// fObjectRotation is containing the object rotation in degrees. // fObjectRotation is containing the object rotation in degrees.
double m_fObjectRotation; double m_fObjectRotation;
bool mbAdjustingTextFrameWidthAndHeight; bool mbAdjustingTextFrameWidthAndHeight;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected: protected:
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
virtual void setUnoShape(const css::uno::Reference<css::drawing::XShape>& rxUnoShape) override; virtual void setUnoShape(const css::uno::Reference<css::drawing::XShape>& rxUnoShape) override;
@@ -113,7 +114,6 @@ public:
// returns the new text rect that corresponds to the current logic rect, the return value can be empty if nothing changed. // returns the new text rect that corresponds to the current logic rect, the return value can be empty if nothing changed.
tools::Rectangle ImpCalculateTextFrame( const bool bHgt, const bool bWdt ); tools::Rectangle ImpCalculateTextFrame( const bool bHgt, const bool bWdt );
public:
// #i37011# // #i37011#
const SdrObject* GetSdrObjectFromCustomShape() const; const SdrObject* GetSdrObjectFromCustomShape() const;
const SdrObject* GetSdrObjectShadowFromCustomShape() const; const SdrObject* GetSdrObjectShadowFromCustomShape() const;
@@ -209,7 +209,6 @@ public:
virtual void TakeTextAnchorRect( tools::Rectangle& rAnchorRect ) const override; virtual void TakeTextAnchorRect( tools::Rectangle& rAnchorRect ) const override;
virtual void TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect, bool bNoEditText, virtual void TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRect, bool bNoEditText,
tools::Rectangle* pAnchorRect, bool bLineWidth = true ) const override; tools::Rectangle* pAnchorRect, bool bLineWidth = true ) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
+9 -2
View File
@@ -254,6 +254,9 @@ private:
friend class SdrVirtObj; friend class SdrVirtObj;
friend class SdrRectObj; friend class SdrRectObj;
// Returns a copy of the object. Every inherited class must reimplement this.
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const = 0;
// OperationSmiley: Allow at each SdrObject to set a FillGeometryDefiningShape, // OperationSmiley: Allow at each SdrObject to set a FillGeometryDefiningShape,
// so that for SdrObjects where this is set, the definition of a defined FillStyle // so that for SdrObjects where this is set, the definition of a defined FillStyle
// will use this, but the local geometry will be filled. This allows to fill // will use this, but the local geometry will be filled. This allows to fill
@@ -452,8 +455,12 @@ public:
// means no change of the rotation point (only centered) and no shear allowed // means no change of the rotation point (only centered) and no shear allowed
virtual bool HasLimitedRotation() const; virtual bool HasLimitedRotation() const;
// Returns a copy of the object. Every inherited class must reimplement this. // Returns a copy of the object. Internally uses the virtual and
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const = 0; // overridden method implCloneSdrObject that is implemented for each
// derivation. If cloned to another SdrModel it will support calling
// postProcessAfterCloneToDifferentModel
rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const;
// helper, since Clone always return the type of the current subclass // helper, since Clone always return the type of the current subclass
template<class T> template<class T>
static rtl::Reference<T> Clone(T const & rObj, SdrModel& rTargetModel) static rtl::Reference<T> Clone(T const & rObj, SdrModel& rTargetModel)
+2 -3
View File
@@ -40,7 +40,6 @@ public:
// SdrCaptionObj // SdrCaptionObj
class SVXCORE_DLLPUBLIC SdrCaptionObj final : public SdrRectObj class SVXCORE_DLLPUBLIC SdrCaptionObj final : public SdrRectObj
{ {
private:
// to allow sdr::properties::CaptionProperties access to ImpRecalcTail() // to allow sdr::properties::CaptionProperties access to ImpRecalcTail()
friend class sdr::properties::CaptionProperties; friend class sdr::properties::CaptionProperties;
friend class SdrTextObj; // for ImpRecalcTail() during AutoGrow friend class SdrTextObj; // for ImpRecalcTail() during AutoGrow
@@ -71,6 +70,8 @@ private:
// protected destructor // protected destructor
SAL_DLLPRIVATE virtual ~SdrCaptionObj() override; SAL_DLLPRIVATE virtual ~SdrCaptionObj() override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SAL_DLLPRIVATE SdrCaptionObj(SdrModel& rSdrModel); SAL_DLLPRIVATE SdrCaptionObj(SdrModel& rSdrModel);
@@ -84,8 +85,6 @@ public:
SAL_DLLPRIVATE virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; SAL_DLLPRIVATE virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
SAL_DLLPRIVATE virtual SdrObjKind GetObjIdentifier() const override; SAL_DLLPRIVATE virtual SdrObjKind GetObjIdentifier() const override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
// for calc: special shadow only for text box // for calc: special shadow only for text box
void SetSpecialTextBoxShadow() { mbSpecialTextBoxShadow = true; } void SetSpecialTextBoxShadow() { mbSpecialTextBoxShadow = true; }
bool GetSpecialTextBoxShadow() const { return mbSpecialTextBoxShadow; } bool GetSpecialTextBoxShadow() const { return mbSpecialTextBoxShadow; }
+2 -4
View File
@@ -42,7 +42,6 @@ extern SVXCORE_DLLPUBLIC SdrCircKind ToSdrCircKind(SdrObjKind);
class SVXCORE_DLLPUBLIC SdrCircObj final : public SdrRectObj class SVXCORE_DLLPUBLIC SdrCircObj final : public SdrRectObj
{ {
private:
// to allow sdr::properties::CircleProperties access to ImpSetAttrToCircInfo() // to allow sdr::properties::CircleProperties access to ImpSetAttrToCircInfo()
friend class sdr::properties::CircleProperties; friend class sdr::properties::CircleProperties;
@@ -64,10 +63,11 @@ private:
SAL_DLLPRIVATE virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override; SAL_DLLPRIVATE virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
SAL_DLLPRIVATE virtual ~SdrCircObj() override; SAL_DLLPRIVATE virtual ~SdrCircObj() override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SAL_DLLPRIVATE SdrCircObj( SAL_DLLPRIVATE SdrCircObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -99,8 +99,6 @@ public:
SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override; SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override;
SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override; SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
SAL_DLLPRIVATE virtual void RecalcSnapRect() override; SAL_DLLPRIVATE virtual void RecalcSnapRect() override;
SAL_DLLPRIVATE virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override; SAL_DLLPRIVATE virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
SAL_DLLPRIVATE virtual basegfx::B2DPolyPolygon TakeXorPoly() const override; SAL_DLLPRIVATE virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
+2 -2
View File
@@ -134,7 +134,6 @@ public:
/// Utility class SdrEdgeObj /// Utility class SdrEdgeObj
class SVXCORE_DLLPUBLIC SdrEdgeObj final : public SdrTextObj class SVXCORE_DLLPUBLIC SdrEdgeObj final : public SdrTextObj
{ {
private:
// to allow sdr::properties::ConnectorProperties access to ImpSetAttrToEdgeInfo() // to allow sdr::properties::ConnectorProperties access to ImpSetAttrToEdgeInfo()
friend class sdr::properties::ConnectorProperties; friend class sdr::properties::ConnectorProperties;
@@ -169,6 +168,8 @@ private:
// to a correct state for first real layouting // to a correct state for first real layouting
bool mbSuppressed : 1; bool mbSuppressed : 1;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
// Interface to default connect suppression // Interface to default connect suppression
void SetSuppressDefaultConnect(bool bNew) { mbSuppressDefaultConnect = bNew; } void SetSuppressDefaultConnect(bool bNew) { mbSuppressDefaultConnect = bNew; }
@@ -224,7 +225,6 @@ public:
SAL_DLLPRIVATE virtual void RecalcSnapRect() override; SAL_DLLPRIVATE virtual void RecalcSnapRect() override;
SAL_DLLPRIVATE virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override; SAL_DLLPRIVATE virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override; SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override;
SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override; SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override;
+2 -3
View File
@@ -66,7 +66,6 @@ class SdrGraphicLink;
*/ */
class SVXCORE_DLLPUBLIC SdrGrafObj final : public SdrRectObj class SVXCORE_DLLPUBLIC SdrGrafObj final : public SdrRectObj
{ {
private:
// to allow sdr::properties::GraphicProperties access to SetXPolyDirty() // to allow sdr::properties::GraphicProperties access to SetXPolyDirty()
friend class sdr::properties::GraphicProperties; friend class sdr::properties::GraphicProperties;
@@ -109,6 +108,8 @@ private:
// protected destructor // protected destructor
SAL_DLLPRIVATE virtual ~SdrGrafObj() override; SAL_DLLPRIVATE virtual ~SdrGrafObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SdrGrafObj(SdrModel& rSdrModel); SdrGrafObj(SdrModel& rSdrModel);
// Copy constructor // Copy constructor
@@ -166,8 +167,6 @@ public:
SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override; SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override;
SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override; SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
SAL_DLLPRIVATE virtual sal_uInt32 GetHdlCount() const override; SAL_DLLPRIVATE virtual sal_uInt32 GetHdlCount() const override;
SAL_DLLPRIVATE virtual void AddToHdlList(SdrHdlList& rHdlList) const override; SAL_DLLPRIVATE virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
+2 -2
View File
@@ -47,6 +47,8 @@ private:
// the DiagramHelper if this SdrObjGroup host a Diagram // the DiagramHelper if this SdrObjGroup host a Diagram
std::shared_ptr< svx::diagram::DiagramHelper_svx > mp_DiagramHelper; std::shared_ptr< svx::diagram::DiagramHelper_svx > mp_DiagramHelper;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SdrObjGroup(SdrModel& rSdrModel); SdrObjGroup(SdrModel& rSdrModel);
// Copy constructor // Copy constructor
@@ -74,8 +76,6 @@ public:
virtual const tools::Rectangle& GetCurrentBoundRect() const override; virtual const tools::Rectangle& GetCurrentBoundRect() const override;
virtual const tools::Rectangle& GetSnapRect() const override; virtual const tools::Rectangle& GetSnapRect() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
+2 -2
View File
@@ -43,7 +43,6 @@ public:
class SVXCORE_DLLPUBLIC SdrMeasureObj final : public SdrTextObj class SVXCORE_DLLPUBLIC SdrMeasureObj final : public SdrTextObj
{ {
private:
// to allow sdr::properties::MeasureProperties access to SetTextDirty() // to allow sdr::properties::MeasureProperties access to SetTextDirty()
friend class sdr::properties::MeasureProperties; friend class sdr::properties::MeasureProperties;
friend class SdrMeasureField; friend class SdrMeasureField;
@@ -76,6 +75,8 @@ private:
SAL_DLLPRIVATE virtual void SaveGeoData(SdrObjGeoData& rGeo) const override; SAL_DLLPRIVATE virtual void SaveGeoData(SdrObjGeoData& rGeo) const override;
SAL_DLLPRIVATE virtual void RestoreGeoData(const SdrObjGeoData& rGeo) override; SAL_DLLPRIVATE virtual void RestoreGeoData(const SdrObjGeoData& rGeo) override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SAL_DLLPRIVATE SdrMeasureObj(SdrModel& rSdrModel); SAL_DLLPRIVATE SdrMeasureObj(SdrModel& rSdrModel);
// Copy constructor // Copy constructor
@@ -89,7 +90,6 @@ public:
SAL_DLLPRIVATE virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; SAL_DLLPRIVATE virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
SAL_DLLPRIVATE virtual SdrObjKind GetObjIdentifier() const override; SAL_DLLPRIVATE virtual SdrObjKind GetObjIdentifier() const override;
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override; virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override; SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override;
SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override; SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override;
+2 -3
View File
@@ -34,10 +34,11 @@ class SVXCORE_DLLPUBLIC SdrMediaObj final : public SdrRectObj
friend class sdr::contact::ViewContactOfSdrMediaObj; friend class sdr::contact::ViewContactOfSdrMediaObj;
friend class SdrMediaLink; friend class SdrMediaLink;
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
SAL_DLLPRIVATE virtual ~SdrMediaObj() override; SAL_DLLPRIVATE virtual ~SdrMediaObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SAL_DLLPRIVATE SdrMediaObj(SdrModel& rSdrModel); SAL_DLLPRIVATE SdrMediaObj(SdrModel& rSdrModel);
// Copy constructor // Copy constructor
@@ -54,8 +55,6 @@ public:
SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override; SAL_DLLPRIVATE virtual OUString TakeObjNameSingul() const override;
SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override; SAL_DLLPRIVATE virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override; virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override;
void setURL(const OUString& rURL, const OUString& rReferer); void setURL(const OUString& rURL, const OUString& rReferer);
+2 -4
View File
@@ -45,10 +45,8 @@ class SvxOle2Shape;
class SVXCORE_DLLPUBLIC SdrOle2Obj : public SdrRectObj class SVXCORE_DLLPUBLIC SdrOle2Obj : public SdrRectObj
{ {
private:
std::unique_ptr<SdrOle2ObjImpl> mpImpl; std::unique_ptr<SdrOle2ObjImpl> mpImpl;
private:
SVX_DLLPRIVATE void Connect_Impl(SvxOle2Shape* pCreator = nullptr); SVX_DLLPRIVATE void Connect_Impl(SvxOle2Shape* pCreator = nullptr);
SVX_DLLPRIVATE void Disconnect_Impl(); SVX_DLLPRIVATE void Disconnect_Impl();
SVX_DLLPRIVATE void AddListeners_Impl(); SVX_DLLPRIVATE void AddListeners_Impl();
@@ -61,6 +59,8 @@ private:
SVX_DLLPRIVATE void Init(); SVX_DLLPRIVATE void Init();
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected: protected:
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
@@ -140,8 +140,6 @@ public:
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual void NbcMove(const Size& rSize) override; virtual void NbcMove(const Size& rSize) override;
virtual void NbcResize(const Point& rRef, double xFact, double yFact) override; virtual void NbcResize(const Point& rRef, double xFact, double yFact) override;
virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override; virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
+2 -1
View File
@@ -41,6 +41,8 @@ private:
// protected destructor // protected destructor
virtual ~SdrPageObj() override; virtual ~SdrPageObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SdrPageObj( SdrPageObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -60,7 +62,6 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
+2 -3
View File
@@ -41,7 +41,6 @@ public:
class SVXCORE_DLLPUBLIC SdrPathObj final : public SdrTextObj class SVXCORE_DLLPUBLIC SdrPathObj final : public SdrTextObj
{ {
private:
friend class ImpPathForDragAndCreate; friend class ImpPathForDragAndCreate;
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
@@ -59,10 +58,11 @@ private:
void ImpForceLineAngle(); void ImpForceLineAngle();
ImpPathForDragAndCreate& impGetDAC() const; ImpPathForDragAndCreate& impGetDAC() const;
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
virtual ~SdrPathObj() override; virtual ~SdrPathObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SdrPathObj( SdrPathObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -77,7 +77,6 @@ public:
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override; virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
+2 -3
View File
@@ -37,18 +37,18 @@ namespace sdr::properties {
/// Rectangle objects (rectangle, circle, ...) /// Rectangle objects (rectangle, circle, ...)
class SVXCORE_DLLPUBLIC SdrRectObj : public SdrTextObj class SVXCORE_DLLPUBLIC SdrRectObj : public SdrTextObj
{ {
private:
// to allow sdr::properties::RectangleProperties access to SetXPolyDirty() // to allow sdr::properties::RectangleProperties access to SetXPolyDirty()
friend class sdr::properties::RectangleProperties; friend class sdr::properties::RectangleProperties;
friend class SdrTextObj; // Due to SetXPolyDirty for GrowAdjust friend class SdrTextObj; // Due to SetXPolyDirty for GrowAdjust
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected: protected:
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
std::optional<XPolygon> mpXPoly; std::optional<XPolygon> mpXPoly;
protected:
XPolygon ImpCalcXPoly(const tools::Rectangle& rRect1, tools::Long nRad1) const; XPolygon ImpCalcXPoly(const tools::Rectangle& rRect1, tools::Long nRad1) const;
void SetXPolyDirty(); void SetXPolyDirty();
@@ -82,7 +82,6 @@ public:
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual void RecalcSnapRect() override; virtual void RecalcSnapRect() override;
virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override; virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
virtual void NbcSetLogicRect(const tools::Rectangle& rRect, bool bAdaptTextMinSize = true) override; virtual void NbcSetLogicRect(const tools::Rectangle& rRect, bool bAdaptTextMinSize = true) override;
+2 -1
View File
@@ -93,6 +93,8 @@ class SVXCORE_DLLPUBLIC SdrTableObj final : public ::SdrTextObj
// protected destructor // protected destructor
virtual ~SdrTableObj() override; virtual ~SdrTableObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SdrTableObj(SdrModel& rSdrModel); SdrTableObj(SdrModel& rSdrModel);
// Copy constructor // Copy constructor
@@ -203,7 +205,6 @@ public:
virtual bool AdjustTextFrameWidthAndHeight() override; virtual bool AdjustTextFrameWidthAndHeight() override;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual void RecalcSnapRect() override; virtual void RecalcSnapRect() override;
virtual const tools::Rectangle& GetSnapRect() const override; virtual const tools::Rectangle& GetSnapRect() const override;
virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override; virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
+2 -2
View File
@@ -119,7 +119,6 @@ namespace sdr::properties
// SdrTextObj // SdrTextObj
class SVXCORE_DLLPUBLIC SdrTextObj : public SdrAttrObj, public svx::ITextProvider class SVXCORE_DLLPUBLIC SdrTextObj : public SdrAttrObj, public svx::ITextProvider
{ {
private:
// Cell needs access to ImpGetDrawOutliner(); // Cell needs access to ImpGetDrawOutliner();
friend class sdr::table::Cell; friend class sdr::table::Cell;
friend class sdr::table::SdrTableRtfExporter; friend class sdr::table::SdrTableRtfExporter;
@@ -132,6 +131,8 @@ private:
// CustomShapeproperties need to access the "mbTextFrame" member: // CustomShapeproperties need to access the "mbTextFrame" member:
friend class sdr::properties::CustomShapeProperties; friend class sdr::properties::CustomShapeProperties;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected: protected:
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override; virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
@@ -463,7 +464,6 @@ public:
virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const; virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override; virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
virtual basegfx::B2DPolyPolygon TakeContour() const override; virtual basegfx::B2DPolyPolygon TakeContour() const override;
virtual void RecalcSnapRect() override; virtual void RecalcSnapRect() override;
+2 -1
View File
@@ -48,6 +48,8 @@ class SVXCORE_DLLPUBLIC SdrUnoObj : public SdrRectObj
OUString m_aUnoControlModelTypeName; OUString m_aUnoControlModelTypeName;
OUString m_aUnoControlTypeName; OUString m_aUnoControlTypeName;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
protected: protected:
css::uno::Reference< css::awt::XControlModel > m_xUnoControlModel; // Can also be set from outside css::uno::Reference< css::awt::XControlModel > m_xUnoControlModel; // Can also be set from outside
@@ -71,7 +73,6 @@ public:
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override; virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual void NbcResize(const Point& rRef, double xFact, double yFact) override; virtual void NbcResize(const Point& rRef, double xFact, double yFact) override;
virtual void NbcSetLayer(SdrLayerID nLayer) override; virtual void NbcSetLayer(SdrLayerID nLayer) override;
+2 -1
View File
@@ -30,6 +30,8 @@ class SVXCORE_DLLPUBLIC SdrVirtObj : public SdrObject
{ {
SdrVirtObj(const SdrVirtObj&) = delete; SdrVirtObj(const SdrVirtObj&) = delete;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
virtual sdr::properties::BaseProperties& GetProperties() const override; virtual sdr::properties::BaseProperties& GetProperties() const override;
@@ -81,7 +83,6 @@ public:
virtual const tools::Rectangle& GetCurrentBoundRect() const override; virtual const tools::Rectangle& GetCurrentBoundRect() const override;
virtual const tools::Rectangle& GetLastBoundRect() const override; virtual const tools::Rectangle& GetLastBoundRect() const override;
virtual void RecalcBoundRect() override; virtual void RecalcBoundRect() override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
+2 -2
View File
@@ -182,7 +182,7 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override; virtual SdrInventor GetObjInventor() const override;
// Clone() should make a complete copy of the object. // Clone() should make a complete copy of the object.
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override; virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
virtual void initializeOle() override; virtual void initializeOle() override;
void initializeChart( const css::uno::Reference< css::frame::XModel>& _xModel); void initializeChart( const css::uno::Reference< css::frame::XModel>& _xModel);
@@ -262,7 +262,7 @@ public:
virtual css::uno::Reference< css::drawing::XShape > getUnoShape() override; virtual css::uno::Reference< css::drawing::XShape > getUnoShape() override;
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override; virtual SdrInventor GetObjInventor() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override; virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
private: private:
virtual void setUnoShape( const css::uno::Reference< css::drawing::XShape >& rxUnoShape ) override; virtual void setUnoShape( const css::uno::Reference< css::drawing::XShape >& rxUnoShape ) override;
+2 -2
View File
@@ -903,7 +903,7 @@ void OUnoObject::setUnoShape( const uno::Reference< drawing::XShape >& rxUnoShap
releaseUnoShape(); releaseUnoShape();
} }
rtl::Reference<SdrObject> OUnoObject::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> OUnoObject::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new OUnoObject(rTargetModel, *this); return new OUnoObject(rTargetModel, *this);
} }
@@ -1116,7 +1116,7 @@ static uno::Reference< chart2::data::XDatabaseDataProvider > lcl_getDataProvider
} }
// Clone() should make a complete copy of the object. // Clone() should make a complete copy of the object.
rtl::Reference<SdrObject> OOle2Obj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> OOle2Obj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new OOle2Obj(rTargetModel, *this); return new OOle2Obj(rTargetModel, *this);
} }
+1 -1
View File
@@ -849,7 +849,7 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf96708)
const sal_uInt16 nMasterPageCnt2 = pDoc->GetMasterSdPageCount(PageKind::Standard); const sal_uInt16 nMasterPageCnt2 = pDoc->GetMasterSdPageCount(PageKind::Standard);
//FIXME: tdf#151802: Number of master pages should be 4, it's 5 instead //FIXME: tdf#151802: Number of master pages should be 4, it's 5 instead
//CPPUNIT_ASSERT_EQUAL(nMasterPageCnt1, nMasterPageCnt2); // CPPUNIT_ASSERT_EQUAL(nMasterPageCnt1, nMasterPageCnt2);
CPPUNIT_ASSERT_EQUAL(sal_uInt16(5), nMasterPageCnt2); CPPUNIT_ASSERT_EQUAL(sal_uInt16(5), nMasterPageCnt2);
} }
+2 -4
View File
@@ -37,7 +37,6 @@ class E3dDefaultAttributes;
class SAL_WARN_UNUSED E3dExtrudeObj final : public E3dCompoundObject class SAL_WARN_UNUSED E3dExtrudeObj final : public E3dCompoundObject
{ {
private:
// to allow sdr::properties::E3dExtrudeProperties access to SetGeometryValid() // to allow sdr::properties::E3dExtrudeProperties access to SetGeometryValid()
friend class sdr::properties::E3dExtrudeProperties; friend class sdr::properties::E3dExtrudeProperties;
@@ -48,10 +47,11 @@ private:
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override; virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
void SetDefaultAttributes(const E3dDefaultAttributes& rDefault); void SetDefaultAttributes(const E3dDefaultAttributes& rDefault);
private:
// protected destructor - due to final, make private // protected destructor - due to final, make private
virtual ~E3dExtrudeObj() override; virtual ~E3dExtrudeObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
SVXCORE_DLLPUBLIC E3dExtrudeObj( SVXCORE_DLLPUBLIC E3dExtrudeObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -95,8 +95,6 @@ public:
virtual SdrObjKind GetObjIdentifier() const override; virtual SdrObjKind GetObjIdentifier() const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
// TakeObjName...() is for the display in the UI (for example "3 frames selected") // TakeObjName...() is for the display in the UI (for example "3 frames selected")
virtual OUString TakeObjNameSingul() const override; virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override; virtual OUString TakeObjNamePlural() const override;
+2 -2
View File
@@ -39,6 +39,8 @@ class E3dPolygonObj final : public E3dCompoundObject
// protected destructor // protected destructor
virtual ~E3dPolygonObj() override; virtual ~E3dPolygonObj() override;
virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
void SetPolyPolygon3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D); void SetPolyPolygon3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D);
void SetPolyNormals3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D); void SetPolyNormals3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D);
@@ -57,8 +59,6 @@ public:
virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier, virtual rtl::Reference<SdrObject> DoConvertToPolyObj(bool bBezier,
bool bAddText) const override; bool bAddText) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
// LineOnly? // LineOnly?
bool GetLineOnly() const { return bLineOnly; } bool GetLineOnly() const { return bLineOnly; }
void SetLineOnly(bool bNew); void SetLineOnly(bool bNew);
@@ -29,6 +29,12 @@ namespace sdr::properties
{ {
class AttributeProperties : public DefaultProperties, public SfxListener, public svl::StyleSheetUser class AttributeProperties : public DefaultProperties, public SfxListener, public svl::StyleSheetUser
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// Regulates Styles/Items between models
virtual void postProcessAfterCloneToDifferentModel(const SdrObject& rSrcObj) override;
// core to set parent at SfxItemSet and to execute the hard attribute computations // core to set parent at SfxItemSet and to execute the hard attribute computations
void ImpSetParentAtSfxItemSet(bool bDontRemoveHardAttr); void ImpSetParentAtSfxItemSet(bool bDontRemoveHardAttr);
@@ -58,9 +64,6 @@ namespace sdr::properties
AttributeProperties(const AttributeProperties& rProps, SdrObject& rObj); AttributeProperties(const AttributeProperties& rProps, SdrObject& rObj);
public: public:
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// Get the local ItemSet. This directly returns the local ItemSet of the object. No // Get the local ItemSet. This directly returns the local ItemSet of the object. No
// merging of ItemSets is done for e.g. Group objects. // merging of ItemSets is done for e.g. Group objects.
virtual const SfxItemSet& GetObjectItemSet() const override final; virtual const SfxItemSet& GetObjectItemSet() const override final;
+3 -3
View File
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class CaptionProperties final : public RectangleProperties class CaptionProperties final : public RectangleProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// create a new itemset // create a new itemset
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;
@@ -43,9 +46,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~CaptionProperties() override; virtual ~CaptionProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
+1 -1
View File
@@ -61,7 +61,7 @@ public:
~CellProperties(); ~CellProperties();
// Clone() operator, normally just calls the local copy constructor // Clone() operator, normally just calls the local copy constructor
std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override; std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
void ForceDefaultAttributes() override; void ForceDefaultAttributes() override;
+3 -3
View File
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class CircleProperties final : public RectangleProperties class CircleProperties final : public RectangleProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// create a new itemset // create a new itemset
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;
@@ -43,9 +46,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~CircleProperties() override; virtual ~CircleProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class ConnectorProperties final : public TextProperties class ConnectorProperties final : public TextProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// create a new itemset // create a new itemset
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;
@@ -43,9 +46,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~ConnectorProperties() override; virtual ~ConnectorProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
@@ -27,7 +27,9 @@ namespace sdr::properties
{ {
class CustomShapeProperties final : public TextProperties class CustomShapeProperties final : public TextProperties
{ {
private: // Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
void UpdateTextFrameStatus(bool bInvalidateRenderGeometry); void UpdateTextFrameStatus(bool bInvalidateRenderGeometry);
// create a new itemset // create a new itemset
@@ -72,9 +74,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~CustomShapeProperties() override; virtual ~CustomShapeProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// This is the notifier from SfxListener // This is the notifier from SfxListener
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override; virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
}; };
@@ -27,7 +27,10 @@ namespace sdr::properties
{ {
class E3dCompoundProperties : public E3dProperties class E3dCompoundProperties : public E3dProperties
{ {
protected: // Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
protected:
// Called after ItemChange() is done for all items. // Called after ItemChange() is done for all items.
virtual void PostItemChange(const sal_uInt16 nWhich) override; virtual void PostItemChange(const sal_uInt16 nWhich) override;
@@ -41,9 +44,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~E3dCompoundProperties() override; virtual ~E3dCompoundProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// Get merged ItemSet. Normally, this maps directly to GetObjectItemSet(), but may // Get merged ItemSet. Normally, this maps directly to GetObjectItemSet(), but may
// be overridden e.g for group objects to return a merged ItemSet of the object. // be overridden e.g for group objects to return a merged ItemSet of the object.
// When using this method the returned ItemSet may contain items in the state // When using this method the returned ItemSet may contain items in the state
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class E3dExtrudeProperties final : public E3dCompoundProperties class E3dExtrudeProperties final : public E3dCompoundProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// Called after ItemChange() is done for all items. // Called after ItemChange() is done for all items.
virtual void PostItemChange(const sal_uInt16 nWhich) override; virtual void PostItemChange(const sal_uInt16 nWhich) override;
@@ -39,9 +42,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~E3dExtrudeProperties() override; virtual ~E3dExtrudeProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
}; };
} // end of namespace sdr::properties } // end of namespace sdr::properties
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class E3dLatheProperties final : public E3dCompoundProperties class E3dLatheProperties final : public E3dCompoundProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// Called after ItemChange() is done for all items. // Called after ItemChange() is done for all items.
virtual void PostItemChange(const sal_uInt16 nWhich) override; virtual void PostItemChange(const sal_uInt16 nWhich) override;
@@ -39,9 +42,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~E3dLatheProperties() override; virtual ~E3dLatheProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
}; };
} // end of namespace sdr::properties } // end of namespace sdr::properties
+3 -3
View File
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class E3dProperties : public AttributeProperties class E3dProperties : public AttributeProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
protected: protected:
// create a new itemset // create a new itemset
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;
@@ -43,9 +46,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~E3dProperties() override; virtual ~E3dProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
}; };
} // end of namespace sdr::properties } // end of namespace sdr::properties
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class E3dSceneProperties final : public E3dProperties class E3dSceneProperties final : public E3dProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// Called after ItemChange() is done for all items. // Called after ItemChange() is done for all items.
virtual void PostItemChange(const sal_uInt16 nWhich) override; virtual void PostItemChange(const sal_uInt16 nWhich) override;
@@ -40,9 +43,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~E3dSceneProperties() override; virtual ~E3dSceneProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// get merged ItemSet. Normally, this maps directly to GetObjectItemSet(), but may // get merged ItemSet. Normally, this maps directly to GetObjectItemSet(), but may
// be overridden e.g for group objects to return a merged ItemSet of the object. // be overridden e.g for group objects to return a merged ItemSet of the object.
// When using this method the returned ItemSet may contain items in the state // When using this method the returned ItemSet may contain items in the state
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class E3dSphereProperties final : public E3dCompoundProperties class E3dSphereProperties final : public E3dCompoundProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// Called after ItemChange() is done for all items. // Called after ItemChange() is done for all items.
virtual void PostItemChange(const sal_uInt16 nWhich) override; virtual void PostItemChange(const sal_uInt16 nWhich) override;
@@ -39,9 +42,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~E3dSphereProperties() override; virtual ~E3dSphereProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
}; };
} // end of namespace sdr::properties } // end of namespace sdr::properties
+3 -3
View File
@@ -30,13 +30,13 @@ namespace sdr::properties
{ {
class EmptyProperties final : public BaseProperties class EmptyProperties final : public BaseProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
public: public:
// basic constructor // basic constructor
explicit EmptyProperties(SdrObject& rObj); explicit EmptyProperties(SdrObject& rObj);
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// create a new object specific itemset with object specific ranges. // create a new object specific itemset with object specific ranges.
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) override;
+3 -3
View File
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class GraphicProperties final : public RectangleProperties class GraphicProperties final : public RectangleProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// apply the correct SfyStyleSheet from SdrObject's SdrModel // apply the correct SfyStyleSheet from SdrObject's SdrModel
virtual void applyDefaultStyleSheetFromSdrModel() override; virtual void applyDefaultStyleSheetFromSdrModel() override;
@@ -46,9 +49,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~GraphicProperties() override; virtual ~GraphicProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
+4 -3
View File
@@ -28,8 +28,12 @@ namespace sdr::properties
{ {
class GroupProperties final : public BaseProperties class GroupProperties final : public BaseProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// the to be used ItemSet // the to be used ItemSet
mutable std::optional<SfxItemSet> moMergedItemSet; mutable std::optional<SfxItemSet> moMergedItemSet;
public: public:
// basic constructor // basic constructor
explicit GroupProperties(SdrObject& rObj); explicit GroupProperties(SdrObject& rObj);
@@ -40,9 +44,6 @@ namespace sdr::properties
// create a new object specific itemset with object specific ranges. // create a new object specific itemset with object specific ranges.
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// get itemset // get itemset
virtual const SfxItemSet& GetObjectItemSet() const override; virtual const SfxItemSet& GetObjectItemSet() const override;
+3 -3
View File
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class MeasureProperties final : public TextProperties class MeasureProperties final : public TextProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// create a new itemset // create a new itemset
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;
@@ -43,9 +46,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~MeasureProperties() override; virtual ~MeasureProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
+3 -3
View File
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class OleProperties final : public RectangleProperties class OleProperties final : public RectangleProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// apply the correct SfyStyleSheet from SdrObject's SdrModel // apply the correct SfyStyleSheet from SdrObject's SdrModel
virtual void applyDefaultStyleSheetFromSdrModel() override; virtual void applyDefaultStyleSheetFromSdrModel() override;
@@ -39,9 +42,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~OleProperties() override; virtual ~OleProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
}; };
} // end of namespace sdr::properties } // end of namespace sdr::properties
+3 -3
View File
@@ -28,6 +28,9 @@ namespace sdr::properties
{ {
class PageProperties final : public BaseProperties class PageProperties final : public BaseProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
// the to be used ItemSet // the to be used ItemSet
mutable std::optional<SfxItemSet> mxEmptyItemSet; mutable std::optional<SfxItemSet> mxEmptyItemSet;
@@ -44,9 +47,6 @@ namespace sdr::properties
// create a new object specific itemset with object specific ranges. // create a new object specific itemset with object specific ranges.
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& pPool) override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
virtual const SfxItemSet& GetObjectItemSet() const override; virtual const SfxItemSet& GetObjectItemSet() const override;
// get the installed StyleSheet // get the installed StyleSheet
@@ -27,6 +27,9 @@ namespace sdr::properties
{ {
class RectangleProperties : public TextProperties class RectangleProperties : public TextProperties
{ {
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
protected: protected:
// react on ItemSet changes // react on ItemSet changes
virtual void ItemSetChanged(std::span< const SfxPoolItem* const > aChangedItems, sal_uInt16 nDeletedWhich, bool bAdjustTextFrameWidthAndHeight = true) override; virtual void ItemSetChanged(std::span< const SfxPoolItem* const > aChangedItems, sal_uInt16 nDeletedWhich, bool bAdjustTextFrameWidthAndHeight = true) override;
@@ -41,9 +44,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~RectangleProperties() override; virtual ~RectangleProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
+3 -4
View File
@@ -28,10 +28,12 @@ namespace sdr::properties
{ {
class TextProperties : public AttributeProperties class TextProperties : public AttributeProperties
{ {
private:
// #i101556# versioning support // #i101556# versioning support
sal_uInt32 maVersion; sal_uInt32 maVersion;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> implCloneProperties(SdrObject& rObj) const override;
protected: protected:
// create a new itemset // create a new itemset
virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override; virtual SfxItemSet CreateObjectSpecificItemSet(SfxItemPool& rPool) override;
@@ -55,9 +57,6 @@ namespace sdr::properties
// destructor // destructor
virtual ~TextProperties() override; virtual ~TextProperties() override;
// Clone() operator, normally just calls the local copy constructor
virtual std::unique_ptr<BaseProperties> Clone(SdrObject& rObj) const override;
// set a new StyleSheet and broadcast // set a new StyleSheet and broadcast
virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr, virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr,
bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override; bool bBroadcast, bool bAdjustTextFrameWidthAndHeight = true) override;
+1 -1
View File
@@ -232,7 +232,7 @@ OUString AnnotationObject::TakeObjNameSingul() const
OUString AnnotationObject::TakeObjNamePlural() const { return u"Annotations"_ustr; } OUString AnnotationObject::TakeObjNamePlural() const { return u"Annotations"_ustr; }
rtl::Reference<SdrObject> AnnotationObject::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> AnnotationObject::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new AnnotationObject(rTargetModel, *this); return new AnnotationObject(rTargetModel, *this);
} }
+1 -1
View File
@@ -95,7 +95,7 @@ rtl::Reference<SdrObject> E3dCubeObj::DoConvertToPolyObj(bool /*bBezier*/, bool
return nullptr; return nullptr;
} }
rtl::Reference<SdrObject> E3dCubeObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dCubeObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dCubeObj(rTargetModel, *this); return new E3dCubeObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -112,7 +112,7 @@ SdrObjKind E3dExtrudeObj::GetObjIdentifier() const
return SdrObjKind::E3D_Extrusion; return SdrObjKind::E3D_Extrusion;
} }
rtl::Reference<SdrObject> E3dExtrudeObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dExtrudeObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dExtrudeObj(rTargetModel, *this); return new E3dExtrudeObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -117,7 +117,7 @@ SdrObjKind E3dLatheObj::GetObjIdentifier() const
return SdrObjKind::E3D_Lathe; return SdrObjKind::E3D_Lathe;
} }
rtl::Reference<SdrObject> E3dLatheObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dLatheObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dLatheObj(rTargetModel, *this); return new E3dLatheObj(rTargetModel, *this);
} }
+2 -2
View File
@@ -397,7 +397,7 @@ OUString E3dObject::TakeObjNamePlural() const
return SvxResId(STR_ObjNamePluralObj3d); return SvxResId(STR_ObjNamePluralObj3d);
} }
rtl::Reference<SdrObject> E3dObject::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dObject::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dObject(rTargetModel, *this); return new E3dObject(rTargetModel, *this);
} }
@@ -593,7 +593,7 @@ void E3dCompoundObject::RecalcSnapRect()
sal_Int32(ceil(aSnapRange.getMaxX())), sal_Int32(ceil(aSnapRange.getMaxY()))); sal_Int32(ceil(aSnapRange.getMaxX())), sal_Int32(ceil(aSnapRange.getMaxY())));
} }
rtl::Reference<SdrObject> E3dCompoundObject::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dCompoundObject::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dCompoundObject(rTargetModel, *this); return new E3dCompoundObject(rTargetModel, *this);
} }
+1 -1
View File
@@ -223,7 +223,7 @@ rtl::Reference<SdrObject> E3dPolygonObj::DoConvertToPolyObj(bool /*bBezier*/,
return nullptr; return nullptr;
} }
rtl::Reference<SdrObject> E3dPolygonObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dPolygonObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dPolygonObj(rTargetModel, *this); return new E3dPolygonObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -439,7 +439,7 @@ void E3dScene::removeAllNonSelectedObjects()
} }
} }
rtl::Reference<SdrObject> E3dScene::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dScene::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dScene(rTargetModel, *this); return new E3dScene(rTargetModel, *this);
} }
+1 -1
View File
@@ -99,7 +99,7 @@ rtl::Reference<SdrObject> E3dSphereObj::DoConvertToPolyObj(bool /*bBezier*/, boo
return nullptr; return nullptr;
} }
rtl::Reference<SdrObject> E3dSphereObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> E3dSphereObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new E3dSphereObj(rTargetModel, *this); return new E3dSphereObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -358,7 +358,7 @@ SdrObjKind FmFormObj::GetObjIdentifier() const
return SdrObjKind::UNO; return SdrObjKind::UNO;
} }
rtl::Reference<SdrObject> FmFormObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> FmFormObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new FmFormObj(rTargetModel, *this); return new FmFormObj(rTargetModel, *this);
} }
+2 -2
View File
@@ -50,6 +50,8 @@ class UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) FmFormObj final : public SdrUnoObj
// protected destructor // protected destructor
SAL_DLLPRIVATE virtual ~FmFormObj() override; SAL_DLLPRIVATE virtual ~FmFormObj() override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override;
public: public:
FmFormObj( FmFormObj(
SdrModel& rSdrModel, SdrModel& rSdrModel,
@@ -79,8 +81,6 @@ public:
SAL_DLLPRIVATE virtual SdrObjKind GetObjIdentifier() const override; SAL_DLLPRIVATE virtual SdrObjKind GetObjIdentifier() const override;
SAL_DLLPRIVATE virtual void NbcReformatText() override; SAL_DLLPRIVATE virtual void NbcReformatText() override;
SAL_DLLPRIVATE virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
SAL_DLLPRIVATE static css::uno::Reference< css::uno::XInterface> ensureModelEnv( SAL_DLLPRIVATE static css::uno::Reference< css::uno::XInterface> ensureModelEnv(
const css::uno::Reference< css::uno::XInterface>& _rSourceContainer, const css::uno::Reference< css::uno::XInterface>& _rSourceContainer,
const css::uno::Reference< css::form::XForms>& _rTopLevelDestContainer); const css::uno::Reference< css::form::XForms>& _rTopLevelDestContainer);
@@ -144,74 +144,103 @@ namespace sdr::properties
: DefaultProperties(rProps, rObj), : DefaultProperties(rProps, rObj),
mpStyleSheet(nullptr) mpStyleSheet(nullptr)
{ {
SfxStyleSheet* pTargetStyleSheet(rProps.GetStyleSheet()); const bool bModelChange(&rObj.getSdrModelFromSdrObject() != &rProps.GetSdrObject().getSdrModelFromSdrObject());
if(pTargetStyleSheet) if (bModelChange)
{ {
const bool bModelChange(&rObj.getSdrModelFromSdrObject() != &rProps.GetSdrObject().getSdrModelFromSdrObject()); // use default; will be corrected/handled in call to
// postProcessAfterCloneToDifferentModel below. Thus,
if(bModelChange) // also do not yet call ImpAddStyleSheet here
{ mpStyleSheet = GetSdrObject().getSdrModelFromSdrObject().GetDefaultStyleSheet();
// tdf#117506
// The error shows that it is definitely necessary to solve this problem.
// Interestingly I already had a note here for 'work needed'.
// Checked in libreoffice-6-0 what happened there. In principle, the whole
// ::Clone of SdrPage and SdrObject happened in the same SdrModel, only
// afterwards a ::SetModel was used at the cloned SdrPage which went through
// all layers. The StyleSheet-problem was solved in
// AttributeProperties::MoveToItemPool at the end. There, a StyleSheet with the
// same name was searched for in the target-SdrModel.
// Start by resetting the current TargetStyleSheet so that nothing goes wrong
// when we do not find a fitting TargetStyleSheet.
// Note: The test for SdrModelChange above was wrong (compared the already set
// new SdrObject), so this never triggered and pTargetStyleSheet was never set to
// nullptr before. This means that a StyleSheet from another SdrModel was used
// which of course is very dangerous. Interestingly did not crash since when that
// other SdrModel was destroyed the ::Notify mechanism still worked reliably
// and disconnected these Properties successfully from the alien-StyleSheet.
pTargetStyleSheet = nullptr;
// Check if we have a TargetStyleSheetPool at the target-SdrModel. This *should*
// be the case already (SdrModel::Merge and SdDrawDocument::InsertBookmarkAsPage
// have already cloned the StyleSheets to the target-SdrModel when used in Draw/impress).
// If none is found, ImpGetDefaultStyleSheet will be used to set a 'default'
// StyleSheet as StyleSheet implicitly later (that's what happened in the task,
// thus the FillStyle changed to the 'default' Blue).
// Note: It *may* be necessary to do more for StyleSheets, e.g. clone/copy the
// StyleSheet Hierarchy from the source SdrModel and/or add the Items from there
// as hard attributes. If needed, have a look at the older AttributeProperties::SetModel
// implementation from e.g. libreoffice-6-0.
SfxStyleSheetBasePool* pTargetStyleSheetPool(rObj.getSdrModelFromSdrObject().GetStyleSheetPool());
if(nullptr != pTargetStyleSheetPool)
{
// If we have a TargetStyleSheetPool, search for the used StyleSheet
// in the target SdrModel using the Name from the original StyleSheet
// in the source-SdrModel.
pTargetStyleSheet = dynamic_cast< SfxStyleSheet* >(
pTargetStyleSheetPool->Find(
rProps.GetStyleSheet()->GetName(),
rProps.GetStyleSheet()->GetFamily()));
}
}
}
if(!pTargetStyleSheet)
return;
if(HasSfxItemSet())
{
// The SfxItemSet has been cloned and exists,
// we can directly set the SfxStyleSheet at it
ImpAddStyleSheet(pTargetStyleSheet, true);
} }
else else
{ {
// No SfxItemSet exists yet (there is none in // copy existing one
// the source, so none was cloned). Remember the mpStyleSheet = rProps.GetStyleSheet();
// SfxStyleSheet to set it when the SfxItemSet
// got constructed on-demand // add StyleSheet && establish the parent-links in the SfxItemSet
mpStyleSheet = pTargetStyleSheet; ImpAddStyleSheet(mpStyleSheet, true);
}
}
void AttributeProperties::postProcessAfterCloneToDifferentModel(const SdrObject& rSrcObj)
{
SdrModel& rDstModel(GetSdrObject().getSdrModelFromSdrObject());
const bool bModelChange(&rSrcObj.getSdrModelFromSdrObject() != &rDstModel);
if (!bModelChange)
return;
// guarantee SfxItemSet existence
DefaultProperties::GetObjectItemSet();
const sdr::properties::BaseProperties& rSource(rSrcObj.GetProperties());
SfxStyleSheet* pNewStyleSheet(nullptr);
if (rDstModel.GetStyleSheetPool())
{
SfxStyleSheet* pSourceStyleSheet(rSource.GetStyleSheet());
if (pSourceStyleSheet)
{
// If we have a TargetStyleSheetPool, search for the used StyleSheet
// in the target SdrModel using the Name from the original StyleSheet
// in the source-SdrModel.
// That will/should work always since Paste from another model will
// in a 1st step copy non-existing StyleSheets to destination model
pNewStyleSheet = dynamic_cast< SfxStyleSheet* >(
rDstModel.GetStyleSheetPool()->Find(
pSourceStyleSheet->GetName(),
pSourceStyleSheet->GetFamily()));
}
}
// fallback: every SdrObject *should* have a StyleSheet, use
// default from the model
if(!pNewStyleSheet)
pNewStyleSheet = rDstModel.GetDefaultStyleSheet();
if(!pNewStyleSheet)
// may still have no StyleSheet, was so before, too, but
// should not happen since a DefaultStyleSheet should
// always be there
return;
// add StyleSheet && establish the parent-links in the SfxItemSet
if (GetStyleSheet() != pNewStyleSheet)
{
ImpRemoveStyleSheet();
ImpAddStyleSheet(pNewStyleSheet, true);
}
if (HasSfxItemSet())
{
// here we have a model change and a StyleSheet set,. but that
// StyleSheet was found by looking for name & type. It may
// *not* be identical to the StyleSheet from the Source.
// What to do? We could...
// (a) the Style-friendly way:
// - check if StyleSheet is identical
// - if not, create a new in-between StyleSheet hosting missing Items
// - if yes, use, done.
// (b) the pragmatic/practical way:
// - Just hard-attribute the Items that are detected as different
// similar to what BurnInStyleSheetAttributes does/did, but only
// for differing Items here
//
// (b)) is the most simple for now, but will lead to more hard
// attributes. The other possibilities will be better in the
// long term. For now, I will use (b).
SfxWhichIter aIter(rSource.GetObjectItemSet());
for (sal_uInt16 nWhich = aIter.FirstWhich(); nWhich; nWhich = aIter.NextWhich())
{
const SfxPoolItem& rOld(rSource.GetItem(nWhich));
const SfxPoolItem& rNew(GetItem(nWhich));
if (!SfxPoolItem::areSame(rOld, rNew))
SetObjectItemDirect(rOld);
}
} }
} }
@@ -220,7 +249,7 @@ namespace sdr::properties
ImpRemoveStyleSheet(); ImpRemoveStyleSheet();
} }
std::unique_ptr<BaseProperties> AttributeProperties::Clone(SdrObject&) const std::unique_ptr<BaseProperties> AttributeProperties::implCloneProperties(SdrObject&) const
{ {
assert(false && "this class is effectively abstract, should only be instantiating subclasses"); assert(false && "this class is effectively abstract, should only be instantiating subclasses");
abort(); abort();
@@ -57,7 +57,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> CaptionProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> CaptionProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new CaptionProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new CaptionProperties(*this, rObj));
} }
@@ -61,7 +61,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> CircleProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> CircleProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new CircleProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new CircleProperties(*this, rObj));
} }
@@ -59,7 +59,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> ConnectorProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> ConnectorProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new ConnectorProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new ConnectorProperties(*this, rObj));
} }
@@ -195,7 +195,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> CustomShapeProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> CustomShapeProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new CustomShapeProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new CustomShapeProperties(*this, rObj));
} }
@@ -88,7 +88,7 @@ namespace sdr::properties
} }
} }
std::unique_ptr<BaseProperties> DefaultProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> DefaultProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new DefaultProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new DefaultProperties(*this, rObj));
} }
@@ -39,7 +39,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> E3dCompoundProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> E3dCompoundProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new E3dCompoundProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new E3dCompoundProperties(*this, rObj));
} }
@@ -37,7 +37,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> E3dExtrudeProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> E3dExtrudeProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new E3dExtrudeProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new E3dExtrudeProperties(*this, rObj));
} }
@@ -37,7 +37,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> E3dLatheProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> E3dLatheProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new E3dLatheProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new E3dLatheProperties(*this, rObj));
} }
+1 -1
View File
@@ -55,7 +55,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> E3dProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> E3dProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new E3dProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new E3dProperties(*this, rObj));
} }
@@ -42,7 +42,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> E3dSceneProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> E3dSceneProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new E3dSceneProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new E3dSceneProperties(*this, rObj));
} }
@@ -37,7 +37,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> E3dSphereProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> E3dSphereProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new E3dSphereProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new E3dSphereProperties(*this, rObj));
} }
@@ -31,7 +31,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> EmptyProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> EmptyProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new EmptyProperties(rObj)); return std::unique_ptr<BaseProperties>(new EmptyProperties(rObj));
} }
@@ -89,7 +89,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> GraphicProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> GraphicProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new GraphicProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new GraphicProperties(*this, rObj));
} }
@@ -38,7 +38,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> GroupProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> GroupProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new GroupProperties(rObj)); return std::unique_ptr<BaseProperties>(new GroupProperties(rObj));
} }
@@ -67,7 +67,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> MeasureProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> MeasureProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new MeasureProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new MeasureProperties(*this, rObj));
} }
+1 -1
View File
@@ -56,7 +56,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> OleProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> OleProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new OleProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new OleProperties(*this, rObj));
} }
+1 -1
View File
@@ -41,7 +41,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> PageProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> PageProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new PageProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new PageProperties(*this, rObj));
} }
+9
View File
@@ -40,6 +40,15 @@ namespace sdr::properties
{ {
} }
void BaseProperties::postProcessAfterCloneToDifferentModel(const SdrObject& /*rSrcObj*/)
{
}
std::unique_ptr<BaseProperties> BaseProperties::Clone(SdrObject& rObj) const
{
return implCloneProperties(rObj);
}
const SdrObject& BaseProperties::GetSdrObject() const const SdrObject& BaseProperties::GetSdrObject() const
{ {
return mrObject; return mrObject;
@@ -37,7 +37,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> RectangleProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> RectangleProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new RectangleProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new RectangleProperties(*this, rObj));
} }
+1 -1
View File
@@ -78,7 +78,7 @@ namespace sdr::properties
{ {
} }
std::unique_ptr<BaseProperties> TextProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> TextProperties::implCloneProperties(SdrObject& rObj) const
{ {
return std::unique_ptr<BaseProperties>(new TextProperties(*this, rObj)); return std::unique_ptr<BaseProperties>(new TextProperties(*this, rObj));
} }
+1 -1
View File
@@ -2788,7 +2788,7 @@ void SdrObjCustomShape::NbcSetOutlinerParaObject(std::optional<OutlinerParaObjec
InvalidateRenderGeometry(); InvalidateRenderGeometry();
} }
rtl::Reference<SdrObject> SdrObjCustomShape::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrObjCustomShape::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrObjCustomShape(rTargetModel, *this); return new SdrObjCustomShape(rTargetModel, *this);
} }
+98 -3
View File
@@ -110,8 +110,10 @@
#include <svx/xlnwtit.hxx> #include <svx/xlnwtit.hxx>
#include <svx/svdglue.hxx> #include <svx/svdglue.hxx>
#include <svx/svdsob.hxx> #include <svx/svdsob.hxx>
#include <svl/whiter.hxx>
#include <svdobjplusdata.hxx> #include <svdobjplusdata.hxx>
#include <svdobjuserdatalist.hxx> #include <svdobjuserdatalist.hxx>
#include <svx/xfillit0.hxx>
#include <optional> #include <optional>
#include <libxml/xmlwriter.h> #include <libxml/xmlwriter.h>
@@ -1214,6 +1216,19 @@ bool SdrObject::HasLimitedRotation() const
return false; return false;
} }
rtl::Reference<SdrObject> SdrObject::CloneSdrObject(SdrModel& rTargetModel) const
{
if (&rTargetModel == &getSdrModelFromSdrObject())
// clone to same model, simple method
return implCloneSdrObject(rTargetModel);
// clone to different model, need to do more for creating a valid
// Style and Properties
rtl::Reference<SdrObject> aRetval(implCloneSdrObject(rTargetModel));
aRetval->GetProperties().postProcessAfterCloneToDifferentModel(*this);
return aRetval;
}
OUString SdrObject::TakeObjNameSingul() const OUString SdrObject::TakeObjNameSingul() const
{ {
OUString sName(SvxResId(STR_ObjNameSingulNONE)); OUString sName(SvxResId(STR_ObjNameSingulNONE));
@@ -1920,7 +1935,7 @@ bool SdrObject::HasTextEdit() const
bool SdrObject::Equals(const SdrObject& rOtherObj) const bool SdrObject::Equals(const SdrObject& rOtherObj) const
{ {
return (m_aAnchor.X() == rOtherObj.m_aAnchor.X() && m_aAnchor.Y() == rOtherObj.m_aAnchor.Y() && const bool bEqual(m_aAnchor.X() == rOtherObj.m_aAnchor.X() && m_aAnchor.Y() == rOtherObj.m_aAnchor.Y() &&
m_nOrdNum == rOtherObj.m_nOrdNum && mnNavigationPosition == rOtherObj.mnNavigationPosition && m_nOrdNum == rOtherObj.m_nOrdNum && mnNavigationPosition == rOtherObj.mnNavigationPosition &&
mbSupportTextIndentingOnLineWidthChange == rOtherObj.mbSupportTextIndentingOnLineWidthChange && mbSupportTextIndentingOnLineWidthChange == rOtherObj.mbSupportTextIndentingOnLineWidthChange &&
m_aCustomPromptText == rOtherObj.m_aCustomPromptText && m_aCustomPromptText == rOtherObj.m_aCustomPromptText &&
@@ -1929,7 +1944,87 @@ bool SdrObject::Equals(const SdrObject& rOtherObj) const
m_bNotVisibleAsMaster == rOtherObj.m_bNotVisibleAsMaster && m_bEmptyPresObj == rOtherObj.m_bEmptyPresObj && m_bNotVisibleAsMaster == rOtherObj.m_bNotVisibleAsMaster && m_bEmptyPresObj == rOtherObj.m_bEmptyPresObj &&
mbVisible == rOtherObj.mbVisible && m_bNoPrint == rOtherObj.m_bNoPrint && m_bSizProt == rOtherObj.m_bSizProt && mbVisible == rOtherObj.mbVisible && m_bNoPrint == rOtherObj.m_bNoPrint && m_bSizProt == rOtherObj.m_bSizProt &&
m_bMovProt == rOtherObj.m_bMovProt && m_bVirtObj == rOtherObj.m_bVirtObj && m_bMovProt == rOtherObj.m_bMovProt && m_bVirtObj == rOtherObj.m_bVirtObj &&
mnLayerID == rOtherObj.mnLayerID && GetMergedItemSet().Equals(rOtherObj.GetMergedItemSet(), false) ); mnLayerID == rOtherObj.mnLayerID && IsGroupObject() == rOtherObj.IsGroupObject());
if (!bEqual)
// compare results *without* Items are already not equal, done
return false;
if (IsGroupObject())
{
// for GroupObjects, do what was done before. NOTE: This will create
// merged ItemSets for Group content, not sure if that is needed.
// It would also be possible to enter content & compare recursively
return GetMergedItemSet().Equals(rOtherObj.GetMergedItemSet(), false);
}
// Do ContentCompare - Items are compared including parent e.g. Styles.
// The check above what was done before is more 'hard' in the sense that
// it WILL fail for same Item content when e.g. count of hard Items differs,
// but with parent ItemSet is actually equal. ContentCompare is necessary
// after e.g. in AttributeProperties::postProcessAfterCloneToDifferentModel
// the Items of an Object were hard-set/corrected
const SfxItemSet& rSrcItemSet(GetObjectItemSet());
const SfxItemSet& rDstItemSet(rOtherObj.GetObjectItemSet());
SfxWhichIter aIter(rSrcItemSet);
const SdrPage* pPage(getSdrPageFromSdrObject());
const bool bOnMasterPage(nullptr != pPage && pPage->IsMasterPage());
for (sal_uInt16 nWhich = aIter.FirstWhich(); nWhich; nWhich = aIter.NextWhich())
{
const SfxPoolItem& rOld(rSrcItemSet.Get(nWhich));
const SfxPoolItem& rNew(rDstItemSet.Get(nWhich));
if (!SfxPoolItem::areSame(rOld, rNew))
{
if (bOnMasterPage)
{
// we have strange effects for Items in Objects on MasterPages on
// some Items that seem to be corrected/set different due to being
// PresObjs or defaults or similar on MasterPage. React on those
// on MasterPages
switch (nWhich)
{
case XATTRSET_LINE:
case XATTRSET_FILL:
// these Items are not really used (maybe removed),
// ignore. Diffs come from these being SfxSetItems
// on different models with slightly different defaults
// in the contained complete default SfxItemSet
continue;
// somewhere defaults for some objects seem to be set on MasterPages
// that define Items (here: for XATTR_FILLGRADIENT and FillStyle_BITMAP).
// These can be ignored when the FillStyle does not *use* these anyways.
// Better do this already for all FillStyles, you never know.
case XATTR_FILLCOLOR:
if (drawing::FillStyle_SOLID != rSrcItemSet.Get(XATTR_FILLSTYLE).GetValue())
continue;
break;
case XATTR_FILLGRADIENT:
if (drawing::FillStyle_GRADIENT != rSrcItemSet.Get(XATTR_FILLSTYLE).GetValue())
continue;
break;
case XATTR_FILLHATCH:
if (drawing::FillStyle_HATCH != rSrcItemSet.Get(XATTR_FILLSTYLE).GetValue())
continue;
break;
case XATTR_FILLBITMAP:
if (drawing::FillStyle_BITMAP != rSrcItemSet.Get(XATTR_FILLSTYLE).GetValue())
continue;
break;
default: break;
}
}
// Item is different, done
return false;
}
}
// all Items are Content-Equal
return true;
} }
void SdrObject::dumpAsXml(xmlTextWriterPtr pWriter) const void SdrObject::dumpAsXml(xmlTextWriterPtr pWriter) const
@@ -3461,7 +3556,7 @@ public:
{ {
} }
rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override rtl::Reference<SdrObject> implCloneSdrObject(SdrModel& rTargetModel) const override
{ {
return new EmptyObject(rTargetModel, *this); return new EmptyObject(rTargetModel, *this);
} }
+1 -1
View File
@@ -232,7 +232,7 @@ SdrObjKind SdrCaptionObj::GetObjIdentifier() const
return SdrObjKind::Caption; return SdrObjKind::Caption;
} }
rtl::Reference<SdrObject> SdrCaptionObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrCaptionObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrCaptionObj(rTargetModel, *this); return new SdrCaptionObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -370,7 +370,7 @@ OUString SdrCircObj::TakeObjNamePlural() const
return SvxResId(pID); return SvxResId(pID);
} }
rtl::Reference<SdrObject> SdrCircObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrCircObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrCircObj(rTargetModel, *this); return new SdrCircObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -1721,7 +1721,7 @@ void SdrEdgeObj::Reformat()
} }
} }
rtl::Reference<SdrObject> SdrEdgeObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrEdgeObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrEdgeObj(rTargetModel, *this); return new SdrEdgeObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -856,7 +856,7 @@ rtl::Reference<SdrObject> SdrGrafObj::getFullDragClone() const
return pRetval; return pRetval;
} }
rtl::Reference<SdrObject> SdrGrafObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrGrafObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrGrafObj(rTargetModel, *this); return new SdrGrafObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -268,7 +268,7 @@ const tools::Rectangle& SdrObjGroup::GetSnapRect() const
} }
} }
rtl::Reference<SdrObject> SdrObjGroup::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrObjGroup::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrObjGroup(rTargetModel, *this); return new SdrObjGroup(rTargetModel, *this);
} }
+1 -1
View File
@@ -703,7 +703,7 @@ void SdrMeasureObj::TakeUnrotatedSnapRect(tools::Rectangle& rRect) const
} }
} }
rtl::Reference<SdrObject> SdrMeasureObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrMeasureObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrMeasureObj(rTargetModel, *this); return new SdrMeasureObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -207,7 +207,7 @@ OUString SdrMediaObj::TakeObjNamePlural() const
return SvxResId(STR_ObjNamePluralMEDIA); return SvxResId(STR_ObjNamePluralMEDIA);
} }
rtl::Reference<SdrObject> SdrMediaObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrMediaObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrMediaObj(rTargetModel, *this); return new SdrMediaObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -1577,7 +1577,7 @@ OUString SdrOle2Obj::TakeObjNamePlural() const
return SvxResId(mpImpl->mbFrame ? STR_ObjNamePluralFrame : STR_ObjNamePluralOLE2); return SvxResId(mpImpl->mbFrame ? STR_ObjNamePluralFrame : STR_ObjNamePluralOLE2);
} }
rtl::Reference<SdrObject> SdrOle2Obj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrOle2Obj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrOle2Obj(rTargetModel, *this); return new SdrOle2Obj(rTargetModel, *this);
} }
+1 -1
View File
@@ -151,7 +151,7 @@ void SdrPageObj::TakeObjInfo(SdrObjTransformInfoRec& rInfo) const
rInfo.bCanConvToPolyLineToArea=false; rInfo.bCanConvToPolyLineToArea=false;
} }
rtl::Reference<SdrObject> SdrPageObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrPageObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrPageObj(rTargetModel, *this); return new SdrPageObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -1821,7 +1821,7 @@ SdrObjKind SdrPathObj::GetObjIdentifier() const
return meKind; return meKind;
} }
rtl::Reference<SdrObject> SdrPathObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrPathObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrPathObj(rTargetModel, *this); return new SdrPathObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -214,7 +214,7 @@ OUString SdrRectObj::TakeObjNamePlural() const
return SvxResId(pResId); return SvxResId(pResId);
} }
rtl::Reference<SdrObject> SdrRectObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrRectObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrRectObj(rTargetModel, *this); return new SdrRectObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -1055,7 +1055,7 @@ OUString SdrTextObj::TakeObjNamePlural() const
return sName; return sName;
} }
rtl::Reference<SdrObject> SdrTextObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrTextObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrTextObj(rTargetModel, *this); return new SdrTextObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -274,7 +274,7 @@ OUString SdrUnoObj::TakeObjNamePlural() const
return SvxResId(STR_ObjNamePluralUno); return SvxResId(STR_ObjNamePluralUno);
} }
rtl::Reference<SdrObject> SdrUnoObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrUnoObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrUnoObj(rTargetModel, *this); return new SdrUnoObj(rTargetModel, *this);
} }
+1 -1
View File
@@ -200,7 +200,7 @@ void SdrVirtObj::RecalcBoundRect()
setOutRectangle(aRectangle); setOutRectangle(aRectangle);
} }
rtl::Reference<SdrObject> SdrVirtObj::CloneSdrObject(SdrModel& rTargetModel) const rtl::Reference<SdrObject> SdrVirtObj::implCloneSdrObject(SdrModel& rTargetModel) const
{ {
return new SdrVirtObj(rTargetModel, *this); return new SdrVirtObj(rTargetModel, *this);
// TTTT not sure if the above works - how could SdrObjFactory::MakeNewObject // TTTT not sure if the above works - how could SdrObjFactory::MakeNewObject
+1 -1
View File
@@ -174,7 +174,7 @@ SdrText* CellTextProvider::getText(sal_Int32 nIndex) const
{ {
} }
std::unique_ptr<BaseProperties> CellProperties::Clone(SdrObject& rObj) const std::unique_ptr<BaseProperties> CellProperties::implCloneProperties(SdrObject& rObj) const
{ {
OSL_FAIL("CellProperties::Clone(), does not work yet!"); OSL_FAIL("CellProperties::Clone(), does not work yet!");
return std::unique_ptr<BaseProperties>(new CellProperties(*this, rObj,nullptr)); return std::unique_ptr<BaseProperties>(new CellProperties(*this, rObj,nullptr));

Some files were not shown because too many files have changed in this diff Show More