diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-05-11 14:20:03 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-05-11 15:30:34 +0200 |
commit | 957ac2bd3e6be97179f87f96fb9b5f13c0635834 (patch) | |
tree | d8bc40d988273461bb1f8bc325bfafd16879c739 /reportdesign | |
parent | 354cfa20af48207ac35ac14b832b7e44836726d7 (diff) |
tdf#150732 ReportBuilder,Moving fields breaks connection of field to datasource
regression from
commit 09cb778b6eb7d3a5b9029965a1320b49c90e7295
Author: Noel <noel.grandin@collabora.co.uk>
Date: Tue Feb 9 13:42:22 2021 +0200
clean up SdrObject cloning
The changed order of initialisation of the copied objects meant that
they ended up with a missing servicename, which broke copying of
properties
Change-Id: I76a2a4721f1e3669684094a86cd501c03f80206d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151672
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'reportdesign')
-rw-r--r-- | reportdesign/inc/RptObject.hxx | 5 | ||||
-rw-r--r-- | reportdesign/source/core/sdr/RptObject.cxx | 47 | ||||
-rw-r--r-- | reportdesign/source/ui/report/dlgedfac.cxx | 22 |
3 files changed, 47 insertions, 27 deletions
diff --git a/reportdesign/inc/RptObject.hxx b/reportdesign/inc/RptObject.hxx index f0007d3eadca..9cafcccbfecc 100644 --- a/reportdesign/inc/RptObject.hxx +++ b/reportdesign/inc/RptObject.hxx @@ -145,8 +145,7 @@ private: SdrModel& rSdrModel, const css::uno::Reference< css::report::XReportComponent>& _xComponent); OCustomShape( - SdrModel& rSdrModel, - const OUString& _sComponentName); + SdrModel& rSdrModel); virtual void NbcMove( const Size& rSize ) override; virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override; @@ -195,7 +194,6 @@ private: SdrObjKind _nType); OOle2Obj( SdrModel& rSdrModel, - const OUString& _sComponentName, SdrObjKind _nType); // copy constructor OOle2Obj(SdrModel& rSdrModel, const OOle2Obj& rSource); @@ -228,7 +226,6 @@ class REPORTDESIGN_DLLPUBLIC OUnoObject final : public SdrUnoObj , public OObjec bool m_bSetDefaultLabel; OUnoObject(SdrModel& rSdrModel, - const OUString& _sComponentName, const OUString& rModelName, SdrObjKind _nObjectType); OUnoObject( diff --git a/reportdesign/source/core/sdr/RptObject.cxx b/reportdesign/source/core/sdr/RptObject.cxx index 1e4285162531..7432e238f7cc 100644 --- a/reportdesign/source/core/sdr/RptObject.cxx +++ b/reportdesign/source/core/sdr/RptObject.cxx @@ -99,7 +99,7 @@ rtl::Reference<SdrObject> OObjectBase::createObject( rtl::Reference<OUnoObject> pUnoObj = new OUnoObject( rTargetModel, _xComponent, - OUString("com.sun.star.form.component.FixedText"), + "com.sun.star.form.component.FixedText", SdrObjKind::ReportDesignFixedText); pNewObj = pUnoObj; @@ -112,14 +112,14 @@ rtl::Reference<SdrObject> OObjectBase::createObject( pNewObj = new OUnoObject( rTargetModel, _xComponent, - OUString("com.sun.star.form.component.DatabaseImageControl"), + "com.sun.star.form.component.DatabaseImageControl", SdrObjKind::ReportDesignImageControl); break; case SdrObjKind::ReportDesignFormattedField: pNewObj = new OUnoObject( rTargetModel, _xComponent, - OUString("com.sun.star.form.component.FormattedField"), + "com.sun.star.form.component.FormattedField", SdrObjKind::ReportDesignFormattedField); break; case SdrObjKind::ReportDesignHorizontalFixedLine: @@ -127,7 +127,7 @@ rtl::Reference<SdrObject> OObjectBase::createObject( pNewObj = new OUnoObject( rTargetModel, _xComponent, - OUString("com.sun.star.awt.UnoControlFixedLineModel"), + "com.sun.star.awt.UnoControlFixedLineModel", nType); break; case SdrObjKind::CustomShape: @@ -314,6 +314,7 @@ OObjectBase::OObjectBase(OUString _sComponentName) :m_sComponentName(std::move(_sComponentName)) ,m_bIsListening(false) { + assert(!m_sComponentName.isEmpty()); } OObjectBase::~OObjectBase() @@ -438,10 +439,9 @@ OCustomShape::OCustomShape( } OCustomShape::OCustomShape( - SdrModel& rSdrModel, - const OUString& _sComponentName) + SdrModel& rSdrModel) : SdrObjCustomShape(rSdrModel) - ,OObjectBase(_sComponentName) + ,OObjectBase(SERVICE_SHAPE) { m_bIsListening = true; } @@ -545,13 +545,37 @@ void OCustomShape::setUnoShape( const uno::Reference< drawing::XShape >& rxUnoSh m_xReportComponent.clear(); } +static OUString ObjectTypeToServiceName(SdrObjKind _nObjectType) +{ + switch (_nObjectType) + { + case SdrObjKind::ReportDesignFixedText: + return SERVICE_FIXEDTEXT; + case SdrObjKind::ReportDesignImageControl: + return SERVICE_IMAGECONTROL; + case SdrObjKind::ReportDesignFormattedField: + return SERVICE_FORMATTEDFIELD; + case SdrObjKind::ReportDesignVerticalFixedLine: + case SdrObjKind::ReportDesignHorizontalFixedLine: + return SERVICE_FIXEDLINE; + case SdrObjKind::CustomShape: + return SERVICE_SHAPE; + case SdrObjKind::ReportDesignSubReport: + return SERVICE_REPORTDEFINITION; + case SdrObjKind::OLE2: + return "com.sun.star.chart2.ChartDocument"; + default: + break; + } + assert(false && "Unknown object id"); + return ""; +} OUnoObject::OUnoObject( SdrModel& rSdrModel, - const OUString& _sComponentName, const OUString& rModelName, SdrObjKind _nObjectType) : SdrUnoObj(rSdrModel, rModelName) - ,OObjectBase(_sComponentName) + ,OObjectBase(ObjectTypeToServiceName(_nObjectType)) ,m_nObjectType(_nObjectType) // tdf#119067 ,m_bSetDefaultLabel(false) @@ -563,7 +587,7 @@ OUnoObject::OUnoObject( OUnoObject::OUnoObject( SdrModel& rSdrModel, OUnoObject const & rSource) : SdrUnoObj(rSdrModel, rSource) - ,OObjectBase(rSource.getServiceName()) + ,OObjectBase(ObjectTypeToServiceName(rSource.m_nObjectType)) // source may not have a service name ,m_nObjectType(rSource.m_nObjectType) // tdf#119067 ,m_bSetDefaultLabel(rSource.m_bSetDefaultLabel) @@ -900,10 +924,9 @@ OOle2Obj::OOle2Obj( OOle2Obj::OOle2Obj( SdrModel& rSdrModel, - const OUString& _sComponentName, SdrObjKind _nType) : SdrOle2Obj(rSdrModel) - ,OObjectBase(_sComponentName) + ,OObjectBase(ObjectTypeToServiceName(_nType)) ,m_nType(_nType) ,m_bOnlyOnce(true) { diff --git a/reportdesign/source/ui/report/dlgedfac.cxx b/reportdesign/source/ui/report/dlgedfac.cxx index fe05fcdf2b97..ac820a95a3c6 100644 --- a/reportdesign/source/ui/report/dlgedfac.cxx +++ b/reportdesign/source/ui/report/dlgedfac.cxx @@ -49,25 +49,25 @@ IMPL_STATIC_LINK( switch( aParams.nObjIdentifier ) { case SdrObjKind::ReportDesignFixedText: - pNewObj = new OUnoObject(aParams.rSdrModel, SERVICE_FIXEDTEXT - ,OUString("com.sun.star.form.component.FixedText") + pNewObj = new OUnoObject(aParams.rSdrModel + ,"com.sun.star.form.component.FixedText" ,SdrObjKind::ReportDesignFixedText); break; case SdrObjKind::ReportDesignImageControl: - pNewObj = new OUnoObject(aParams.rSdrModel, SERVICE_IMAGECONTROL - ,OUString("com.sun.star.form.component.DatabaseImageControl") + pNewObj = new OUnoObject(aParams.rSdrModel + ,"com.sun.star.form.component.DatabaseImageControl" ,SdrObjKind::ReportDesignImageControl); break; case SdrObjKind::ReportDesignFormattedField: - pNewObj = new OUnoObject(aParams.rSdrModel, SERVICE_FORMATTEDFIELD - ,OUString("com.sun.star.form.component.FormattedField") + pNewObj = new OUnoObject(aParams.rSdrModel + ,"com.sun.star.form.component.FormattedField" ,SdrObjKind::ReportDesignFormattedField); break; case SdrObjKind::ReportDesignVerticalFixedLine: case SdrObjKind::ReportDesignHorizontalFixedLine: { - rtl::Reference<OUnoObject> pObj = new OUnoObject(aParams.rSdrModel, SERVICE_FIXEDLINE - ,OUString("com.sun.star.awt.UnoControlFixedLineModel") + rtl::Reference<OUnoObject> pObj = new OUnoObject(aParams.rSdrModel + ,"com.sun.star.awt.UnoControlFixedLineModel" ,aParams.nObjIdentifier); pNewObj = pObj; if ( aParams.nObjIdentifier == SdrObjKind::ReportDesignHorizontalFixedLine ) @@ -78,13 +78,13 @@ IMPL_STATIC_LINK( } break; case SdrObjKind::CustomShape: - pNewObj = new OCustomShape(aParams.rSdrModel, SERVICE_SHAPE); + pNewObj = new OCustomShape(aParams.rSdrModel); break; case SdrObjKind::ReportDesignSubReport: - pNewObj = new OOle2Obj(aParams.rSdrModel, SERVICE_REPORTDEFINITION, SdrObjKind::ReportDesignSubReport); + pNewObj = new OOle2Obj(aParams.rSdrModel, SdrObjKind::ReportDesignSubReport); break; case SdrObjKind::OLE2: - pNewObj = new OOle2Obj(aParams.rSdrModel, "com.sun.star.chart2.ChartDocument", SdrObjKind::OLE2); + pNewObj = new OOle2Obj(aParams.rSdrModel, SdrObjKind::OLE2); break; default: OSL_FAIL("Unknown object id"); |