[Libreoffice-commits] core.git: include/svx reportdesign/source svx/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sat Jul 28 16:36:17 UTC 2018


 include/svx/fmview.hxx                             |    6 ++
 reportdesign/source/ui/report/ReportController.cxx |   51 ++++++++++++++++-----
 svx/source/form/fmview.cxx                         |    4 -
 svx/source/form/fmvwimp.cxx                        |   32 ++++++++++---
 svx/source/inc/fmvwimp.hxx                         |    6 ++
 5 files changed, 78 insertions(+), 21 deletions(-)

New commits:
commit e5ee79b5c089e72e6b24c04c7c820d706bd39993
Author:     Armin Le Grand <Armin.Le.Grand at cib.de>
AuthorDate: Fri Jul 27 13:38:46 2018 +0200
Commit:     Armin Le Grand <Armin.Le.Grand at cib.de>
CommitDate: Sat Jul 28 18:35:57 2018 +0200

    tdf#118963 Hand over a SdrModel to createControlLabelPair
    
    Change-Id: I34a35ff0700d14474fa9946851812c25c4eb4bc1
    Reviewed-on: https://gerrit.libreoffice.org/58187
    Tested-by: Jenkins
    Reviewed-by: Armin Le Grand <Armin.Le.Grand at cib.de>

diff --git a/include/svx/fmview.hxx b/include/svx/fmview.hxx
index c47267f6a968..90125b46f5b0 100644
--- a/include/svx/fmview.hxx
+++ b/include/svx/fmview.hxx
@@ -97,7 +97,11 @@ public:
         sal_uInt16 _nLabelObjectID,
         SdrPage* _pLabelPage,
         SdrPage* _pControlPage,
-        SdrModel* _pModel,
+
+        // tdf#118963 Need a SdrModel for SdrObject creation. To make the
+        // demand clear, hand over a SdrMldel&
+        SdrModel& _rModel,
+
         SdrUnoObj*& _rpLabel,
         SdrUnoObj*& _rpControl
     );
