LCOV - code coverage report
Current view: top level - chart2/source/controller/main - DrawCommandDispatch.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 76 315 24.1 %
Date: 2012-08-25 Functions: 9 17 52.9 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 25 489 5.1 %

           Branch data     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 "DrawCommandDispatch.hxx"
      22                 :            : #include "DrawCommandDispatch.hrc"
      23                 :            : #include "ChartController.hxx"
      24                 :            : #include "DrawViewWrapper.hxx"
      25                 :            : #include "chartview/DrawModelWrapper.hxx"
      26                 :            : #include "macros.hxx"
      27                 :            : 
      28                 :            : #include <osl/mutex.hxx>
      29                 :            : #include <vcl/svapp.hxx>
      30                 :            : #include <svl/itempool.hxx>
      31                 :            : #include <editeng/adjitem.hxx>
      32                 :            : #include <svx/dialogs.hrc>
      33                 :            : #include <svx/dialmgr.hxx>
      34                 :            : #include <svx/fmmodel.hxx>
      35                 :            : #include <svx/gallery.hxx>
      36                 :            : #include <svx/svdoashp.hxx>
      37                 :            : #include <svx/svdocapt.hxx>
      38                 :            : #include <svx/svdopath.hxx>
      39                 :            : #include <svx/svdpage.hxx>
      40                 :            : #include <svx/unoapi.hxx>
      41                 :            : #include <svx/xlnedit.hxx>
      42                 :            : #include <svx/xlnedwit.hxx>
      43                 :            : #include <svx/xlnwtit.hxx>
      44                 :            : #include <svx/xtable.hxx>
      45                 :            : #include <basegfx/polygon/b2dpolygon.hxx>
      46                 :            : 
      47                 :            : #include <boost/ref.hpp>
      48                 :            : 
      49                 :            : using namespace ::com::sun::star;
      50                 :            : using namespace ::com::sun::star::frame;
      51                 :            : 
      52                 :            : using ::com::sun::star::uno::Reference;
      53                 :            : using ::com::sun::star::uno::Sequence;
      54                 :            : 
      55                 :            : 
      56                 :            : //.............................................................................
      57                 :            : namespace
      58                 :            : {
      59                 :            : //.............................................................................
      60                 :            : 
      61                 :            :     // comparing two PropertyValue instances
      62                 :            :     struct PropertyValueCompare : public ::std::binary_function< beans::PropertyValue, ::rtl::OUString, bool >
      63                 :            :     {
      64                 :          0 :         bool operator() ( const beans::PropertyValue& rPropValue, const ::rtl::OUString& rName ) const
      65                 :            :         {
      66                 :          0 :             return rPropValue.Name.equals( rName );
      67                 :            :         }
      68                 :            :         bool operator() ( const ::rtl::OUString& rName, const beans::PropertyValue& rPropValue ) const
      69                 :            :         {
      70                 :            :             return rName.equals( rPropValue.Name );
      71                 :            :         }
      72                 :            :     };
      73                 :            : 
      74                 :            : //.............................................................................
      75                 :            : } // anonymous namespace
      76                 :            : //.............................................................................
      77                 :            : 
      78                 :            : 
      79                 :            : //.............................................................................
      80                 :            : namespace chart
      81                 :            : {
      82                 :            : //.............................................................................
      83                 :            : 
      84                 :         34 : DrawCommandDispatch::DrawCommandDispatch( const Reference< uno::XComponentContext >& rxContext,
      85                 :            :     ChartController* pController )
      86                 :            :     :FeatureCommandDispatchBase( rxContext )
      87                 :         34 :     ,m_pChartController( pController )
      88                 :            : {
      89                 :         34 : }
      90                 :            : 
      91                 :         34 : DrawCommandDispatch::~DrawCommandDispatch()
      92                 :            : {
      93         [ -  + ]:         68 : }
      94                 :            : 
      95                 :         34 : void DrawCommandDispatch::initialize()
      96                 :            : {
      97                 :         34 :     FeatureCommandDispatchBase::initialize();
      98                 :         34 : }
      99                 :            : 
     100                 :        680 : bool DrawCommandDispatch::isFeatureSupported( const ::rtl::OUString& rCommandURL )
     101                 :            : {
     102                 :        680 :     sal_uInt16 nFeatureId = 0;
     103                 :        680 :     ::rtl::OUString aBaseCommand;
     104                 :        680 :     ::rtl::OUString aCustomShapeType;
     105         [ +  - ]:        680 :     return parseCommandURL( rCommandURL, &nFeatureId, &aBaseCommand, &aCustomShapeType );
     106                 :            : }
     107                 :            : 
     108                 :          0 : ::basegfx::B2DPolyPolygon getPolygon( sal_uInt16 nResId, SdrModel& rModel )
     109                 :            : {
     110         [ #  # ]:          0 :     ::basegfx::B2DPolyPolygon aReturn;
     111         [ #  # ]:          0 :     XLineEndListRef pLineEndList = rModel.GetLineEndList();
     112         [ #  # ]:          0 :     if ( pLineEndList.is() )
     113                 :            :     {
     114 [ #  # ][ #  # ]:          0 :         String aName( SVX_RES( nResId ) );
     115         [ #  # ]:          0 :         long nCount = pLineEndList->Count();
     116         [ #  # ]:          0 :         for ( long nIndex = 0; nIndex < nCount; ++nIndex )
     117                 :            :         {
     118         [ #  # ]:          0 :             XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nIndex );
     119 [ #  # ][ #  # ]:          0 :             if ( pEntry->GetName() == aName )
     120                 :            :             {
     121         [ #  # ]:          0 :                 aReturn = pEntry->GetLineEnd();
     122                 :          0 :                 break;
     123                 :            :             }
     124         [ #  # ]:          0 :         }
     125                 :            :     }
     126                 :          0 :     return aReturn;
     127                 :            : }
     128                 :            : 
     129                 :          0 : void DrawCommandDispatch::setAttributes( SdrObject* pObj )
     130                 :            : {
     131         [ #  # ]:          0 :     if ( m_pChartController )
     132                 :            :     {
     133                 :          0 :         DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper();
     134                 :          0 :         DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
     135 [ #  # ][ #  # ]:          0 :         if ( pDrawModelWrapper && pDrawViewWrapper && pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_CUSTOMSHAPE )
         [ #  # ][ #  # ]
     136                 :            :         {
     137                 :          0 :             sal_Bool bAttributesAppliedFromGallery = sal_False;
     138         [ #  # ]:          0 :             if ( GalleryExplorer::GetSdrObjCount( GALLERY_THEME_POWERPOINT ) )
     139                 :            :             {
     140         [ #  # ]:          0 :                 ::std::vector< ::rtl::OUString > aObjList;
     141 [ #  # ][ #  # ]:          0 :                 if ( GalleryExplorer::FillObjListTitle( GALLERY_THEME_POWERPOINT, aObjList ) )
     142                 :            :                 {
     143         [ #  # ]:          0 :                     for ( sal_uInt16 i = 0; i < aObjList.size(); ++i )
     144                 :            :                     {
     145         [ #  # ]:          0 :                         if ( aObjList[ i ].equalsIgnoreAsciiCase( m_aCustomShapeType ) )
     146                 :            :                         {
     147         [ #  # ]:          0 :                             FmFormModel aModel;
     148                 :          0 :                             SfxItemPool& rPool = aModel.GetItemPool();
     149         [ #  # ]:          0 :                             rPool.FreezeIdRanges();
     150 [ #  # ][ #  # ]:          0 :                             if ( GalleryExplorer::GetSdrObj( GALLERY_THEME_POWERPOINT, i, &aModel ) )
     151                 :            :                             {
     152 [ #  # ][ #  # ]:          0 :                                 const SdrObject* pSourceObj = aModel.GetPage( 0 )->GetObj( 0 );
     153         [ #  # ]:          0 :                                 if ( pSourceObj )
     154                 :            :                                 {
     155         [ #  # ]:          0 :                                     const SfxItemSet& rSource = pSourceObj->GetMergedItemSet();
     156         [ #  # ]:          0 :                                     SfxItemSet aDest( pObj->GetModel()->GetItemPool(),          // ranges from SdrAttrObj
     157                 :            :                                         SDRATTR_START, SDRATTR_SHADOW_LAST,
     158                 :            :                                         SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST,
     159                 :            :                                         SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION,
     160                 :            :                                         // Graphic Attributes
     161                 :            :                                         SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST,
     162                 :            :                                         // 3d Properties
     163                 :            :                                         SDRATTR_3D_FIRST, SDRATTR_3D_LAST,
     164                 :            :                                         // CustomShape properties
     165                 :            :                                         SDRATTR_CUSTOMSHAPE_FIRST, SDRATTR_CUSTOMSHAPE_LAST,
     166                 :            :                                         // range from SdrTextObj
     167                 :            :                                         EE_ITEMS_START, EE_ITEMS_END,
     168                 :            :                                         // end
     169         [ #  # ]:          0 :                                         0, 0);
     170         [ #  # ]:          0 :                                     aDest.Set( rSource );
     171         [ #  # ]:          0 :                                     pObj->SetMergedItemSet( aDest );
     172         [ #  # ]:          0 :                                     sal_Int32 nAngle = pSourceObj->GetRotateAngle();
     173         [ #  # ]:          0 :                                     if ( nAngle )
     174                 :            :                                     {
     175                 :          0 :                                         double a = nAngle * F_PI18000;
     176 [ #  # ][ #  # ]:          0 :                                         pObj->NbcRotate( pObj->GetSnapRect().Center(), nAngle, sin( a ), cos( a ) );
                 [ #  # ]
     177                 :            :                                     }
     178         [ #  # ]:          0 :                                     bAttributesAppliedFromGallery = sal_True;
     179                 :            :                                 }
     180                 :            :                             }
     181         [ #  # ]:          0 :                             break;
     182                 :            :                         }
     183                 :            :                     }
     184                 :          0 :                 }
     185                 :            :             }
     186         [ #  # ]:          0 :             if ( !bAttributesAppliedFromGallery )
     187                 :            :             {
     188         [ #  # ]:          0 :                 pObj->SetMergedItem( SvxAdjustItem( SVX_ADJUST_CENTER, 0 ) );
     189         [ #  # ]:          0 :                 pObj->SetMergedItem( SdrTextVertAdjustItem( SDRTEXTVERTADJUST_CENTER ) );
     190         [ #  # ]:          0 :                 pObj->SetMergedItem( SdrTextHorzAdjustItem( SDRTEXTHORZADJUST_BLOCK ) );
     191         [ #  # ]:          0 :                 pObj->SetMergedItem( SdrTextAutoGrowHeightItem( sal_False ) );
     192         [ #  # ]:          0 :                 ( dynamic_cast< SdrObjCustomShape* >( pObj ) )->MergeDefaultAttributes( &m_aCustomShapeType );
     193                 :            :             }
     194                 :            :         }
     195                 :            :     }
     196                 :          0 : }
     197                 :            : 
     198                 :          0 : void DrawCommandDispatch::setLineEnds( SfxItemSet& rAttr )
     199                 :            : {
     200 [ #  # ][ #  # ]:          0 :     if ( m_nFeatureId == COMMAND_ID_LINE_ARROW_END && m_pChartController )
     201                 :            :     {
     202                 :          0 :         DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper();
     203                 :          0 :         DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
     204 [ #  # ][ #  # ]:          0 :         if ( pDrawModelWrapper && pDrawViewWrapper )
     205                 :            :         {
     206 [ #  # ][ #  # ]:          0 :             ::basegfx::B2DPolyPolygon aArrow( getPolygon( RID_SVXSTR_ARROW, pDrawModelWrapper->getSdrModel() ) );
     207 [ #  # ][ #  # ]:          0 :             if ( !aArrow.count() )
     208                 :            :             {
     209         [ #  # ]:          0 :                 ::basegfx::B2DPolygon aNewArrow;
     210         [ #  # ]:          0 :                 aNewArrow.append( ::basegfx::B2DPoint( 10.0, 0.0 ) );
     211         [ #  # ]:          0 :                 aNewArrow.append( ::basegfx::B2DPoint( 0.0, 30.0) );
     212         [ #  # ]:          0 :                 aNewArrow.append( ::basegfx::B2DPoint( 20.0, 30.0 ) );
     213         [ #  # ]:          0 :                 aNewArrow.setClosed( true );
     214 [ #  # ][ #  # ]:          0 :                 aArrow.append( aNewArrow );
     215                 :            :             }
     216                 :            : 
     217         [ #  # ]:          0 :             SfxItemSet aSet( pDrawViewWrapper->GetModel()->GetItemPool() );
     218         [ #  # ]:          0 :             pDrawViewWrapper->GetAttributes( aSet );
     219                 :            : 
     220                 :          0 :             long nWidth = 300; // (1/100th mm)
     221 [ #  # ][ #  # ]:          0 :             if ( aSet.GetItemState( XATTR_LINEWIDTH ) != SFX_ITEM_DONTCARE )
     222                 :            :             {
     223         [ #  # ]:          0 :                 long nValue = ( ( const XLineWidthItem& ) aSet.Get( XATTR_LINEWIDTH ) ).GetValue();
     224         [ #  # ]:          0 :                 if ( nValue > 0 )
     225                 :            :                 {
     226                 :          0 :                     nWidth = nValue * 3;
     227                 :            :                 }
     228                 :            :             }
     229                 :            : 
     230 [ #  # ][ #  # ]:          0 :             rAttr.Put( XLineEndItem( SVX_RESSTR( RID_SVXSTR_ARROW ), aArrow ) );
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     231 [ #  # ][ #  # ]:          0 :             rAttr.Put( XLineEndWidthItem( nWidth ) );
         [ #  # ][ #  # ]
                 [ #  # ]
     232                 :            :         }
     233                 :            :     }
     234                 :          0 : }
     235                 :            : 
     236                 :            : // WeakComponentImplHelperBase
     237                 :         34 : void DrawCommandDispatch::disposing()
     238                 :            : {
     239                 :         34 : }
     240                 :            : 
     241                 :            : // XEventListener
     242                 :          0 : void DrawCommandDispatch::disposing( const lang::EventObject& /* Source */ )
     243                 :            :     throw (uno::RuntimeException)
     244                 :            : {
     245                 :          0 : }
     246                 :            : 
     247                 :        476 : FeatureState DrawCommandDispatch::getState( const ::rtl::OUString& rCommand )
     248                 :            : {
     249                 :        476 :     FeatureState aReturn;
     250                 :        476 :     aReturn.bEnabled = false;
     251         [ +  - ]:        476 :     aReturn.aState <<= false;
     252                 :            : 
     253                 :        476 :     sal_uInt16 nFeatureId = 0;
     254                 :        476 :     ::rtl::OUString aBaseCommand;
     255                 :        476 :     ::rtl::OUString aCustomShapeType;
     256 [ +  - ][ +  - ]:        476 :     if ( parseCommandURL( rCommand, &nFeatureId, &aBaseCommand, &aCustomShapeType ) )
     257                 :            :     {
     258         [ +  - ]:        476 :         switch ( nFeatureId )
     259                 :            :         {
     260                 :            :             case COMMAND_ID_OBJECT_SELECT:
     261                 :            :             case COMMAND_ID_DRAW_LINE:
     262                 :            :             case COMMAND_ID_LINE_ARROW_END:
     263                 :            :             case COMMAND_ID_DRAW_RECT:
     264                 :            :             case COMMAND_ID_DRAW_ELLIPSE:
     265                 :            :             case COMMAND_ID_DRAW_FREELINE_NOFILL:
     266                 :            :             case COMMAND_ID_DRAW_TEXT:
     267                 :            :             case COMMAND_ID_DRAW_CAPTION:
     268                 :            :             case COMMAND_ID_DRAWTBX_CS_BASIC:
     269                 :            :             case COMMAND_ID_DRAWTBX_CS_SYMBOL:
     270                 :            :             case COMMAND_ID_DRAWTBX_CS_ARROW:
     271                 :            :             case COMMAND_ID_DRAWTBX_CS_FLOWCHART:
     272                 :            :             case COMMAND_ID_DRAWTBX_CS_CALLOUT:
     273                 :            :             case COMMAND_ID_DRAWTBX_CS_STAR:
     274                 :            :                 {
     275                 :        476 :                     aReturn.bEnabled = true;
     276         [ +  - ]:        476 :                     aReturn.aState <<= false;
     277                 :            :                 }
     278                 :        476 :                 break;
     279                 :            :             default:
     280                 :            :                 {
     281                 :          0 :                     aReturn.bEnabled = false;
     282         [ #  # ]:          0 :                     aReturn.aState <<= false;
     283                 :            :                 }
     284                 :        476 :                 break;
     285                 :            :         }
     286                 :            :     }
     287                 :            : 
     288                 :        476 :     return aReturn;
     289                 :            : }
     290                 :            : 
     291                 :          0 : void DrawCommandDispatch::execute( const ::rtl::OUString& rCommand, const Sequence< beans::PropertyValue>& rArgs )
     292                 :            : {
     293                 :            :     (void)rArgs;
     294                 :            : 
     295                 :          0 :     ChartDrawMode eDrawMode = CHARTDRAW_SELECT;
     296                 :          0 :     SdrObjKind eKind = OBJ_NONE;
     297                 :          0 :     bool bCreate = false;
     298                 :            : 
     299                 :          0 :     sal_uInt16 nFeatureId = 0;
     300                 :          0 :     ::rtl::OUString aBaseCommand;
     301                 :          0 :     ::rtl::OUString aCustomShapeType;
     302 [ #  # ][ #  # ]:          0 :     if ( parseCommandURL( rCommand, &nFeatureId, &aBaseCommand, &aCustomShapeType ) )
     303                 :            :     {
     304                 :          0 :         m_nFeatureId = nFeatureId;
     305                 :          0 :         m_aCustomShapeType = aCustomShapeType;
     306                 :            : 
     307   [ #  #  #  #  :          0 :         switch ( nFeatureId )
             #  #  #  #  
                      # ]
     308                 :            :         {
     309                 :            :             case COMMAND_ID_OBJECT_SELECT:
     310                 :            :                 {
     311                 :          0 :                     eDrawMode = CHARTDRAW_SELECT;
     312                 :          0 :                     eKind = OBJ_NONE;
     313                 :            :                 }
     314                 :          0 :                 break;
     315                 :            :             case COMMAND_ID_DRAW_LINE:
     316                 :            :             case COMMAND_ID_LINE_ARROW_END:
     317                 :            :                 {
     318                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     319                 :          0 :                     eKind = OBJ_LINE;
     320                 :            :                 }
     321                 :          0 :                 break;
     322                 :            :             case COMMAND_ID_DRAW_RECT:
     323                 :            :                 {
     324                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     325                 :          0 :                     eKind = OBJ_RECT;
     326                 :            :                 }
     327                 :          0 :                 break;
     328                 :            :             case COMMAND_ID_DRAW_ELLIPSE:
     329                 :            :                 {
     330                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     331                 :          0 :                     eKind = OBJ_CIRC;
     332                 :            :                 }
     333                 :          0 :                 break;
     334                 :            :             case COMMAND_ID_DRAW_FREELINE_NOFILL:
     335                 :            :                 {
     336                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     337                 :          0 :                     eKind = OBJ_FREELINE;
     338                 :            :                 }
     339                 :          0 :                 break;
     340                 :            :             case COMMAND_ID_DRAW_TEXT:
     341                 :            :                 {
     342                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     343                 :          0 :                     eKind = OBJ_TEXT;
     344                 :          0 :                     bCreate = true;
     345                 :            :                 }
     346                 :          0 :                 break;
     347                 :            :             case COMMAND_ID_DRAW_CAPTION:
     348                 :            :                 {
     349                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     350                 :          0 :                     eKind = OBJ_CAPTION;
     351                 :            :                 }
     352                 :          0 :                 break;
     353                 :            :             case COMMAND_ID_DRAWTBX_CS_BASIC:
     354                 :            :             case COMMAND_ID_DRAWTBX_CS_SYMBOL:
     355                 :            :             case COMMAND_ID_DRAWTBX_CS_ARROW:
     356                 :            :             case COMMAND_ID_DRAWTBX_CS_FLOWCHART:
     357                 :            :             case COMMAND_ID_DRAWTBX_CS_CALLOUT:
     358                 :            :             case COMMAND_ID_DRAWTBX_CS_STAR:
     359                 :            :                 {
     360                 :          0 :                     eDrawMode = CHARTDRAW_INSERT;
     361                 :          0 :                     eKind = OBJ_CUSTOMSHAPE;
     362                 :            :                 }
     363                 :          0 :                 break;
     364                 :            :             default:
     365                 :            :                 {
     366                 :          0 :                     eDrawMode = CHARTDRAW_SELECT;
     367                 :          0 :                     eKind = OBJ_NONE;
     368                 :            :                 }
     369                 :          0 :                 break;
     370                 :            :         }
     371                 :            : 
     372         [ #  # ]:          0 :         if ( m_pChartController )
     373                 :            :         {
     374         [ #  # ]:          0 :             DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
     375         [ #  # ]:          0 :             if ( pDrawViewWrapper )
     376                 :            :             {
     377         [ #  # ]:          0 :                 SolarMutexGuard aGuard;
     378                 :          0 :                 m_pChartController->setDrawMode( eDrawMode );
     379         [ #  # ]:          0 :                 setInsertObj( sal::static_int_cast< sal_uInt16 >( eKind ) );
     380         [ #  # ]:          0 :                 if ( bCreate )
     381                 :            :                 {
     382         [ #  # ]:          0 :                     pDrawViewWrapper->SetCreateMode();
     383                 :            :                 }
     384                 :            : 
     385         [ #  # ]:          0 :                 const ::rtl::OUString sKeyModifier( C2U( "KeyModifier" ) );
     386                 :          0 :                 const beans::PropertyValue* pIter = rArgs.getConstArray();
     387                 :          0 :                 const beans::PropertyValue* pEnd  = pIter + rArgs.getLength();
     388                 :            :                 const beans::PropertyValue* pKeyModifier = ::std::find_if(
     389 [ #  # ][ #  # ]:          0 :                     pIter, pEnd, ::std::bind2nd( PropertyValueCompare(), boost::cref( sKeyModifier ) ) );
                 [ #  # ]
     390                 :          0 :                 sal_Int16 nKeyModifier = 0;
     391 [ #  # ][ #  # ]:          0 :                 if ( pKeyModifier && ( pKeyModifier->Value >>= nKeyModifier ) && nKeyModifier == KEY_MOD1 )
         [ #  # ][ #  # ]
     392                 :            :                 {
     393         [ #  # ]:          0 :                     if ( eDrawMode == CHARTDRAW_INSERT )
     394                 :            :                     {
     395         [ #  # ]:          0 :                         SdrObject* pObj = createDefaultObject( nFeatureId );
     396         [ #  # ]:          0 :                         if ( pObj )
     397                 :            :                         {
     398                 :          0 :                             SdrPageView* pPageView = pDrawViewWrapper->GetSdrPageView();
     399         [ #  # ]:          0 :                             pDrawViewWrapper->InsertObjectAtView( pObj, *pPageView );
     400 [ #  # ][ #  # ]:          0 :                             Reference< drawing::XShape > xShape( pObj->getUnoShape(), uno::UNO_QUERY );
     401         [ #  # ]:          0 :                             if ( xShape.is() )
     402                 :            :                             {
     403         [ #  # ]:          0 :                                 m_pChartController->m_aSelection.setSelection( xShape );
     404         [ #  # ]:          0 :                                 m_pChartController->m_aSelection.applySelection( pDrawViewWrapper );
     405                 :            :                             }
     406         [ #  # ]:          0 :                             if ( nFeatureId == SID_DRAW_TEXT )
     407                 :            :                             {
     408         [ #  # ]:          0 :                                 m_pChartController->StartTextEdit();
     409                 :          0 :                             }
     410                 :            :                         }
     411                 :            :                     }
     412         [ #  # ]:          0 :                 }
     413                 :            :             }
     414                 :            :         }
     415                 :          0 :     }
     416                 :          0 : }
     417                 :            : 
     418                 :         34 : void DrawCommandDispatch::describeSupportedFeatures()
     419                 :            : {
     420                 :         34 :     implDescribeSupportedFeature( ".uno:SelectObject",      COMMAND_ID_OBJECT_SELECT,           CommandGroup::INSERT );
     421                 :         34 :     implDescribeSupportedFeature( ".uno:Line",              COMMAND_ID_DRAW_LINE,               CommandGroup::INSERT );
     422                 :         34 :     implDescribeSupportedFeature( ".uno:LineArrowEnd",      COMMAND_ID_LINE_ARROW_END,          CommandGroup::INSERT );
     423                 :         34 :     implDescribeSupportedFeature( ".uno:Rect",              COMMAND_ID_DRAW_RECT,               CommandGroup::INSERT );
     424                 :         34 :     implDescribeSupportedFeature( ".uno:Ellipse",           COMMAND_ID_DRAW_ELLIPSE,            CommandGroup::INSERT );
     425                 :         34 :     implDescribeSupportedFeature( ".uno:Freeline_Unfilled", COMMAND_ID_DRAW_FREELINE_NOFILL,    CommandGroup::INSERT );
     426                 :         34 :     implDescribeSupportedFeature( ".uno:DrawText",          COMMAND_ID_DRAW_TEXT,               CommandGroup::INSERT );
     427                 :         34 :     implDescribeSupportedFeature( ".uno:DrawCaption",       COMMAND_ID_DRAW_CAPTION,            CommandGroup::INSERT );
     428                 :         34 :     implDescribeSupportedFeature( ".uno:BasicShapes",       COMMAND_ID_DRAWTBX_CS_BASIC,        CommandGroup::INSERT );
     429                 :         34 :     implDescribeSupportedFeature( ".uno:SymbolShapes",      COMMAND_ID_DRAWTBX_CS_SYMBOL,       CommandGroup::INSERT );
     430                 :         34 :     implDescribeSupportedFeature( ".uno:ArrowShapes",       COMMAND_ID_DRAWTBX_CS_ARROW,        CommandGroup::INSERT );
     431                 :         34 :     implDescribeSupportedFeature( ".uno:FlowChartShapes",   COMMAND_ID_DRAWTBX_CS_FLOWCHART,    CommandGroup::INSERT );
     432                 :         34 :     implDescribeSupportedFeature( ".uno:CalloutShapes",     COMMAND_ID_DRAWTBX_CS_CALLOUT,      CommandGroup::INSERT );
     433                 :         34 :     implDescribeSupportedFeature( ".uno:StarShapes",        COMMAND_ID_DRAWTBX_CS_STAR,         CommandGroup::INSERT );
     434                 :         34 : }
     435                 :            : 
     436                 :          0 : void DrawCommandDispatch::setInsertObj( sal_uInt16 eObj )
     437                 :            : {
     438         [ #  # ]:          0 :     DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL );
     439         [ #  # ]:          0 :     if ( pDrawViewWrapper )
     440                 :            :     {
     441                 :          0 :         pDrawViewWrapper->SetCurrentObj( eObj /*, Inventor */);
     442                 :            :     }
     443                 :          0 : }
     444                 :            : 
     445                 :          0 : SdrObject* DrawCommandDispatch::createDefaultObject( const sal_uInt16 nID )
     446                 :            : {
     447                 :          0 :     SdrObject* pObj = NULL;
     448         [ #  # ]:          0 :     DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL );
     449         [ #  # ]:          0 :     DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL );
     450                 :            : 
     451 [ #  # ][ #  # ]:          0 :     if ( pDrawViewWrapper && pDrawModelWrapper )
     452                 :            :     {
     453         [ #  # ]:          0 :         Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() );
     454                 :          0 :         SdrPage* pPage = GetSdrPageFromXDrawPage( xDrawPage );
     455         [ #  # ]:          0 :         if ( pPage )
     456                 :            :         {
     457         [ #  # ]:          0 :             SolarMutexGuard aGuard;
     458                 :            :             pObj = SdrObjFactory::MakeNewObject( pDrawViewWrapper->GetCurrentObjInventor(),
     459         [ #  # ]:          0 :                 pDrawViewWrapper->GetCurrentObjIdentifier(), pPage );
     460         [ #  # ]:          0 :             if ( pObj )
     461                 :            :             {
     462                 :          0 :                 long nDefaultObjectSizeWidth = 4000;
     463                 :          0 :                 long nDefaultObjectSizeHeight = 2500;
     464                 :          0 :                 Size aObjectSize( nDefaultObjectSizeWidth, nDefaultObjectSizeHeight );
     465 [ #  # ][ #  # ]:          0 :                 Rectangle aPageRect( Rectangle( Point( 0, 0 ), pPage->GetSize() ) );
     466         [ #  # ]:          0 :                 Point aObjectPos = aPageRect.Center();
     467                 :          0 :                 aObjectPos.X() -= aObjectSize.Width() / 2;
     468                 :          0 :                 aObjectPos.Y() -= aObjectSize.Height() / 2;
     469         [ #  # ]:          0 :                 Rectangle aRect( aObjectPos, aObjectSize );
     470                 :            : 
     471   [ #  #  #  #  :          0 :                 switch ( nID )
                      # ]
     472                 :            :                 {
     473                 :            :                     case COMMAND_ID_DRAW_LINE:
     474                 :            :                     case COMMAND_ID_LINE_ARROW_END:
     475                 :            :                         {
     476 [ #  # ][ #  # ]:          0 :                             if ( pObj->ISA( SdrPathObj ) )
                 [ #  # ]
     477                 :            :                             {
     478                 :          0 :                                 Point aStart = aRect.TopLeft();
     479         [ #  # ]:          0 :                                 Point aEnd = aRect.BottomRight();
     480                 :          0 :                                 sal_Int32 nYMiddle( ( aRect.Top() + aRect.Bottom() ) / 2 );
     481         [ #  # ]:          0 :                                 basegfx::B2DPolygon aPoly;
     482         [ #  # ]:          0 :                                 aPoly.append( basegfx::B2DPoint( aStart.X(), nYMiddle ) );
     483         [ #  # ]:          0 :                                 aPoly.append( basegfx::B2DPoint( aEnd.X(), nYMiddle ) );
     484 [ #  # ][ #  # ]:          0 :                                 ( dynamic_cast< SdrPathObj* >( pObj ) )->SetPathPoly( basegfx::B2DPolyPolygon( aPoly ) );
         [ #  # ][ #  # ]
     485 [ #  # ][ #  # ]:          0 :                                 SfxItemSet aSet( pDrawModelWrapper->GetItemPool() );
     486         [ #  # ]:          0 :                                 setLineEnds( aSet );
     487 [ #  # ][ #  # ]:          0 :                                 pObj->SetMergedItemSet( aSet );
                 [ #  # ]
     488                 :            :                             }
     489                 :            :                         }
     490                 :          0 :                         break;
     491                 :            :                     case COMMAND_ID_DRAW_FREELINE_NOFILL:
     492                 :            :                         {
     493 [ #  # ][ #  # ]:          0 :                             if ( pObj->ISA( SdrPathObj ) )
                 [ #  # ]
     494                 :            :                             {
     495         [ #  # ]:          0 :                                 basegfx::B2DPolygon aInnerPoly;
     496         [ #  # ]:          0 :                                 aInnerPoly.append( basegfx::B2DPoint( aRect.Left(), aRect.Bottom() ) );
     497                 :            :                                 aInnerPoly.appendBezierSegment(
     498                 :          0 :                                     basegfx::B2DPoint( aRect.Left(), aRect.Top() ),
     499         [ #  # ]:          0 :                                     basegfx::B2DPoint( aRect.Center().X(), aRect.Top() ),
     500 [ #  # ][ #  # ]:          0 :                                     basegfx::B2DPoint( aRect.Center().X(), aRect.Center().Y() ) );
                 [ #  # ]
     501                 :            :                                 aInnerPoly.appendBezierSegment(
     502         [ #  # ]:          0 :                                     basegfx::B2DPoint( aRect.Center().X(), aRect.Bottom() ),
     503                 :          0 :                                     basegfx::B2DPoint( aRect.Right(), aRect.Bottom() ),
     504         [ #  # ]:          0 :                                     basegfx::B2DPoint( aRect.Right(), aRect.Top() ) );
     505         [ #  # ]:          0 :                                 basegfx::B2DPolyPolygon aPoly;
     506         [ #  # ]:          0 :                                 aPoly.append( aInnerPoly );
     507 [ #  # ][ #  # ]:          0 :                                 ( dynamic_cast< SdrPathObj* >( pObj ) )->SetPathPoly( aPoly );
         [ #  # ][ #  # ]
     508                 :            :                             }
     509                 :            :                         }
     510                 :          0 :                         break;
     511                 :            :                     case COMMAND_ID_DRAW_TEXT:
     512                 :            :                     case COMMAND_ID_DRAW_TEXT_VERTICAL:
     513                 :            :                         {
     514 [ #  # ][ #  # ]:          0 :                             if ( pObj->ISA( SdrTextObj ) )
                 [ #  # ]
     515                 :            :                             {
     516         [ #  # ]:          0 :                                 SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
     517         [ #  # ]:          0 :                                 if ( pTextObj )
     518                 :            :                                 {
     519         [ #  # ]:          0 :                                     pTextObj->SetLogicRect( aRect );
     520                 :          0 :                                     sal_Bool bVertical = ( nID == SID_DRAW_TEXT_VERTICAL );
     521         [ #  # ]:          0 :                                     pTextObj->SetVerticalWriting( bVertical );
     522         [ #  # ]:          0 :                                     if ( bVertical )
     523                 :            :                                     {
     524 [ #  # ][ #  # ]:          0 :                                         SfxItemSet aSet( pDrawModelWrapper->GetItemPool() );
     525 [ #  # ][ #  # ]:          0 :                                         aSet.Put( SdrTextAutoGrowWidthItem( sal_True ) );
                 [ #  # ]
     526 [ #  # ][ #  # ]:          0 :                                         aSet.Put( SdrTextAutoGrowHeightItem( sal_False ) );
                 [ #  # ]
     527 [ #  # ][ #  # ]:          0 :                                         aSet.Put( SdrTextVertAdjustItem( SDRTEXTVERTADJUST_TOP ) );
                 [ #  # ]
     528 [ #  # ][ #  # ]:          0 :                                         aSet.Put( SdrTextHorzAdjustItem( SDRTEXTHORZADJUST_RIGHT ) );
                 [ #  # ]
     529 [ #  # ][ #  # ]:          0 :                                         pTextObj->SetMergedItemSet( aSet );
     530                 :            :                                     }
     531                 :            :                                 }
     532                 :            :                             }
     533                 :            :                         }
     534                 :          0 :                         break;
     535                 :            :                     case COMMAND_ID_DRAW_CAPTION:
     536                 :            :                     case COMMAND_ID_DRAW_CAPTION_VERTICAL:
     537                 :            :                         {
     538 [ #  # ][ #  # ]:          0 :                             if ( pObj->ISA( SdrCaptionObj ) )
                 [ #  # ]
     539                 :            :                             {
     540                 :          0 :                                 sal_Bool bIsVertical( SID_DRAW_CAPTION_VERTICAL == nID );
     541         [ #  # ]:          0 :                                 SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
     542         [ #  # ]:          0 :                                 if ( pTextObj )
     543                 :            :                                 {
     544         [ #  # ]:          0 :                                     pTextObj->SetVerticalWriting( bIsVertical );
     545                 :            :                                 }
     546         [ #  # ]:          0 :                                 if ( bIsVertical )
     547                 :            :                                 {
     548 [ #  # ][ #  # ]:          0 :                                     SfxItemSet aSet( pObj->GetMergedItemSet() );
     549 [ #  # ][ #  # ]:          0 :                                     aSet.Put( SdrTextVertAdjustItem( SDRTEXTVERTADJUST_CENTER ) );
                 [ #  # ]
     550 [ #  # ][ #  # ]:          0 :                                     aSet.Put( SdrTextHorzAdjustItem( SDRTEXTHORZADJUST_RIGHT ) );
                 [ #  # ]
     551 [ #  # ][ #  # ]:          0 :                                     pObj->SetMergedItemSet( aSet );
     552                 :            :                                 }
     553         [ #  # ]:          0 :                                 SdrCaptionObj* pCaptionObj = dynamic_cast< SdrCaptionObj* >( pObj );
     554         [ #  # ]:          0 :                                 if ( pCaptionObj )
     555                 :            :                                 {
     556         [ #  # ]:          0 :                                     pCaptionObj->SetLogicRect( aRect );
     557                 :            :                                     pCaptionObj->SetTailPos(
     558 [ #  # ][ #  # ]:          0 :                                         aRect.TopLeft() - Point( aRect.GetWidth() / 2, aRect.GetHeight() / 2 ) );
                 [ #  # ]
     559                 :            :                                 }
     560                 :            :                             }
     561                 :            :                         }
     562                 :          0 :                         break;
     563                 :            :                     default:
     564                 :            :                         {
     565         [ #  # ]:          0 :                             pObj->SetLogicRect( aRect );
     566 [ #  # ][ #  # ]:          0 :                             SfxItemSet aSet( pDrawModelWrapper->GetItemPool() );
     567         [ #  # ]:          0 :                             setAttributes( pObj );
     568 [ #  # ][ #  # ]:          0 :                             pObj->SetMergedItemSet( aSet );
     569                 :            :                         }
     570                 :          0 :                         break;
     571                 :            :                 }
     572         [ #  # ]:          0 :             }
     573                 :          0 :         }
     574                 :            :     }
     575                 :            : 
     576                 :          0 :     return pObj;
     577                 :            : }
     578                 :            : 
     579                 :       1156 : bool DrawCommandDispatch::parseCommandURL( const ::rtl::OUString& rCommandURL, sal_uInt16* pnFeatureId,
     580                 :            :     ::rtl::OUString* pBaseCommand, ::rtl::OUString* pCustomShapeType )
     581                 :            : {
     582                 :       1156 :     bool bFound = true;
     583                 :       1156 :     sal_uInt16 nFeatureId = 0;
     584                 :       1156 :     ::rtl::OUString aBaseCommand;
     585                 :       1156 :     ::rtl::OUString aType;
     586                 :            : 
     587                 :       1156 :     sal_Int32 nIndex = 1;
     588                 :       1156 :     ::rtl::OUString aToken = rCommandURL.getToken( 0, '.', nIndex );
     589 [ #  # ][ +  - ]:       1156 :     if ( nIndex == -1 || aToken.isEmpty() )
                 [ -  + ]
     590                 :            :     {
     591                 :       1156 :         aBaseCommand = rCommandURL;
     592         [ +  - ]:       1156 :         SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( aBaseCommand );
     593         [ +  + ]:       1156 :         if ( aIter != m_aSupportedFeatures.end() )
     594                 :            :         {
     595                 :        952 :             nFeatureId = aIter->second.nFeatureId;
     596                 :            : 
     597   [ +  +  +  +  :        952 :             switch ( nFeatureId )
                +  +  + ]
     598                 :            :             {
     599                 :            :                 case COMMAND_ID_DRAWTBX_CS_BASIC:
     600                 :            :                     {
     601         [ +  - ]:         68 :                         aType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "diamond" ) );
     602                 :            :                     }
     603                 :         68 :                     break;
     604                 :            :                 case COMMAND_ID_DRAWTBX_CS_SYMBOL:
     605                 :            :                     {
     606         [ +  - ]:         68 :                         aType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "smiley" ) );
     607                 :            :                     }
     608                 :         68 :                     break;
     609                 :            :                 case COMMAND_ID_DRAWTBX_CS_ARROW:
     610                 :            :                     {
     611         [ +  - ]:         68 :                         aType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "left-right-arrow" ) );
     612                 :            :                     }
     613                 :         68 :                     break;
     614                 :            :                 case COMMAND_ID_DRAWTBX_CS_FLOWCHART:
     615                 :            :                     {
     616         [ +  - ]:         68 :                         aType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "flowchart-internal-storage" ) );
     617                 :            :                     }
     618                 :         68 :                     break;
     619                 :            :                 case COMMAND_ID_DRAWTBX_CS_CALLOUT:
     620                 :            :                     {
     621         [ +  - ]:         68 :                         aType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "round-rectangular-callout" ) );
     622                 :            :                     }
     623                 :         68 :                     break;
     624                 :            :                 case COMMAND_ID_DRAWTBX_CS_STAR:
     625                 :            :                     {
     626         [ +  - ]:         68 :                         aType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "star5" ) );
     627                 :            :                     }
     628                 :         68 :                     break;
     629                 :            :                 default:
     630                 :            :                     {
     631                 :            :                     }
     632                 :        952 :                     break;
     633                 :            :             }
     634                 :            :         }
     635                 :            :         else
     636                 :            :         {
     637                 :       1156 :             bFound = false;
     638                 :            :         }
     639                 :            :     }
     640                 :            :     else
     641                 :            :     {
     642                 :          0 :         aBaseCommand = rCommandURL.copy( 0, nIndex - 1 );
     643         [ #  # ]:          0 :         SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( aBaseCommand );
     644         [ #  # ]:          0 :         if ( aIter != m_aSupportedFeatures.end() )
     645                 :            :         {
     646                 :          0 :             nFeatureId = aIter->second.nFeatureId;
     647                 :          0 :             aType = rCommandURL.getToken( 0, '.', nIndex );
     648                 :            :         }
     649                 :            :         else
     650                 :            :         {
     651                 :          0 :             bFound = false;
     652                 :            :         }
     653                 :            :     }
     654                 :            : 
     655                 :       1156 :     *pnFeatureId = nFeatureId;
     656                 :       1156 :     *pBaseCommand = aBaseCommand;
     657                 :       1156 :     *pCustomShapeType = aType;
     658                 :            : 
     659                 :       1156 :     return bFound;
     660                 :            : }
     661                 :            : 
     662                 :            : //.............................................................................
     663                 :            : } //  namespace chart
     664                 :            : //.............................................................................
     665                 :            : 
     666                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10