LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/drawfunc - fusel.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 241 0.4 %
Date: 2012-12-27 Functions: 2 12 16.7 %
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             : #include <com/sun/star/embed/EmbedStates.hpp>
      21             : 
      22             : #include <editeng/eeitem.hxx>
      23             : #include <editeng/flditem.hxx>
      24             : #include <svx/svdoole2.hxx>
      25             : #include <svx/svdotext.hxx>
      26             : #include <sfx2/dispatch.hxx>
      27             : #include <svtools/imapobj.hxx>
      28             : #include <svx/svdouno.hxx>
      29             : #include <svx/svdomedia.hxx>
      30             : #include <svx/svdpagv.hxx>
      31             : #include <editeng/outlobj.hxx>
      32             : #include <svx/svdocapt.hxx>
      33             : #include <sfx2/app.hxx>
      34             : 
      35             : #include "fusel.hxx"
      36             : #include "sc.hrc"
      37             : #include "fudraw.hxx"
      38             : #include "futext.hxx"
      39             : #include "drawview.hxx"
      40             : #include "tabvwsh.hxx"
      41             : #include "drawpage.hxx"
      42             : #include "globstr.hrc"
      43             : #include "drwlayer.hxx"
      44             : #include "userdat.hxx"
      45             : #include "scmod.hxx"
      46             : #include "client.hxx"
      47             : #include "charthelper.hxx"
      48             : #include "docuno.hxx"
      49             : #include "docsh.hxx"
      50             : 
      51             : // -----------------------------------------------------------------------
      52             : 
      53             : //  Maximal erlaubte Mausbewegung um noch Drag&Drop zu starten
      54             : //! fusel,fuconstr,futext - zusammenfassen!
      55             : #define SC_MAXDRAGMOVE  3
      56             : 
      57             : // -----------------------------------------------------------------------
      58             : 
      59             : #ifdef _MSC_VER
      60             : #pragma optimize ( "", off )
      61             : #endif
      62             : 
      63             : using namespace com::sun::star;
      64             : 
      65             : /*************************************************************************
      66             : |*
      67             : |* Konstruktor
      68             : |*
      69             : \************************************************************************/
      70             : 
      71           0 : FuSelection::FuSelection(ScTabViewShell* pViewSh, Window* pWin, ScDrawView* pViewP,
      72             :                SdrModel* pDoc, SfxRequest& rReq ) :
      73             :     FuDraw(pViewSh, pWin, pViewP, pDoc, rReq),
      74           0 :     bVCAction(false)
      75             : {
      76           0 : }
      77             : 
      78             : /*************************************************************************
      79             : |*
      80             : |* Destruktor
      81             : |*
      82             : \************************************************************************/
      83             : 
      84           0 : FuSelection::~FuSelection()
      85             : {
      86           0 : }
      87             : 
      88           0 : sal_uInt8 FuSelection::Command(const CommandEvent& rCEvt)
      89             : {
      90             :     //  special code for non-VCL OS2/UNX removed
      91             : 
      92           0 :     return FuDraw::Command( rCEvt );
      93             : }
      94             : 
      95             : /*************************************************************************
      96             : |*
      97             : |* MouseButtonDown-event
      98             : |*
      99             : \************************************************************************/
     100             : 
     101           0 : sal_Bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt)
     102             : {
     103             :     // remember button state for creation of own MouseEvents
     104           0 :     SetMouseButtonCode(rMEvt.GetButtons());
     105           0 :     const bool bSelectionOnly = rMEvt.IsRight();
     106           0 :     if ( pView->IsAction() )
     107             :     {
     108           0 :         if ( bSelectionOnly )
     109           0 :             pView->BckAction();
     110           0 :         return sal_True;
     111             :     }
     112             : 
     113           0 :     bVCAction = false;
     114           0 :     bIsInDragMode = false;      //  irgendwo muss es ja zurueckgesetzt werden (#50033#)
     115             : 
     116           0 :     sal_Bool bReturn = FuDraw::MouseButtonDown(rMEvt);
     117             : 
     118           0 :     aMDPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() );
     119             : 
     120           0 :     if ( rMEvt.IsLeft() )
     121             :     {
     122           0 :         SdrHdl* pHdl = pView->PickHandle(aMDPos);
     123             :         SdrObject* pObj;
     124             :         SdrPageView* pPV;
     125             : 
     126           0 :         if ( pHdl!=NULL || pView->IsMarkedHit(aMDPos) )
     127             :         {
     128             :             // Determine if this is the tail of a SdrCaptionObj i.e.
     129             :             // we need to disable the drag option on the tail of a note
     130             :             // object. Also, disable the ability to use the circular
     131             :             // drag of a note object.
     132           0 :             bool bDrag = false;
     133           0 :             const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
     134           0 :             if( rMarkList.GetMarkCount() == 1 )
     135             :             {
     136           0 :                 SdrObject* pMarkedObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
     137           0 :                 if( ScDrawLayer::IsNoteCaption( pMarkedObj ) )
     138             :                 {
     139             :                     // move using the valid caption handles for note text box.
     140           0 :                     if(pHdl && (pHdl->GetKind() != HDL_POLY && pHdl->GetKind() != HDL_CIRC))
     141           0 :                         bDrag = true;
     142             :                     // move the complete note box.
     143           0 :                     else if(!pHdl)
     144           0 :                         bDrag = true;
     145             :                 }
     146             :                 else
     147           0 :                     bDrag = true;   // different object
     148             :             }
     149             :             else
     150           0 :                 bDrag = true;       // several objects
     151             : 
     152           0 :             if ( bDrag )
     153             :             {
     154           0 :                 aDragTimer.Start();
     155           0 :                 pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl);
     156           0 :                 bReturn = sal_True;
     157             :             }
     158             :         }
     159             :         else
     160             :         {
     161           0 :             sal_Bool bAlt = rMEvt.IsMod2();
     162           0 :             if ( !bAlt && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKMACRO) )
     163             :             {
     164           0 :                 pView->BegMacroObj(aMDPos, pObj, pPV, pWindow);
     165           0 :                 bReturn = sal_True;
     166             :             }
     167             :             else
     168             :             {
     169           0 :                 String sURL, sTarget;
     170           0 :                 if ( !bAlt && pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER))
     171             :                 {
     172             :                    // Support for imported Excel docs
     173             :                    // Excel is of course not consistent and allows
     174             :                    // a hyperlink to be assigned for an object group
     175             :                    // and even though the hyperlink is exported in the Escher layer
     176             :                    // its never used, when dealing with a group object the link
     177             :                    // associated with the clicked object is used only
     178             : 
     179             :                    // additionally you can also select a macro in Excel for a grouped
     180             :                    // objects and this *usually* results in the macro being set
     181             :                    // for the elements in the group and no macro is exported
     182             :                    // for the group itself ( this however is not always true )
     183             :                    // if a macro and hlink are defined favour the hlink
     184             :                    // If a group object has no hyperlink use the hyperlink of the
     185             :                    // object clicked
     186             : 
     187           0 :                    if ( pObj->IsGroupObject() )
     188             :                    {
     189           0 :                        ScMacroInfo* pTmpInfo = ScDrawLayer::GetMacroInfo( pObj );
     190           0 :                        if ( !pTmpInfo || pTmpInfo->GetMacro().isEmpty() )
     191             :                        {
     192           0 :                            SdrObject* pHit = NULL;
     193           0 :                            if ( pView->PickObj(aMDPos, pView->getHitTolLog(), pHit, pPV, SDRSEARCH_DEEP ) )
     194           0 :                                pObj = pHit;
     195             :                        }
     196             :                    }
     197             : 
     198           0 :                    ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( pObj, true );
     199             :                    // For interoperability favour links over macros if both are defined
     200           0 :                    if ( !pInfo->GetHlink().isEmpty() )
     201             :                    {
     202             :                        OSL_TRACE("** Got URL");
     203           0 :                        sURL = pInfo->GetHlink();
     204             :                    }
     205           0 :                    else if ( !pInfo->GetMacro().isEmpty() )
     206             :                    {
     207           0 :                        SfxObjectShell* pObjSh = SfxObjectShell::Current();
     208           0 :                        if ( pObjSh && SfxApplication::IsXScriptURL( pInfo->GetMacro() ) )
     209             :                        {
     210           0 :                            uno::Reference< beans::XPropertySet > xProps( pObj->getUnoShape(), uno::UNO_QUERY );
     211           0 :                            uno::Any aCaller;
     212           0 :                            if ( xProps.is() )
     213             :                            {
     214             :                                try
     215             :                                {
     216           0 :                                    aCaller = xProps->getPropertyValue( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")) );
     217             :                                }
     218           0 :                                catch( uno::Exception& ) {}
     219             :                            }
     220           0 :                            uno::Any aRet;
     221           0 :                            uno::Sequence< sal_Int16 > aOutArgsIndex;
     222           0 :                            uno::Sequence< uno::Any > aOutArgs;
     223             :                            uno::Sequence< uno::Any >* pInArgs =
     224           0 :                                new uno::Sequence< uno::Any >(0);
     225           0 :                            pObjSh->CallXScript( pInfo->GetMacro(),
     226           0 :                                *pInArgs, aRet, aOutArgsIndex, aOutArgs, true, &aCaller );
     227           0 :                            pViewShell->FakeButtonUp( pViewShell->GetViewData()->GetActivePart() );
     228           0 :                            return sal_True;        // kein CaptureMouse etc.
     229             :                        }
     230             :                    }
     231             :                 }
     232             : 
     233             :                 //  URL / ImageMap
     234             : 
     235           0 :                 SdrViewEvent aVEvt;
     236           0 :                 if ( !bAlt &&
     237           0 :                     pView->PickAnything( rMEvt, SDRMOUSEBUTTONDOWN, aVEvt ) != SDRHIT_NONE &&
     238             :                     aVEvt.pObj != NULL )
     239             :                 {
     240           0 :                     if ( ScDrawLayer::GetIMapInfo( aVEvt.pObj ) )       // ImageMap
     241             :                     {
     242             :                         const IMapObject* pIMapObj =
     243           0 :                                 ScDrawLayer::GetHitIMapObject( aVEvt.pObj, aMDPos, *pWindow );
     244           0 :                         if ( pIMapObj && pIMapObj->GetURL().Len() )
     245             :                         {
     246           0 :                             sURL = pIMapObj->GetURL();
     247           0 :                             sTarget = pIMapObj->GetTarget();
     248             :                         }
     249             :                     }
     250           0 :                     if ( aVEvt.eEvent == SDREVENT_EXECUTEURL && aVEvt.pURLField )   // URL
     251             :                     {
     252           0 :                         sURL = aVEvt.pURLField->GetURL();
     253           0 :                         sTarget = aVEvt.pURLField->GetTargetFrame();
     254             :                     }
     255             :                 }
     256             : 
     257             :                 // open hyperlink, if found at object or in object's text
     258           0 :                 if ( sURL.Len() > 0 )
     259             :                 {
     260           0 :                     ScGlobal::OpenURL( sURL, sTarget );
     261           0 :                     pViewShell->FakeButtonUp( pViewShell->GetViewData()->GetActivePart() );
     262           0 :                     return sal_True;        // kein CaptureMouse etc.
     263             :                 }
     264             : 
     265             :                 //  Is another object being edited in this view?
     266             :                 //  (Editing is ended in MarkListHasChanged - test before UnmarkAll)
     267           0 :                 SfxInPlaceClient* pClient = pViewShell->GetIPClient();
     268           0 :                 sal_Bool bWasOleActive = ( pClient && pClient->IsObjectInPlaceActive() );
     269             : 
     270             :                 //  Markieren
     271             : 
     272             :                 // do not allow multiselection with note caption
     273           0 :                 bool bCaptionClicked = IsNoteCaptionClicked( aMDPos );
     274           0 :                 if ( !rMEvt.IsShift() || bCaptionClicked || IsNoteCaptionMarked() )
     275           0 :                     pView->UnmarkAll();
     276             : 
     277             :                 /*  Unlock internal layer, if a note caption is clicked. The
     278             :                     layer will be relocked in ScDrawView::MarkListHasChanged(). */
     279           0 :                 if( bCaptionClicked )
     280           0 :                     pView->UnlockInternalLayer();
     281             : 
     282             :                 // try to select the clicked object
     283           0 :                 if ( pView->MarkObj( aMDPos, -2, false, rMEvt.IsMod1() ) )
     284             :                 {
     285             :                     //*********************************************************
     286             :                     //Objekt verschieben
     287             :                     //********************************************************
     288           0 :                     if (pView->IsMarkedHit(aMDPos))
     289             :                     {
     290             :                         //  Don't start drag timer if inplace editing of an OLE object
     291             :                         //  was just ended with this mouse click - the view will be moved
     292             :                         //  (different tool bars) and the object that was clicked on would
     293             :                         //  be moved unintentionally.
     294           0 :                         if ( !bWasOleActive )
     295           0 :                             aDragTimer.Start();
     296             : 
     297           0 :                         pHdl=pView->PickHandle(aMDPos);
     298           0 :                         pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl);
     299           0 :                         bReturn = sal_True;
     300             :                     }
     301             :                     else                                    // Objekt am Rand getroffen
     302           0 :                         if (pViewShell->IsDrawSelMode())
     303           0 :                             bReturn = sal_True;
     304             :                 }
     305             :                 else
     306             :                 {
     307             :                     //      nichts getroffen
     308             : 
     309           0 :                     if (pViewShell->IsDrawSelMode())
     310             :                     {
     311             :                         //*********************************************************
     312             :                         //Objekt selektieren
     313             :                         //********************************************************
     314           0 :                         pView->BegMarkObj(aMDPos);
     315           0 :                         bReturn = sal_True;
     316             :                     }
     317           0 :                 }
     318             :             }
     319             :         }
     320             : 
     321             :     }
     322             : 
     323           0 :     if (!bIsInDragMode)
     324             :     {
     325           0 :         if (!bVCAction)                 // VC rufen selber CaptureMouse
     326           0 :             pWindow->CaptureMouse();
     327           0 :         ForcePointer(&rMEvt);
     328             :     }
     329             : 
     330           0 :     return bReturn;
     331             : }
     332             : 
     333             : /*************************************************************************
     334             : |*
     335             : |* MouseMove-event
     336             : |*
     337             : \************************************************************************/
     338             : 
     339           0 : sal_Bool FuSelection::MouseMove(const MouseEvent& rMEvt)
     340             : {
     341           0 :     sal_Bool bReturn = FuDraw::MouseMove(rMEvt);
     342             : 
     343           0 :     if (aDragTimer.IsActive() )
     344             :     {
     345           0 :         Point aOldPixel = pWindow->LogicToPixel( aMDPos );
     346           0 :         Point aNewPixel = rMEvt.GetPosPixel();
     347           0 :         if ( Abs( aOldPixel.X() - aNewPixel.X() ) > SC_MAXDRAGMOVE ||
     348           0 :              Abs( aOldPixel.Y() - aNewPixel.Y() ) > SC_MAXDRAGMOVE )
     349           0 :             aDragTimer.Stop();
     350             :     }
     351             : 
     352           0 :     if ( pView->IsAction() )
     353             :     {
     354           0 :         Point aPix(rMEvt.GetPosPixel());
     355           0 :         Point aPnt(pWindow->PixelToLogic(aPix));
     356             : 
     357           0 :         ForceScroll(aPix);
     358           0 :         pView->MovAction(aPnt);
     359           0 :         bReturn = sal_True;
     360             :     }
     361             : 
     362             :     // Ein VCControl ist aktiv
     363             :     // Event an den Manager weiterleiten
     364           0 :     if( bVCAction )
     365             :     {
     366           0 :         bReturn = true;
     367             :     }
     368             : 
     369           0 :     ForcePointer(&rMEvt);
     370             : 
     371           0 :     return (bReturn);
     372             : }
     373             : 
     374             : /*************************************************************************
     375             : |*
     376             : |* MouseButtonUp-event
     377             : |*
     378             : \************************************************************************/
     379             : 
     380           0 : sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt)
     381             : {
     382             :     // remember button state for creation of own MouseEvents
     383           0 :     SetMouseButtonCode(rMEvt.GetButtons());
     384             : 
     385           0 :     sal_Bool bReturn = FuDraw::MouseButtonUp(rMEvt);
     386           0 :     sal_Bool bOle = pViewShell->GetViewFrame()->GetFrame().IsInPlace();
     387             : 
     388           0 :     if (aDragTimer.IsActive() )
     389             :     {
     390           0 :         aDragTimer.Stop();
     391             :     }
     392             : 
     393           0 :     Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
     394             : 
     395           0 :     bool bCopy = false;
     396           0 :     ScViewData* pViewData = ( pViewShell ? pViewShell->GetViewData() : NULL );
     397           0 :     ScDocument* pDocument = ( pViewData ? pViewData->GetDocument() : NULL );
     398           0 :     SdrPageView* pPageView = ( pView ? pView->GetSdrPageView() : NULL );
     399           0 :     SdrPage* pPage = ( pPageView ? pPageView->GetPage() : NULL );
     400           0 :     ::std::vector< ::rtl::OUString > aExcludedChartNames;
     401           0 :     ScRangeListVector aProtectedChartRangesVector;
     402             : 
     403           0 :     if ( rMEvt.IsLeft() )
     404             :     {
     405           0 :         if ( pView->IsDragObj() )
     406             :         {
     407             :             /******************************************************************
     408             :             * Objekt wurde verschoben
     409             :             ******************************************************************/
     410           0 :             if ( rMEvt.IsMod1() )
     411             :             {
     412           0 :                 if ( pPage )
     413             :                 {
     414           0 :                     ScChartHelper::GetChartNames( aExcludedChartNames, pPage );
     415             :                 }
     416           0 :                 if ( pView && pDocument )
     417             :                 {
     418           0 :                     const SdrMarkList& rSdrMarkList = pView->GetMarkedObjectList();
     419           0 :                     sal_uLong nMarkCount = rSdrMarkList.GetMarkCount();
     420           0 :                     for ( sal_uLong i = 0; i < nMarkCount; ++i )
     421             :                     {
     422           0 :                         SdrMark* pMark = rSdrMarkList.GetMark( i );
     423           0 :                         SdrObject* pObj = ( pMark ? pMark->GetMarkedSdrObj() : NULL );
     424           0 :                         if ( pObj )
     425             :                         {
     426           0 :                             ScChartHelper::AddRangesIfProtectedChart( aProtectedChartRangesVector, pDocument, pObj );
     427             :                         }
     428             :                     }
     429             :                 }
     430           0 :                 bCopy = true;
     431             :             }
     432             : 
     433           0 :             pView->EndDragObj( rMEvt.IsMod1() );
     434           0 :             pView->ForceMarkedToAnotherPage();
     435             : 
     436           0 :             const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
     437           0 :             if (rMarkList.GetMarkCount() == 1)
     438             :             {
     439           0 :                   SdrMark* pMark = rMarkList.GetMark(0);
     440           0 :                   SdrObject* pObj = pMark->GetMarkedSdrObj();
     441           0 :                   FuPoor* pPoor = pViewShell->GetViewData()->GetView()->GetDrawFuncPtr();
     442           0 :                   FuText* pText = static_cast<FuText*>(pPoor);
     443           0 :                 pText->StopDragMode(pObj );
     444             :             }
     445           0 :             bReturn = sal_True;
     446             :         }
     447           0 :         else if (pView->IsAction() )
     448             :         {
     449             :             // unlock internal layer to include note captions
     450           0 :             pView->UnlockInternalLayer();
     451           0 :             pView->EndAction();
     452           0 :             if ( pView->AreObjectsMarked() )
     453             :             {
     454           0 :                 bReturn = sal_True;
     455             : 
     456             :                 /*  if multi-selection contains a note caption object, remove
     457             :                     all other objects from selection. */
     458           0 :                 const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
     459           0 :                 sal_uLong nCount = rMarkList.GetMarkCount();
     460           0 :                 if( nCount > 1 )
     461             :                 {
     462           0 :                     bool bFound = false;
     463           0 :                     for( sal_uLong nIdx = 0; !bFound && (nIdx < nCount); ++nIdx )
     464             :                     {
     465           0 :                         SdrObject* pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj();
     466           0 :                         bFound = ScDrawLayer::IsNoteCaption( pObj );
     467           0 :                         if( bFound )
     468             :                         {
     469           0 :                             pView->UnMarkAll();
     470           0 :                             pView->MarkObj( pObj, pView->GetSdrPageView() );
     471             :                         }
     472             :                     }
     473             :                 }
     474             :             }
     475             :         }
     476             :     }
     477             : 
     478             :     /**************************************************************************
     479             :     * Ggf. OLE-Objekt beruecksichtigen
     480             :     **************************************************************************/
     481           0 :     SfxInPlaceClient* pIPClient = pViewShell->GetIPClient();
     482             : 
     483           0 :     if (pIPClient)
     484             :     {
     485           0 :         ScModule* pScMod = SC_MOD();
     486           0 :         bool bUnoRefDialog = pScMod->IsRefDialogOpen() && pScMod->GetCurRefDlgId() == WID_SIMPLE_REF;
     487             : 
     488           0 :         if ( pIPClient->IsObjectInPlaceActive() && !bUnoRefDialog )
     489           0 :             pIPClient->DeactivateObject();
     490             :     }
     491             : 
     492           0 :     sal_uInt16 nClicks = rMEvt.GetClicks();
     493           0 :     if ( nClicks == 2 && rMEvt.IsLeft() )
     494             :     {
     495           0 :         if ( pView->AreObjectsMarked() )
     496             :         {
     497           0 :             const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
     498           0 :             if (rMarkList.GetMarkCount() == 1)
     499             :             {
     500           0 :                 SdrMark* pMark = rMarkList.GetMark(0);
     501           0 :                 SdrObject* pObj = pMark->GetMarkedSdrObj();
     502             : 
     503             :                 //  aktivieren nur, wenn die Maus auch (noch) ueber dem
     504             :                 //  selektierten Objekt steht
     505             : 
     506           0 :                 SdrViewEvent aVEvt;
     507           0 :                 SdrHitKind eHit = pView->PickAnything( rMEvt, SDRMOUSEBUTTONDOWN, aVEvt );
     508           0 :                 if ( eHit != SDRHIT_NONE && aVEvt.pObj == pObj )
     509             :                 {
     510           0 :                     sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier();
     511             : 
     512             :                     //
     513             :                     //  OLE: aktivieren
     514             :                     //
     515             : 
     516           0 :                     if (nSdrObjKind == OBJ_OLE2)
     517             :                     {
     518           0 :                         if (!bOle)
     519             :                         {
     520           0 :                             if (((SdrOle2Obj*) pObj)->GetObjRef().is())
     521             :                             {
     522           0 :                                 pViewShell->ActivateObject( (SdrOle2Obj*) pObj, 0 );
     523             :                             }
     524             :                         }
     525             :                     }
     526             : 
     527             :                     //
     528             :                     //  Edit text
     529             :                     //  not in UNO controls
     530             :                     //  #i32352# not in media objects
     531             :                     //
     532           0 :                     else if ( pObj->ISA(SdrTextObj) && !pObj->ISA(SdrUnoObj) && !pObj->ISA(SdrMediaObj) )
     533             :                     {
     534           0 :                         OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject();
     535           0 :                         sal_Bool bVertical = ( pOPO && pOPO->IsVertical() );
     536           0 :                         sal_uInt16 nTextSlotId = bVertical ? SID_DRAW_TEXT_VERTICAL : SID_DRAW_TEXT;
     537             : 
     538           0 :                         pViewShell->GetViewData()->GetDispatcher().
     539           0 :                             Execute(nTextSlotId, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD);
     540             : 
     541             :                         // jetzt den erzeugten FuText holen und in den EditModus setzen
     542           0 :                         FuPoor* pPoor = pViewShell->GetViewData()->GetView()->GetDrawFuncPtr();
     543           0 :                         if ( pPoor && pPoor->GetSlotID() == nTextSlotId )    // hat keine RTTI
     544             :                         {
     545           0 :                             FuText* pText = (FuText*)pPoor;
     546           0 :                             Point aMousePixel = rMEvt.GetPosPixel();
     547           0 :                             pText->SetInEditMode( pObj, &aMousePixel );
     548             :                         }
     549           0 :                         bReturn = sal_True;
     550             :                     }
     551           0 :                 }
     552             :             }
     553             :         }
     554           0 :         else if ( TestDetective( pView->GetSdrPageView(), aPnt ) )
     555           0 :             bReturn = sal_True;
     556             :     }
     557             : 
     558             :     // Ein VCControl ist aktiv
     559             :     // Event an den Manager weiterleiten
     560           0 :     if( bVCAction )
     561             :     {
     562           0 :         bVCAction = false;
     563           0 :         bReturn = true;
     564             :     }
     565             : 
     566           0 :     ForcePointer(&rMEvt);
     567             : 
     568           0 :     pWindow->ReleaseMouse();
     569             : 
     570             :     //  Command-Handler fuer Kontext-Menue kommt erst nach MouseButtonUp,
     571             :     //  darum hier die harte IsLeft-Abfrage
     572           0 :     if ( !bReturn && rMEvt.IsLeft() )
     573           0 :         if (pViewShell->IsDrawSelMode())
     574           0 :             pViewShell->GetViewData()->GetDispatcher().
     575           0 :                 Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD);
     576             : 
     577           0 :     if ( bCopy && pViewData && pDocument && pPage )
     578             :     {
     579           0 :         ScDocShell* pDocShell = pViewData->GetDocShell();
     580           0 :         ScModelObj* pModelObj = ( pDocShell ? ScModelObj::getImplementation( pDocShell->GetModel() ) : NULL );
     581           0 :         if ( pModelObj )
     582             :         {
     583           0 :             SCTAB nTab = pViewData->GetTabNo();
     584             :             ScChartHelper::CreateProtectedChartListenersAndNotify( pDocument, pPage, pModelObj, nTab,
     585           0 :                 aProtectedChartRangesVector, aExcludedChartNames );
     586             :         }
     587             :     }
     588             : 
     589           0 :     return (bReturn);
     590             : }
     591             : 
     592             : /*************************************************************************
     593             : |*
     594             : |* Tastaturereignisse bearbeiten
     595             : |*
     596             : |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
     597             : |* FALSE.
     598             : |*
     599             : \************************************************************************/
     600             : 
     601           0 : sal_Bool FuSelection::KeyInput(const KeyEvent& rKEvt)
     602             : {
     603           0 :     sal_Bool bReturn = false;
     604             : 
     605           0 :     if (!bReturn)
     606             :     {
     607           0 :         bReturn = FuDraw::KeyInput(rKEvt);
     608             :     }
     609             : 
     610           0 :     return(bReturn);
     611             : }
     612             : 
     613             : 
     614             : /*************************************************************************
     615             : |*
     616             : |* Function aktivieren
     617             : |*
     618             : \************************************************************************/
     619             : 
     620           0 : void FuSelection::Activate()
     621             : {
     622           0 :     FuDraw::Activate();
     623           0 : }
     624             : 
     625             : /*************************************************************************
     626             : |*
     627             : |* Function deaktivieren
     628             : |*
     629             : \************************************************************************/
     630             : 
     631           0 : void FuSelection::Deactivate()
     632             : {
     633             :     /**************************************************************************
     634             :     * Hide Cursor
     635             :     **************************************************************************/
     636           0 :     FuDraw::Deactivate();
     637          15 : }
     638             : 
     639             : 
     640             : #ifdef _MSC_VER
     641             : #pragma optimize ( "", on )
     642             : #endif
     643             : 
     644             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10