diff options
Diffstat (limited to 'chart2/source/controller/main/ChartController_Window.cxx')
-rw-r--r-- | chart2/source/controller/main/ChartController_Window.cxx | 2045 |
1 files changed, 0 insertions, 2045 deletions
diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx deleted file mode 100644 index 4a2d62189..000000000 --- a/chart2/source/controller/main/ChartController_Window.cxx +++ /dev/null @@ -1,2045 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_chart2.hxx" -#include "ChartController.hxx" -#include "PositionAndSizeHelper.hxx" -#include "ObjectIdentifier.hxx" -#include "ChartWindow.hxx" -#include "ResId.hxx" -#include "CommonConverters.hxx" -#include "ChartModelHelper.hxx" -#include "DiagramHelper.hxx" -#include "TitleHelper.hxx" -#include "UndoGuard.hxx" -#include "ControllerLockGuard.hxx" -#include "ObjectNameProvider.hxx" -#include "Strings.hrc" -#include "SchSlotIds.hxx" -#include "macros.hxx" -#include "DragMethod_PieSegment.hxx" -#include "DragMethod_RotateDiagram.hxx" -#include "ObjectHierarchy.hxx" -#include "chartview/ExplicitValueProvider.hxx" -#include "RelativePositionHelper.hxx" -#include "chartview/DrawModelWrapper.hxx" -#include "RegressionCurveHelper.hxx" -#include "StatisticsHelper.hxx" -#include "DataSeriesHelper.hxx" -#include "ContainerHelper.hxx" -#include "AxisHelper.hxx" -#include "LegendHelper.hxx" -#include "servicenames_charttypes.hxx" -#include "MenuResIds.hrc" -#include "DrawCommandDispatch.hxx" - -#include <com/sun/star/chart2/RelativePosition.hpp> -#include <com/sun/star/chart2/RelativeSize.hpp> -#include <com/sun/star/chart2/XRegressionCurveContainer.hpp> - -#include <com/sun/star/frame/XDispatchHelper.hpp> -#include <com/sun/star/frame/FrameSearchFlag.hpp> -#include <com/sun/star/util/XUpdatable.hpp> -#include <comphelper/InlineContainer.hxx> - -#include <svtools/contextmenuhelper.hxx> -#include <toolkit/awt/vclxmenu.hxx> - -#include <svx/svxids.hrc> -#include <svx/ActionDescriptionProvider.hxx> - -// header for class E3dObject -#include <svx/obj3d.hxx> -// header for class E3dScene -#include <svx/scene3d.hxx> -// header for class SdrDragMethod -#include <svx/svddrgmt.hxx> -#include <vcl/svapp.hxx> -#include <osl/mutex.hxx> - -// for InfoBox -#include <vcl/msgbox.hxx> - -#include <rtl/math.hxx> -#include <svtools/acceleratorexecute.hxx> - -#define DRGPIX 2 // Drag MinMove in Pixel - -using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; -using ::com::sun::star::uno::Reference; -using ::rtl::OUString; - -//............................................................................. -namespace chart -{ -//............................................................................. - -namespace -{ -bool lcl_GrowAndShiftLogic( - RelativePosition & rInOutRelPos, - RelativeSize & rInOutRelSize, - const awt::Size & rRefSize, - double fGrowLogicX, - double fGrowLogicY ) -{ - if( rRefSize.Width == 0 || - rRefSize.Height == 0 ) - return false; - - double fRelativeGrowX = fGrowLogicX / rRefSize.Width; - double fRelativeGrowY = fGrowLogicY / rRefSize.Height; - - return ::chart::RelativePositionHelper::centerGrow( - rInOutRelPos, rInOutRelSize, - fRelativeGrowX, fRelativeGrowY, - /* bCheck = */ true ); -} - -bool lcl_MoveObjectLogic( - RelativePosition & rInOutRelPos, - RelativeSize & rObjectSize, - const awt::Size & rRefSize, - double fShiftLogicX, - double fShiftLogicY ) -{ - if( rRefSize.Width == 0 || - rRefSize.Height == 0 ) - return false; - - double fRelativeShiftX = fShiftLogicX / rRefSize.Width; - double fRelativeShiftY = fShiftLogicY / rRefSize.Height; - - return ::chart::RelativePositionHelper::moveObject( - rInOutRelPos, rObjectSize, - fRelativeShiftX, fRelativeShiftY, - /* bCheck = */ true ); -} - -void lcl_insertMenuCommand( - const uno::Reference< awt::XPopupMenu > & xMenu, - const uno::Reference< awt::XMenuExtended > & xMenuEx, - sal_Int16 nId, const ::rtl::OUString & rCommand ) -{ - static ::rtl::OUString aEmptyString; - xMenu->insertItem( nId, aEmptyString, 0, -1 ); - xMenuEx->setCommand( nId, rCommand ); -} - -OUString lcl_getFormatCommandForObjectCID( const OUString& rCID ) -{ - OUString aDispatchCommand( C2U(".uno:FormatSelection") ); - - ObjectType eObjectType = ObjectIdentifier::getObjectType( rCID ); - - switch(eObjectType) - { - case OBJECTTYPE_DIAGRAM: - case OBJECTTYPE_DIAGRAM_WALL: - aDispatchCommand = C2U(".uno:FormatWall"); - break; - case OBJECTTYPE_DIAGRAM_FLOOR: - aDispatchCommand = C2U(".uno:FormatFloor"); - break; - case OBJECTTYPE_PAGE: - aDispatchCommand = C2U(".uno:FormatChartArea"); - break; - case OBJECTTYPE_LEGEND: - aDispatchCommand = C2U(".uno:FormatLegend"); - break; - case OBJECTTYPE_TITLE: - aDispatchCommand = C2U(".uno:FormatTitle"); - break; - case OBJECTTYPE_LEGEND_ENTRY: - aDispatchCommand = C2U(".uno:FormatDataSeries"); - break; - case OBJECTTYPE_AXIS: - case OBJECTTYPE_AXIS_UNITLABEL: - aDispatchCommand = C2U(".uno:FormatAxis"); - break; - case OBJECTTYPE_GRID: - aDispatchCommand = C2U(".uno:FormatMajorGrid"); - break; - case OBJECTTYPE_SUBGRID: - aDispatchCommand = C2U(".uno:FormatMinorGrid"); - break; - case OBJECTTYPE_DATA_LABELS: - aDispatchCommand = C2U(".uno:FormatDataLabels"); - break; - case OBJECTTYPE_DATA_SERIES: - aDispatchCommand = C2U(".uno:FormatDataSeries"); - break; - case OBJECTTYPE_DATA_LABEL: - aDispatchCommand = C2U(".uno:FormatDataLabel"); - break; - case OBJECTTYPE_DATA_POINT: - aDispatchCommand = C2U(".uno:FormatDataPoint"); - break; - case OBJECTTYPE_DATA_AVERAGE_LINE: - aDispatchCommand = C2U(".uno:FormatMeanValue"); - break; - case OBJECTTYPE_DATA_ERRORS: - case OBJECTTYPE_DATA_ERRORS_X: - case OBJECTTYPE_DATA_ERRORS_Y: - case OBJECTTYPE_DATA_ERRORS_Z: - aDispatchCommand = C2U(".uno:FormatYErrorBars"); - break; - case OBJECTTYPE_DATA_CURVE: - aDispatchCommand = C2U(".uno:FormatTrendline"); - break; - case OBJECTTYPE_DATA_CURVE_EQUATION: - aDispatchCommand = C2U(".uno:FormatTrendlineEquation"); - break; - case OBJECTTYPE_DATA_STOCK_RANGE: - aDispatchCommand = C2U(".uno:FormatSelection"); - break; - case OBJECTTYPE_DATA_STOCK_LOSS: - aDispatchCommand = C2U(".uno:FormatStockLoss"); - break; - case OBJECTTYPE_DATA_STOCK_GAIN: - aDispatchCommand = C2U(".uno:FormatStockGain"); - break; - default: //OBJECTTYPE_UNKNOWN - break; - } - return aDispatchCommand; -} - -} // anonymous namespace - -const short HITPIX=2; //hit-tolerance in pixel - -//----------------------------------------------------------------- -// awt::XWindow -//----------------------------------------------------------------- - void SAL_CALL ChartController -::setPosSize( sal_Int32 X, sal_Int32 Y - , sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) - throw (uno::RuntimeException) -{ - SolarMutexGuard aGuard; - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is() && m_pChartWindow) - { - Size aLogicSize = m_pChartWindow->PixelToLogic( Size( Width, Height ), MapMode( MAP_100TH_MM ) ); - - bool bIsEmbedded = true; - //todo: for standalone chart: detect wether we are standalone - if( bIsEmbedded ) - { - //change map mode to fit new size - awt::Size aModelPageSize = ChartModelHelper::getPageSize( getModel() ); - sal_Int32 nScaleXNumerator = aLogicSize.Width(); - sal_Int32 nScaleXDenominator = aModelPageSize.Width; - sal_Int32 nScaleYNumerator = aLogicSize.Height(); - sal_Int32 nScaleYDenominator = aModelPageSize.Height; - MapMode aNewMapMode( MAP_100TH_MM, Point(0,0) - , Fraction(nScaleXNumerator,nScaleXDenominator) - , Fraction(nScaleYNumerator,nScaleYDenominator) ); - m_pChartWindow->SetMapMode(aNewMapMode); - m_pChartWindow->SetPosSizePixel( X, Y, Width, Height, 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 ); - if( xProp.is() ) - { - uno::Sequence< beans::PropertyValue > aZoomFactors(4); - aZoomFactors[0].Name = C2U("ScaleXNumerator"); - aZoomFactors[0].Value = uno::makeAny( nScaleXNumerator ); - aZoomFactors[1].Name = C2U("ScaleXDenominator"); - aZoomFactors[1].Value = uno::makeAny( nScaleXDenominator ); - aZoomFactors[2].Name = C2U("ScaleYNumerator"); - aZoomFactors[2].Value = uno::makeAny( nScaleYNumerator ); - aZoomFactors[3].Name = C2U("ScaleYDenominator"); - aZoomFactors[3].Value = uno::makeAny( nScaleYDenominator ); - xProp->setPropertyValue( C2U("ZoomFactors"), uno::makeAny( aZoomFactors )); - } - - //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()); - m_pDrawViewWrapper->SetWorkArea( aRect ); - } - } - else - { - //change visarea - ChartModelHelper::setPageSize( awt::Size( aLogicSize.Width(), aLogicSize.Height() ), getModel() ); - m_pChartWindow->SetPosSizePixel( X, Y, Width, Height, Flags ); - } - m_pChartWindow->Invalidate(); - } -} - - awt::Rectangle SAL_CALL ChartController -::getPosSize() - throw (uno::RuntimeException) -{ - //@todo - awt::Rectangle aRet(0,0,0,0); - - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - if(xWindow.is()) - aRet = xWindow->getPosSize(); - - return aRet; -} - - void SAL_CALL ChartController -::setVisible( sal_Bool Visible ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->setVisible( Visible ); -} - - void SAL_CALL ChartController -::setEnable( sal_Bool Enable ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->setEnable( Enable ); -} - - void SAL_CALL ChartController -::setFocus() throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->setFocus(); -} - - void SAL_CALL ChartController -::addWindowListener( const uno::Reference< - awt::XWindowListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->addWindowListener( xListener ); -} - - void SAL_CALL ChartController -::removeWindowListener( const uno::Reference< - awt::XWindowListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->removeWindowListener( xListener ); -} - - void SAL_CALL ChartController -::addFocusListener( const uno::Reference< - awt::XFocusListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->addFocusListener( xListener ); -} - - void SAL_CALL ChartController -::removeFocusListener( const uno::Reference< - awt::XFocusListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->removeFocusListener( xListener ); -} - - void SAL_CALL ChartController -::addKeyListener( const uno::Reference< - awt::XKeyListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->addKeyListener( xListener ); -} - - void SAL_CALL ChartController -::removeKeyListener( const uno::Reference< - awt::XKeyListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->removeKeyListener( xListener ); -} - - void SAL_CALL ChartController -::addMouseListener( const uno::Reference< - awt::XMouseListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->addMouseListener( xListener ); -} - - void SAL_CALL ChartController -::removeMouseListener( const uno::Reference< - awt::XMouseListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->removeMouseListener( xListener ); -} - - void SAL_CALL ChartController -::addMouseMotionListener( const uno::Reference< - awt::XMouseMotionListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->addMouseMotionListener( xListener ); -} - - void SAL_CALL ChartController -::removeMouseMotionListener( const uno::Reference< - awt::XMouseMotionListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->removeMouseMotionListener( xListener ); -} - - void SAL_CALL ChartController -::addPaintListener( const uno::Reference< - awt::XPaintListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->addPaintListener( xListener ); -} - - void SAL_CALL ChartController -::removePaintListener( const uno::Reference< - awt::XPaintListener >& xListener ) - throw (uno::RuntimeException) -{ - //@todo - uno::Reference<awt::XWindow> xWindow = m_xViewWindow; - - if(xWindow.is()) - xWindow->removePaintListener( xListener ); -} - -//----------------------------------------------------------------- -// impl vcl window controller methods -//----------------------------------------------------------------- -void ChartController::PrePaint() -{ - // forward VCLs PrePaint window event to DrawingLayer - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - - if(pDrawViewWrapper) - { - pDrawViewWrapper->PrePaint(); - } -} - -void ChartController::execute_Paint( const Rectangle& rRect ) -{ - try - { - uno::Reference< frame::XModel > xModel( getModel() ); - //OSL_ENSURE( xModel.is(), "ChartController::execute_Paint: have no model to paint"); - if( !xModel.is() ) - return; - - //better performance for big data - uno::Reference< beans::XPropertySet > xProp( m_xChartView, uno::UNO_QUERY ); - if( xProp.is() ) - { - awt::Size aResolution(1000,1000); - { - SolarMutexGuard aGuard; - if( m_pChartWindow ) - { - aResolution.Width = m_pChartWindow->GetSizePixel().Width(); - aResolution.Height = m_pChartWindow->GetSizePixel().Height(); - } - } - xProp->setPropertyValue( C2U("Resolution"), uno::makeAny( aResolution )); - } - // - - uno::Reference< util::XUpdatable > xUpdatable( m_xChartView, uno::UNO_QUERY ); - if( xUpdatable.is() ) - xUpdatable->update(); - - { - SolarMutexGuard aGuard; - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(pDrawViewWrapper) - pDrawViewWrapper->CompleteRedraw(m_pChartWindow, Region(rRect) ); - } - } - catch( uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - catch( ... ) - { - } -} - -bool isDoubleClick( const MouseEvent& rMEvt ) -{ - return rMEvt.GetClicks() == 2 && rMEvt.IsLeft() && - !rMEvt.IsMod1() && !rMEvt.IsMod2() && !rMEvt.IsShift(); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -void ChartController::startDoubleClickWaiting() -{ - SolarMutexGuard aGuard; - - m_bWaitingForDoubleClick = true; - - sal_uLong nDblClkTime = 500; - if( m_pChartWindow ) - { - const MouseSettings& rMSettings = m_pChartWindow->GetSettings().GetMouseSettings(); - nDblClkTime = rMSettings.GetDoubleClickTime(); - } - m_aDoubleClickTimer.SetTimeout( nDblClkTime ); - m_aDoubleClickTimer.Start(); -} - -void ChartController::stopDoubleClickWaiting() -{ - m_aDoubleClickTimer.Stop(); - m_bWaitingForDoubleClick = false; -} - -IMPL_LINK( ChartController, DoubleClickWaitingHdl, void*, EMPTYARG ) -{ - m_bWaitingForDoubleClick = false; - - if( !m_bWaitingForMouseUp && m_aSelection.maybeSwitchSelectionAfterSingleClickWasEnsured() ) - { - this->impl_selectObjectAndNotiy(); - SolarMutexGuard aGuard; - if( m_pChartWindow ) - { - Window::PointerState aPointerState( m_pChartWindow->GetPointerState() ); - MouseEvent aMouseEvent( aPointerState.maPos,1/*nClicks*/, - 0/*nMode*/, static_cast< sal_uInt16 >( aPointerState.mnState )/*nButtons*/, - 0/*nModifier*/ ); - impl_SetMousePointer( aMouseEvent ); - } - } - - return 0; -} - -//------------------------------------------------------------------------ - -void ChartController::execute_MouseButtonDown( const MouseEvent& rMEvt ) -{ - SolarMutexGuard aGuard; - - m_bWaitingForMouseUp = true; - - if( isDoubleClick(rMEvt) ) - stopDoubleClickWaiting(); - else - startDoubleClickWaiting(); - - m_aSelection.remindSelectionBeforeMouseDown(); - - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper ) - return; - - Point aMPos = m_pChartWindow->PixelToLogic(rMEvt.GetPosPixel()); - - if ( MOUSE_LEFT == rMEvt.GetButtons() ) - { - m_pChartWindow->GrabFocus(); - m_pChartWindow->CaptureMouse(); - } - - if( pDrawViewWrapper->IsTextEdit() ) - { - SdrViewEvent aVEvt; - if ( pDrawViewWrapper->IsTextEditHit( aMPos, HITPIX ) || - // #i12587# support for shapes in chart - ( rMEvt.IsRight() && pDrawViewWrapper->PickAnything( rMEvt, SDRMOUSEBUTTONDOWN, aVEvt ) == SDRHIT_MARKEDOBJECT ) ) - { - pDrawViewWrapper->MouseButtonDown(rMEvt,m_pChartWindow); - return; - } - else - { - this->EndTextEdit(); - } - } - - //abort running action - if( pDrawViewWrapper->IsAction() ) - { - if( rMEvt.IsRight() ) - pDrawViewWrapper->BckAction(); - return; - } - - if( isDoubleClick(rMEvt) ) //do not change selection if double click - return;//double click is handled further in mousebutton up - - SdrHdl* pHitSelectionHdl = 0; - //switch from move to resize if handle is hit on a resizeable object - if( m_aSelection.isResizeableObjectSelected() ) - pHitSelectionHdl = pDrawViewWrapper->PickHandle( aMPos ); - //only change selection if no selection handles are hit - if( !pHitSelectionHdl ) - { - // #i12587# support for shapes in chart - if ( m_eDrawMode == CHARTDRAW_INSERT && - ( !pDrawViewWrapper->IsMarkedHit( aMPos ) || !m_aSelection.isDragableObjectSelected() ) ) - { - if ( m_aSelection.hasSelection() ) - { - m_aSelection.clearSelection(); - } - if ( !pDrawViewWrapper->IsAction() ) - { - if ( pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_CAPTION ) - { - Size aCaptionSize( 2268, 1134 ); - pDrawViewWrapper->BegCreateCaptionObj( aMPos, aCaptionSize ); - } - else - { - pDrawViewWrapper->BegCreateObj( aMPos); - } - SdrObject* pObj = pDrawViewWrapper->GetCreateObj(); - DrawCommandDispatch* pDrawCommandDispatch = m_aDispatchContainer.getDrawCommandDispatch(); - if ( pObj && m_pDrawModelWrapper && pDrawCommandDispatch ) - { - SfxItemSet aSet( m_pDrawModelWrapper->GetItemPool() ); - pDrawCommandDispatch->setAttributes( pObj ); - pDrawCommandDispatch->setLineEnds( aSet ); - pObj->SetMergedItemSet( aSet ); - } - } - impl_SetMousePointer( rMEvt ); - return; - } - - m_aSelection.adaptSelectionToNewPos( aMPos, pDrawViewWrapper - , rMEvt.IsRight(), m_bWaitingForDoubleClick ); - - if( !m_aSelection.isRotateableObjectSelected( getModel() ) ) - { - m_eDragMode = SDRDRAG_MOVE; - pDrawViewWrapper->SetDragMode(m_eDragMode); - } - - m_aSelection.applySelection(pDrawViewWrapper); - } - if( m_aSelection.isDragableObjectSelected() - && !rMEvt.IsRight() ) - { - //start drag - sal_uInt16 nDrgLog = (sal_uInt16)m_pChartWindow->PixelToLogic(Size(DRGPIX,0)).Width(); - SdrDragMethod* pDragMethod = NULL; - - //change selection to 3D scene if rotate mode - SdrDragMode eDragMode = pDrawViewWrapper->GetDragMode(); - if( SDRDRAG_ROTATE==eDragMode ) - { - E3dScene* pScene = SelectionHelper::getSceneToRotate( pDrawViewWrapper->getNamedSdrObject( m_aSelection.getSelectedCID() ) ); - if( pScene ) - { - DragMethod_RotateDiagram::RotationDirection eRotationDirection(DragMethod_RotateDiagram::ROTATIONDIRECTION_FREE); - if(pHitSelectionHdl) - { - SdrHdlKind eKind = pHitSelectionHdl->GetKind(); - if( eKind==HDL_UPPER || eKind==HDL_LOWER ) - eRotationDirection = DragMethod_RotateDiagram::ROTATIONDIRECTION_X; - else if( eKind==HDL_LEFT || eKind==HDL_RIGHT ) - eRotationDirection = DragMethod_RotateDiagram::ROTATIONDIRECTION_Y; - else if( eKind==HDL_UPLFT || eKind==HDL_UPRGT || eKind==HDL_LWLFT || eKind==HDL_LWRGT ) - eRotationDirection = DragMethod_RotateDiagram::ROTATIONDIRECTION_Z; - } - pDragMethod = new DragMethod_RotateDiagram( *pDrawViewWrapper, m_aSelection.getSelectedCID(), getModel(), eRotationDirection ); - } - } - else - { - rtl::OUString aDragMethodServiceName( ObjectIdentifier::getDragMethodServiceName( m_aSelection.getSelectedCID() ) ); - if( aDragMethodServiceName.equals( ObjectIdentifier::getPieSegmentDragMethodServiceName() ) ) - pDragMethod = new DragMethod_PieSegment( *pDrawViewWrapper, m_aSelection.getSelectedCID(), getModel() ); - } - pDrawViewWrapper->SdrView::BegDragObj(aMPos, NULL, pHitSelectionHdl, nDrgLog, pDragMethod); - } - - impl_SetMousePointer( rMEvt ); -} - -void ChartController::execute_MouseMove( const MouseEvent& rMEvt ) -{ - SolarMutexGuard aGuard; - - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) - return; - - if( m_pDrawViewWrapper->IsTextEdit() ) - { - if( m_pDrawViewWrapper->MouseMove(rMEvt,m_pChartWindow) ) - return; - } - - if(pDrawViewWrapper->IsAction()) - { - pDrawViewWrapper->MovAction( m_pChartWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); - } - - impl_SetMousePointer( rMEvt ); -} -void ChartController::execute_Tracking( const TrackingEvent& /* rTEvt */ ) -{ -} - -//----------------- - -void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt ) -{ - ControllerLockGuard aCLGuard( getModel() ); - bool bMouseUpWithoutMouseDown = !m_bWaitingForMouseUp; - m_bWaitingForMouseUp = false; - bool bNotifySelectionChange = false; - { - SolarMutexGuard aGuard; - - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) - return; - - Point aMPos = m_pChartWindow->PixelToLogic(rMEvt.GetPosPixel()); - - if(pDrawViewWrapper->IsTextEdit()) - { - if( pDrawViewWrapper->MouseButtonUp(rMEvt,m_pChartWindow) ) - return; - } - - // #i12587# support for shapes in chart - if ( m_eDrawMode == CHARTDRAW_INSERT && pDrawViewWrapper->IsCreateObj() ) - { - pDrawViewWrapper->EndCreateObj( SDRCREATE_FORCEEND ); - { - HiddenUndoContext aUndoContext( m_xUndoManager ); - // don't want the positioning Undo action to appear in the UI - impl_switchDiagramPositioningToExcludingPositioning(); - } - if ( pDrawViewWrapper->AreObjectsMarked() ) - { - if ( pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_TEXT ) - { - executeDispatch_EditText(); - } - else - { - SdrObject* pObj = pDrawViewWrapper->getSelectedObject(); - if ( pObj ) - { - uno::Reference< drawing::XShape > xShape( pObj->getUnoShape(), uno::UNO_QUERY ); - if ( xShape.is() ) - { - m_aSelection.setSelection( xShape ); - m_aSelection.applySelection( pDrawViewWrapper ); - } - } - } - } - else - { - m_aSelection.adaptSelectionToNewPos( aMPos, pDrawViewWrapper, rMEvt.IsRight(), m_bWaitingForDoubleClick ); - m_aSelection.applySelection( pDrawViewWrapper ); - setDrawMode( CHARTDRAW_SELECT ); - } - } - else if ( pDrawViewWrapper->IsDragObj() ) - { - bool bDraggingDone = false; - SdrDragMethod* pDragMethod = pDrawViewWrapper->SdrView::GetDragMethod(); - bool bIsMoveOnly = pDragMethod ? pDragMethod->getMoveOnly() : false; - DragMethod_Base* pChartDragMethod = dynamic_cast< DragMethod_Base* >(pDragMethod); - if( pChartDragMethod ) - { - UndoGuard aUndoGuard( pChartDragMethod->getUndoDescription(), - m_xUndoManager ); - - if( pDrawViewWrapper->EndDragObj(false) ) - { - bDraggingDone = true; - aUndoGuard.commit(); - } - } - - if( !bDraggingDone && pDrawViewWrapper->EndDragObj(false) ) - { - try - { - //end move or size - SdrObject* pObj = pDrawViewWrapper->getSelectedObject(); - if( pObj ) - { - Rectangle aObjectRect = pObj->GetSnapRect(); - awt::Size aPageSize( ChartModelHelper::getPageSize( getModel() ) ); - Rectangle aPageRect( 0,0,aPageSize.Width,aPageSize.Height ); - - const E3dObject* pE3dObject = dynamic_cast< const E3dObject*>( pObj ); - if( pE3dObject ) - aObjectRect = pE3dObject->GetScene()->GetSnapRect(); - - ActionDescriptionProvider::ActionType eActionType(ActionDescriptionProvider::MOVE); - if( !bIsMoveOnly && m_aSelection.isResizeableObjectSelected() ) - eActionType = ActionDescriptionProvider::RESIZE; - - ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() ); - - UndoGuard aUndoGuard( - ActionDescriptionProvider::createDescription( eActionType, ObjectNameProvider::getName( eObjectType)), - m_xUndoManager ); - - bool bChanged = false; - if ( eObjectType == OBJECTTYPE_LEGEND ) - bChanged = DiagramHelper::switchDiagramPositioningToExcludingPositioning( getModel(), false , true ); - - bool bMoved = PositionAndSizeHelper::moveObject( m_aSelection.getSelectedCID() - , getModel() - , awt::Rectangle(aObjectRect.getX(),aObjectRect.getY(),aObjectRect.getWidth(),aObjectRect.getHeight()) - , awt::Rectangle(aPageRect.getX(),aPageRect.getY(),aPageRect.getWidth(),aPageRect.getHeight()) ); - - if( bMoved || bChanged ) - { - bDraggingDone = true; - aUndoGuard.commit(); - } - } - } - catch( uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - //all wanted model changes will take effect - //and all unwanted view modifications are cleaned - } - - if( !bDraggingDone ) //mouse wasn't moved while dragging - { - bool bClickedTwiceOnDragableObject = SelectionHelper::isDragableObjectHitTwice( aMPos, m_aSelection.getSelectedCID(), *pDrawViewWrapper ); - bool bIsRotateable = m_aSelection.isRotateableObjectSelected( getModel() ); - - //toggel between move and rotate - if( bIsRotateable && bClickedTwiceOnDragableObject && SDRDRAG_MOVE==m_eDragMode ) - m_eDragMode=SDRDRAG_ROTATE; - else - m_eDragMode=SDRDRAG_MOVE; - - pDrawViewWrapper->SetDragMode(m_eDragMode); - - if( !m_bWaitingForDoubleClick && m_aSelection.maybeSwitchSelectionAfterSingleClickWasEnsured() ) - { - this->impl_selectObjectAndNotiy(); - } - } - else - m_aSelection.resetPossibleSelectionAfterSingleClickWasEnsured(); - } - else if( isDoubleClick(rMEvt) && !bMouseUpWithoutMouseDown /*#i106966#*/ ) - { - Point aMousePixel = rMEvt.GetPosPixel(); - execute_DoubleClick( &aMousePixel ); - } - - //@todo ForcePointer(&rMEvt); - m_pChartWindow->ReleaseMouse(); - - if( m_aSelection.isSelectionDifferentFromBeforeMouseDown() ) - bNotifySelectionChange = true; - } - - impl_SetMousePointer( rMEvt ); - - if(bNotifySelectionChange) - impl_notifySelectionChangeListeners(); -} - -void ChartController::execute_DoubleClick( const Point* pMousePixel ) -{ - bool bEditText = false; - if ( m_aSelection.hasSelection() ) - { - ::rtl::OUString aCID( m_aSelection.getSelectedCID() ); - if ( aCID.getLength() ) - { - ObjectType eObjectType = ObjectIdentifier::getObjectType( aCID ); - if ( OBJECTTYPE_TITLE == eObjectType ) - { - bEditText = true; - } - } - else - { - // #i12587# support for shapes in chart - SdrObject* pObj = DrawViewWrapper::getSdrObject( m_aSelection.getSelectedAdditionalShape() ); - if ( pObj && pObj->ISA( SdrTextObj ) ) - { - bEditText = true; - } - } - } - - if ( bEditText ) - { - executeDispatch_EditText( pMousePixel ); - } - else - { - executeDispatch_ObjectProperties(); - } -} - -void ChartController::execute_Resize() -{ - SolarMutexGuard aGuard; - if(m_pChartWindow) - m_pChartWindow->Invalidate(); -} -void ChartController::execute_Activate() -{ - ///// pDrawViewWrapper->SetEditMode(sal_True); -} -void ChartController::execute_Deactivate() -{ - /* - pDrawViewWrapper->SetEditMode(sal_False); - this->ReleaseMouse(); - */ -} -void ChartController::execute_GetFocus() -{ -} -void ChartController::execute_LoseFocus() -{ - //this->ReleaseMouse(); -} - -void ChartController::execute_Command( const CommandEvent& rCEvt ) -{ - bool bIsAction = false; - { - SolarMutexGuard aGuard; - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) - return; - bIsAction = m_pDrawViewWrapper->IsAction(); - } - - // pop-up menu - if(rCEvt.GetCommand() == COMMAND_CONTEXTMENU && !bIsAction) - { - { - SolarMutexGuard aGuard; - if(m_pChartWindow) - m_pChartWindow->ReleaseMouse(); - } - - if( m_aSelection.isSelectionDifferentFromBeforeMouseDown() ) - impl_notifySelectionChangeListeners(); - - if ( isShapeContext() ) - { - // #i12587# support for shapes in chart - PopupMenu aContextMenu( SchResId( m_pDrawViewWrapper->IsTextEdit() ? - RID_CONTEXTMENU_SHAPEEDIT : RID_CONTEXTMENU_SHAPE ) ); - ::svt::ContextMenuHelper aContextMenuHelper( m_xFrame ); - Point aPos( rCEvt.GetMousePosPixel() ); - if( !rCEvt.IsMouseEvent() ) - { - SolarMutexGuard aGuard; - if(m_pChartWindow) - aPos = m_pChartWindow->GetPointerState().maPos; - } - aContextMenuHelper.completeAndExecute( aPos, aContextMenu ); - } - else - { - // todo: the context menu should be specified by an xml file in uiconfig - uno::Reference< awt::XPopupMenu > xPopupMenu( - m_xCC->getServiceManager()->createInstanceWithContext( - C2U("com.sun.star.awt.PopupMenu"), m_xCC ), uno::UNO_QUERY ); - uno::Reference< awt::XMenuExtended > xMenuEx( xPopupMenu, uno::UNO_QUERY ); - if( xPopupMenu.is() && xMenuEx.is()) - { - sal_Int16 nUniqueId = 1; - ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() ); - Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( getModel() ); - - OUString aFormatCommand( lcl_getFormatCommandForObjectCID( m_aSelection.getSelectedCID() ) ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, aFormatCommand ); - - //some commands for dataseries and points: - //----- - if( OBJECTTYPE_DATA_SERIES == eObjectType || OBJECTTYPE_DATA_POINT == eObjectType ) - { - bool bIsPoint = ( OBJECTTYPE_DATA_POINT == eObjectType ); - uno::Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ); - uno::Reference< chart2::XRegressionCurveContainer > xCurveCnt( xSeries, uno::UNO_QUERY ); - Reference< chart2::XRegressionCurve > xTrendline( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xCurveCnt ) ); - bool bHasEquation = RegressionCurveHelper::hasEquation( xTrendline ); - Reference< chart2::XRegressionCurve > xMeanValue( RegressionCurveHelper::getMeanValueLine( xCurveCnt ) ); - bool bHasYErrorBars = StatisticsHelper::hasErrorBars( xSeries, true ); - bool bHasDataLabelsAtSeries = DataSeriesHelper::hasDataLabelsAtSeries( xSeries ); - bool bHasDataLabelsAtPoints = DataSeriesHelper::hasDataLabelsAtPoints( xSeries ); - bool bHasDataLabelAtPoint = false; - sal_Int32 nPointIndex = -1; - if( bIsPoint ) - { - nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( m_aSelection.getSelectedCID() ); - bHasDataLabelAtPoint = DataSeriesHelper::hasDataLabelAtPoint( xSeries, nPointIndex ); - } - bool bSelectedPointIsFormatted = false; - bool bHasFormattedDataPointsOtherThanSelected = false; - - Reference< beans::XPropertySet > xSeriesProperties( xSeries, uno::UNO_QUERY ); - if( xSeriesProperties.is() ) - { - uno::Sequence< sal_Int32 > aAttributedDataPointIndexList; - if( xSeriesProperties->getPropertyValue( C2U( "AttributedDataPoints" ) ) >>= aAttributedDataPointIndexList ) - { - if( aAttributedDataPointIndexList.hasElements() ) - { - if( bIsPoint ) - { - ::std::vector< sal_Int32 > aIndices( ContainerHelper::SequenceToVector( aAttributedDataPointIndexList ) ); - ::std::vector< sal_Int32 >::iterator aIt = ::std::find( aIndices.begin(), aIndices.end(), nPointIndex ); - if( aIt != aIndices.end()) - bSelectedPointIsFormatted = true; - else - bHasFormattedDataPointsOtherThanSelected = true; - } - else - bHasFormattedDataPointsOtherThanSelected = true; - } - } - } - - if( bIsPoint ) - { - if( bHasDataLabelAtPoint ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatDataLabel") ); - if( !bHasDataLabelAtPoint ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertDataLabel") ); - else - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteDataLabel") ); - if( bSelectedPointIsFormatted ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:ResetDataPoint")); - - xPopupMenu->insertSeparator( -1 ); - - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatDataSeries") ); - } - - Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeOfSeries( xDiagram, xSeries ) ); - if( xChartType->getChartType().equals(CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK) ) - { - try - { - Reference< beans::XPropertySet > xChartTypeProp( xChartType, uno::UNO_QUERY ); - if( xChartTypeProp.is() ) - { - bool bJapaneseStyle = false; - xChartTypeProp->getPropertyValue( C2U( "Japanese" ) ) >>= bJapaneseStyle; - - if( bJapaneseStyle ) - { - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatStockLoss") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatStockGain") ); - } - } - } - catch( const uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - } - - if( bHasDataLabelsAtSeries ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatDataLabels") ); - if( xTrendline.is() ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatTrendline") ); - if( bHasEquation ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatTrendlineEquation") ); - if( xMeanValue.is() ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatMeanValue") ); - if( bHasYErrorBars ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatYErrorBars") ); - - xPopupMenu->insertSeparator( -1 ); - - if( !bHasDataLabelsAtSeries ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertDataLabels") ); - if( !xTrendline.is() ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertTrendline") ); - else if( !bHasEquation ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertTrendlineEquation") ); - if( !xMeanValue.is() ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertMeanValue") ); - if( !bHasYErrorBars ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertYErrorBars") ); - - - if( bHasDataLabelsAtSeries || ( bHasDataLabelsAtPoints && bHasFormattedDataPointsOtherThanSelected ) ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteDataLabels") ); - if( xTrendline.is() ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteTrendline") ); - if( bHasEquation ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteTrendlineEquation") ); - if( xMeanValue.is() ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteMeanValue") ); - if( bHasYErrorBars ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteYErrorBars") ); - - if( bHasFormattedDataPointsOtherThanSelected ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:ResetAllDataPoints")); - - xPopupMenu->insertSeparator( -1 ); - - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId, C2U(".uno:ArrangeRow")); - uno::Reference< awt::XPopupMenu > xArrangePopupMenu( - m_xCC->getServiceManager()->createInstanceWithContext( - C2U("com.sun.star.awt.PopupMenu"), m_xCC ), uno::UNO_QUERY ); - uno::Reference< awt::XMenuExtended > xArrangeMenuEx( xArrangePopupMenu, uno::UNO_QUERY ); - if( xArrangePopupMenu.is() && xArrangeMenuEx.is()) - { - sal_Int16 nSubId = nUniqueId + 1; - lcl_insertMenuCommand( xArrangePopupMenu, xArrangeMenuEx, nSubId++, C2U(".uno:Forward") ); - lcl_insertMenuCommand( xArrangePopupMenu, xArrangeMenuEx, nSubId, C2U(".uno:Backward") ); - xPopupMenu->setPopupMenu( nUniqueId, xArrangePopupMenu ); - nUniqueId = nSubId; - } - ++nUniqueId; - } - else if( OBJECTTYPE_DATA_CURVE == eObjectType ) - { - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatTrendlineEquation") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertTrendlineEquation") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertTrendlineEquationAndR2") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertR2Value") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteTrendlineEquation") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteR2Value") ); - } - else if( OBJECTTYPE_DATA_CURVE_EQUATION == eObjectType ) - { - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertR2Value") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteR2Value") ); - } - - //some commands for axes: and grids - //----- - else if( OBJECTTYPE_AXIS == eObjectType || OBJECTTYPE_GRID == eObjectType || OBJECTTYPE_SUBGRID == eObjectType ) - { - Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() ); - if( xAxis.is() && xDiagram.is() ) - { - sal_Int32 nDimensionIndex = -1; - sal_Int32 nCooSysIndex = -1; - sal_Int32 nAxisIndex = -1; - AxisHelper::getIndicesForAxis( xAxis, xDiagram, nCooSysIndex, nDimensionIndex, nAxisIndex ); - bool bIsSecondaryAxis = nAxisIndex!=0; - bool bIsAxisVisible = AxisHelper::isAxisVisible( xAxis ); - bool bIsMajorGridVisible = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, true /*bMainGrid*/, xDiagram ); - bool bIsMinorGridVisible = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, false /*bMainGrid*/, xDiagram ); - bool bHasTitle = false; - uno::Reference< XTitled > xTitled( xAxis, uno::UNO_QUERY ); - if( xTitled.is()) - bHasTitle = TitleHelper::getCompleteString( xTitled->getTitleObject() ).getLength()>0; - - if( OBJECTTYPE_AXIS != eObjectType && bIsAxisVisible ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatAxis") ); - if( OBJECTTYPE_GRID != eObjectType && bIsMajorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatMajorGrid") ); - if( OBJECTTYPE_SUBGRID != eObjectType && bIsMinorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatMinorGrid") ); - - xPopupMenu->insertSeparator( -1 ); - - if( OBJECTTYPE_AXIS != eObjectType && !bIsAxisVisible ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertAxis") ); - if( OBJECTTYPE_GRID != eObjectType && !bIsMajorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertMajorGrid") ); - if( OBJECTTYPE_SUBGRID != eObjectType && !bIsMinorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertMinorGrid") ); - if( !bHasTitle ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertAxisTitle") ); - - if( bIsAxisVisible ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteAxis") ); - if( bIsMajorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteMajorGrid") ); - if( bIsMinorGridVisible && !bIsSecondaryAxis ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteMinorGrid") ); - } - } - - if( OBJECTTYPE_DATA_STOCK_LOSS == eObjectType ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatStockGain") ); - else if( OBJECTTYPE_DATA_STOCK_GAIN == eObjectType ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:FormatStockLoss") ); - - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:TransformDialog")); - - if( OBJECTTYPE_PAGE == eObjectType || OBJECTTYPE_DIAGRAM == eObjectType - || OBJECTTYPE_DIAGRAM_WALL == eObjectType - || OBJECTTYPE_DIAGRAM_FLOOR == eObjectType - || OBJECTTYPE_UNKNOWN == eObjectType ) - { - if( OBJECTTYPE_UNKNOWN != eObjectType ) - xPopupMenu->insertSeparator( -1 ); - bool bHasLegend = LegendHelper::hasLegend( xDiagram ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertTitles") ); - if( !bHasLegend ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertLegend") ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:InsertRemoveAxes") ); - if( bHasLegend ) - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DeleteLegend") ); - } - //----- - - xPopupMenu->insertSeparator( -1 ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DiagramType")); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DataRanges")); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:DiagramData")); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:View3D")); - xPopupMenu->insertSeparator( -1 ); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:Cut")); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:Copy")); - lcl_insertMenuCommand( xPopupMenu, xMenuEx, nUniqueId++, C2U(".uno:Paste")); - - ::svt::ContextMenuHelper aContextMenuHelper( m_xFrame ); - Point aPos( rCEvt.GetMousePosPixel() ); - if( !rCEvt.IsMouseEvent() ) - { - SolarMutexGuard aGuard; - if(m_pChartWindow) - aPos = m_pChartWindow->GetPointerState().maPos; - } - aContextMenuHelper.completeAndExecute( aPos, xPopupMenu ); - } - } - } - else if( ( rCEvt.GetCommand() == COMMAND_STARTEXTTEXTINPUT ) || - ( rCEvt.GetCommand() == COMMAND_EXTTEXTINPUT ) || - ( rCEvt.GetCommand() == COMMAND_ENDEXTTEXTINPUT ) || - ( rCEvt.GetCommand() == COMMAND_INPUTCONTEXTCHANGE ) ) - { - //#i84417# enable editing with IME - SolarMutexGuard aGuard; - if( m_pDrawViewWrapper ) - m_pDrawViewWrapper->Command( rCEvt, m_pChartWindow ); - } -} - -bool ChartController::execute_KeyInput( const KeyEvent& rKEvt ) -{ - bool bReturn=false; - - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if(!m_pChartWindow || !pDrawViewWrapper) - return bReturn; - - // handle accelerators - if( ! m_apAccelExecute.get() && m_xFrame.is() && m_xCC.is() && m_xCC->getServiceManager().is() ) - { - m_apAccelExecute.reset( ::svt::AcceleratorExecute::createAcceleratorHelper()); - OSL_ASSERT( m_apAccelExecute.get()); - if( m_apAccelExecute.get() ) - m_apAccelExecute->init( - uno::Reference< lang::XMultiServiceFactory >( m_xCC->getServiceManager(), uno::UNO_QUERY ), m_xFrame ); - } - - KeyCode aKeyCode( rKEvt.GetKeyCode()); - sal_uInt16 nCode = aKeyCode.GetCode(); - bool bAlternate = aKeyCode.IsMod2(); - - if( m_apAccelExecute.get() ) - bReturn = m_apAccelExecute->execute( aKeyCode ); - if( bReturn ) - return bReturn; - - { - SolarMutexGuard aGuard; - if( pDrawViewWrapper->IsTextEdit() ) - { - if( pDrawViewWrapper->KeyInput(rKEvt,m_pChartWindow) ) - { - bReturn = true; - if( nCode == KEY_ESCAPE ) - { - this->EndTextEdit(); - } - } - } - } - - // keyboard accessibility - ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() ); - if( ! bReturn ) - { - // Natvigation (Tab/F3/Home/End) - uno::Reference< XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY ); - ObjectKeyNavigation aObjNav( m_aSelection.getSelectedOID(), xChartDoc, ExplicitValueProvider::getExplicitValueProvider( m_xChartView )); - awt::KeyEvent aKeyEvent( ::svt::AcceleratorExecute::st_VCLKey2AWTKey( aKeyCode )); - bReturn = aObjNav.handleKeyEvent( aKeyEvent ); - if( bReturn ) - { - ObjectIdentifier aNewOID = aObjNav.getCurrentSelection(); - uno::Any aNewSelection; - if ( aNewOID.isValid() && !ObjectHierarchy::isRootNode( aNewOID ) ) - { - aNewSelection = aNewOID.getAny(); - } - if ( m_eDragMode == SDRDRAG_ROTATE && !SelectionHelper::isRotateableObject( aNewOID.getObjectCID(), getModel() ) ) - { - m_eDragMode = SDRDRAG_MOVE; - } - bReturn = select( aNewSelection ); - } - } - - // Position and Size (+/-/arrow-keys) or pie segment dragging - if( ! bReturn ) - { - // pie segment dragging - // note: could also be done for data series - if( eObjectType == OBJECTTYPE_DATA_POINT && - ObjectIdentifier::getDragMethodServiceName( m_aSelection.getSelectedCID() ).equals( - ObjectIdentifier::getPieSegmentDragMethodServiceName())) - { - bool bDrag = false; - bool bDragInside = false; - if( nCode == KEY_ADD || - nCode == KEY_SUBTRACT ) - { - bDrag = true; - bDragInside = ( nCode == KEY_SUBTRACT ); - } - else if( - nCode == KEY_LEFT || - nCode == KEY_RIGHT || - nCode == KEY_UP || - nCode == KEY_DOWN ) - { - bDrag = true; - rtl::OUString aParameter( ObjectIdentifier::getDragParameterString( m_aSelection.getSelectedCID() )); - sal_Int32 nOffsetPercentDummy( 0 ); - awt::Point aMinimumPosition( 0, 0 ); - awt::Point aMaximumPosition( 0, 0 ); - ObjectIdentifier::parsePieSegmentDragParameterString( - aParameter, nOffsetPercentDummy, aMinimumPosition, aMaximumPosition ); - aMaximumPosition.Y -= aMinimumPosition.Y; - aMaximumPosition.X -= aMinimumPosition.X; - - bDragInside = - (nCode == KEY_RIGHT && (aMaximumPosition.X < 0)) || - (nCode == KEY_LEFT && (aMaximumPosition.X > 0)) || - (nCode == KEY_DOWN && (aMaximumPosition.Y < 0)) || - (nCode == KEY_UP && (aMaximumPosition.Y > 0)); - } - - if( bDrag ) - { - double fAmount = bAlternate ? 0.01 : 0.05; - if( bDragInside ) - fAmount *= -1.0; - - bReturn = impl_DragDataPoint( m_aSelection.getSelectedCID(), fAmount ); - } - } - else - { - // size - if( nCode == KEY_ADD || - nCode == KEY_SUBTRACT ) - { - if( eObjectType == OBJECTTYPE_DIAGRAM ) - { - // default 1 mm in each direction - double fGrowAmountX = 200.0; - double fGrowAmountY = 200.0; - if( bAlternate && m_pChartWindow ) - { - // together with Alt-key: 1 px in each direction - SolarMutexGuard aGuard; - if( m_pChartWindow ) - { - Size aPixelSize = m_pChartWindow->PixelToLogic( Size( 2, 2 )); - fGrowAmountX = static_cast< double >( aPixelSize.Width()); - fGrowAmountY = static_cast< double >( aPixelSize.Height()); - } - } - if( nCode == KEY_SUBTRACT ) - { - fGrowAmountX = -fGrowAmountX; - fGrowAmountY = -fGrowAmountY; - } - bReturn = impl_moveOrResizeObject( - m_aSelection.getSelectedCID(), CENTERED_RESIZE_OBJECT, fGrowAmountX, fGrowAmountY ); - } - } - // position - else if( nCode == KEY_LEFT || - nCode == KEY_RIGHT || - nCode == KEY_UP || - nCode == KEY_DOWN ) - { - if( m_aSelection.isDragableObjectSelected() ) - { - // default 1 mm - double fShiftAmountX = 100.0; - double fShiftAmountY = 100.0; - if( bAlternate && m_pChartWindow ) - { - // together with Alt-key: 1 px - SolarMutexGuard aGuard; - if(m_pChartWindow) - { - Size aPixelSize = m_pChartWindow->PixelToLogic( Size( 1, 1 )); - fShiftAmountX = static_cast< double >( aPixelSize.Width()); - fShiftAmountY = static_cast< double >( aPixelSize.Height()); - } - } - switch( nCode ) - { - case KEY_LEFT: - fShiftAmountX = -fShiftAmountX; - fShiftAmountY = 0.0; - break; - case KEY_RIGHT: - fShiftAmountY = 0.0; - break; - case KEY_UP: - fShiftAmountX = 0.0; - fShiftAmountY = -fShiftAmountY; - break; - case KEY_DOWN: - fShiftAmountX = 0.0; - break; - } - if( m_aSelection.getSelectedCID().getLength() ) - { - //move chart objects - bReturn = impl_moveOrResizeObject( - m_aSelection.getSelectedCID(), MOVE_OBJECT, fShiftAmountX, fShiftAmountY ); - } - else - { - //move additional shapes - uno::Reference< drawing::XShape > xShape( m_aSelection.getSelectedAdditionalShape() ); - if( xShape.is() ) - { - awt::Point aPos( xShape->getPosition() ); - awt::Size aSize( xShape->getSize() ); - awt::Size aPageSize( ChartModelHelper::getPageSize( getModel() ) ); - aPos.X = static_cast< long >( static_cast< double >( aPos.X ) + fShiftAmountX ); - aPos.Y = static_cast< long >( static_cast< double >( aPos.Y ) + fShiftAmountY ); - if( aPos.X + aSize.Width > aPageSize.Width ) - aPos.X = aPageSize.Width - aSize.Width; - if( aPos.X < 0 ) - aPos.X = 0; - if( aPos.Y + aSize.Height > aPageSize.Height ) - aPos.Y = aPageSize.Height - aSize.Height; - if( aPos.Y < 0 ) - aPos.Y = 0; - - xShape->setPosition( aPos ); - } - } - } - } - } - } - - // text edit - if( ! bReturn && - nCode == KEY_F2 ) - { - if( OBJECTTYPE_TITLE == eObjectType ) - { - executeDispatch_EditText(); - bReturn = true; - } - } - - // deactivate inplace mode (this code should be unnecessary, but - // unfortunately is not) - if( ! bReturn && - nCode == KEY_ESCAPE ) - { - uno::Reference< frame::XDispatchHelper > xDispatchHelper( - m_xCC->getServiceManager()->createInstanceWithContext( - C2U("com.sun.star.frame.DispatchHelper"), m_xCC ), uno::UNO_QUERY ); - if( xDispatchHelper.is()) - { - uno::Sequence< beans::PropertyValue > aArgs; - xDispatchHelper->executeDispatch( - uno::Reference< frame::XDispatchProvider >( m_xFrame, uno::UNO_QUERY ), - C2U(".uno:TerminateInplaceActivation"), - C2U("_parent"), - frame::FrameSearchFlag::PARENT, - aArgs ); - bReturn = true; - } - } - - if( ! bReturn && - (nCode == KEY_DELETE || nCode == KEY_BACKSPACE )) - { - bReturn = executeDispatch_Delete(); - if( ! bReturn ) - { - SolarMutexGuard aGuard; - InfoBox( m_pChartWindow, String(SchResId( STR_ACTION_NOTPOSSIBLE ))).Execute(); - } - } - - return bReturn; -} - -bool ChartController::requestQuickHelp( - ::Point aAtLogicPosition, - bool bIsBalloonHelp, - ::rtl::OUString & rOutQuickHelpText, - awt::Rectangle & rOutEqualRect ) -{ - uno::Reference< frame::XModel > xChartModel; - if( m_aModel.is()) - xChartModel.set( getModel() ); - if( !xChartModel.is()) - return false; - - // help text - ::rtl::OUString aCID; - if( m_pDrawViewWrapper ) - { - aCID = SelectionHelper::getHitObjectCID( - aAtLogicPosition, *m_pDrawViewWrapper ); - } - bool bResult( aCID.getLength()); - - if( bResult ) - { - // get help text - rOutQuickHelpText = ObjectNameProvider::getHelpText( aCID, xChartModel, bIsBalloonHelp /* bVerbose */ ); - - // set rectangle - ExplicitValueProvider * pValueProvider( - ExplicitValueProvider::getExplicitValueProvider( m_xChartView )); - if( pValueProvider ) - rOutEqualRect = pValueProvider->getRectangleOfObject( aCID, true ); - } - - return bResult; -} - -//----------------------------------------------------------------- -// XSelectionSupplier (optional interface) -//----------------------------------------------------------------- - sal_Bool SAL_CALL ChartController -::select( const uno::Any& rSelection ) - throw( lang::IllegalArgumentException ) -{ - bool bSuccess = false; - - if ( rSelection.hasValue() ) - { - const uno::Type& rType = rSelection.getValueType(); - if ( rType == ::getCppuType( static_cast< const ::rtl::OUString* >( 0 ) ) ) - { - ::rtl::OUString aNewCID; - if ( ( rSelection >>= aNewCID ) && m_aSelection.setSelection( aNewCID ) ) - { - bSuccess = true; - } - } - else if ( rType == ::getCppuType( static_cast< const uno::Reference< drawing::XShape >* >( 0 ) ) ) - { - uno::Reference< drawing::XShape > xShape; - if ( ( rSelection >>= xShape ) && m_aSelection.setSelection( xShape ) ) - { - bSuccess = true; - } - } - } - else - { - if ( m_aSelection.hasSelection() ) - { - m_aSelection.clearSelection(); - bSuccess = true; - } - } - - if ( bSuccess ) - { - SolarMutexGuard aGuard; - if ( m_pDrawViewWrapper && m_pDrawViewWrapper->IsTextEdit() ) - { - this->EndTextEdit(); - } - this->impl_selectObjectAndNotiy(); - if ( m_pChartWindow ) - { - m_pChartWindow->Invalidate(); - } - return sal_True; - } - - return sal_False; -} - - uno::Any SAL_CALL ChartController -::getSelection() throw(uno::RuntimeException) -{ - uno::Any aReturn; - if ( m_aSelection.hasSelection() ) - { - ::rtl::OUString aCID( m_aSelection.getSelectedCID() ); - if ( aCID.getLength() ) - { - aReturn = uno::makeAny( aCID ); - } - else - { - // #i12587# support for shapes in chart - aReturn = uno::makeAny( m_aSelection.getSelectedAdditionalShape() ); - } - } - return aReturn; -} - - void SAL_CALL ChartController -::addSelectionChangeListener( const uno::Reference< - view::XSelectionChangeListener > & xListener ) - throw(uno::RuntimeException) -{ - SolarMutexGuard aGuard; - if( impl_isDisposedOrSuspended() )//@todo? allow adding of listeners in suspend mode? - return; //behave passive if already disposed or suspended - - //--add listener - m_aLifeTimeManager.m_aListenerContainer.addInterface( ::getCppuType((const uno::Reference< view::XSelectionChangeListener >*)0), xListener ); -} - - void SAL_CALL ChartController -::removeSelectionChangeListener( const uno::Reference< - view::XSelectionChangeListener > & xListener ) - throw(uno::RuntimeException) -{ - SolarMutexGuard aGuard; - if( impl_isDisposedOrSuspended() ) //@todo? allow removing of listeners in suspend mode? - return; //behave passive if already disposed or suspended - - //--remove listener - m_aLifeTimeManager.m_aListenerContainer.removeInterface( ::getCppuType((const uno::Reference< view::XSelectionChangeListener >*)0), xListener ); -} - - void ChartController -::impl_notifySelectionChangeListeners() -{ - ::cppu::OInterfaceContainerHelper* pIC = m_aLifeTimeManager.m_aListenerContainer - .getContainer( ::getCppuType((const uno::Reference< view::XSelectionChangeListener >*)0) ); - if( pIC ) - { - uno::Reference< view::XSelectionSupplier > xSelectionSupplier(this); - lang::EventObject aEvent( xSelectionSupplier ); - ::cppu::OInterfaceIteratorHelper aIt( *pIC ); - while( aIt.hasMoreElements() ) - { - uno::Reference< view::XSelectionChangeListener > xListener( aIt.next(), uno::UNO_QUERY ); - if( xListener.is() ) - xListener->selectionChanged( aEvent ); - } - } -} - -void ChartController::impl_selectObjectAndNotiy() -{ - { - SolarMutexGuard aGuard; - DrawViewWrapper* pDrawViewWrapper = m_pDrawViewWrapper; - if( pDrawViewWrapper ) - { - pDrawViewWrapper->SetDragMode( m_eDragMode ); - m_aSelection.applySelection( m_pDrawViewWrapper ); - } - } - impl_notifySelectionChangeListeners(); -} - -bool ChartController::impl_moveOrResizeObject( - const ::rtl::OUString & rCID, - eMoveOrResizeType eType, - double fAmountLogicX, - double fAmountLogicY ) -{ - bool bResult = false; - bool bNeedShift = true; - bool bNeedResize = ( eType == CENTERED_RESIZE_OBJECT ); - - uno::Reference< frame::XModel > xChartModel( getModel() ); - uno::Reference< beans::XPropertySet > xObjProp( - ObjectIdentifier::getObjectPropertySet( rCID, xChartModel )); - if( xObjProp.is()) - { - awt::Size aRefSize = ChartModelHelper::getPageSize( xChartModel ); - - chart2::RelativePosition aRelPos; - chart2::RelativeSize aRelSize; - bool bDeterminePos = !(xObjProp->getPropertyValue( C2U("RelativePosition")) >>= aRelPos); - bool bDetermineSize = !bNeedResize || !(xObjProp->getPropertyValue( C2U("RelativeSize")) >>= aRelSize); - - if( ( bDeterminePos || bDetermineSize ) && - ( aRefSize.Width > 0 && aRefSize.Height > 0 ) ) - { - ExplicitValueProvider * pValueProvider( - ExplicitValueProvider::getExplicitValueProvider( m_xChartView )); - if( pValueProvider ) - { - awt::Rectangle aRect( pValueProvider->getRectangleOfObject( rCID )); - double fWidth = static_cast< double >( aRefSize.Width ); - double fHeight = static_cast< double >( aRefSize.Height ); - if( bDetermineSize ) - { - aRelSize.Primary = static_cast< double >( aRect.Width ) / fWidth; - aRelSize.Secondary = static_cast< double >( aRect.Height ) / fHeight; - } - if( bDeterminePos ) - { - if( bNeedResize && aRelSize.Primary > 0.0 && aRelSize.Secondary > 0.0 ) - { - aRelPos.Primary = (static_cast< double >( aRect.X ) / fWidth) + - (aRelSize.Primary / 2.0); - aRelPos.Secondary = (static_cast< double >( aRect.Y ) / fHeight) + - (aRelSize.Secondary / 2.0); - aRelPos.Anchor = drawing::Alignment_CENTER; - } - else - { - aRelPos.Primary = static_cast< double >( aRect.X ) / fWidth; - aRelPos.Secondary = static_cast< double >( aRect.Y ) / fHeight; - aRelPos.Anchor = drawing::Alignment_TOP_LEFT; - } - } - } - } - - if( eType == CENTERED_RESIZE_OBJECT ) - bResult = lcl_GrowAndShiftLogic( aRelPos, aRelSize, aRefSize, fAmountLogicX, fAmountLogicY ); - else if( eType == MOVE_OBJECT ) - bResult = lcl_MoveObjectLogic( aRelPos, aRelSize, aRefSize, fAmountLogicX, fAmountLogicY ); - - if( bResult ) - { - ActionDescriptionProvider::ActionType eActionType(ActionDescriptionProvider::MOVE); - if( bNeedResize ) - eActionType = ActionDescriptionProvider::RESIZE; - - ObjectType eObjectType = ObjectIdentifier::getObjectType( rCID ); - UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( - eActionType, ObjectNameProvider::getName( eObjectType )), m_xUndoManager ); - { - ControllerLockGuard aCLGuard( xChartModel ); - if( bNeedShift ) - xObjProp->setPropertyValue( C2U("RelativePosition"), uno::makeAny( aRelPos )); - if( bNeedResize || (eObjectType == OBJECTTYPE_DIAGRAM) )//Also set an explicat size at the diagram when an explicit position is set - xObjProp->setPropertyValue( C2U("RelativeSize"), uno::makeAny( aRelSize )); - } - aUndoGuard.commit(); - } - } - return bResult; -} - -bool ChartController::impl_DragDataPoint( const ::rtl::OUString & rCID, double fAdditionalOffset ) -{ - bool bResult = false; - if( fAdditionalOffset < -1.0 || fAdditionalOffset > 1.0 || fAdditionalOffset == 0.0 ) - return bResult; - - sal_Int32 nDataPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( rCID ); - uno::Reference< chart2::XDataSeries > xSeries( - ObjectIdentifier::getDataSeriesForCID( rCID, getModel() )); - if( xSeries.is()) - { - try - { - uno::Reference< beans::XPropertySet > xPointProp( xSeries->getDataPointByIndex( nDataPointIndex )); - double fOffset = 0.0; - if( xPointProp.is() && - (xPointProp->getPropertyValue( C2U("Offset" )) >>= fOffset ) && - (( fAdditionalOffset > 0.0 && fOffset < 1.0 ) || (fOffset > 0.0)) ) - { - fOffset += fAdditionalOffset; - if( fOffset > 1.0 ) - fOffset = 1.0; - else if( fOffset < 0.0 ) - fOffset = 0.0; - xPointProp->setPropertyValue( C2U("Offset"), uno::makeAny( fOffset )); - bResult = true; - } - } - catch( const uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - } - - return bResult; -} - -void ChartController::impl_SetMousePointer( const MouseEvent & rEvent ) -{ - SolarMutexGuard aGuard; - if( m_pDrawViewWrapper && m_pChartWindow ) - { - Point aMousePos( m_pChartWindow->PixelToLogic( rEvent.GetPosPixel())); - sal_uInt16 nModifier = rEvent.GetModifier(); - sal_Bool bLeftDown = rEvent.IsLeft(); - - if ( m_pDrawViewWrapper->IsTextEdit() ) - { - if( m_pDrawViewWrapper->IsTextEditHit( aMousePos, HITPIX) ) - { - m_pChartWindow->SetPointer( m_pDrawViewWrapper->GetPreferedPointer( - aMousePos, m_pChartWindow, nModifier, bLeftDown ) ); - return; - } - } - else if( m_pDrawViewWrapper->IsAction() ) - { - return;//don't change pointer during running action - } - - SdrHdl* pHitSelectionHdl = 0; - if( m_aSelection.isResizeableObjectSelected() ) - pHitSelectionHdl = m_pDrawViewWrapper->PickHandle( aMousePos ); - - if( pHitSelectionHdl ) - { - - Pointer aPointer = m_pDrawViewWrapper->GetPreferedPointer( - aMousePos, m_pChartWindow, nModifier, bLeftDown ); - bool bForceArrowPointer = false; - - ObjectIdentifier aOID( m_aSelection.getSelectedOID() ); - - switch( aPointer.GetStyle()) - { - case POINTER_NSIZE: - case POINTER_SSIZE: - case POINTER_WSIZE: - case POINTER_ESIZE: - case POINTER_NWSIZE: - case POINTER_NESIZE: - case POINTER_SWSIZE: - case POINTER_SESIZE: - if( ! m_aSelection.isResizeableObjectSelected() ) - bForceArrowPointer = true; - break; - case POINTER_MOVE: - if ( !aOID.isDragableObject() ) - bForceArrowPointer = true; - break; - case POINTER_MOVEPOINT: - case POINTER_MOVEBEZIERWEIGHT: - // there is no point-editing in a chart - // the POINTER_MOVEBEZIERWEIGHT appears in 3d data points - bForceArrowPointer = true; - break; - default: - break; - } - - if( bForceArrowPointer ) - m_pChartWindow->SetPointer( Pointer( POINTER_ARROW )); - else - m_pChartWindow->SetPointer( aPointer ); - } - else - { - // #i12587# support for shapes in chart - if ( m_eDrawMode == CHARTDRAW_INSERT && - ( !m_pDrawViewWrapper->IsMarkedHit( aMousePos ) || !m_aSelection.isDragableObjectSelected() ) ) - { - PointerStyle ePointerStyle = POINTER_DRAW_RECT; - SdrObjKind eKind = static_cast< SdrObjKind >( m_pDrawViewWrapper->GetCurrentObjIdentifier() ); - switch ( eKind ) - { - case OBJ_LINE: - { - ePointerStyle = POINTER_DRAW_LINE; - } - break; - case OBJ_RECT: - case OBJ_CUSTOMSHAPE: - { - ePointerStyle = POINTER_DRAW_RECT; - } - break; - case OBJ_CIRC: - { - ePointerStyle = POINTER_DRAW_ELLIPSE; - } - break; - case OBJ_FREELINE: - { - ePointerStyle = POINTER_DRAW_POLYGON; - } - break; - case OBJ_TEXT: - { - ePointerStyle = POINTER_DRAW_TEXT; - } - break; - case OBJ_CAPTION: - { - ePointerStyle = POINTER_DRAW_CAPTION; - } - break; - default: - { - ePointerStyle = POINTER_DRAW_RECT; - } - break; - } - m_pChartWindow->SetPointer( Pointer( ePointerStyle ) ); - return; - } - - ::rtl::OUString aHitObjectCID( - SelectionHelper::getHitObjectCID( - aMousePos, *m_pDrawViewWrapper, true /*bGetDiagramInsteadOf_Wall*/ )); - - if( m_pDrawViewWrapper->IsTextEdit() ) - { - if( aHitObjectCID.equals(m_aSelection.getSelectedCID()) ) - { - m_pChartWindow->SetPointer( Pointer( POINTER_ARROW )); - return; - } - } - - if( !aHitObjectCID.getLength() ) - { - //additional shape was hit - m_pChartWindow->SetPointer( POINTER_MOVE ); - } - else if( ObjectIdentifier::isDragableObject( aHitObjectCID ) ) - { - if( (m_eDragMode == SDRDRAG_ROTATE) - && SelectionHelper::isRotateableObject( aHitObjectCID - , getModel() ) ) - m_pChartWindow->SetPointer( Pointer( POINTER_ROTATE ) ); - else - { - ObjectType eHitObjectType = ObjectIdentifier::getObjectType( aHitObjectCID ); - if( eHitObjectType == OBJECTTYPE_DATA_POINT ) - { - if( !ObjectIdentifier::areSiblings(aHitObjectCID,m_aSelection.getSelectedCID()) - && !ObjectIdentifier::areIdenticalObjects(aHitObjectCID,m_aSelection.getSelectedCID()) ) - { - m_pChartWindow->SetPointer( Pointer( POINTER_ARROW )); - return; - } - } - m_pChartWindow->SetPointer( POINTER_MOVE ); - } - } - else - m_pChartWindow->SetPointer( Pointer( POINTER_ARROW )); - } - } -} - -//............................................................................. -} //namespace chart -//............................................................................. - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |