reportdesign/inc/RptObject.hxx             |    5 ---
 reportdesign/source/core/sdr/RptObject.cxx |   47 +++++++++++++++++++++--------
 reportdesign/source/ui/report/dlgedfac.cxx |   22 ++++++-------
 3 files changed, 47 insertions(+), 27 deletions(-)

New commits:
commit 957ac2bd3e6be97179f87f96fb9b5f13c0635834
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu May 11 14:20:03 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu May 11 15:30:34 2023 +0200

    tdf#150732 ReportBuilder,Moving fields breaks connection of field to 
datasource
    
    regression from
        commit 09cb778b6eb7d3a5b9029965a1320b49c90e7295
        Author: Noel <noel.gran...@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.gran...@collabora.co.uk>

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");

Reply via email to