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:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user