LCOV - code coverage report
Current view: top level - libreoffice/chart2/source/controller/main - ChartController_Tools.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 410 0.0 %
Date: 2012-12-17 Functions: 0 20 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include "ChartController.hxx"
      22             : #include "ChartWindow.hxx"
      23             : #include "ChartModelHelper.hxx"
      24             : #include "TitleHelper.hxx"
      25             : #include "ThreeDHelper.hxx"
      26             : #include "DataSeriesHelper.hxx"
      27             : #include "UndoGuard.hxx"
      28             : #include "ControllerLockGuard.hxx"
      29             : #include "macros.hxx"
      30             : #include "ResId.hxx"
      31             : #include "Strings.hrc"
      32             : #include "ObjectIdentifier.hxx"
      33             : #include "ReferenceSizeProvider.hxx"
      34             : #include "chartview/ExplicitValueProvider.hxx"
      35             : #include "chartview/DrawModelWrapper.hxx"
      36             : #include "ChartTransferable.hxx"
      37             : #include "DrawViewWrapper.hxx"
      38             : #include "LegendHelper.hxx"
      39             : #include "AxisHelper.hxx"
      40             : #include "RegressionCurveHelper.hxx"
      41             : #include "ShapeController.hxx"
      42             : #include "DiagramHelper.hxx"
      43             : #include "ObjectNameProvider.hxx"
      44             : 
      45             : #include <com/sun/star/chart2/DataPointLabel.hpp>
      46             : #include <com/sun/star/beans/XPropertyState.hpp>
      47             : #include <com/sun/star/drawing/CameraGeometry.hpp>
      48             : #include <com/sun/star/graphic/XGraphic.hpp>
      49             : #include <com/sun/star/io/XInputStream.hpp>
      50             : #include <com/sun/star/text/XTextRange.hpp>
      51             : #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
      52             : #include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
      53             : #include <com/sun/star/chart/ErrorBarStyle.hpp>
      54             : 
      55             : #include <svx/ActionDescriptionProvider.hxx>
      56             : // for TransferableDataHelper/TransferableHelper
      57             : #include <svtools/transfer.hxx>
      58             : // for SotStorageStreamRef
      59             : #include <sot/storage.hxx>
      60             : // for Graphic
      61             : #include <vcl/graph.hxx>
      62             : // for SvxDrawingLayerImport/SvxUnoDrawingModel
      63             : #include <svx/unomodel.hxx>
      64             : // for SdrModel
      65             : #include <svx/svdmodel.hxx>
      66             : // for OInputStreamWrapper
      67             : #include <unotools/streamwrap.hxx>
      68             : // for SolarMutex
      69             : #include <vcl/svapp.hxx>
      70             : #include <osl/mutex.hxx>
      71             : #include <svx/dialmgr.hxx>
      72             : #include <svx/dialogs.hrc>
      73             : // for OutlinerView
      74             : #include <editeng/outliner.hxx>
      75             : #include <svx/svditer.hxx>
      76             : #include <svx/svdpage.hxx>
      77             : #include <svx/svdundo.hxx>
      78             : #include <svx/unoapi.hxx>
      79             : #include <svx/unopage.hxx>
      80             : 
      81             : #include <boost/scoped_ptr.hpp>
      82             : 
      83             : using namespace ::com::sun::star;
      84             : 
      85             : using ::com::sun::star::uno::Reference;
      86             : using ::com::sun::star::uno::Sequence;
      87             : using ::rtl::OUString;
      88             : 
      89             : namespace
      90             : {
      91             : 
      92           0 : bool lcl_deleteDataSeries(
      93             :     const OUString & rCID,
      94             :     const Reference< frame::XModel > & xModel,
      95             :     const Reference< document::XUndoManager > & xUndoManager )
      96             : {
      97           0 :     bool bResult = false;
      98           0 :     uno::Reference< chart2::XDataSeries > xSeries( ::chart::ObjectIdentifier::getDataSeriesForCID( rCID, xModel ));
      99           0 :     uno::Reference< chart2::XChartDocument > xChartDoc( xModel, uno::UNO_QUERY );
     100           0 :     if( xSeries.is() && xChartDoc.is())
     101             :     {
     102             :         uno::Reference< chart2::XChartType > xChartType(
     103           0 :             ::chart::DataSeriesHelper::getChartTypeOfSeries( xSeries, xChartDoc->getFirstDiagram()));
     104           0 :         if( xChartType.is())
     105             :         {
     106             :             ::chart::UndoGuard aUndoGuard(
     107             :                 ActionDescriptionProvider::createDescription(
     108             :                     ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_DATASERIES ))),
     109           0 :                 xUndoManager );
     110             : 
     111           0 :             Reference< chart2::XDiagram > xDiagram( ::chart::ChartModelHelper::findDiagram( xModel ) );
     112           0 :             uno::Reference< chart2::XAxis > xAxis( ::chart::DiagramHelper::getAttachedAxis( xSeries, xDiagram ) );
     113             : 
     114           0 :             ::chart::DataSeriesHelper::deleteSeries( xSeries, xChartType );
     115             : 
     116           0 :             ::chart::AxisHelper::hideAxisIfNoDataIsAttached( xAxis, xDiagram );
     117             : 
     118           0 :             bResult = true;
     119           0 :             aUndoGuard.commit();
     120           0 :         }
     121             :     }
     122           0 :     return bResult;
     123             : }
     124             : 
     125           0 : bool lcl_deleteDataCurve(
     126             :     const OUString & rCID,
     127             :     const Reference< frame::XModel > & xModel,
     128             :     const Reference< document::XUndoManager > & xUndoManager )
     129             : {
     130           0 :     bool bResult = false;
     131             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     132             :         ::chart::ObjectIdentifier::getObjectPropertySet(
     133           0 :             ::chart::ObjectIdentifier::getSeriesParticleFromCID( rCID ), xModel ), uno::UNO_QUERY );
     134           0 :     if( xRegCurveCnt.is())
     135             :     {
     136             :         ::chart::UndoGuard aUndoGuard(
     137             :             ActionDescriptionProvider::createDescription(
     138             :                 ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_CURVE ))),
     139           0 :             xUndoManager );
     140           0 :         ::chart::RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCurveCnt );
     141           0 :         bResult = true;
     142           0 :         aUndoGuard.commit();
     143             :     }
     144           0 :     return bResult;
     145             : }
     146             : 
     147             : } // anonymous namespace
     148             : 
     149             : 
     150             : namespace chart
     151             : {
     152             : 
     153             : SAL_WNODEPRECATED_DECLARATIONS_PUSH
     154           0 : ::std::auto_ptr< ReferenceSizeProvider > ChartController::impl_createReferenceSizeProvider()
     155             : {
     156           0 :     awt::Size aPageSize( ChartModelHelper::getPageSize( getModel() ) );
     157             : 
     158             :     return ::std::auto_ptr< ReferenceSizeProvider >(
     159             :         new ReferenceSizeProvider( aPageSize,
     160           0 :             Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY )));
     161             : }
     162             : SAL_WNODEPRECATED_DECLARATIONS_POP
     163             : 
     164           0 : void ChartController::impl_adaptDataSeriesAutoResize()
     165             : {
     166             :     SAL_WNODEPRECATED_DECLARATIONS_PUSH
     167             :     ::std::auto_ptr< ReferenceSizeProvider > apRefSizeProvider(
     168           0 :         impl_createReferenceSizeProvider());
     169             :     SAL_WNODEPRECATED_DECLARATIONS_POP
     170           0 :     if( apRefSizeProvider.get())
     171           0 :         apRefSizeProvider->setValuesAtAllDataSeries();
     172           0 : }
     173             : 
     174           0 : void ChartController::executeDispatch_NewArrangement()
     175             : {
     176             :     // remove manual positions at titles, legend and the diagram, remove manual
     177             :     // size at the diagram
     178             : 
     179             :     try
     180             :     {
     181           0 :         Reference< frame::XModel > xModel( getModel() );
     182           0 :         Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ));
     183           0 :         if( xDiagram.is())
     184             :         {
     185             :             // using assignment for broken gcc 3.3
     186             :             UndoGuard aUndoGuard = UndoGuard(
     187             :                 String( SchResId( STR_ACTION_REARRANGE_CHART )),
     188           0 :                 m_xUndoManager );
     189           0 :             ControllerLockGuard aCtlLockGuard( xModel );
     190             : 
     191             :             // diagram
     192           0 :             Reference< beans::XPropertyState > xState( xDiagram, uno::UNO_QUERY_THROW );
     193           0 :             xState->setPropertyToDefault( C2U("RelativeSize"));
     194           0 :             xState->setPropertyToDefault( C2U("RelativePosition"));
     195           0 :             xState->setPropertyToDefault( C2U("PosSizeExcludeAxes"));
     196             : 
     197             :             // 3d rotation
     198           0 :             ThreeDHelper::set3DSettingsToDefault( uno::Reference< beans::XPropertySet >( xDiagram, uno::UNO_QUERY ) );
     199             : 
     200             :             // legend
     201           0 :             Reference< beans::XPropertyState > xLegendState( xDiagram->getLegend(), uno::UNO_QUERY );
     202           0 :             if( xLegendState.is())
     203             :             {
     204           0 :                 xLegendState->setPropertyToDefault( C2U("RelativePosition"));
     205           0 :                 xLegendState->setPropertyToDefault( C2U("RelativeSize"));
     206           0 :                 xLegendState->setPropertyToDefault( C2U("AnchorPosition"));
     207             :             }
     208             : 
     209             :             // titles
     210           0 :             for( sal_Int32 eType = TitleHelper::TITLE_BEGIN;
     211             :                  eType < TitleHelper::NORMAL_TITLE_END;
     212             :                  ++eType )
     213             :             {
     214             :                 Reference< beans::XPropertyState > xTitleState(
     215             :                     TitleHelper::getTitle(
     216           0 :                         static_cast< TitleHelper::eTitleType >( eType ), xModel ), uno::UNO_QUERY );
     217           0 :                 if( xTitleState.is())
     218           0 :                     xTitleState->setPropertyToDefault( C2U("RelativePosition"));
     219           0 :             }
     220             : 
     221             :             // regression curve equations
     222             :             ::std::vector< Reference< chart2::XRegressionCurve > > aRegressionCurves(
     223           0 :                 RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine( xDiagram ));
     224             :             ::std::for_each( aRegressionCurves.begin(), aRegressionCurves.end(),
     225           0 :                       RegressionCurveHelper::resetEquationPosition );
     226             : 
     227           0 :             aUndoGuard.commit();
     228           0 :         }
     229             :     }
     230           0 :     catch( const uno::RuntimeException & ex )
     231             :     {
     232             :         ASSERT_EXCEPTION( ex );
     233             :     }
     234           0 : }
     235             : 
     236           0 : void ChartController::executeDispatch_ScaleText()
     237             : {
     238           0 :     SolarMutexGuard aSolarGuard;
     239             :     // using assignment for broken gcc 3.3
     240             :     UndoGuard aUndoGuard = UndoGuard(
     241             :         String( SchResId( STR_ACTION_SCALE_TEXT )),
     242           0 :         m_xUndoManager );
     243           0 :     ControllerLockGuard aCtlLockGuard( getModel() );
     244             :     SAL_WNODEPRECATED_DECLARATIONS_PUSH
     245           0 :     ::std::auto_ptr< ReferenceSizeProvider > apRefSizeProv( impl_createReferenceSizeProvider());
     246             :     SAL_WNODEPRECATED_DECLARATIONS_POP
     247             :     OSL_ASSERT( apRefSizeProv.get());
     248           0 :     if( apRefSizeProv.get())
     249           0 :         apRefSizeProv->toggleAutoResizeState();
     250           0 :     aUndoGuard.commit();
     251           0 : }
     252             : 
     253           0 : void ChartController::executeDispatch_Paste()
     254             : {
     255           0 :     SolarMutexGuard aGuard;
     256           0 :     if( m_pChartWindow )
     257             :     {
     258           0 :         Graphic aGraphic;
     259             :         // paste location: center of window
     260           0 :         Point aPos;
     261           0 :         aPos = m_pChartWindow->PixelToLogic( Rectangle( aPos, m_pChartWindow->GetSizePixel()).Center());
     262             : 
     263             :         // handle different formats
     264           0 :         TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( m_pChartWindow ));
     265           0 :         if( aDataHelper.GetTransferable().is())
     266             :         {
     267           0 :             if ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) )
     268             :             {
     269           0 :                 SotStorageStreamRef xStm;
     270           0 :                 if ( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_DRAWING, xStm ) )
     271             :                 {
     272           0 :                     xStm->Seek( 0 );
     273           0 :                     Reference< io::XInputStream > xInputStream( new utl::OInputStreamWrapper( *xStm ) );
     274           0 :                     ::boost::scoped_ptr< SdrModel > spModel( new SdrModel() );
     275           0 :                     if ( SvxDrawingLayerImport( spModel.get(), xInputStream ) )
     276             :                     {
     277           0 :                         impl_PasteShapes( spModel.get() );
     278           0 :                     }
     279           0 :                 }
     280             :             }
     281           0 :             else if ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) )
     282             :             {
     283             :                 // graphic exchange format (graphic manager bitmap format?)
     284           0 :                 SotStorageStreamRef xStm;
     285           0 :                 if( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_SVXB, xStm ))
     286           0 :                     (*xStm) >> aGraphic;
     287             :             }
     288           0 :             else if( aDataHelper.HasFormat( FORMAT_GDIMETAFILE ))
     289             :             {
     290             :                 // meta file
     291           0 :                 GDIMetaFile aMetafile;
     292           0 :                 if( aDataHelper.GetGDIMetaFile( FORMAT_GDIMETAFILE, aMetafile ))
     293           0 :                     aGraphic = Graphic( aMetafile );
     294             :             }
     295           0 :             else if( aDataHelper.HasFormat( FORMAT_BITMAP ))
     296             :             {
     297             :                 // bitmap (non-graphic-manager)
     298           0 :                 Bitmap aBmp;
     299           0 :                 if( aDataHelper.GetBitmap( FORMAT_BITMAP, aBmp ))
     300           0 :                     aGraphic = Graphic( aBmp );
     301             :             }
     302           0 :             else if( aDataHelper.HasFormat( FORMAT_STRING ))
     303             :             {
     304           0 :                 OUString aString;
     305           0 :                 if( aDataHelper.GetString( FORMAT_STRING, aString ) && m_pDrawModelWrapper )
     306             :                 {
     307           0 :                     if( m_pDrawViewWrapper )
     308             :                     {
     309           0 :                         OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView();
     310           0 :                         if( pOutlinerView )//in case of edit mode insert into edited string
     311           0 :                             pOutlinerView->InsertText( aString );
     312             :                         else
     313             :                         {
     314           0 :                             impl_PasteStringAsTextShape( aString, awt::Point( 0, 0 ) );
     315             :                         }
     316             :                     }
     317           0 :                 }
     318             :             }
     319             :         }
     320             : 
     321           0 :         if( aGraphic.GetType() != GRAPHIC_NONE )
     322             :         {
     323           0 :             Reference< graphic::XGraphic > xGraphic( aGraphic.GetXGraphic());
     324           0 :             if( xGraphic.is())
     325           0 :                 impl_PasteGraphic( xGraphic, aPos );
     326           0 :         }
     327           0 :     }
     328           0 : }
     329             : 
     330             : // note: aPosition is ignored for now. The object is always pasted centered to
     331             : // the page
     332           0 : void ChartController::impl_PasteGraphic(
     333             :     uno::Reference< graphic::XGraphic > & xGraphic,
     334             :     const ::Point & /* aPosition */ )
     335             : {
     336             :     // note: the XPropertySet of the model is the old API. Also the property
     337             :     // "AdditionalShapes" that is used there.
     338           0 :     uno::Reference< beans::XPropertySet > xModelProp( getModel(), uno::UNO_QUERY );
     339           0 :     DrawModelWrapper * pDrawModelWrapper( this->GetDrawModelWrapper());
     340           0 :     if( ! (xGraphic.is() && xModelProp.is()))
     341           0 :         return;
     342           0 :     uno::Reference< lang::XMultiServiceFactory > xFact( pDrawModelWrapper->getShapeFactory());
     343             :     uno::Reference< drawing::XShape > xGraphicShape(
     344           0 :         xFact->createInstance( C2U( "com.sun.star.drawing.GraphicObjectShape" )), uno::UNO_QUERY );
     345           0 :     uno::Reference< beans::XPropertySet > xGraphicShapeProp( xGraphicShape, uno::UNO_QUERY );
     346           0 :     if( xGraphicShapeProp.is() && xGraphicShape.is())
     347             :     {
     348           0 :         uno::Reference< drawing::XShapes > xPage( pDrawModelWrapper->getMainDrawPage(), uno::UNO_QUERY );
     349           0 :         if( xPage.is())
     350             :         {
     351           0 :             xPage->add( xGraphicShape );
     352             :             //need to change the model state manually
     353             :             {
     354           0 :                 uno::Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY );
     355           0 :                 if( xModifiable.is() )
     356           0 :                     xModifiable->setModified( true );
     357             :             }
     358             :             //select new shape
     359           0 :             m_aSelection.setSelection( xGraphicShape );
     360           0 :             m_aSelection.applySelection( m_pDrawViewWrapper );
     361             :         }
     362           0 :         xGraphicShapeProp->setPropertyValue( C2U("Graphic"), uno::makeAny( xGraphic ));
     363           0 :         uno::Reference< beans::XPropertySet > xGraphicProp( xGraphic, uno::UNO_QUERY );
     364             : 
     365           0 :         awt::Size aGraphicSize( 1000, 1000 );
     366             :         // first try size in 100th mm, then pixel size
     367           0 :         if( ! ( xGraphicProp->getPropertyValue( C2U("Size100thMM")) >>= aGraphicSize ) &&
     368           0 :             ( ( xGraphicProp->getPropertyValue( C2U("SizePixel")) >>= aGraphicSize ) && m_pChartWindow ))
     369             :         {
     370           0 :             ::Size aVCLSize( m_pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height )));
     371           0 :             aGraphicSize.Width = aVCLSize.getWidth();
     372           0 :             aGraphicSize.Height = aVCLSize.getHeight();
     373             :         }
     374           0 :         xGraphicShape->setSize( aGraphicSize );
     375           0 :         xGraphicShape->setPosition( awt::Point( 0, 0 ) );
     376           0 :     }
     377             : }
     378             : 
     379           0 : void ChartController::impl_PasteShapes( SdrModel* pModel )
     380             : {
     381           0 :     DrawModelWrapper* pDrawModelWrapper( this->GetDrawModelWrapper() );
     382           0 :     if ( pDrawModelWrapper && m_pDrawViewWrapper )
     383             :     {
     384           0 :         Reference< drawing::XDrawPage > xDestPage( pDrawModelWrapper->getMainDrawPage() );
     385           0 :         SdrPage* pDestPage = GetSdrPageFromXDrawPage( xDestPage );
     386           0 :         if ( pDestPage )
     387             :         {
     388           0 :             Reference< drawing::XShape > xSelShape;
     389           0 :             m_pDrawViewWrapper->BegUndo( SVX_RESSTR( RID_SVX_3D_UNDO_EXCHANGE_PASTE ) );
     390           0 :             sal_uInt16 nCount = pModel->GetPageCount();
     391           0 :             for ( sal_uInt16 i = 0; i < nCount; ++i )
     392             :             {
     393           0 :                 const SdrPage* pPage = pModel->GetPage( i );
     394           0 :                 SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
     395           0 :                 while ( aIter.IsMore() )
     396             :                 {
     397           0 :                     SdrObject* pObj = aIter.Next();
     398           0 :                     SdrObject* pNewObj = ( pObj ? pObj->Clone() : NULL );
     399           0 :                     if ( pNewObj )
     400             :                     {
     401           0 :                         pNewObj->SetModel( &pDrawModelWrapper->getSdrModel() );
     402           0 :                         pNewObj->SetPage( pDestPage );
     403             : 
     404             :                         // set position
     405           0 :                         Reference< drawing::XShape > xShape( pNewObj->getUnoShape(), uno::UNO_QUERY );
     406           0 :                         if ( xShape.is() )
     407             :                         {
     408           0 :                             xShape->setPosition( awt::Point( 0, 0 ) );
     409             :                         }
     410             : 
     411           0 :                         pDestPage->InsertObject( pNewObj );
     412           0 :                         m_pDrawViewWrapper->AddUndo( new SdrUndoInsertObj( *pNewObj ) );
     413           0 :                         xSelShape = xShape;
     414             :                     }
     415             :                 }
     416           0 :             }
     417             : 
     418           0 :             Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY );
     419           0 :             if ( xModifiable.is() )
     420             :             {
     421           0 :                 xModifiable->setModified( true );
     422             :             }
     423             : 
     424             :             // select last inserted shape
     425           0 :             m_aSelection.setSelection( xSelShape );
     426           0 :             m_aSelection.applySelection( m_pDrawViewWrapper );
     427             : 
     428           0 :             m_pDrawViewWrapper->EndUndo();
     429             : 
     430           0 :             impl_switchDiagramPositioningToExcludingPositioning();
     431           0 :         }
     432             :     }
     433           0 : }
     434             : 
     435           0 : void ChartController::impl_PasteStringAsTextShape( const OUString& rString, const awt::Point& rPosition )
     436             : {
     437           0 :     DrawModelWrapper* pDrawModelWrapper( this->GetDrawModelWrapper() );
     438           0 :     if ( pDrawModelWrapper && m_pDrawViewWrapper )
     439             :     {
     440           0 :         const Reference< lang::XMultiServiceFactory >& xShapeFactory( pDrawModelWrapper->getShapeFactory() );
     441           0 :         const Reference< drawing::XDrawPage >& xDrawPage( pDrawModelWrapper->getMainDrawPage() );
     442             :         OSL_ASSERT( xShapeFactory.is() && xDrawPage.is() );
     443             : 
     444           0 :         if ( xShapeFactory.is() && xDrawPage.is() )
     445             :         {
     446             :             try
     447             :             {
     448             :                 Reference< drawing::XShape > xTextShape(
     449           0 :                     xShapeFactory->createInstance( C2U( "com.sun.star.drawing.TextShape" ) ), uno::UNO_QUERY_THROW );
     450           0 :                 xDrawPage->add( xTextShape );
     451             : 
     452           0 :                 Reference< text::XTextRange > xRange( xTextShape, uno::UNO_QUERY_THROW );
     453           0 :                 xRange->setString( rString );
     454             : 
     455           0 :                 float fCharHeight = 10.0;
     456           0 :                 Reference< beans::XPropertySet > xProperties( xTextShape, uno::UNO_QUERY_THROW );
     457           0 :                 xProperties->setPropertyValue( C2U( "TextAutoGrowHeight" ), uno::makeAny( true ) );
     458           0 :                 xProperties->setPropertyValue( C2U( "TextAutoGrowWidth" ), uno::makeAny( true ) );
     459           0 :                 xProperties->setPropertyValue( C2U( "CharHeight" ), uno::makeAny( fCharHeight ) );
     460           0 :                 xProperties->setPropertyValue( C2U( "CharHeightAsian" ), uno::makeAny( fCharHeight ) );
     461           0 :                 xProperties->setPropertyValue( C2U( "CharHeightComplex" ), uno::makeAny( fCharHeight ) );
     462           0 :                 xProperties->setPropertyValue( C2U( "TextVerticalAdjust" ), uno::makeAny( drawing::TextVerticalAdjust_CENTER ) );
     463           0 :                 xProperties->setPropertyValue( C2U( "TextHorizontalAdjust" ), uno::makeAny( drawing::TextHorizontalAdjust_CENTER ) );
     464           0 :                 xProperties->setPropertyValue( C2U( "CharFontName" ), uno::makeAny( C2U( "Albany" ) ) );
     465             : 
     466           0 :                 xTextShape->setPosition( rPosition );
     467             : 
     468           0 :                 m_aSelection.setSelection( xTextShape );
     469           0 :                 m_aSelection.applySelection( m_pDrawViewWrapper );
     470             : 
     471           0 :                 SdrObject* pObj = DrawViewWrapper::getSdrObject( xTextShape );
     472           0 :                 if ( pObj )
     473             :                 {
     474           0 :                     m_pDrawViewWrapper->BegUndo( SVX_RESSTR( RID_SVX_3D_UNDO_EXCHANGE_PASTE ) );
     475           0 :                     m_pDrawViewWrapper->AddUndo( new SdrUndoInsertObj( *pObj ) );
     476           0 :                     m_pDrawViewWrapper->EndUndo();
     477             : 
     478           0 :                     impl_switchDiagramPositioningToExcludingPositioning();
     479           0 :                 }
     480             :             }
     481           0 :             catch ( const uno::Exception& ex )
     482             :             {
     483             :                 ASSERT_EXCEPTION( ex );
     484             :             }
     485           0 :         }
     486             :     }
     487           0 : }
     488             : 
     489           0 : void ChartController::executeDispatch_Copy()
     490             : {
     491           0 :     if ( m_pDrawViewWrapper )
     492             :     {
     493           0 :         OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView();
     494           0 :         if ( pOutlinerView )
     495             :         {
     496           0 :             pOutlinerView->Copy();
     497             :         }
     498             :         else
     499             :         {
     500           0 :             Reference< datatransfer::XTransferable > xTransferable;
     501             :             {
     502           0 :                 SolarMutexGuard aSolarGuard;
     503           0 :                 SdrObject* pSelectedObj = 0;
     504           0 :                 if ( m_pDrawModelWrapper )
     505             :                 {
     506           0 :                     ObjectIdentifier aSelOID( m_aSelection.getSelectedOID() );
     507           0 :                     if ( aSelOID.isAutoGeneratedObject() )
     508             :                     {
     509           0 :                         pSelectedObj = m_pDrawModelWrapper->getNamedSdrObject( aSelOID.getObjectCID() );
     510             :                     }
     511           0 :                     else if ( aSelOID.isAdditionalShape() )
     512             :                     {
     513           0 :                         pSelectedObj = DrawViewWrapper::getSdrObject( aSelOID.getAdditionalShape() );
     514             :                     }
     515           0 :                     if ( pSelectedObj )
     516             :                     {
     517             :                         xTransferable = Reference< datatransfer::XTransferable >( new ChartTransferable(
     518           0 :                                 &m_pDrawModelWrapper->getSdrModel(), pSelectedObj, aSelOID.isAdditionalShape() ) );
     519           0 :                     }
     520           0 :                 }
     521             :             }
     522           0 :             if ( xTransferable.is() )
     523             :             {
     524           0 :                 Reference< datatransfer::clipboard::XClipboard > xClipboard( TransferableHelper::GetSystemClipboard() );
     525           0 :                 if ( xClipboard.is() )
     526             :                 {
     527           0 :                     xClipboard->setContents( xTransferable, Reference< datatransfer::clipboard::XClipboardOwner >() );
     528           0 :                 }
     529           0 :             }
     530             :         }
     531             :     }
     532           0 : }
     533             : 
     534           0 : void ChartController::executeDispatch_Cut()
     535             : {
     536           0 :     executeDispatch_Copy();
     537           0 :     executeDispatch_Delete();
     538           0 : }
     539             : 
     540           0 : bool ChartController::isObjectDeleteable( const uno::Any& rSelection )
     541             : {
     542           0 :     ObjectIdentifier aSelOID( rSelection );
     543           0 :     if ( aSelOID.isAutoGeneratedObject() )
     544             :     {
     545           0 :         OUString aSelObjCID( aSelOID.getObjectCID() );
     546           0 :         ObjectType aObjectType(ObjectIdentifier::getObjectType( aSelObjCID ));
     547             : 
     548           0 :         switch(aObjectType)
     549             :         {
     550             :         case OBJECTTYPE_TITLE:
     551             :         case OBJECTTYPE_LEGEND:
     552             :         case OBJECTTYPE_DATA_SERIES:
     553             :         case OBJECTTYPE_LEGEND_ENTRY:
     554             :         case OBJECTTYPE_DATA_CURVE_EQUATION:
     555             :         case OBJECTTYPE_DATA_CURVE:
     556             :         case OBJECTTYPE_DATA_AVERAGE_LINE:
     557             :         case OBJECTTYPE_DATA_ERRORS_X:
     558             :         case OBJECTTYPE_DATA_ERRORS_Y:
     559             :         case OBJECTTYPE_DATA_ERRORS_Z:
     560             :         case OBJECTTYPE_DATA_LABELS:
     561             :         case OBJECTTYPE_DATA_LABEL:
     562             :         case OBJECTTYPE_AXIS:
     563             :         case OBJECTTYPE_GRID:
     564             :         case OBJECTTYPE_SUBGRID:
     565           0 :             return true;
     566             :         default:
     567           0 :             break;
     568           0 :         }
     569             :     }
     570           0 :     else if ( aSelOID.isAdditionalShape() )
     571             :     {
     572           0 :         return true;
     573             :     }
     574             : 
     575           0 :     return false;
     576             : }
     577             : 
     578           0 : bool ChartController::isShapeContext() const
     579             : {
     580           0 :     if ( m_aSelection.isAdditionalShapeSelected() ||
     581           0 :          ( m_pDrawViewWrapper && m_pDrawViewWrapper->AreObjectsMarked() &&
     582           0 :            ( m_pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_TEXT ) ) )
     583             :     {
     584           0 :         return true;
     585             :     }
     586             : 
     587           0 :     return false;
     588             : }
     589             : 
     590           0 : void ChartController::impl_ClearSelection()
     591             : {
     592           0 :     if( m_aSelection.hasSelection())
     593             :     {
     594           0 :         m_aSelection.clearSelection();
     595           0 :         impl_notifySelectionChangeListeners();
     596             :     }
     597           0 : }
     598             : 
     599           0 : bool ChartController::executeDispatch_Delete()
     600             : {
     601           0 :     bool bReturn = false;
     602             : 
     603             :     // remove the selected object
     604           0 :     rtl::OUString aCID( m_aSelection.getSelectedCID() );
     605           0 :     if( !aCID.isEmpty() )
     606             :     {
     607           0 :         if( !isObjectDeleteable( uno::Any( aCID ) ) )
     608           0 :             return false;
     609             : 
     610             :         //remove chart object
     611           0 :         uno::Reference< chart2::XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY );
     612           0 :         if( !xChartDoc.is() )
     613           0 :             return false;
     614             : 
     615           0 :         ObjectType aObjectType( ObjectIdentifier::getObjectType( aCID ));
     616           0 :         switch( aObjectType )
     617             :         {
     618             :             case OBJECTTYPE_TITLE:
     619             :             {
     620             :                 // using assignment for broken gcc 3.3
     621             :                 UndoGuard aUndoGuard = UndoGuard(
     622             :                     ActionDescriptionProvider::createDescription(
     623             :                         ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_TITLE ))),
     624           0 :                     m_xUndoManager );
     625             :                 TitleHelper::removeTitle(
     626           0 :                     ObjectIdentifier::getTitleTypeForCID( aCID ), getModel() );
     627           0 :                 bReturn = true;
     628           0 :                 aUndoGuard.commit();
     629           0 :                 break;
     630             :             }
     631             :             case OBJECTTYPE_LEGEND:
     632             :             {
     633           0 :                 uno::Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram());
     634           0 :                 if( xDiagram.is())
     635             :                 {
     636           0 :                     uno::Reference< beans::XPropertySet > xLegendProp( xDiagram->getLegend(), uno::UNO_QUERY );
     637           0 :                     if( xLegendProp.is())
     638             :                     {
     639             :                         // using assignment for broken gcc 3.3
     640             :                         UndoGuard aUndoGuard = UndoGuard(
     641             :                             ActionDescriptionProvider::createDescription(
     642             :                                 ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_LEGEND ))),
     643           0 :                             m_xUndoManager );
     644           0 :                         xLegendProp->setPropertyValue( C2U("Show"), uno::makeAny( false ));
     645           0 :                         bReturn = true;
     646           0 :                         aUndoGuard.commit();
     647           0 :                     }
     648             :                 }
     649           0 :                 break;
     650             :             }
     651             : 
     652             :             case OBJECTTYPE_DATA_SERIES:
     653           0 :                 bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager );
     654           0 :                 break;
     655             : 
     656             :             case OBJECTTYPE_LEGEND_ENTRY:
     657             :             {
     658             :                 ObjectType eParentObjectType = ObjectIdentifier::getObjectType(
     659           0 :                     ObjectIdentifier::getFullParentParticle( aCID ));
     660           0 :                 if( eParentObjectType == OBJECTTYPE_DATA_SERIES )
     661           0 :                     bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager );
     662           0 :                 else if( eParentObjectType == OBJECTTYPE_DATA_CURVE )
     663           0 :                     bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager );
     664           0 :                 else if( eParentObjectType == OBJECTTYPE_DATA_AVERAGE_LINE )
     665             :                 {
     666           0 :                     executeDispatch_DeleteMeanValue();
     667           0 :                     bReturn = true;
     668             :                 }
     669           0 :                 break;
     670             :             }
     671             : 
     672             :             case OBJECTTYPE_DATA_AVERAGE_LINE:
     673             :             {
     674             :                 uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     675             :                     ObjectIdentifier::getObjectPropertySet(
     676           0 :                         ObjectIdentifier::getFullParentParticle( aCID ), getModel()), uno::UNO_QUERY );
     677           0 :                 if( xRegCurveCnt.is())
     678             :                 {
     679             :                     // using assignment for broken gcc 3.3
     680             :                     UndoGuard aUndoGuard = UndoGuard(
     681             :                         ActionDescriptionProvider::createDescription(
     682             :                             ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_AVERAGE_LINE ))),
     683           0 :                         m_xUndoManager );
     684           0 :                     RegressionCurveHelper::removeMeanValueLine( xRegCurveCnt );
     685           0 :                     bReturn = true;
     686           0 :                     aUndoGuard.commit();
     687             :                 }
     688           0 :                 break;
     689             :             }
     690             : 
     691             :             case OBJECTTYPE_DATA_CURVE:
     692           0 :                 bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager );
     693           0 :                 break;
     694             : 
     695             :             case OBJECTTYPE_DATA_CURVE_EQUATION:
     696             :             {
     697             :                 uno::Reference< beans::XPropertySet > xEqProp(
     698           0 :                     ObjectIdentifier::getObjectPropertySet( aCID, getModel()));
     699           0 :                 if( xEqProp.is())
     700             :                 {
     701           0 :                     uno::Reference< frame::XModel > xModel( getModel() );
     702             :                     // using assignment for broken gcc 3.3
     703             :                     UndoGuard aUndoGuard = UndoGuard(
     704             :                         ActionDescriptionProvider::createDescription(
     705             :                             ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_CURVE_EQUATION ))),
     706           0 :                         m_xUndoManager );
     707             :                     {
     708           0 :                         ControllerLockGuard aCtlLockGuard( xModel );
     709           0 :                         xEqProp->setPropertyValue( C2U("ShowEquation"), uno::makeAny( false ));
     710           0 :                         xEqProp->setPropertyValue( C2U("ShowCorrelationCoefficient"), uno::makeAny( false ));
     711             :                     }
     712           0 :                     bReturn = true;
     713           0 :                     aUndoGuard.commit();
     714             :                 }
     715           0 :                 break;
     716             :             }
     717             : 
     718             :             case OBJECTTYPE_DATA_ERRORS_X:
     719             :             case OBJECTTYPE_DATA_ERRORS_Y:
     720             :             case OBJECTTYPE_DATA_ERRORS_Z:
     721             :             {
     722             :                 uno::Reference< beans::XPropertySet > xErrorBarProp(
     723           0 :                     ObjectIdentifier::getObjectPropertySet( aCID, getModel() ));
     724           0 :                 if( xErrorBarProp.is())
     725             :                 {
     726             :                     sal_Int16 nId;
     727             : 
     728           0 :                     if ( aObjectType == OBJECTTYPE_DATA_ERRORS_X )
     729           0 :                         nId = STR_OBJECT_ERROR_BARS_X;
     730           0 :                     else if ( aObjectType == OBJECTTYPE_DATA_ERRORS_Y )
     731           0 :                         nId = STR_OBJECT_ERROR_BARS_Y;
     732             :                     else
     733           0 :                         nId = STR_OBJECT_ERROR_BARS_Z;
     734             : 
     735           0 :                     uno::Reference< frame::XModel > xModel( getModel() );
     736             :                     // using assignment for broken gcc 3.3
     737             :                     UndoGuard aUndoGuard = UndoGuard(
     738             :                         ActionDescriptionProvider::createDescription(
     739             :                             ActionDescriptionProvider::DELETE, String( SchResId( nId ))),
     740           0 :                         m_xUndoManager );
     741             :                     {
     742           0 :                         ControllerLockGuard aCtlLockGuard( xModel );
     743           0 :                         xErrorBarProp->setPropertyValue(
     744             :                             C2U("ErrorBarStyle"),
     745           0 :                             uno::makeAny( ::com::sun::star::chart::ErrorBarStyle::NONE ));
     746             :                     }
     747           0 :                     bReturn = true;
     748           0 :                     aUndoGuard.commit();
     749             :                 }
     750           0 :                 break;
     751             :             }
     752             : 
     753             :             case OBJECTTYPE_DATA_LABELS:
     754             :             case OBJECTTYPE_DATA_LABEL:
     755             :             {
     756             :                 uno::Reference< beans::XPropertySet > xObjectProperties =
     757           0 :                     ObjectIdentifier::getObjectPropertySet( aCID, getModel() );
     758           0 :                 if( xObjectProperties.is() )
     759             :                 {
     760             :                     UndoGuard aUndoGuard = UndoGuard(
     761             :                         ActionDescriptionProvider::createDescription(
     762             :                         ActionDescriptionProvider::DELETE, ::rtl::OUString( String(
     763             :                             SchResId( aObjectType == OBJECTTYPE_DATA_LABEL ? STR_OBJECT_LABEL : STR_OBJECT_DATALABELS )))),
     764           0 :                                 m_xUndoManager );
     765           0 :                     chart2::DataPointLabel aLabel;
     766           0 :                     xObjectProperties->getPropertyValue( C2U( "Label" ) ) >>= aLabel;
     767           0 :                     aLabel.ShowNumber = false;
     768           0 :                     aLabel.ShowNumberInPercent = false;
     769           0 :                     aLabel.ShowCategoryName = false;
     770           0 :                     aLabel.ShowLegendSymbol = false;
     771           0 :                     if( aObjectType == OBJECTTYPE_DATA_LABELS )
     772             :                     {
     773           0 :                         uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( aCID, getModel() ));
     774           0 :                         ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "Label" ), uno::makeAny(aLabel) );
     775             :                     }
     776             :                     else
     777           0 :                         xObjectProperties->setPropertyValue( C2U( "Label" ), uno::makeAny(aLabel) );
     778           0 :                     bReturn = true;
     779           0 :                     aUndoGuard.commit();
     780             :                 }
     781           0 :                 break;
     782             :             }
     783             :             case OBJECTTYPE_AXIS:
     784             :             {
     785           0 :                 executeDispatch_DeleteAxis();
     786           0 :                 bReturn = true;
     787           0 :                 break;
     788             :             }
     789             :             case OBJECTTYPE_GRID:
     790             :             {
     791           0 :                 executeDispatch_DeleteMajorGrid();
     792           0 :                 bReturn = true;
     793           0 :                 break;
     794             :             }
     795             :             case OBJECTTYPE_SUBGRID:
     796             :             {
     797           0 :                 executeDispatch_DeleteMinorGrid();
     798           0 :                 bReturn = true;
     799           0 :                 break;
     800             :             }
     801             : 
     802             :             default:
     803             :             {
     804           0 :                 break;
     805             :             }
     806           0 :         }
     807             :     }
     808             :     else
     809             :     {
     810             :         //remove additional shape
     811           0 :         impl_ClearSelection();
     812             :         {
     813           0 :             SolarMutexGuard aSolarGuard;
     814           0 :             if ( m_pDrawViewWrapper )
     815             :             {
     816           0 :                 m_pDrawViewWrapper->DeleteMarked();
     817           0 :                 bReturn = true;
     818           0 :             }
     819             :         }
     820             :     }
     821           0 :     return bReturn;
     822             : }
     823             : 
     824           0 : void ChartController::executeDispatch_ToggleLegend()
     825             : {
     826           0 :     Reference< frame::XModel > xModel( getModel() );
     827             :     UndoGuard aUndoGuard = UndoGuard(
     828           0 :         String( SchResId( STR_ACTION_TOGGLE_LEGEND )), m_xUndoManager );
     829           0 :     Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend( xModel ), uno::UNO_QUERY );
     830           0 :     bool bChanged = false;
     831           0 :     if( xLegendProp.is())
     832             :     {
     833             :         try
     834             :         {
     835           0 :             bool bShow = false;
     836           0 :             if( xLegendProp->getPropertyValue( C2U("Show")) >>= bShow )
     837             :             {
     838           0 :                 xLegendProp->setPropertyValue( C2U("Show"), uno::makeAny( ! bShow ));
     839           0 :                 bChanged = true;
     840             :             }
     841             :         }
     842           0 :         catch( const uno::Exception & ex )
     843             :         {
     844             :             ASSERT_EXCEPTION( ex );
     845             :         }
     846             :     }
     847             :     else
     848             :     {
     849           0 :         xLegendProp.set( LegendHelper::getLegend( xModel, m_xCC, true ), uno::UNO_QUERY );
     850           0 :         if( xLegendProp.is())
     851           0 :             bChanged = true;
     852             :     }
     853             : 
     854           0 :     if( bChanged )
     855           0 :         aUndoGuard.commit();
     856           0 : }
     857             : 
     858           0 : void ChartController::executeDispatch_ToggleGridHorizontal()
     859             : {
     860           0 :     Reference< frame::XModel > xModel( getModel() );
     861             :     UndoGuard aUndoGuard = UndoGuard(
     862           0 :         String( SchResId( STR_ACTION_TOGGLE_GRID_HORZ )), m_xUndoManager );
     863           0 :     Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( getModel() ));
     864           0 :     if( xDiagram.is())
     865             :     {
     866           0 :         sal_Int32 nDimensionIndex = 1;
     867           0 :         sal_Int32 nCooSysIndex = 0;
     868           0 :         bool bIsMainGrid = true;
     869             : 
     870           0 :         bool bHasMainYGrid = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram );
     871             : 
     872           0 :         if( bHasMainYGrid )
     873           0 :             AxisHelper::hideGrid( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram );
     874             :         else
     875           0 :             AxisHelper::showGrid( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram, m_xCC );
     876             : 
     877           0 :         aUndoGuard.commit();
     878           0 :     }
     879           0 : }
     880             : 
     881           0 : void ChartController::impl_ShapeControllerDispatch( const util::URL& rURL, const Sequence< beans::PropertyValue >& rArgs )
     882             : {
     883           0 :     Reference< frame::XDispatch > xDispatch( m_aDispatchContainer.getShapeController() );
     884           0 :     if ( xDispatch.is() )
     885             :     {
     886           0 :         xDispatch->dispatch( rURL, rArgs );
     887           0 :     }
     888           0 : }
     889             : 
     890           0 : void ChartController::impl_switchDiagramPositioningToExcludingPositioning()
     891             : {
     892             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription(
     893             :         ActionDescriptionProvider::POS_SIZE,
     894             :         ObjectNameProvider::getName( OBJECTTYPE_DIAGRAM)),
     895           0 :         m_xUndoManager );
     896           0 :     if( DiagramHelper::switchDiagramPositioningToExcludingPositioning( m_aModel->getModel(), true, true ) )
     897           0 :         aUndoGuard.commit();
     898           0 : }
     899             : 
     900             : } //  namespace chart
     901             : 
     902             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10