diff options
author | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2017-03-23 15:47:57 +0100 |
---|---|---|
committer | Björn Michaelsen <bjoern.michaelsen@canonical.com> | 2017-03-24 00:09:56 +0000 |
commit | 522e9c65faef684a22151ddf009a5a192838b522 (patch) | |
tree | 76b7fedbf589cf5fe3fc87ad09fb9091e96ecf95 /chart2 | |
parent | e8c723ac7fae81232a5e33978e42f5aaa642ed3f (diff) |
UNO objects should never hold a VclPtr they dont own on heap ...
... so admit that the VclPtr that ChartController used to have is really
owned by m_xViewWindow, and get fetch that (stack-scoped only) from
there.
Change-Id: Ib9e2cd20201ebe5019c3607a8c65cb1a9856812f
Reviewed-on: https://gerrit.libreoffice.org/35603
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Björn Michaelsen <bjoern.michaelsen@canonical.com>
Diffstat (limited to 'chart2')
8 files changed, 128 insertions, 109 deletions
diff --git a/chart2/source/controller/inc/ChartController.hxx b/chart2/source/controller/inc/ChartController.hxx index d58708d1cf18..02a3468365b2 100644 --- a/chart2/source/controller/inc/ChartController.hxx +++ b/chart2/source/controller/inc/ChartController.hxx @@ -379,7 +379,6 @@ private: TheModelRef m_aModel; //view - VclPtr<ChartWindow> m_pChartWindow; css::uno::Reference<css::awt::XWindow> m_xViewWindow; css::uno::Reference<css::uno::XInterface> m_xChartView; std::shared_ptr< DrawModelWrapper > m_pDrawModelWrapper; diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index abcdeea845d1..d67868972049 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -106,7 +106,6 @@ ChartController::ChartController(uno::Reference<uno::XComponentContext> const & m_xFrame( nullptr ), m_aModelMutex(), m_aModel( nullptr, m_aModelMutex ), - m_pChartWindow( nullptr ), m_xViewWindow(), m_xChartView(), m_pDrawModelWrapper(), @@ -442,21 +441,22 @@ void SAL_CALL ChartController::attachFrame( pParent = VCLUnoHelper::GetWindow( xContainerWindow ).get(); } - if(m_pChartWindow) + auto pChartWindow(GetChartWindow()); + if(pChartWindow) { //@todo delete ... - m_pChartWindow->clear(); + pChartWindow->clear(); m_apDropTargetHelper.reset(); } { // calls to VCL SolarMutexGuard aSolarGuard; - m_pChartWindow = VclPtr<ChartWindow>::Create(this,pParent,pParent?pParent->GetStyle():0); - m_pChartWindow->SetBackground();//no Background - m_xViewWindow.set( m_pChartWindow->GetComponentInterface(), uno::UNO_QUERY ); - m_pChartWindow->Show(); + pChartWindow = VclPtr<ChartWindow>::Create(this,pParent,pParent?pParent->GetStyle():0); + pChartWindow->SetBackground();//no Background + m_xViewWindow.set( pChartWindow->GetComponentInterface(), uno::UNO_QUERY ); + pChartWindow->Show(); m_apDropTargetHelper.reset( - new ChartDropTargetHelper( m_pChartWindow->GetDropTarget(), + new ChartDropTargetHelper( pChartWindow->GetDropTarget(), uno::Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY ))); impl_createDrawViewController(); @@ -506,14 +506,15 @@ void SAL_CALL ChartController::attachFrame( //XModeChangeListener void SAL_CALL ChartController::modeChanged( const util::ModeChangeEvent& rEvent ) { + auto pChartWindow(GetChartWindow()); //adjust controller to view status changes if( rEvent.NewMode == "dirty" ) { //the view has become dirty, we should repaint it if we have a window SolarMutexGuard aGuard; - if( m_pChartWindow ) - m_pChartWindow->ForceInvalidate(); + if( pChartWindow ) + pChartWindow->ForceInvalidate(); } else if( rEvent.NewMode == "invalid" ) { @@ -533,7 +534,7 @@ void SAL_CALL ChartController::modeChanged( const util::ModeChangeEvent& rEvent //the view was rebuild so we can start some actions on it again if( !m_bConnectingToView ) { - if(m_pChartWindow && m_aModel.is() ) + if(pChartWindow && m_aModel.is() ) { m_bConnectingToView = true; @@ -556,8 +557,8 @@ void SAL_CALL ChartController::modeChanged( const util::ModeChangeEvent& rEvent { SolarMutexGuard aGuard; - if( m_pChartWindow ) - m_pChartWindow->Invalidate(); + if( pChartWindow ) + pChartWindow->Invalidate(); } } @@ -645,8 +646,9 @@ sal_Bool SAL_CALL ChartController::attachModel( const uno::Reference< frame::XMo //the frameloader is responsible to call xModel->connectController { SolarMutexGuard aGuard2; - if( m_pChartWindow ) - m_pChartWindow->Invalidate(); + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) + pChartWindow->Invalidate(); } uno::Reference< document::XUndoManagerSupplier > xSuppUndo( getModel(), uno::UNO_QUERY_THROW ); @@ -744,7 +746,7 @@ void ChartController::impl_createDrawViewController() { if( m_pDrawModelWrapper ) { - m_pDrawViewWrapper = new DrawViewWrapper(&m_pDrawModelWrapper->getSdrModel(),m_pChartWindow); + m_pDrawViewWrapper = new DrawViewWrapper(&m_pDrawModelWrapper->getSdrModel(),GetChartWindow()); m_pDrawViewWrapper->attachParentReferenceDevice( getModel() ); } } @@ -826,9 +828,7 @@ void SAL_CALL ChartController::dispose() m_apDropTargetHelper.reset(); //the accessible view is disposed within window destructor of m_pChartWindow - m_pChartWindow->clear(); - m_pChartWindow = nullptr;//m_pChartWindow is deleted via UNO due to dispose of m_xViewWindow (triggered by Framework (Controller pretends to be XWindow also)) - m_xViewWindow->dispose(); + m_xViewWindow->dispose(); //ChartWindow is deleted via UNO due to dispose of m_xViewWindow (triggered by Framework (Controller pretends to be XWindow also)) m_xChartView.clear(); } @@ -1111,8 +1111,9 @@ void SAL_CALL ChartController::dispatch( { ChartViewHelper::setViewToDirtyState( getModel() ); SolarMutexGuard aGuard; - if( m_pChartWindow ) - m_pChartWindow->Invalidate(); + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) + pChartWindow->Invalidate(); } else if(aCommand == "DiagramData" ) this->executeDispatch_EditData(); @@ -1312,7 +1313,7 @@ void ChartController::executeDispatch_ChartType() SolarMutexGuard aSolarGuard; //prepare and open dialog - ScopedVclPtrInstance< ChartTypeDialog > aDlg( m_pChartWindow, getModel() ); + ScopedVclPtrInstance< ChartTypeDialog > aDlg( GetChartWindow(), getModel() ); if( aDlg->Execute() == RET_OK ) { impl_adaptDataSeriesAutoResize(); @@ -1333,7 +1334,7 @@ void ChartController::executeDispatch_SourceData() if( xChartDoc.is()) { SolarMutexGuard aSolarGuard; - ScopedVclPtrInstance< ::chart::DataSourceDialog > aDlg( m_pChartWindow, xChartDoc, m_xCC ); + ScopedVclPtrInstance< ::chart::DataSourceDialog > aDlg( GetChartWindow(), xChartDoc, m_xCC ); if( aDlg->Execute() == RET_OK ) { impl_adaptDataSeriesAutoResize(); @@ -1449,7 +1450,9 @@ DrawViewWrapper* ChartController::GetDrawViewWrapper() VclPtr<ChartWindow> ChartController::GetChartWindow() { - return m_pChartWindow; + if(!m_xViewWindow.is()) + return nullptr; + return dynamic_cast<ChartWindow*>(m_xViewWindow.get()); } bool ChartController::isAdditionalShapeSelected() @@ -1478,9 +1481,10 @@ uno::Reference< XAccessible > ChartController::CreateAccessible() void ChartController::impl_invalidateAccessible() { SolarMutexGuard aGuard; - if( m_pChartWindow ) + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) { - Reference< lang::XInitialization > xInit( m_pChartWindow->GetAccessible(false), uno::UNO_QUERY ); + Reference< lang::XInitialization > xInit( pChartWindow->GetAccessible(false), uno::UNO_QUERY ); if(xInit.is()) { uno::Sequence< uno::Any > aArguments(3);//empty arguments -> invalid accessible @@ -1491,8 +1495,9 @@ void ChartController::impl_invalidateAccessible() void ChartController::impl_initializeAccessible() { SolarMutexGuard aGuard; - if( m_pChartWindow ) - this->impl_initializeAccessible( Reference< lang::XInitialization >( m_pChartWindow->GetAccessible(false), uno::UNO_QUERY ) ); + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) + this->impl_initializeAccessible( Reference< lang::XInitialization >( pChartWindow->GetAccessible(false), uno::UNO_QUERY ) ); } void ChartController::impl_initializeAccessible( const uno::Reference< lang::XInitialization >& xInit ) { @@ -1505,9 +1510,10 @@ void ChartController::impl_initializeAccessible( const uno::Reference< lang::XIn uno::Reference< XAccessible > xParent; { SolarMutexGuard aGuard; - if( m_pChartWindow ) + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) { - vcl::Window* pParentWin( m_pChartWindow->GetAccessibleParentWindow()); + vcl::Window* pParentWin( pChartWindow->GetAccessibleParentWindow()); if( pParentWin ) xParent.set( pParentWin->GetAccessible()); } diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx index 1fb09719d940..7f652b5ef1a2 100644 --- a/chart2/source/controller/main/ChartController_Insert.cxx +++ b/chart2/source/controller/main/ChartController_Insert.cxx @@ -99,7 +99,7 @@ void ChartController::executeDispatch_InsertAxes() AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, xDiagram ); SolarMutexGuard aGuard; - ScopedVclPtrInstance<SchAxisDlg> aDlg( m_pChartWindow, aDialogInput ); + ScopedVclPtrInstance<SchAxisDlg> aDlg( GetChartWindow(), aDialogInput ); if( aDlg->Execute() == RET_OK ) { // lock controllers till end of block @@ -137,7 +137,7 @@ void ChartController::executeDispatch_InsertGrid() AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, xDiagram, false ); SolarMutexGuard aGuard; - ScopedVclPtrInstance<SchGridDlg> aDlg(m_pChartWindow, aDialogInput);//aItemSet, b3D, bNet, bSecondaryX, bSecondaryY ); + ScopedVclPtrInstance<SchGridDlg> aDlg(GetChartWindow(), aDialogInput);//aItemSet, b3D, bNet, bSecondaryX, bSecondaryY ); if( aDlg->Execute() == RET_OK ) { // lock controllers till end of block @@ -169,7 +169,7 @@ void ChartController::executeDispatch_InsertTitles() aDialogInput.readFromModel( getModel() ); SolarMutexGuard aGuard; - ScopedVclPtrInstance< SchTitleDlg > aDlg( m_pChartWindow, aDialogInput ); + ScopedVclPtrInstance< SchTitleDlg > aDlg( GetChartWindow(), aDialogInput ); if( aDlg->Execute() == RET_OK ) { // lock controllers till end of block @@ -222,7 +222,7 @@ void ChartController::executeDispatch_OpenLegendDialog() { //prepare and open dialog SolarMutexGuard aGuard; - ScopedVclPtrInstance< SchLegendDlg > aDlg( m_pChartWindow, m_xCC ); + ScopedVclPtrInstance< SchLegendDlg > aDlg( GetChartWindow(), m_xCC ); aDlg->init( getModel() ); if( aDlg->Execute() == RET_OK ) { @@ -282,7 +282,7 @@ void ChartController::executeDispatch_InsertMenu_DataLabels() NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier ); SvNumberFormatter* pNumberFormatter = aNumberFormatterWrapper.getSvNumberFormatter(); - ScopedVclPtrInstance< DataLabelsDialog > aDlg( m_pChartWindow, aItemSet, pNumberFormatter); + ScopedVclPtrInstance< DataLabelsDialog > aDlg( GetChartWindow(), aItemSet, pNumberFormatter); if( aDlg->Execute() == RET_OK ) { @@ -390,7 +390,7 @@ void ChartController::executeDispatch_InsertTrendline() ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get()); SolarMutexGuard aGuard; ScopedVclPtrInstance<SchAttribTabDlg> aDialog( - m_pChartWindow, &aItemSet, &aDialogParameter, + GetChartWindow(), &aItemSet, &aDialogParameter, &aViewElementListProvider, uno::Reference< util::XNumberFormatsSupplier >( getModel(), uno::UNO_QUERY ) ); @@ -448,7 +448,7 @@ void ChartController::executeDispatch_InsertErrorBars( bool bYError ) ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get()); SolarMutexGuard aGuard; ScopedVclPtrInstance<SchAttribTabDlg> aDlg( - m_pChartWindow, &aItemSet, &aDialogParameter, + GetChartWindow(), &aItemSet, &aDialogParameter, &aViewElementListProvider, uno::Reference< util::XNumberFormatsSupplier >( getModel(), uno::UNO_QUERY ) ); @@ -488,7 +488,7 @@ void ChartController::executeDispatch_InsertErrorBars( bool bYError ) //prepare and open dialog SolarMutexGuard aGuard; ScopedVclPtrInstance<InsertErrorBarsDialog> aDlg( - m_pChartWindow, aItemSet, + GetChartWindow(), aItemSet, uno::Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY ), bYError ? ErrorBarResources::ERROR_BAR_Y : ErrorBarResources::ERROR_BAR_X); diff --git a/chart2/source/controller/main/ChartController_Position.cxx b/chart2/source/controller/main/ChartController_Position.cxx index b47034867919..a11f21011794 100644 --- a/chart2/source/controller/main/ChartController_Position.cxx +++ b/chart2/source/controller/main/ChartController_Position.cxx @@ -141,7 +141,7 @@ void ChartController::executeDispatch_PositionAndSize() SvxAbstractDialogFactory * pFact = SvxAbstractDialogFactory::Create(); OSL_ENSURE( pFact, "No dialog factory" ); ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateSchTransformTabDialog( - m_pChartWindow, &aItemSet, pSdrView, bResizePossible )); + GetChartWindow(), &aItemSet, pSdrView, bResizePossible )); OSL_ENSURE( pDlg, "Couldn't create SchTransformTabDialog" ); if( pDlg->Execute() == RET_OK ) diff --git a/chart2/source/controller/main/ChartController_Properties.cxx b/chart2/source/controller/main/ChartController_Properties.cxx index 5be1be5c6e44..b5577ff40f57 100644 --- a/chart2/source/controller/main/ChartController_Properties.cxx +++ b/chart2/source/controller/main/ChartController_Properties.cxx @@ -761,7 +761,7 @@ bool ChartController::executeDlg_ObjectProperties_withoutUndoGuard( SolarMutexGuard aGuard; ScopedVclPtrInstance<SchAttribTabDlg> aDlg( - m_pChartWindow, &aItemSet, &aDialogParameter, + GetChartWindow(), &aItemSet, &aDialogParameter, &aViewElementListProvider, uno::Reference< util::XNumberFormatsSupplier >( getModel(), uno::UNO_QUERY ) ); @@ -823,7 +823,7 @@ void ChartController::executeDispatch_View3D() //open dialog SolarMutexGuard aSolarGuard; - ScopedVclPtrInstance< View3DDialog > aDlg(m_pChartWindow, getModel()); + ScopedVclPtrInstance< View3DDialog > aDlg(GetChartWindow(), getModel()); if( aDlg->Execute() == RET_OK ) aUndoGuard.commit(); } diff --git a/chart2/source/controller/main/ChartController_TextEdit.cxx b/chart2/source/controller/main/ChartController_TextEdit.cxx index 9d958fc69bd8..a250d784985e 100644 --- a/chart2/source/controller/main/ChartController_TextEdit.cxx +++ b/chart2/source/controller/main/ChartController_TextEdit.cxx @@ -73,7 +73,7 @@ void ChartController::StartTextEdit( const Point* pMousePixel ) bool bEdit = m_pDrawViewWrapper->SdrBeginTextEdit( pTextObj , m_pDrawViewWrapper->GetPageView() - , m_pChartWindow + , GetChartWindow() , false //bIsNewObj , pOutliner , nullptr //pOutlinerView @@ -98,7 +98,7 @@ void ChartController::StartTextEdit( const Point* pMousePixel ) //we invalidate the outliner region because the outliner has some //paint problems (some characters are painted twice a little bit shifted) - m_pChartWindow->Invalidate( m_pDrawViewWrapper->GetMarkedObjBoundRect() ); + GetChartWindow()->Invalidate( m_pDrawViewWrapper->GetMarkedObjBoundRect() ); } } @@ -169,7 +169,7 @@ void ChartController::executeDispatch_InsertSpecialCharacter() vcl::Font aCurFont = m_pDrawViewWrapper->getOutliner()->GetRefDevice()->GetFont(); aSet.Put( SvxFontItem( aCurFont.GetFamilyType(), aCurFont.GetFamilyName(), aCurFont.GetStyleName(), aCurFont.GetPitch(), aCurFont.GetCharSet(), SID_ATTR_CHAR_FONT ) ); - ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog( m_pChartWindow, aSet, getFrame(), RID_SVXDLG_CHARMAP )); + ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog( GetChartWindow(), aSet, getFrame(), RID_SVXDLG_CHARMAP )); OSL_ENSURE( pDlg, "Couldn't create SvxCharacterMap dialog" ); if( pDlg->Execute() == RET_OK ) { diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx index bc62696dd2fa..6a33c1c7f319 100644 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ b/chart2/source/controller/main/ChartController_Tools.cxx @@ -249,15 +249,16 @@ void ChartController::executeDispatch_ScaleText() void ChartController::executeDispatch_Paste() { SolarMutexGuard aGuard; - if( m_pChartWindow ) + auto pChartWindow(GetChartWindow()); + if( GetChartWindow() ) { Graphic aGraphic; // paste location: center of window Point aPos; - aPos = m_pChartWindow->PixelToLogic( Rectangle( aPos, m_pChartWindow->GetSizePixel()).Center()); + aPos = pChartWindow->PixelToLogic( Rectangle( aPos, pChartWindow->GetSizePixel()).Center()); // handle different formats - TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( m_pChartWindow )); + TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pChartWindow )); if( aDataHelper.GetTransferable().is()) { if ( aDataHelper.HasFormat( SotClipboardFormatId::DRAWING ) ) @@ -359,11 +360,12 @@ void ChartController::impl_PasteGraphic( uno::Reference< beans::XPropertySet > xGraphicProp( xGraphic, uno::UNO_QUERY ); awt::Size aGraphicSize( 1000, 1000 ); + auto pChartWindow(GetChartWindow()); // first try size in 100th mm, then pixel size if( ! ( xGraphicProp->getPropertyValue( "Size100thMM") >>= aGraphicSize ) && - ( ( xGraphicProp->getPropertyValue( "SizePixel") >>= aGraphicSize ) && m_pChartWindow )) + ( ( xGraphicProp->getPropertyValue( "SizePixel") >>= aGraphicSize ) && pChartWindow )) { - ::Size aVCLSize( m_pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height ))); + ::Size aVCLSize( pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height ))); aGraphicSize.Width = aVCLSize.getWidth(); aGraphicSize.Height = aVCLSize.getHeight(); } diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx index f32e0c25fab1..feaa6961e48a 100644 --- a/chart2/source/controller/main/ChartController_Window.cxx +++ b/chart2/source/controller/main/ChartController_Window.cxx @@ -225,10 +225,11 @@ void SAL_CALL ChartController::setPosSize( { SolarMutexGuard aGuard; uno::Reference<awt::XWindow> xWindow = m_xViewWindow; + auto pChartWindow(GetChartWindow()); - if(xWindow.is() && m_pChartWindow) + if(xWindow.is() && pChartWindow) { - Size aLogicSize = m_pChartWindow->PixelToLogic( Size( Width, Height ), MapMode( MapUnit::Map100thMM ) ); + Size aLogicSize = pChartWindow->PixelToLogic( Size( Width, Height ), MapMode( MapUnit::Map100thMM ) ); //todo: for standalone chart: detect whether we are standalone //change map mode to fit new size @@ -242,8 +243,8 @@ void SAL_CALL ChartController::setPosSize( Point(0,0), Fraction(nScaleXNumerator, nScaleXDenominator), Fraction(nScaleYNumerator, nScaleYDenominator) ); - m_pChartWindow->SetMapMode(aNewMapMode); - m_pChartWindow->setPosSizePixel( X, Y, Width, Height, static_cast<PosSizeFlags>(Flags) ); + pChartWindow->SetMapMode(aNewMapMode); + pChartWindow->setPosSizePixel( X, Y, Width, Height, static_cast<PosSizeFlags>(Flags) ); //#i75867# poor quality of ole's alternative view with 3D scenes and zoomfactors besides 100% uno::Reference< beans::XPropertySet > xProp( m_xChartView, uno::UNO_QUERY ); @@ -261,10 +262,10 @@ void SAL_CALL ChartController::setPosSize( //a correct work area is at least necessary for correct values in the position and size dialog and for dragging area if(m_pDrawViewWrapper) { - Rectangle aRect(Point(0,0), m_pChartWindow->GetOutputSize()); + Rectangle aRect(Point(0,0), pChartWindow->GetOutputSize()); m_pDrawViewWrapper->SetWorkArea( aRect ); } - m_pChartWindow->Invalidate(); + pChartWindow->Invalidate(); } } @@ -455,10 +456,11 @@ void ChartController::execute_Paint(vcl::RenderContext& rRenderContext, const Re awt::Size aResolution(1000, 1000); { SolarMutexGuard aGuard; - if (m_pChartWindow) + auto pChartWindow(GetChartWindow()); + if (pChartWindow) { - aResolution.Width = m_pChartWindow->GetSizePixel().Width(); - aResolution.Height = m_pChartWindow->GetSizePixel().Height(); + aResolution.Width = pChartWindow->GetSizePixel().Width(); + aResolution.Height = pChartWindow->GetSizePixel().Height(); } } xProp->setPropertyValue( "Resolution", uno::Any( aResolution )); @@ -497,9 +499,10 @@ void ChartController::startDoubleClickWaiting() m_bWaitingForDoubleClick = true; sal_uInt64 nDblClkTime = 500; - if( m_pChartWindow ) + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) { - const MouseSettings& rMSettings = m_pChartWindow->GetSettings().GetMouseSettings(); + const MouseSettings& rMSettings = pChartWindow->GetSettings().GetMouseSettings(); nDblClkTime = rMSettings.GetDoubleClickTime(); } m_aDoubleClickTimer.SetTimeout( nDblClkTime ); @@ -520,9 +523,10 @@ IMPL_LINK_NOARG(ChartController, DoubleClickWaitingHdl, Timer *, void) { this->impl_selectObjectAndNotiy(); SolarMutexGuard aGuard; - if( m_pChartWindow ) + auto pChartWindow(GetChartWindow()); + if( pChartWindow ) { - vcl::Window::PointerState aPointerState( m_pChartWindow->GetPointerState() ); + vcl::Window::PointerState aPointerState( pChartWindow->GetPointerState() ); MouseEvent aMouseEvent( aPointerState.maPos, 1/*nClicks*/, @@ -548,15 +552,16 @@ void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) m_aSelection.remindSelectionBeforeMouseDown(); DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper ) + auto pChartWindow(GetChartWindow()); + if(!pChartWindow || !pDrawViewWrapper ) return; - Point aMPos = m_pChartWindow->PixelToLogic(rMEvt.GetPosPixel()); + Point aMPos = pChartWindow->PixelToLogic(rMEvt.GetPosPixel()); if ( MOUSE_LEFT == rMEvt.GetButtons() ) { - m_pChartWindow->GrabFocus(); - m_pChartWindow->CaptureMouse(); + pChartWindow->GrabFocus(); + pChartWindow->CaptureMouse(); } if( pDrawViewWrapper->IsTextEdit() ) @@ -566,7 +571,7 @@ void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) // #i12587# support for shapes in chart ( rMEvt.IsRight() && pDrawViewWrapper->PickAnything( rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt ) == SdrHitKind::MarkedObject ) ) { - pDrawViewWrapper->MouseButtonDown(rMEvt,m_pChartWindow); + pDrawViewWrapper->MouseButtonDown(rMEvt, pChartWindow); return; } else @@ -644,7 +649,7 @@ void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) && !rMEvt.IsRight() ) { //start drag - sal_uInt16 nDrgLog = (sal_uInt16)m_pChartWindow->PixelToLogic(Size(DRGPIX,0)).Width(); + sal_uInt16 nDrgLog = (sal_uInt16)pChartWindow->PixelToLogic(Size(DRGPIX,0)).Width(); SdrDragMethod* pDragMethod = nullptr; //change selection to 3D scene if rotate mode @@ -685,18 +690,19 @@ void ChartController::execute_MouseMove( const MouseEvent& rMEvt ) SolarMutexGuard aGuard; DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) + auto pChartWindow(GetChartWindow()); + if(!pChartWindow || !pDrawViewWrapper) return; if( m_pDrawViewWrapper->IsTextEdit() ) { - if( m_pDrawViewWrapper->MouseMove(rMEvt,m_pChartWindow) ) + if( m_pDrawViewWrapper->MouseMove(rMEvt,pChartWindow) ) return; } if(pDrawViewWrapper->IsAction()) { - pDrawViewWrapper->MovAction( m_pChartWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); + pDrawViewWrapper->MovAction( pChartWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); } impl_SetMousePointer( rMEvt ); @@ -712,14 +718,15 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) SolarMutexGuard aGuard; DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) + auto pChartWindow(GetChartWindow()); + if(!pChartWindow || !pDrawViewWrapper) return; - Point aMPos = m_pChartWindow->PixelToLogic(rMEvt.GetPosPixel()); + Point aMPos = pChartWindow->PixelToLogic(rMEvt.GetPosPixel()); if(pDrawViewWrapper->IsTextEdit()) { - if( pDrawViewWrapper->MouseButtonUp(rMEvt,m_pChartWindow) ) + if( pDrawViewWrapper->MouseButtonUp(rMEvt,pChartWindow) ) return; } @@ -856,7 +863,7 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) } //@todo ForcePointer(&rMEvt); - m_pChartWindow->ReleaseMouse(); + pChartWindow->ReleaseMouse(); if( m_aSelection.isSelectionDifferentFromBeforeMouseDown() ) bNotifySelectionChange = true; @@ -906,17 +913,19 @@ void ChartController::execute_DoubleClick( const Point* pMousePixel ) void ChartController::execute_Resize() { SolarMutexGuard aGuard; - if(m_pChartWindow) - m_pChartWindow->Invalidate(); + auto pChartWindow(GetChartWindow()); + if(pChartWindow) + pChartWindow->Invalidate(); } void ChartController::execute_Command( const CommandEvent& rCEvt ) { + auto pChartWindow(GetChartWindow()); bool bIsAction = false; { SolarMutexGuard aGuard; DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) + if(!pChartWindow || !pDrawViewWrapper) return; bIsAction = m_pDrawViewWrapper->IsAction(); } @@ -926,8 +935,8 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) { { SolarMutexGuard aGuard; - if(m_pChartWindow) - m_pChartWindow->ReleaseMouse(); + if(pChartWindow) + pChartWindow->ReleaseMouse(); } if( m_aSelection.isSelectionDifferentFromBeforeMouseDown() ) @@ -940,8 +949,8 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) if( !rCEvt.IsMouseEvent() ) { SolarMutexGuard aGuard; - if(m_pChartWindow) - aPos = m_pChartWindow->GetPointerState().maPos; + if(pChartWindow) + aPos = pChartWindow->GetPointerState().maPos; } OUString aMenuName; @@ -1229,7 +1238,7 @@ void ChartController::execute_Command( const CommandEvent& rCEvt ) //#i84417# enable editing with IME SolarMutexGuard aGuard; if( m_pDrawViewWrapper ) - m_pDrawViewWrapper->Command( rCEvt, m_pChartWindow ); + m_pDrawViewWrapper->Command( rCEvt, pChartWindow ); } } @@ -1238,7 +1247,8 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) bool bReturn=false; DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) + auto pChartWindow(GetChartWindow()); + if(!pChartWindow || !pDrawViewWrapper) return bReturn; // handle accelerators @@ -1264,7 +1274,7 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) SolarMutexGuard aGuard; if( pDrawViewWrapper->IsTextEdit() ) { - if( pDrawViewWrapper->KeyInput(rKEvt,m_pChartWindow) ) + if( pDrawViewWrapper->KeyInput(rKEvt, pChartWindow) ) { bReturn = true; if( nCode == KEY_ESCAPE ) @@ -1360,13 +1370,13 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) // default 1 mm in each direction double fGrowAmountX = 200.0; double fGrowAmountY = 200.0; - if( bAlternate && m_pChartWindow ) + if( bAlternate && pChartWindow ) { // together with Alt-key: 1 px in each direction SolarMutexGuard aGuard; - if( m_pChartWindow ) + if( pChartWindow ) { - Size aPixelSize = m_pChartWindow->PixelToLogic( Size( 2, 2 )); + Size aPixelSize = pChartWindow->PixelToLogic( Size( 2, 2 )); fGrowAmountX = static_cast< double >( aPixelSize.Width()); fGrowAmountY = static_cast< double >( aPixelSize.Height()); } @@ -1391,13 +1401,13 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) // default 1 mm double fShiftAmountX = 100.0; double fShiftAmountY = 100.0; - if( bAlternate && m_pChartWindow ) + if( bAlternate && pChartWindow ) { // together with Alt-key: 1 px SolarMutexGuard aGuard; - if(m_pChartWindow) + if(pChartWindow) { - Size aPixelSize = m_pChartWindow->PixelToLogic( Size( 1, 1 )); + Size aPixelSize = pChartWindow->PixelToLogic( Size( 1, 1 )); fShiftAmountX = static_cast< double >( aPixelSize.Width()); fShiftAmountY = static_cast< double >( aPixelSize.Height()); } @@ -1498,7 +1508,7 @@ bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) if( ! bReturn ) { SolarMutexGuard aGuard; - ScopedVclPtrInstance<InfoBox>(m_pChartWindow, SCH_RESSTR(STR_ACTION_NOTPOSSIBLE))->Execute(); + ScopedVclPtrInstance<InfoBox>(GetChartWindow(), SCH_RESSTR(STR_ACTION_NOTPOSSIBLE))->Execute(); } } @@ -1583,9 +1593,10 @@ sal_Bool SAL_CALL ChartController::select( const uno::Any& rSelection ) this->EndTextEdit(); } this->impl_selectObjectAndNotiy(); - if ( m_pChartWindow ) + auto pChartWindow(GetChartWindow()); + if ( pChartWindow ) { - m_pChartWindow->Invalidate(); + pChartWindow->Invalidate(); } return true; } @@ -1786,11 +1797,12 @@ bool ChartController::impl_DragDataPoint( const OUString & rCID, double fAdditio void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) { SolarMutexGuard aGuard; + auto pChartWindow(GetChartWindow()); - if (!m_pDrawViewWrapper || !m_pChartWindow) + if (!m_pDrawViewWrapper || !pChartWindow) return; - Point aMousePos( m_pChartWindow->PixelToLogic( rEvent.GetPosPixel())); + Point aMousePos( pChartWindow->PixelToLogic( rEvent.GetPosPixel())); sal_uInt16 nModifier = rEvent.GetModifier(); bool bLeftDown = rEvent.IsLeft(); @@ -1798,8 +1810,8 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) { if( m_pDrawViewWrapper->IsTextEditHit( aMousePos ) ) { - m_pChartWindow->SetPointer( m_pDrawViewWrapper->GetPreferredPointer( - aMousePos, m_pChartWindow, nModifier, bLeftDown ) ); + pChartWindow->SetPointer( m_pDrawViewWrapper->GetPreferredPointer( + aMousePos, pChartWindow, nModifier, bLeftDown ) ); return; } } @@ -1815,7 +1827,7 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) if( pHitSelectionHdl ) { Pointer aPointer = m_pDrawViewWrapper->GetPreferredPointer( - aMousePos, m_pChartWindow, nModifier, bLeftDown ); + aMousePos, pChartWindow, nModifier, bLeftDown ); bool bForceArrowPointer = false; ObjectIdentifier aOID( m_aSelection.getSelectedOID() ); @@ -1848,9 +1860,9 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) } if( bForceArrowPointer ) - m_pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); + pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); else - m_pChartWindow->SetPointer( aPointer ); + pChartWindow->SetPointer( aPointer ); return; } @@ -1900,7 +1912,7 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) } break; } - m_pChartWindow->SetPointer( Pointer( ePointerStyle ) ); + pChartWindow->SetPointer( Pointer( ePointerStyle ) ); return; } @@ -1912,7 +1924,7 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) { if( aHitObjectCID.equals(m_aSelection.getSelectedCID()) ) { - m_pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); + pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); return; } } @@ -1920,14 +1932,14 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) if( aHitObjectCID.isEmpty() ) { //additional shape was hit - m_pChartWindow->SetPointer( PointerStyle::Move ); + pChartWindow->SetPointer( PointerStyle::Move ); } else if( ObjectIdentifier::isDragableObject( aHitObjectCID ) ) { if( (m_eDragMode == SdrDragMode::Rotate) && SelectionHelper::isRotateableObject( aHitObjectCID , getModel() ) ) - m_pChartWindow->SetPointer( Pointer( PointerStyle::Rotate ) ); + pChartWindow->SetPointer( Pointer( PointerStyle::Rotate ) ); else { ObjectType eHitObjectType = ObjectIdentifier::getObjectType( aHitObjectCID ); @@ -1936,15 +1948,15 @@ void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) if( !ObjectIdentifier::areSiblings(aHitObjectCID,m_aSelection.getSelectedCID()) && !ObjectIdentifier::areIdenticalObjects(aHitObjectCID,m_aSelection.getSelectedCID()) ) { - m_pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); + pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); return; } } - m_pChartWindow->SetPointer( PointerStyle::Move ); + pChartWindow->SetPointer( PointerStyle::Move ); } } else - m_pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); + pChartWindow->SetPointer( Pointer( PointerStyle::Arrow )); } css::uno::Reference<css::uno::XInterface> const & ChartController::getChartView() |