diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2018-07-27 13:38:46 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-10-16 12:32:24 +0200 |
commit | 2cf13c31c6aa262e4bb4b075597f3543ecd3c4a6 (patch) | |
tree | a62439c3adf4e943788555209209bceffc54d863 | |
parent | d5d09bb733842252b3e2d6e7480b211e67136a75 (diff) |
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@cib.de>
(cherry picked from commit e5ee79b5c089e72e6b24c04c7c820d706bd39993)
Reviewed-on: https://gerrit.libreoffice.org/61316
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/svx/fmview.hxx | 6 | ||||
-rw-r--r-- | reportdesign/source/ui/report/ReportController.cxx | 51 | ||||
-rw-r--r-- | svx/source/form/fmview.cxx | 4 | ||||
-rw-r--r-- | svx/source/form/fmvwimp.cxx | 32 | ||||
-rw-r--r-- | svx/source/inc/fmvwimp.hxx | 6 |
5 files changed, 78 insertions, 21 deletions
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 ab76f3f14616..5a6fa67586df 100644 --- a/reportdesign/source/ui/report/ReportController.cxx +++ b/reportdesign/source/ui/report/ReportController.cxx @@ -3137,11 +3137,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); @@ -3434,12 +3449,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 f31659ea3a40..260892f1d9eb 100644 --- a/svx/source/form/fmvwimp.cxx +++ b/svx/source/form/fmvwimp.cxx @@ -1514,11 +1514,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 ) @@ -1539,7 +1557,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; @@ -1582,7 +1600,7 @@ bool FmXFormView::createControlLabelPair( OutputDevice const & _rOutDev, sal_Int { pLabel.reset( dynamic_cast< SdrUnoObj* >( SdrObjFactory::MakeNewObject( - *_pModel, + _rModel, _nInventor, _nLabelObjectID))); @@ -1614,7 +1632,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 ); |