diff --git a/reportdesign/source/ui/report/ReportController.cxx b/reportdesign/source/ui/report/ReportController.cxx
index 013733fb128e..64373669f9b4 100644
--- a/reportdesign/source/ui/report/ReportController.cxx
+++ b/reportdesign/source/ui/report/ReportController.cxx
@@ -3136,11 +3136,26 @@ void OReportController::createControl(const Sequence< PropertyValue >& _aArgs,co
     {
         SdrUnoObj* pLabel( nullptr );
         SdrUnoObj* pControl( nullptr );
-        FmFormView::createControlLabelPair( getDesignView()
-                            ,nLeftMargin,0
-                            ,nullptr,nullptr,_nObjectId,SdrInventor::ReportDesign,OBJ_DLG_FIXEDTEXT,
-                         nullptr,pSectionWindow->getReportSection().getPage(),m_aReportModel.get(),
-                         pLabel,pControl);
+
+        FmFormView::createControlLabelPair(
+            getDesignView(),
+            nLeftMargin,
+            0,
+            nullptr,
+            nullptr,
+            _nObjectId,
+            SdrInventor::ReportDesign,
+            OBJ_DLG_FIXEDTEXT,
+            nullptr,
+            pSectionWindow->getReportSection().getPage(),
+
+            // tdf#118963 Need a SdrModel for SdrObject creation. Dereferencing
+            // m_aReportModel seems pretty safe, it's done in other places, initialized
+            // in impl_initialize and throws a RuntimeException if not existing.
+            *m_aReportModel,
+
+            pLabel,
+            pControl);
 
         // always use SdrObject::Free(...) for SdrObjects (!)
         SdrObject* pTemp(pLabel);
@@ -3433,12 +3448,28 @@ void OReportController::addPairControls(const Sequence< PropertyValue >& aArgs)
             OSectionView* pSectionViews[2];
             pSectionViews[0] = &pSectionWindow[1]->getReportSection().getSectionView();
             pSectionViews[1] = &pSectionWindow[0]->getReportSection().getSectionView();
+
             // find this in svx
-            FmFormView::createControlLabelPair( getDesignView()
-                ,nLeftMargin,0
-                ,xField,xNumberFormats,nOBJID,SdrInventor::ReportDesign,OBJ_DLG_FIXEDTEXT,
-                pSectionWindow[1]->getReportSection().getPage(),pSectionWindow[0]->getReportSection().getPage(),m_aReportModel.get(),
-                pControl[0],pControl[1]);
+            FmFormView::createControlLabelPair(
+                getDesignView(),
+                nLeftMargin,
+                0,
+                xField,
+                xNumberFormats,
+                nOBJID,
+                SdrInventor::ReportDesign,
+                OBJ_DLG_FIXEDTEXT,
+                pSectionWindow[1]->getReportSection().getPage(),
+                pSectionWindow[0]->getReportSection().getPage(),
+
+                // tdf#118963 Need a SdrModel for SdrObject creation. Dereferencing
+                // m_aReportModel seems pretty safe, it's done in other places, initialized
+                // in impl_initialize and throws a RuntimeException if not existing.
+                *m_aReportModel,
+
+                pControl[0],
+                pControl[1]);
+
             if ( pControl[0] && pControl[1] )
             {
                 SdrPageView* pPgViews[2];
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index 1d9aadc0ab90..15df6aa0adfb 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -566,13 +566,13 @@ FmFormObj* FmFormView::getMarkedGrid() const
 void FmFormView::createControlLabelPair( OutputDevice const * _pOutDev, sal_Int32 _nXOffsetMM, sal_Int32 _nYOffsetMM,
     const Reference< XPropertySet >& _rxField, const Reference< XNumberFormats >& _rxNumberFormats,
     sal_uInt16 _nControlObjectID, SdrInventor _nInventor, sal_uInt16 _nLabelObjectID,
-    SdrPage* _pLabelPage, SdrPage* _pControlPage, SdrModel* _pModel, SdrUnoObj*& _rpLabel, SdrUnoObj*& _rpControl )
+    SdrPage* _pLabelPage, SdrPage* _pControlPage, SdrModel& _rModel, SdrUnoObj*& _rpLabel, SdrUnoObj*& _rpControl )
 {
     FmXFormView::createControlLabelPair(
         *_pOutDev, _nXOffsetMM, _nYOffsetMM,
         _rxField, _rxNumberFormats,
         _nControlObjectID, "", _nInventor, _nLabelObjectID,
-        _pLabelPage, _pControlPage, _pModel,
+        _pLabelPage, _pControlPage, _rModel,
         _rpLabel, _rpControl
     );
 }
diff --git a/svx/source/form/fmvwimp.cxx b/svx/source/form/fmvwimp.cxx
index 27af10cba6a5..f396e15e847b 100644
--- a/svx/source/form/fmvwimp.cxx
+++ b/svx/source/form/fmvwimp.cxx
@@ -1515,11 +1515,29 @@ bool FmXFormView::createControlLabelPair( OutputDevice const & _rOutDev, sal_Int
         const Reference< XDataSource >& _rxDataSource, const OUString& _rDataSourceName,
         const OUString& _rCommand, const sal_Int32 _nCommandType )
 {
-    if  (   !createControlLabelPair( _rOutDev, _nXOffsetMM, _nYOffsetMM,
-                _rxField, _rxNumberFormats, _nControlObjectID, _rFieldPostfix, SdrInventor::FmForm, OBJ_FM_FIXEDTEXT,
-                nullptr, nullptr, nullptr, _rpLabel, _rpControl )
-        )
+    if(!createControlLabelPair(
+        _rOutDev,
+        _nXOffsetMM,
+        _nYOffsetMM,
+        _rxField,
+        _rxNumberFormats,
+        _nControlObjectID,
+        _rFieldPostfix,
+        SdrInventor::FmForm,
+        OBJ_FM_FIXEDTEXT,
+        nullptr,
+        nullptr,
+
+        // tdf#118963 Hand over a SdrModel to SdrObject-creation. It uses the local m_pView
+        // and already returning false when nullptr == getView() could be done, but m_pView
+        // is already dereferenced here in many places (see below), so just use it for now.
+        getView()->getSdrModelFromSdrView(),
+
+        _rpLabel,
+        _rpControl))
+    {
         return false;
+    }
 
     // insert the control model(s) into the form component hierarchy
     if ( _rpLabel )
@@ -1540,7 +1558,7 @@ bool FmXFormView::createControlLabelPair( OutputDevice const & _rOutDev, sal_Int
     const Reference< XPropertySet >& _rxField,
     const Reference< XNumberFormats >& _rxNumberFormats, sal_uInt16 _nControlObjectID,
     const OUString& _rFieldPostfix, SdrInventor _nInventor, sal_uInt16 _nLabelObjectID,
-    SdrPage* /*_pLabelPage*/, SdrPage* /*_pControlPage*/, SdrModel* _pModel, SdrUnoObj*& _rpLabel, SdrUnoObj*& _rpControl)
+    SdrPage* /*_pLabelPage*/, SdrPage* /*_pControlPage*/, SdrModel& _rModel, SdrUnoObj*& _rpLabel, SdrUnoObj*& _rpControl)
 {
     sal_Int32 nDataType = 0;
     OUString sFieldName;
@@ -1583,7 +1601,7 @@ bool FmXFormView::createControlLabelPair( OutputDevice const & _rOutDev, sal_Int
     {
         pLabel.reset( dynamic_cast< SdrUnoObj* >(
             SdrObjFactory::MakeNewObject(
-                *_pModel,
+                _rModel,
                 _nInventor,
                 _nLabelObjectID)));
 
@@ -1615,7 +1633,7 @@ bool FmXFormView::createControlLabelPair( OutputDevice const & _rOutDev, sal_Int
     // the control
     ::std::unique_ptr< SdrUnoObj, SdrObjectFreeOp > pControl( dynamic_cast< SdrUnoObj* >(
         SdrObjFactory::MakeNewObject(
-            *_pModel,
+            _rModel,
              _nInventor,
              _nControlObjectID)));
 
diff --git a/svx/source/inc/fmvwimp.hxx b/svx/source/inc/fmvwimp.hxx
index 8e77b3eeb641..5fb1403bec42 100644
--- a/svx/source/inc/fmvwimp.hxx
+++ b/svx/source/inc/fmvwimp.hxx
@@ -261,7 +261,11 @@ private:
         sal_uInt16 _nLabelObjectID,
         SdrPage* _pLabelPage,
         SdrPage* _pControlPage,
-        SdrModel* _pModel,
+
+        // tdf#118963 Need a SdrModel for SdrObject creation. To make the
+        // demand clear, hand over a SdrMldel&
+        SdrModel& _rModel,
+
         SdrUnoObj*& _rpLabel,
         SdrUnoObj*& _rpControl
     );


More information about the Libreoffice-commits mailing list