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

Generated by: LCOV version 1.10