summaryrefslogtreecommitdiff
path: root/reportdesign
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2023-05-11 14:20:03 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-05-11 15:30:34 +0200
commit957ac2bd3e6be97179f87f96fb9b5f13c0635834 (patch)
treed8bc40d988273461bb1f8bc325bfafd16879c739 /reportdesign
parent354cfa20af48207ac35ac14b832b7e44836726d7 (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.hxx5
-rw-r--r--reportdesign/source/core/sdr/RptObject.cxx47
-rw-r--r--reportdesign/source/ui/report/dlgedfac.cxx22
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");