tdf#150732 ReportBuilder,Moving fields breaks connection of field to datasource

regression from
    commit 09cb778b6e
    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>
This commit is contained in:
Noel Grandin
2023-05-11 15:30:34 +02:00
parent 354cfa20af
commit 957ac2bd3e
3 changed files with 47 additions and 27 deletions
+1 -4
View File
@@ -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(
+35 -12
View File
@@ -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)
{
+11 -11
View File
@@ -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");