diff options
author | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:52:27 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:52:27 +0100 |
commit | f457a7fdbb4400f34844af0492dc32d2f3623c95 (patch) | |
tree | 9e9f67205cd5b72f1031721273e1534a3a1e5b0f /chart2/source/controller/main/ChartController_Tools.cxx | |
parent | 2601b25912a2ed05ed8d009bca40aa8b479f39d8 (diff) |
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'chart2/source/controller/main/ChartController_Tools.cxx')
-rw-r--r-- | chart2/source/controller/main/ChartController_Tools.cxx | 885 |
1 files changed, 0 insertions, 885 deletions
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx deleted file mode 100644 index c8e5a9463..000000000 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ /dev/null @@ -1,885 +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 "ChartWindow.hxx" -#include "ChartModelHelper.hxx" -#include "TitleHelper.hxx" -#include "ThreeDHelper.hxx" -#include "DataSeriesHelper.hxx" -#include "UndoGuard.hxx" -#include "ControllerLockGuard.hxx" -#include "macros.hxx" -#include "ResId.hxx" -#include "Strings.hrc" -#include "ObjectIdentifier.hxx" -#include "ReferenceSizeProvider.hxx" -#include "chartview/ExplicitValueProvider.hxx" -#include "chartview/DrawModelWrapper.hxx" -#include "ChartTransferable.hxx" -#include "DrawViewWrapper.hxx" -#include "LegendHelper.hxx" -#include "AxisHelper.hxx" -#include "RegressionCurveHelper.hxx" -#include "ShapeController.hxx" -#include "DiagramHelper.hxx" -#include "ObjectNameProvider.hxx" - -#include <com/sun/star/chart2/DataPointLabel.hpp> -#include <com/sun/star/beans/XPropertyState.hpp> -#include <com/sun/star/drawing/CameraGeometry.hpp> -#include <com/sun/star/graphic/XGraphic.hpp> -#include <com/sun/star/io/XInputStream.hpp> -#include <com/sun/star/text/XTextRange.hpp> -#include <com/sun/star/drawing/TextVerticalAdjust.hpp> -#include <com/sun/star/drawing/TextHorizontalAdjust.hpp> -#include <com/sun/star/chart/ErrorBarStyle.hpp> - -#include <svx/ActionDescriptionProvider.hxx> -// for TransferableDataHelper/TransferableHelper -#include <svtools/transfer.hxx> -// for SotStorageStreamRef -#include <sot/storage.hxx> -// for Graphic -#include <vcl/graph.hxx> -// for SvxDrawingLayerImport/SvxUnoDrawingModel -#include <svx/unomodel.hxx> -// for SdrModel -#include <svx/svdmodel.hxx> -// for OInputStreamWrapper -#include <unotools/streamwrap.hxx> -// for SolarMutex -#include <vcl/svapp.hxx> -#include <osl/mutex.hxx> -#include <svx/dialmgr.hxx> -#include <svx/dialogs.hrc> -// for OutlinerView -#include <editeng/outliner.hxx> -#include <svx/svditer.hxx> -#include <svx/svdpage.hxx> -#include <svx/svdundo.hxx> -#include <svx/unoapi.hxx> -#include <svx/unopage.hxx> - -#include <boost/scoped_ptr.hpp> - -using namespace ::com::sun::star; - -using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::Sequence; -using ::rtl::OUString; - -namespace -{ - -bool lcl_deleteDataSeries( - const OUString & rCID, - const Reference< frame::XModel > & xModel, - const Reference< document::XUndoManager > & xUndoManager ) -{ - bool bResult = false; - uno::Reference< chart2::XDataSeries > xSeries( ::chart::ObjectIdentifier::getDataSeriesForCID( rCID, xModel )); - uno::Reference< chart2::XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); - if( xSeries.is() && xChartDoc.is()) - { - uno::Reference< chart2::XChartType > xChartType( - ::chart::DataSeriesHelper::getChartTypeOfSeries( xSeries, xChartDoc->getFirstDiagram())); - if( xChartType.is()) - { - ::chart::UndoGuard aUndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_DATASERIES ))), - xUndoManager ); - - Reference< chart2::XDiagram > xDiagram( ::chart::ChartModelHelper::findDiagram( xModel ) ); - uno::Reference< chart2::XAxis > xAxis( ::chart::DiagramHelper::getAttachedAxis( xSeries, xDiagram ) ); - - ::chart::DataSeriesHelper::deleteSeries( xSeries, xChartType ); - - ::chart::AxisHelper::hideAxisIfNoDataIsAttached( xAxis, xDiagram ); - - bResult = true; - aUndoGuard.commit(); - } - } - return bResult; -} - -bool lcl_deleteDataCurve( - const OUString & rCID, - const Reference< frame::XModel > & xModel, - const Reference< document::XUndoManager > & xUndoManager ) -{ - bool bResult = false; - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ::chart::ObjectIdentifier::getObjectPropertySet( - ::chart::ObjectIdentifier::getSeriesParticleFromCID( rCID ), xModel ), uno::UNO_QUERY ); - if( xRegCurveCnt.is()) - { - ::chart::UndoGuard aUndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_CURVE ))), - xUndoManager ); - ::chart::RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCurveCnt ); - bResult = true; - aUndoGuard.commit(); - } - return bResult; -} - -} // anonymous namespace - - -namespace chart -{ - -::std::auto_ptr< ReferenceSizeProvider > ChartController::impl_createReferenceSizeProvider() -{ - awt::Size aPageSize( ChartModelHelper::getPageSize( getModel() ) ); - - return ::std::auto_ptr< ReferenceSizeProvider >( - new ReferenceSizeProvider( aPageSize, - Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY ))); -} - -void ChartController::impl_adaptDataSeriesAutoResize() -{ - ::std::auto_ptr< ReferenceSizeProvider > apRefSizeProvider( - impl_createReferenceSizeProvider()); - if( apRefSizeProvider.get()) - apRefSizeProvider->setValuesAtAllDataSeries(); -} - -void ChartController::executeDispatch_NewArrangement() -{ - // remove manual positions at titles, legend and the diagram, remove manual - // size at the diagram - - try - { - Reference< frame::XModel > xModel( getModel() ); - Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel )); - if( xDiagram.is()) - { - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - String( SchResId( STR_ACTION_REARRANGE_CHART )), - m_xUndoManager ); - ControllerLockGuard aCtlLockGuard( xModel ); - - // diagram - Reference< beans::XPropertyState > xState( xDiagram, uno::UNO_QUERY_THROW ); - xState->setPropertyToDefault( C2U("RelativeSize")); - xState->setPropertyToDefault( C2U("RelativePosition")); - xState->setPropertyToDefault( C2U("PosSizeExcludeAxes")); - - // 3d rotation - ThreeDHelper::set3DSettingsToDefault( uno::Reference< beans::XPropertySet >( xDiagram, uno::UNO_QUERY ) ); - - // legend - Reference< beans::XPropertyState > xLegendState( xDiagram->getLegend(), uno::UNO_QUERY ); - if( xLegendState.is()) - { - xLegendState->setPropertyToDefault( C2U("RelativePosition")); - xLegendState->setPropertyToDefault( C2U("RelativeSize")); - xLegendState->setPropertyToDefault( C2U("AnchorPosition")); - } - - // titles - for( sal_Int32 eType = TitleHelper::TITLE_BEGIN; - eType < TitleHelper::NORMAL_TITLE_END; - ++eType ) - { - Reference< beans::XPropertyState > xTitleState( - TitleHelper::getTitle( - static_cast< TitleHelper::eTitleType >( eType ), xModel ), uno::UNO_QUERY ); - if( xTitleState.is()) - xTitleState->setPropertyToDefault( C2U("RelativePosition")); - } - - // regression curve equations - ::std::vector< Reference< chart2::XRegressionCurve > > aRegressionCurves( - RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine( xDiagram )); - ::std::for_each( aRegressionCurves.begin(), aRegressionCurves.end(), - RegressionCurveHelper::resetEquationPosition ); - - aUndoGuard.commit(); - } - } - catch( uno::RuntimeException & ex ) - { - ASSERT_EXCEPTION( ex ); - } -} - -void ChartController::executeDispatch_ScaleText() -{ - SolarMutexGuard aSolarGuard; - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - String( SchResId( STR_ACTION_SCALE_TEXT )), - m_xUndoManager ); - ControllerLockGuard aCtlLockGuard( getModel() ); - ::std::auto_ptr< ReferenceSizeProvider > apRefSizeProv( impl_createReferenceSizeProvider()); - OSL_ASSERT( apRefSizeProv.get()); - if( apRefSizeProv.get()) - apRefSizeProv->toggleAutoResizeState(); - aUndoGuard.commit(); -} - -void ChartController::executeDispatch_Paste() -{ - SolarMutexGuard aGuard; - if( m_pChartWindow ) - { - Graphic aGraphic; - // paste location: center of window - Point aPos; - aPos = m_pChartWindow->PixelToLogic( Rectangle( aPos, m_pChartWindow->GetSizePixel()).Center()); - - // handle different formats - TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( m_pChartWindow )); - if( aDataHelper.GetTransferable().is()) - { - if ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) ) - { - SotStorageStreamRef xStm; - if ( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_DRAWING, xStm ) ) - { - xStm->Seek( 0 ); - Reference< io::XInputStream > xInputStream( new utl::OInputStreamWrapper( *xStm ) ); - ::boost::scoped_ptr< SdrModel > spModel( new SdrModel() ); - if ( SvxDrawingLayerImport( spModel.get(), xInputStream ) ) - { - impl_PasteShapes( spModel.get() ); - } - } - } - else if ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) ) - { - // graphic exchange format (graphic manager bitmap format?) - SotStorageStreamRef xStm; - if( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_SVXB, xStm )) - (*xStm) >> aGraphic; - } - else if( aDataHelper.HasFormat( FORMAT_GDIMETAFILE )) - { - // meta file - GDIMetaFile aMetafile; - if( aDataHelper.GetGDIMetaFile( FORMAT_GDIMETAFILE, aMetafile )) - aGraphic = Graphic( aMetafile ); - } - else if( aDataHelper.HasFormat( FORMAT_BITMAP )) - { - // bitmap (non-graphic-manager) - Bitmap aBmp; - if( aDataHelper.GetBitmap( FORMAT_BITMAP, aBmp )) - aGraphic = Graphic( aBmp ); - } - else if( aDataHelper.HasFormat( FORMAT_STRING )) - { - OUString aString; - if( aDataHelper.GetString( FORMAT_STRING, aString ) && m_pDrawModelWrapper ) - { - if( m_pDrawViewWrapper ) - { - OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); - if( pOutlinerView )//in case of edit mode insert into edited string - pOutlinerView->InsertText( aString ); - else - { - impl_PasteStringAsTextShape( aString, awt::Point( 0, 0 ) ); - } - } - } - } - } - - if( aGraphic.GetType() != GRAPHIC_NONE ) - { - Reference< graphic::XGraphic > xGraphic( aGraphic.GetXGraphic()); - if( xGraphic.is()) - impl_PasteGraphic( xGraphic, aPos ); - } - } -} - -// note: aPosition is ignored for now. The object is always pasted centered to -// the page -void ChartController::impl_PasteGraphic( - uno::Reference< graphic::XGraphic > & xGraphic, - const ::Point & /* aPosition */ ) -{ - // note: the XPropertySet of the model is the old API. Also the property - // "AdditionalShapes" that is used there. - uno::Reference< beans::XPropertySet > xModelProp( getModel(), uno::UNO_QUERY ); - DrawModelWrapper * pDrawModelWrapper( this->GetDrawModelWrapper()); - if( ! (xGraphic.is() && xModelProp.is())) - return; - uno::Reference< lang::XMultiServiceFactory > xFact( pDrawModelWrapper->getShapeFactory()); - uno::Reference< drawing::XShape > xGraphicShape( - xFact->createInstance( C2U( "com.sun.star.drawing.GraphicObjectShape" )), uno::UNO_QUERY ); - uno::Reference< beans::XPropertySet > xGraphicShapeProp( xGraphicShape, uno::UNO_QUERY ); - if( xGraphicShapeProp.is() && xGraphicShape.is()) - { - uno::Reference< drawing::XShapes > xPage( pDrawModelWrapper->getMainDrawPage(), uno::UNO_QUERY ); - if( xPage.is()) - { - xPage->add( xGraphicShape ); - //need to change the model state manually - { - uno::Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY ); - if( xModifiable.is() ) - xModifiable->setModified( true ); - } - //select new shape - m_aSelection.setSelection( xGraphicShape ); - m_aSelection.applySelection( m_pDrawViewWrapper ); - } - xGraphicShapeProp->setPropertyValue( C2U("Graphic"), uno::makeAny( xGraphic )); - uno::Reference< beans::XPropertySet > xGraphicProp( xGraphic, uno::UNO_QUERY ); - - awt::Size aGraphicSize( 1000, 1000 ); - // first try size in 100th mm, then pixel size - if( ! ( xGraphicProp->getPropertyValue( C2U("Size100thMM")) >>= aGraphicSize ) && - ( ( xGraphicProp->getPropertyValue( C2U("SizePixel")) >>= aGraphicSize ) && m_pChartWindow )) - { - ::Size aVCLSize( m_pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height ))); - aGraphicSize.Width = aVCLSize.getWidth(); - aGraphicSize.Height = aVCLSize.getHeight(); - } - xGraphicShape->setSize( aGraphicSize ); - xGraphicShape->setPosition( awt::Point( 0, 0 ) ); - } -} - -void ChartController::impl_PasteShapes( SdrModel* pModel ) -{ - DrawModelWrapper* pDrawModelWrapper( this->GetDrawModelWrapper() ); - if ( pDrawModelWrapper && m_pDrawViewWrapper ) - { - Reference< drawing::XDrawPage > xDestPage( pDrawModelWrapper->getMainDrawPage() ); - SdrPage* pDestPage = GetSdrPageFromXDrawPage( xDestPage ); - if ( pDestPage ) - { - Reference< drawing::XShape > xSelShape; - m_pDrawViewWrapper->BegUndo( SVX_RESSTR( RID_SVX_3D_UNDO_EXCHANGE_PASTE ) ); - sal_uInt16 nCount = pModel->GetPageCount(); - for ( sal_uInt16 i = 0; i < nCount; ++i ) - { - const SdrPage* pPage = pModel->GetPage( i ); - SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); - while ( aIter.IsMore() ) - { - SdrObject* pObj = aIter.Next(); - SdrObject* pNewObj = ( pObj ? pObj->Clone() : NULL ); - if ( pNewObj ) - { - pNewObj->SetModel( &pDrawModelWrapper->getSdrModel() ); - pNewObj->SetPage( pDestPage ); - - // set position - Reference< drawing::XShape > xShape( pNewObj->getUnoShape(), uno::UNO_QUERY ); - if ( xShape.is() ) - { - xShape->setPosition( awt::Point( 0, 0 ) ); - } - - pDestPage->InsertObject( pNewObj ); - m_pDrawViewWrapper->AddUndo( new SdrUndoInsertObj( *pNewObj ) ); - xSelShape = xShape; - } - } - } - - Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY ); - if ( xModifiable.is() ) - { - xModifiable->setModified( true ); - } - - // select last inserted shape - m_aSelection.setSelection( xSelShape ); - m_aSelection.applySelection( m_pDrawViewWrapper ); - - m_pDrawViewWrapper->EndUndo(); - - impl_switchDiagramPositioningToExcludingPositioning(); - } - } -} - -void ChartController::impl_PasteStringAsTextShape( const OUString& rString, const awt::Point& rPosition ) -{ - DrawModelWrapper* pDrawModelWrapper( this->GetDrawModelWrapper() ); - if ( pDrawModelWrapper && m_pDrawViewWrapper ) - { - const Reference< lang::XMultiServiceFactory >& xShapeFactory( pDrawModelWrapper->getShapeFactory() ); - const Reference< drawing::XDrawPage >& xDrawPage( pDrawModelWrapper->getMainDrawPage() ); - OSL_ASSERT( xShapeFactory.is() && xDrawPage.is() ); - - if ( xShapeFactory.is() && xDrawPage.is() ) - { - try - { - Reference< drawing::XShape > xTextShape( - xShapeFactory->createInstance( C2U( "com.sun.star.drawing.TextShape" ) ), uno::UNO_QUERY_THROW ); - xDrawPage->add( xTextShape ); - - Reference< text::XTextRange > xRange( xTextShape, uno::UNO_QUERY_THROW ); - xRange->setString( rString ); - - float fCharHeight = 10.0; - Reference< beans::XPropertySet > xProperties( xTextShape, uno::UNO_QUERY_THROW ); - xProperties->setPropertyValue( C2U( "TextAutoGrowHeight" ), uno::makeAny( true ) ); - xProperties->setPropertyValue( C2U( "TextAutoGrowWidth" ), uno::makeAny( true ) ); - xProperties->setPropertyValue( C2U( "CharHeight" ), uno::makeAny( fCharHeight ) ); - xProperties->setPropertyValue( C2U( "CharHeightAsian" ), uno::makeAny( fCharHeight ) ); - xProperties->setPropertyValue( C2U( "CharHeightComplex" ), uno::makeAny( fCharHeight ) ); - xProperties->setPropertyValue( C2U( "TextVerticalAdjust" ), uno::makeAny( drawing::TextVerticalAdjust_CENTER ) ); - xProperties->setPropertyValue( C2U( "TextHorizontalAdjust" ), uno::makeAny( drawing::TextHorizontalAdjust_CENTER ) ); - xProperties->setPropertyValue( C2U( "CharFontName" ), uno::makeAny( C2U( "Albany" ) ) ); - - xTextShape->setPosition( rPosition ); - - m_aSelection.setSelection( xTextShape ); - m_aSelection.applySelection( m_pDrawViewWrapper ); - - SdrObject* pObj = DrawViewWrapper::getSdrObject( xTextShape ); - if ( pObj ) - { - m_pDrawViewWrapper->BegUndo( SVX_RESSTR( RID_SVX_3D_UNDO_EXCHANGE_PASTE ) ); - m_pDrawViewWrapper->AddUndo( new SdrUndoInsertObj( *pObj ) ); - m_pDrawViewWrapper->EndUndo(); - - impl_switchDiagramPositioningToExcludingPositioning(); - } - } - catch ( const uno::Exception& ex ) - { - ASSERT_EXCEPTION( ex ); - } - } - } -} - -void ChartController::executeDispatch_Copy() -{ - if ( m_pDrawViewWrapper ) - { - OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView(); - if ( pOutlinerView ) - { - pOutlinerView->Copy(); - } - else - { - Reference< datatransfer::XTransferable > xTransferable; - { - SolarMutexGuard aSolarGuard; - SdrObject* pSelectedObj = 0; - if ( m_pDrawModelWrapper ) - { - ObjectIdentifier aSelOID( m_aSelection.getSelectedOID() ); - if ( aSelOID.isAutoGeneratedObject() ) - { - pSelectedObj = m_pDrawModelWrapper->getNamedSdrObject( aSelOID.getObjectCID() ); - } - else if ( aSelOID.isAdditionalShape() ) - { - pSelectedObj = DrawViewWrapper::getSdrObject( aSelOID.getAdditionalShape() ); - } - if ( pSelectedObj ) - { - xTransferable = Reference< datatransfer::XTransferable >( new ChartTransferable( - &m_pDrawModelWrapper->getSdrModel(), pSelectedObj, aSelOID.isAdditionalShape() ) ); - } - } - } - if ( xTransferable.is() ) - { - Reference< datatransfer::clipboard::XClipboard > xClipboard( TransferableHelper::GetSystemClipboard() ); - if ( xClipboard.is() ) - { - xClipboard->setContents( xTransferable, Reference< datatransfer::clipboard::XClipboardOwner >() ); - } - } - } - } -} - -void ChartController::executeDispatch_Cut() -{ - executeDispatch_Copy(); - executeDispatch_Delete(); -} - -bool ChartController::isObjectDeleteable( const uno::Any& rSelection ) -{ - ObjectIdentifier aSelOID( rSelection ); - if ( aSelOID.isAutoGeneratedObject() ) - { - OUString aSelObjCID( aSelOID.getObjectCID() ); - ObjectType aObjectType(ObjectIdentifier::getObjectType( aSelObjCID )); - if( (OBJECTTYPE_TITLE == aObjectType) || (OBJECTTYPE_LEGEND == aObjectType) ) - return true; - if( (OBJECTTYPE_DATA_SERIES == aObjectType) || (OBJECTTYPE_LEGEND_ENTRY == aObjectType) ) - return true; - if( (OBJECTTYPE_DATA_CURVE_EQUATION == aObjectType) || (OBJECTTYPE_DATA_CURVE == aObjectType) || - (OBJECTTYPE_DATA_AVERAGE_LINE == aObjectType) || (OBJECTTYPE_DATA_ERRORS == aObjectType)) - return true; - if( (OBJECTTYPE_DATA_LABELS == aObjectType) || (OBJECTTYPE_DATA_LABEL == aObjectType) ) - return true; - if( (OBJECTTYPE_AXIS == aObjectType) || (OBJECTTYPE_GRID == aObjectType) || (OBJECTTYPE_SUBGRID == aObjectType) ) - return true; - } - else if ( aSelOID.isAdditionalShape() ) - { - return true; - } - - return false; -} - -bool ChartController::isShapeContext() const -{ - if ( m_aSelection.isAdditionalShapeSelected() || - ( m_pDrawViewWrapper && m_pDrawViewWrapper->AreObjectsMarked() && - ( m_pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_TEXT ) ) ) - { - return true; - } - - return false; -} - -void ChartController::impl_ClearSelection() -{ - if( m_aSelection.hasSelection()) - { - m_aSelection.clearSelection(); - impl_notifySelectionChangeListeners(); - } -} - -bool ChartController::executeDispatch_Delete() -{ - bool bReturn = false; - - // remove the selected object - rtl::OUString aCID( m_aSelection.getSelectedCID() ); - if( aCID.getLength() ) - { - if( !isObjectDeleteable( uno::Any( aCID ) ) ) - return false; - - //remove chart object - uno::Reference< chart2::XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY ); - if( !xChartDoc.is() ) - return false; - - ObjectType aObjectType( ObjectIdentifier::getObjectType( aCID )); - switch( aObjectType ) - { - case OBJECTTYPE_TITLE: - { - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_TITLE ))), - m_xUndoManager ); - TitleHelper::removeTitle( - ObjectIdentifier::getTitleTypeForCID( aCID ), getModel() ); - bReturn = true; - aUndoGuard.commit(); - break; - } - case OBJECTTYPE_LEGEND: - { - uno::Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram()); - if( xDiagram.is()) - { - uno::Reference< beans::XPropertySet > xLegendProp( xDiagram->getLegend(), uno::UNO_QUERY ); - if( xLegendProp.is()) - { - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_LEGEND ))), - m_xUndoManager ); - xLegendProp->setPropertyValue( C2U("Show"), uno::makeAny( false )); - bReturn = true; - aUndoGuard.commit(); - } - } - break; - } - - case OBJECTTYPE_DATA_SERIES: - bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager ); - break; - - case OBJECTTYPE_LEGEND_ENTRY: - { - ObjectType eParentObjectType = ObjectIdentifier::getObjectType( - ObjectIdentifier::getFullParentParticle( aCID )); - if( eParentObjectType == OBJECTTYPE_DATA_SERIES ) - bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager ); - else if( eParentObjectType == OBJECTTYPE_DATA_CURVE ) - bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager ); - else if( eParentObjectType == OBJECTTYPE_DATA_AVERAGE_LINE ) - { - executeDispatch_DeleteMeanValue(); - bReturn = true; - } - break; - } - - case OBJECTTYPE_DATA_AVERAGE_LINE: - { - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ObjectIdentifier::getObjectPropertySet( - ObjectIdentifier::getFullParentParticle( aCID ), getModel()), uno::UNO_QUERY ); - if( xRegCurveCnt.is()) - { - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_AVERAGE_LINE ))), - m_xUndoManager ); - RegressionCurveHelper::removeMeanValueLine( xRegCurveCnt ); - bReturn = true; - aUndoGuard.commit(); - } - break; - } - - case OBJECTTYPE_DATA_CURVE: - bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager ); - break; - - case OBJECTTYPE_DATA_CURVE_EQUATION: - { - uno::Reference< beans::XPropertySet > xEqProp( - ObjectIdentifier::getObjectPropertySet( aCID, getModel())); - if( xEqProp.is()) - { - uno::Reference< frame::XModel > xModel( getModel() ); - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_CURVE_EQUATION ))), - m_xUndoManager ); - { - ControllerLockGuard aCtlLockGuard( xModel ); - xEqProp->setPropertyValue( C2U("ShowEquation"), uno::makeAny( false )); - xEqProp->setPropertyValue( C2U("ShowCorrelationCoefficient"), uno::makeAny( false )); - } - bReturn = true; - aUndoGuard.commit(); - } - break; - } - - case OBJECTTYPE_DATA_ERRORS: - { - uno::Reference< beans::XPropertySet > xErrorBarProp( - ObjectIdentifier::getObjectPropertySet( aCID, getModel() )); - if( xErrorBarProp.is()) - { - uno::Reference< frame::XModel > xModel( getModel() ); - // using assignment for broken gcc 3.3 - UndoGuard aUndoGuard = UndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_ERROR_BARS ))), - m_xUndoManager ); - { - ControllerLockGuard aCtlLockGuard( xModel ); - xErrorBarProp->setPropertyValue( - C2U("ErrorBarStyle"), - uno::makeAny( ::com::sun::star::chart::ErrorBarStyle::NONE )); - } - bReturn = true; - aUndoGuard.commit(); - } - break; - } - - case OBJECTTYPE_DATA_LABELS: - case OBJECTTYPE_DATA_LABEL: - { - uno::Reference< beans::XPropertySet > xObjectProperties = - ObjectIdentifier::getObjectPropertySet( aCID, getModel() ); - if( xObjectProperties.is() ) - { - UndoGuard aUndoGuard = UndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, ::rtl::OUString( String( - SchResId( aObjectType == OBJECTTYPE_DATA_LABEL ? STR_OBJECT_LABEL : STR_OBJECT_DATALABELS )))), - m_xUndoManager ); - chart2::DataPointLabel aLabel; - xObjectProperties->getPropertyValue( C2U( "Label" ) ) >>= aLabel; - aLabel.ShowNumber = false; - aLabel.ShowNumberInPercent = false; - aLabel.ShowCategoryName = false; - aLabel.ShowLegendSymbol = false; - if( aObjectType == OBJECTTYPE_DATA_LABELS ) - { - uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( aCID, getModel() )); - ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "Label" ), uno::makeAny(aLabel) ); - } - else - xObjectProperties->setPropertyValue( C2U( "Label" ), uno::makeAny(aLabel) ); - bReturn = true; - aUndoGuard.commit(); - } - break; - } - case OBJECTTYPE_AXIS: - { - executeDispatch_DeleteAxis(); - bReturn = true; - break; - } - case OBJECTTYPE_GRID: - { - executeDispatch_DeleteMajorGrid(); - bReturn = true; - break; - } - case OBJECTTYPE_SUBGRID: - { - executeDispatch_DeleteMinorGrid(); - bReturn = true; - break; - } - - default: - { - break; - } - } - } - else - { - //remove additional shape - impl_ClearSelection(); - { - SolarMutexGuard aSolarGuard; - if ( m_pDrawViewWrapper ) - { - m_pDrawViewWrapper->DeleteMarked(); - bReturn = true; - } - } - } - return bReturn; -} - -void ChartController::executeDispatch_ToggleLegend() -{ - Reference< frame::XModel > xModel( getModel() ); - UndoGuard aUndoGuard = UndoGuard( - String( SchResId( STR_ACTION_TOGGLE_LEGEND )), m_xUndoManager ); - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend( xModel ), uno::UNO_QUERY ); - bool bChanged = false; - if( xLegendProp.is()) - { - try - { - bool bShow = false; - if( xLegendProp->getPropertyValue( C2U("Show")) >>= bShow ) - { - xLegendProp->setPropertyValue( C2U("Show"), uno::makeAny( ! bShow )); - bChanged = true; - } - } - catch( const uno::Exception & ex ) - { - ASSERT_EXCEPTION( ex ); - } - } - else - { - xLegendProp.set( LegendHelper::getLegend( xModel, m_xCC, true ), uno::UNO_QUERY ); - if( xLegendProp.is()) - bChanged = true; - } - - if( bChanged ) - aUndoGuard.commit(); -} - -void ChartController::executeDispatch_ToggleGridHorizontal() -{ - Reference< frame::XModel > xModel( getModel() ); - UndoGuard aUndoGuard = UndoGuard( - String( SchResId( STR_ACTION_TOGGLE_GRID_HORZ )), m_xUndoManager ); - Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( getModel() )); - if( xDiagram.is()) - { - sal_Int32 nDimensionIndex = 1; - sal_Int32 nCooSysIndex = 0; - bool bIsMainGrid = true; - - bool bHasMainYGrid = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram ); - - if( bHasMainYGrid ) - AxisHelper::hideGrid( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram ); - else - AxisHelper::showGrid( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram, m_xCC ); - - aUndoGuard.commit(); - } -} - -void ChartController::impl_ShapeControllerDispatch( const util::URL& rURL, const Sequence< beans::PropertyValue >& rArgs ) -{ - Reference< frame::XDispatch > xDispatch( m_aDispatchContainer.getShapeController() ); - if ( xDispatch.is() ) - { - xDispatch->dispatch( rURL, rArgs ); - } -} - -void ChartController::impl_switchDiagramPositioningToExcludingPositioning() -{ - UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::POS_SIZE, - ObjectNameProvider::getName( OBJECTTYPE_DIAGRAM)), - m_xUndoManager ); - if( DiagramHelper::switchDiagramPositioningToExcludingPositioning( m_aModel->getModel(), true, true ) ) - aUndoGuard.commit(); -} - -} // namespace chart - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |