LCOV - code coverage report
Current view: top level - sc/source/ui/drawfunc - fupoor.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 16 119 13.4 %
Date: 2014-11-03 Functions: 5 26 19.2 %
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 <editeng/outliner.hxx>
      21             : #include <svx/svditer.hxx>
      22             : #include <svx/svdobj.hxx>
      23             : #include <svx/svdpagv.hxx>
      24             : 
      25             : #include "fupoor.hxx"
      26             : #include "tabvwsh.hxx"
      27             : #include "drawview.hxx"
      28             : #include "detfunc.hxx"
      29             : #include "document.hxx"
      30             : #include <vcl/svapp.hxx>
      31             : #include <svx/sdrhittesthelper.hxx>
      32             : 
      33         546 : FuPoor::FuPoor(ScTabViewShell* pViewSh, vcl::Window* pWin, ScDrawView* pViewP,
      34             :                SdrModel* pDoc, SfxRequest& rReq) :
      35             :     pView(pViewP),
      36             :     pViewShell(pViewSh),
      37             :     pWindow(pWin),
      38             :     pDrDoc(pDoc),
      39             :     aSfxRequest(rReq),
      40             :     pDialog(NULL),
      41             :     bIsInDragMode(false),
      42             :     // remember MouseButton state
      43         546 :     mnCode(0)
      44             : {
      45         546 :     aScrollTimer.SetTimeoutHdl( LINK(this, FuPoor, ScrollHdl) );
      46         546 :     aScrollTimer.SetTimeout(SELENG_AUTOREPEAT_INTERVAL);
      47             : 
      48         546 :     aDragTimer.SetTimeoutHdl( LINK(this, FuPoor, DragTimerHdl) );
      49         546 :     aDragTimer.SetTimeout(SELENG_DRAGDROP_TIMEOUT);
      50         546 : }
      51             : 
      52        1092 : FuPoor::~FuPoor()
      53             : {
      54         546 :     aDragTimer.Stop();
      55         546 :     aScrollTimer.Stop();
      56             : 
      57         546 :     delete pDialog;
      58         546 : }
      59             : 
      60           0 : void FuPoor::Activate()
      61             : {
      62           0 :     if (pDialog)
      63             :     {
      64           0 :         pDialog->Show();
      65             :     }
      66           0 : }
      67             : 
      68           0 : void FuPoor::Deactivate()
      69             : {
      70           0 :     aDragTimer.Stop();
      71           0 :     aScrollTimer.Stop();
      72             : 
      73           0 :     if (pDialog)
      74             :     {
      75           0 :         pDialog->Hide();
      76             :     }
      77           0 : }
      78             : 
      79             : /*************************************************************************
      80             : |*
      81             : |* Scrollen bei Erreichen des Fensterrandes; wird von
      82             : |* MouseMove aufgerufen
      83             : |*
      84             : \************************************************************************/
      85             : 
      86           0 : void FuPoor::ForceScroll(const Point& aPixPos)
      87             : {
      88           0 :     aScrollTimer.Stop();
      89             : 
      90           0 :     Size aSize = pWindow->GetSizePixel();
      91           0 :     SCsCOL dx = 0;
      92           0 :     SCsROW dy = 0;
      93             : 
      94           0 :     if ( aPixPos.X() <= 0              ) dx = -1;
      95           0 :     if ( aPixPos.X() >= aSize.Width()  ) dx =  1;
      96           0 :     if ( aPixPos.Y() <= 0              ) dy = -1;
      97           0 :     if ( aPixPos.Y() >= aSize.Height() ) dy =  1;
      98             : 
      99           0 :     ScViewData& rViewData = pViewShell->GetViewData();
     100           0 :     if ( rViewData.GetDocument()->IsNegativePage( rViewData.GetTabNo() ) )
     101           0 :         dx = -dx;
     102             : 
     103           0 :     ScSplitPos eWhich = rViewData.GetActivePart();
     104           0 :     if ( dx > 0 && rViewData.GetHSplitMode() == SC_SPLIT_FIX && WhichH(eWhich) == SC_SPLIT_LEFT )
     105             :     {
     106             :         pViewShell->ActivatePart( ( eWhich == SC_SPLIT_TOPLEFT ) ?
     107           0 :                         SC_SPLIT_TOPRIGHT : SC_SPLIT_BOTTOMRIGHT );
     108           0 :         dx = 0;
     109             :     }
     110           0 :     if ( dy > 0 && rViewData.GetVSplitMode() == SC_SPLIT_FIX && WhichV(eWhich) == SC_SPLIT_TOP )
     111             :     {
     112             :         pViewShell->ActivatePart( ( eWhich == SC_SPLIT_TOPLEFT ) ?
     113           0 :                         SC_SPLIT_BOTTOMLEFT : SC_SPLIT_BOTTOMRIGHT );
     114           0 :         dy = 0;
     115             :     }
     116             : 
     117           0 :     if ( dx != 0 || dy != 0 )
     118             :     {
     119           0 :         pViewShell->ScrollLines(2*dx, 4*dy);
     120           0 :         aScrollTimer.Start();
     121             :     }
     122           0 : }
     123             : 
     124             : /*************************************************************************
     125             : |*
     126             : |* Timer-Handler fuer Fensterscrolling
     127             : |*
     128             : \************************************************************************/
     129             : 
     130           0 : IMPL_LINK_NOARG_INLINE_START(FuPoor, ScrollHdl)
     131             : {
     132           0 :     Point aPosPixel = pWindow->GetPointerPosPixel();
     133             : 
     134             :     // use remembered MouseButton state to create correct
     135             :     // MouseEvents for this artificial MouseMove.
     136           0 :     MouseMove(MouseEvent(aPosPixel, 1, 0, GetMouseButtonCode()));
     137             : 
     138           0 :     return 0;
     139             : }
     140           0 : IMPL_LINK_INLINE_END( FuPoor, ScrollHdl, Timer *, pTimer )
     141             : 
     142             : // moved from inline to *.cxx
     143           0 : bool FuPoor::MouseButtonUp(const MouseEvent& rMEvt)
     144             : {
     145             :     // remember button state for creation of own MouseEvents
     146           0 :     SetMouseButtonCode(rMEvt.GetButtons());
     147             : 
     148           0 :     return false;
     149             : }
     150             : 
     151             : // moved from inline to *.cxx
     152           0 : bool FuPoor::MouseButtonDown(const MouseEvent& rMEvt)
     153             : {
     154             :     // remember button state for creation of own MouseEvents
     155           0 :     SetMouseButtonCode(rMEvt.GetButtons());
     156             : 
     157           0 :     return false;
     158             : }
     159             : 
     160             : /*************************************************************************
     161             : |*
     162             : |* String in Applikations-Statuszeile ausgeben
     163             : |*
     164             : \************************************************************************/
     165             : 
     166             : //  WriteStatus gibt's nicht mehr
     167             : 
     168             : /*************************************************************************
     169             : |*
     170             : |* Tastaturereignisse bearbeiten
     171             : |*
     172             : |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
     173             : |* FALSE.
     174             : |*
     175             : \************************************************************************/
     176             : 
     177           0 : bool FuPoor::KeyInput(const KeyEvent& /* rKEvt */)
     178             : {
     179           0 :     return false;
     180             : }
     181             : 
     182           0 : sal_uInt8 FuPoor::Command(const CommandEvent& rCEvt)
     183             : {
     184           0 :     if ( COMMAND_STARTDRAG == rCEvt.GetCommand() )
     185             :     {
     186             :         //!!! sollte Joe eigentlich machen:
     187             :         // nur, wenn im Outliner was selektiert ist, darf
     188             :         // Command sal_True zurueckliefern:
     189             : 
     190           0 :         OutlinerView* pOutView = pView->GetTextEditOutlinerView();
     191             : 
     192           0 :         if ( pOutView )
     193           0 :             return pOutView->HasSelection() ? (pView->Command(rCEvt,pWindow) ? 1 : 0) : SC_CMD_NONE;
     194             :         else
     195           0 :             return pView->Command(rCEvt,pWindow);
     196             :     }
     197             :     else
     198           0 :         return pView->Command(rCEvt,pWindow);
     199             : }
     200             : 
     201           0 : void FuPoor::DoCut()
     202             : {
     203           0 :     if (pView)
     204             :     {
     205             : //!     pView->DoCut(pWindow);
     206             :     }
     207           0 : }
     208             : 
     209             : /*************************************************************************
     210             : |*
     211             : |* Copy object to clipboard
     212             : |*
     213             : \************************************************************************/
     214             : 
     215           0 : void FuPoor::DoCopy()
     216             : {
     217           0 :     if (pView)
     218             :     {
     219             : //!     pView->DoCopy(pWindow);
     220             :     }
     221           0 : }
     222             : 
     223           0 : void FuPoor::DoPaste()
     224             : {
     225           0 :     if (pView)
     226             :     {
     227             : //!     pView->DoPaste(pWindow);
     228             :     }
     229           0 : }
     230             : 
     231             : /*************************************************************************
     232             : |*
     233             : |* Timer-Handler fuer Drag&Drop
     234             : |*
     235             : \************************************************************************/
     236             : 
     237           0 : IMPL_LINK_NOARG(FuPoor, DragTimerHdl)
     238             : {
     239             :     //  ExecuteDrag (und das damit verbundene Reschedule) direkt aus dem Timer
     240             :     //  aufzurufen, bringt die VCL-Timer-Verwaltung durcheinander, wenn dabei
     241             :     //  (z.B. im Drop) wieder ein Timer gestartet wird (z.B. ComeBack-Timer der
     242             :     //  DrawView fuer Solid Handles / ModelHasChanged) - der neue Timer laeuft
     243             :     //  dann um die Dauer des Drag&Drop zu spaet ab.
     244             :     //  Darum Drag&Drop aus eigenem Event:
     245             : 
     246           0 :     Application::PostUserEvent( LINK( this, FuPoor, DragHdl ) );
     247           0 :     return 0;
     248             : }
     249             : 
     250           0 : IMPL_LINK_NOARG(FuPoor, DragHdl)
     251             : {
     252           0 :     SdrHdl* pHdl = pView->PickHandle(aMDPos);
     253             : 
     254           0 :     if ( pHdl==NULL && pView->IsMarkedHit(aMDPos) )
     255             :     {
     256           0 :         pWindow->ReleaseMouse();
     257           0 :         bIsInDragMode = true;
     258             : 
     259             : //      pView->BeginDrag(pWindow, aMDPos);
     260           0 :         pViewShell->GetScDrawView()->BeginDrag(pWindow, aMDPos);
     261             :     }
     262           0 :     return 0;
     263             : }
     264             : 
     265             : //  Detektiv-Linie
     266             : 
     267           0 : bool FuPoor::IsDetectiveHit( const Point& rLogicPos )
     268             : {
     269           0 :     SdrPageView* pPV = pView->GetSdrPageView();
     270           0 :     if (!pPV)
     271           0 :         return false;
     272             : 
     273           0 :     bool bFound = false;
     274           0 :     SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT );
     275           0 :     SdrObject* pObject = aIter.Next();
     276           0 :     while (pObject && !bFound)
     277             :     {
     278           0 :         if (ScDetectiveFunc::IsNonAlienArrow( pObject ))
     279             :         {
     280             :             sal_uInt16 nHitLog = (sal_uInt16) pWindow->PixelToLogic(
     281           0 :                                 Size(pView->GetHitTolerancePixel(),0)).Width();
     282           0 :             if(SdrObjectPrimitiveHit(*pObject, rLogicPos, nHitLog, *pPV, 0, false))
     283             :             {
     284           0 :                 bFound = true;
     285             :             }
     286             :         }
     287             : 
     288           0 :         pObject = aIter.Next();
     289             :     }
     290           0 :     return bFound;
     291             : }
     292             : 
     293        1104 : void FuPoor::StopDragTimer()
     294             : {
     295        1104 :     if (aDragTimer.IsActive() )
     296           0 :         aDragTimer.Stop();
     297        1104 : }
     298             : 
     299             : /*************************************************************************
     300             : |*
     301             : |* Create default drawing objects via keyboard
     302             : |*
     303             : \************************************************************************/
     304             : 
     305           0 : SdrObject* FuPoor::CreateDefaultObject(const sal_uInt16 /* nID */, const Rectangle& /* rRectangle */)
     306             : {
     307             :     // empty base implementation
     308           0 :     return 0L;
     309             : }
     310             : 
     311           0 : void FuPoor::ImpForceQuadratic(Rectangle& rRect)
     312             : {
     313           0 :     if(rRect.GetWidth() > rRect.GetHeight())
     314             :     {
     315             :         rRect = Rectangle(
     316           0 :             Point(rRect.Left() + ((rRect.GetWidth() - rRect.GetHeight()) / 2), rRect.Top()),
     317           0 :             Size(rRect.GetHeight(), rRect.GetHeight()));
     318             :     }
     319             :     else
     320             :     {
     321             :         rRect = Rectangle(
     322           0 :             Point(rRect.Left(), rRect.Top() + ((rRect.GetHeight() - rRect.GetWidth()) / 2)),
     323           0 :             Size(rRect.GetWidth(), rRect.GetWidth()));
     324             :     }
     325           0 : }
     326             : 
     327             : // #i33136#
     328           0 : bool FuPoor::doConstructOrthogonal() const
     329             : {
     330             :     // Check whether an image is selected -> they should scale proportionally
     331           0 :     if (pView->AreObjectsMarked())
     332             :     {
     333           0 :         const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
     334           0 :         if (rMarkList.GetMarkCount() == 1)
     335             :         {
     336           0 :             if (rMarkList.GetMark(0)->GetMarkedSdrObj()->GetObjIdentifier() == OBJ_GRAF)
     337           0 :                 return true;
     338             :         }
     339             :     }
     340           0 :     return false;
     341         228 : }
     342             : 
     343             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10