LCOV - code coverage report
Current view: top level - sd/source/ui/func - fupoor.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 474 0.0 %
Date: 2014-04-14 Functions: 0 37 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "fupoor.hxx"
      21             : 
      22             : #include <svx/svxids.hrc>
      23             : #include <svl/aeitem.hxx>
      24             : #include <svx/svdpagv.hxx>
      25             : #include <svx/svdoole2.hxx>
      26             : #include <svx/svdograf.hxx>
      27             : #include <vcl/seleng.hxx>
      28             : #include <sfx2/app.hxx>
      29             : #include <sfx2/dispatch.hxx>
      30             : #include <sfx2/bindings.hxx>
      31             : #include <sfx2/request.hxx>
      32             : #include <vcl/dialog.hxx>
      33             : #include <com/sun/star/beans/XPropertySet.hpp>
      34             : #include <com/sun/star/drawing/XLayer.hpp>
      35             : #include <com/sun/star/drawing/XLayerManager.hpp>
      36             : #include <com/sun/star/container/XChild.hpp>
      37             : 
      38             : #include "FrameView.hxx"
      39             : #include "app.hrc"
      40             : #include "fusel.hxx"
      41             : #include "sdpage.hxx"
      42             : #include "drawview.hxx"
      43             : #include "DrawViewShell.hxx"
      44             : #include "Window.hxx"
      45             : #include "drawdoc.hxx"
      46             : #include "DrawDocShell.hxx"
      47             : #include "zoomlist.hxx"
      48             : #include "Client.hxx"
      49             : #include "slideshow.hxx"
      50             : #include "LayerTabBar.hxx"
      51             : 
      52             : #include <sfx2/viewfrm.hxx>
      53             : 
      54             : #include <svx/svditer.hxx>
      55             : 
      56             : #include <editeng/editeng.hxx>
      57             : 
      58             : using namespace ::com::sun::star;
      59             : using ::com::sun::star::uno::Reference;
      60             : 
      61             : namespace sd {
      62             : 
      63           0 : TYPEINIT0( FuPoor );
      64             : 
      65             : 
      66           0 : FuPoor::FuPoor (
      67             :     ViewShell* pViewSh,
      68             :     ::sd::Window* pWin,
      69             :     ::sd::View* pView,
      70             :     SdDrawDocument* pDrDoc,
      71             :     SfxRequest& rReq)
      72             :     : mpView(pView),
      73             :       mpViewShell(pViewSh),
      74             :       mpWindow(pWin),
      75           0 :       mpDocSh( pDrDoc->GetDocSh() ),
      76             :       mpDoc(pDrDoc),
      77           0 :       nSlotId( rReq.GetSlot() ),
      78             :       nSlotValue(0),
      79             :       pDialog(NULL),
      80             :       bIsInDragMode(sal_False),
      81             :       bNoScrollUntilInside (sal_True),
      82             :       bScrollable (sal_False),
      83             :       bDelayActive (sal_False),
      84             :       bFirstMouseMove (sal_False),
      85             :       // remember MouseButton state
      86           0 :       mnCode(0)
      87             : {
      88           0 :     ReceiveRequest(rReq);
      89             : 
      90           0 :     aScrollTimer.SetTimeoutHdl( LINK(this, FuPoor, ScrollHdl) );
      91           0 :     aScrollTimer.SetTimeout(SELENG_AUTOREPEAT_INTERVAL);
      92             : 
      93           0 :     aDragTimer.SetTimeoutHdl( LINK(this, FuPoor, DragHdl) );
      94           0 :     aDragTimer.SetTimeout(SELENG_DRAGDROP_TIMEOUT);
      95             : 
      96           0 :     aDelayToScrollTimer.SetTimeoutHdl( LINK(this, FuPoor, DelayHdl) );
      97           0 :     aDelayToScrollTimer.SetTimeout(2000);
      98           0 : }
      99             : 
     100             : 
     101           0 : FuPoor::~FuPoor()
     102             : {
     103           0 :     aDragTimer.Stop();
     104           0 :     aScrollTimer.Stop();
     105           0 :     aDelayToScrollTimer.Stop ();
     106             : 
     107           0 :     if (pDialog)
     108           0 :         delete pDialog;
     109           0 : }
     110             : 
     111             : 
     112           0 : void FuPoor::Activate()
     113             : {
     114           0 :     if (pDialog)
     115             :     {
     116           0 :         pDialog->Show();
     117             :     }
     118           0 : }
     119             : 
     120             : 
     121           0 : void FuPoor::Deactivate()
     122             : {
     123           0 :     aDragTimer.Stop();
     124           0 :     aScrollTimer.Stop();
     125           0 :     aDelayToScrollTimer.Stop ();
     126             :         bScrollable  =
     127           0 :         bDelayActive = sal_False;
     128             : 
     129           0 :     if (pDialog)
     130             :     {
     131           0 :         pDialog->Hide();
     132             :     }
     133             : 
     134           0 :     if (mpWindow) mpWindow->ReleaseMouse ();
     135           0 : }
     136             : 
     137             : /**
     138             :  * scroll when approached the border of the window; is called by MouseMove
     139             :  */
     140           0 : void FuPoor::ForceScroll(const Point& aPixPos)
     141             : {
     142           0 :     aScrollTimer.Stop();
     143             : 
     144           0 :     if ( !mpView->IsDragHelpLine() && !mpView->IsSetPageOrg() &&
     145           0 :             !SlideShow::IsRunning( mpViewShell->GetViewShellBase() ) )
     146             :     {
     147           0 :         Point aPos = mpWindow->OutputToScreenPixel(aPixPos);
     148           0 :         const Rectangle& rRect = mpViewShell->GetAllWindowRect();
     149             : 
     150           0 :         if ( bNoScrollUntilInside )
     151             :         {
     152           0 :             if ( rRect.IsInside(aPos) )
     153           0 :                 bNoScrollUntilInside = sal_False;
     154             :         }
     155             :         else
     156             :         {
     157           0 :             short dx = 0, dy = 0;
     158             : 
     159           0 :             if ( aPos.X() <= rRect.Left()   ) dx = -1;
     160           0 :             if ( aPos.X() >= rRect.Right()  ) dx =  1;
     161           0 :             if ( aPos.Y() <= rRect.Top()    ) dy = -1;
     162           0 :             if ( aPos.Y() >= rRect.Bottom() ) dy =  1;
     163             : 
     164           0 :             if ( dx != 0 || dy != 0 )
     165             :             {
     166           0 :                 if (bScrollable)
     167             :                 {
     168             :                     // scroll action in derived class
     169           0 :                     mpViewShell->ScrollLines(dx, dy);
     170           0 :                     aScrollTimer.Start();
     171             :                 }
     172           0 :                 else if (! bDelayActive) StartDelayToScrollTimer ();
     173             :             }
     174             :         }
     175             :     }
     176           0 : }
     177             : 
     178             : /**
     179             :  * timer handler for window scrolling
     180             :  */
     181           0 : IMPL_LINK_NOARG_INLINE_START(FuPoor, ScrollHdl)
     182             : {
     183           0 :     Point aPnt(mpWindow->GetPointerPosPixel());
     184             : 
     185             :     // use remembered MouseButton state to create correct
     186             :     // MouseEvents for this artifical MouseMove.
     187           0 :     MouseMove(MouseEvent(aPnt, 1, 0, GetMouseButtonCode()));
     188             : 
     189           0 :     return 0;
     190             : }
     191           0 : IMPL_LINK_INLINE_END( FuPoor, ScrollHdl, Timer *, pTimer )
     192             : 
     193             : /**
     194             :  * handle keyboard events
     195             :  * @returns sal_True if the event was handled, sal_False otherwise
     196             :  */
     197           0 : sal_Bool FuPoor::KeyInput(const KeyEvent& rKEvt)
     198             : {
     199           0 :     sal_uInt16          nCode = rKEvt.GetKeyCode().GetCode();
     200           0 :     sal_Bool            bReturn = sal_False;
     201           0 :     sal_Bool            bSlideShow = SlideShow::IsRunning( mpViewShell->GetViewShellBase() );
     202             : 
     203           0 :     switch (nCode)
     204             :     {
     205             :         case KEY_RETURN:
     206             :         {
     207           0 :             if(rKEvt.GetKeyCode().IsMod1())
     208             :             {
     209           0 :                 if(mpViewShell && mpViewShell->ISA(DrawViewShell))
     210             :                 {
     211             :                     DrawViewShell* pDrawViewShell =
     212           0 :                         static_cast<DrawViewShell*>(mpViewShell);
     213           0 :                     SdPage* pActualPage = pDrawViewShell->GetActualPage();
     214           0 :                     SdrTextObj* pCandidate = 0L;
     215             : 
     216           0 :                     if(pActualPage)
     217             :                     {
     218           0 :                         SdrObjListIter aIter(*pActualPage, IM_DEEPNOGROUPS);
     219             : 
     220           0 :                         while(aIter.IsMore() && !pCandidate)
     221             :                         {
     222           0 :                             SdrObject* pObj = aIter.Next();
     223             : 
     224           0 :                             if(pObj && pObj->ISA(SdrTextObj))
     225             :                             {
     226           0 :                                 sal_uInt32 nInv(pObj->GetObjInventor());
     227           0 :                                 sal_uInt16 nKnd(pObj->GetObjIdentifier());
     228             : 
     229           0 :                                 if(SdrInventor == nInv &&
     230           0 :                                     (OBJ_TITLETEXT == nKnd || OBJ_OUTLINETEXT == nKnd || OBJ_TEXT == nKnd))
     231             :                                 {
     232           0 :                                     pCandidate = (SdrTextObj*)pObj;
     233             :                                 }
     234             :                             }
     235           0 :                         }
     236             :                     }
     237             : 
     238           0 :                     if(pCandidate)
     239             :                     {
     240           0 :                         mpView->UnMarkAll();
     241           0 :                         mpView->MarkObj(pCandidate, mpView->GetSdrPageView());
     242             : 
     243             :                         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(
     244           0 :                             SID_ATTR_CHAR, SFX_CALLMODE_ASYNCHRON);
     245             :                     }
     246             :                     else
     247             :                     {
     248             :                         // insert a new page with the same page layout
     249             :                         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(
     250           0 :                             SID_INSERTPAGE_QUICK, SFX_CALLMODE_ASYNCHRON);
     251             :                     }
     252             : 
     253             :                     // consumed
     254           0 :                     bReturn = sal_True;
     255             :                 }
     256             :             }
     257             :             else
     258             :             {
     259             :                 // activate OLE object on RETURN for selected object
     260             :                 // activate text edit on RETURN for selected object
     261           0 :                 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
     262             : 
     263           0 :                 if( !mpView->IsTextEdit() && 1 == rMarkList.GetMarkCount() )
     264             :                 {
     265           0 :                     SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
     266             : 
     267           0 :                     if( pObj && pObj->ISA( SdrOle2Obj ) && !mpDocSh->IsUIActive() )
     268             :                     {
     269             :                         //HMHmpView->HideMarkHdl();
     270           0 :                         mpViewShell->ActivateObject( static_cast< SdrOle2Obj* >( pObj ), 0 );
     271             :                     }
     272           0 :                     else if( pObj && pObj->IsEmptyPresObj() && pObj->ISA( SdrGrafObj ) )
     273             :                     {
     274           0 :                         mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_INSERT_GRAPHIC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
     275             :                     }
     276             :                     else
     277             :                     {
     278           0 :                         mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_ATTR_CHAR, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
     279             :                     }
     280             : 
     281             :                     // consumed
     282           0 :                     bReturn = sal_True;
     283             :                 }
     284             :             }
     285             :         }
     286           0 :         break;
     287             : 
     288             :         case KEY_TAB:
     289             :         {
     290             :             // handle Mod1 and Mod2 to get travelling running on different systems
     291           0 :             if(rKEvt.GetKeyCode().IsMod1() || rKEvt.GetKeyCode().IsMod2())
     292             :             {
     293             :                 // do something with a selected handle?
     294           0 :                 const SdrHdlList& rHdlList = mpView->GetHdlList();
     295           0 :                 sal_Bool bForward(!rKEvt.GetKeyCode().IsShift());
     296             : 
     297           0 :                 ((SdrHdlList&)rHdlList).TravelFocusHdl(bForward);
     298             : 
     299             :                 // guarantee visibility of focused handle
     300           0 :                 SdrHdl* pHdl = rHdlList.GetFocusHdl();
     301             : 
     302           0 :                 if(pHdl)
     303             :                 {
     304           0 :                     Point aHdlPosition(pHdl->GetPos());
     305           0 :                     Rectangle aVisRect(aHdlPosition - Point(100, 100), Size(200, 200));
     306           0 :                     mpView->MakeVisible(aVisRect, *mpWindow);
     307             :                 }
     308             : 
     309             :                 // consumed
     310           0 :                 bReturn = sal_True;
     311             :             }
     312             :         }
     313           0 :         break;
     314             : 
     315             :         case KEY_ESCAPE:
     316             :         {
     317           0 :             bReturn = FuPoor::cancel();
     318             :         }
     319           0 :         break;
     320             : 
     321             :         case KEY_ADD:
     322             :         {
     323           0 :             if (!mpView->IsTextEdit() && !bSlideShow && !mpDocSh->IsUIActive())
     324             :             {
     325             :                 // increase zoom
     326           0 :                 mpViewShell->SetZoom(mpWindow->GetZoom() * 3 / 2);
     327             : 
     328           0 :                 if (mpViewShell->ISA(DrawViewShell))
     329             :                     static_cast<DrawViewShell*>(mpViewShell)
     330           0 :                         ->SetZoomOnPage(sal_False);
     331             : 
     332           0 :                 bReturn = sal_True;
     333             :             }
     334             :         }
     335           0 :         break;
     336             : 
     337             :         case KEY_SUBTRACT:
     338             :         {
     339           0 :             if (!mpView->IsTextEdit() && !bSlideShow && !mpDocSh->IsUIActive())
     340             :             {
     341             :                 // decrease zoom
     342           0 :                 mpViewShell->SetZoom(mpWindow->GetZoom() * 2 / 3);
     343             : 
     344           0 :                 if (mpViewShell->ISA(DrawViewShell))
     345             :                     static_cast<DrawViewShell*>(mpViewShell)
     346           0 :                         ->SetZoomOnPage(sal_False);
     347             : 
     348           0 :                 bReturn = sal_True;
     349             :             }
     350             :         }
     351           0 :         break;
     352             : 
     353             :         case KEY_MULTIPLY:
     354             :         {
     355           0 :             if (!mpView->IsTextEdit() && !bSlideShow)
     356             :             {
     357             :                 // zoom to page
     358             :                 mpViewShell->GetViewFrame()->GetDispatcher()->
     359           0 :                 Execute(SID_SIZE_PAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
     360           0 :                 bReturn = sal_True;
     361             :             }
     362             :         }
     363           0 :         break;
     364             : 
     365             :         case KEY_DIVIDE:
     366             :         {
     367           0 :             if (!mpView->IsTextEdit() && !bSlideShow)
     368             :             {
     369             :                 // zoom to selected objects
     370             :                 mpViewShell->GetViewFrame()->GetDispatcher()->
     371           0 :                 Execute(SID_SIZE_OPTIMAL, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
     372           0 :                 bReturn = sal_True;
     373             :             }
     374             :         }
     375           0 :         break;
     376             : 
     377             :         case KEY_POINT:
     378             :         {
     379           0 :             ZoomList* pZoomList = mpViewShell->GetZoomList();
     380             : 
     381           0 :             if (!mpView->IsTextEdit() && pZoomList->IsNextPossible() && !bSlideShow && !mpDocSh->IsUIActive())
     382             :             {
     383             :                 // use next ZoomRect
     384           0 :                 mpViewShell->SetZoomRect(pZoomList->GetNextZoomRect());
     385           0 :                 bReturn = sal_True;
     386             :             }
     387             :         }
     388           0 :         break;
     389             : 
     390             :         case KEY_COMMA:
     391             :         {
     392           0 :             ZoomList* pZoomList = mpViewShell->GetZoomList();
     393             : 
     394           0 :             if (!mpView->IsTextEdit() && pZoomList->IsPreviousPossible() && !bSlideShow && !mpDocSh->IsUIActive())
     395             :             {
     396             :                 // use previous ZoomRect
     397           0 :                 mpViewShell->SetZoomRect(pZoomList->GetPreviousZoomRect());
     398           0 :                 bReturn = sal_True;
     399             :             }
     400             :         }
     401           0 :         break;
     402             : 
     403             :         case KEY_HOME:
     404             :         {
     405           0 :             if (!mpView->IsTextEdit()
     406           0 :                 && mpViewShell->ISA(DrawViewShell)
     407           0 :                 && !bSlideShow)
     408             :             {
     409             :                // jump to first page
     410           0 :                static_cast<DrawViewShell*>(mpViewShell)->SwitchPage(0);
     411           0 :                bReturn = sal_True;
     412             :             }
     413             :         }
     414           0 :         break;
     415             : 
     416             :         case KEY_END:
     417             :         {
     418           0 :             if (!mpView->IsTextEdit()
     419           0 :                 && mpViewShell->ISA(DrawViewShell)
     420           0 :                 && !bSlideShow)
     421             :             {
     422             :                 // jump to last page
     423             :                 SdPage* pPage =
     424           0 :                     static_cast<DrawViewShell*>(mpViewShell)->GetActualPage();
     425             :                 static_cast<DrawViewShell*>(mpViewShell)
     426             :                     ->SwitchPage(mpDoc->GetSdPageCount(
     427           0 :                         pPage->GetPageKind()) - 1);
     428           0 :                 bReturn = sal_True;
     429             :             }
     430             :         }
     431           0 :         break;
     432             : 
     433             :         case KEY_PAGEUP:
     434             :         {
     435           0 :             if( rKEvt.GetKeyCode().IsMod1() && rKEvt.GetKeyCode().IsMod2() )
     436           0 :                 break;
     437             : 
     438           0 :             if(mpViewShell->ISA(DrawViewShell) && !bSlideShow)
     439             :             {
     440             :                 // The page-up key switches layers or pages depending on the
     441             :                 // modifier key.
     442           0 :                 if ( ! rKEvt.GetKeyCode().GetAllModifier())
     443             :                 {
     444             :                     // With no modifier pressed we move to the previous
     445             :                     // slide.
     446           0 :                     mpView->SdrEndTextEdit();
     447             : 
     448             :                     // Previous page.
     449           0 :                     bReturn = sal_True;
     450           0 :                     SdPage* pPage = static_cast<DrawViewShell*>(mpViewShell)->GetActualPage();
     451           0 :                     sal_uInt16 nSdPage = (pPage->GetPageNum() - 1) / 2;
     452             : 
     453           0 :                     if (nSdPage > 0)
     454             :                     {
     455             :                         // Switch the page and send events regarding
     456             :                         // deactivation the old page and activating the new
     457             :                         // one.
     458             :                         TabControl* pPageTabControl =
     459             :                             static_cast<DrawViewShell*>(mpViewShell)
     460           0 :                             ->GetPageTabControl();
     461           0 :                         if (pPageTabControl->IsReallyShown())
     462           0 :                             pPageTabControl->SendDeactivatePageEvent ();
     463           0 :                         static_cast<DrawViewShell*>(mpViewShell)->SwitchPage(nSdPage - 1);
     464           0 :                         if (pPageTabControl->IsReallyShown())
     465           0 :                             pPageTabControl->SendActivatePageEvent ();
     466             :                     }
     467             :                 }
     468           0 :                 else if (rKEvt.GetKeyCode().IsMod1())
     469             :                 {
     470             :                     // With the CONTROL modifier we switch layers.
     471           0 :                     if (static_cast<DrawViewShell*>(mpViewShell)->IsLayerModeActive())
     472             :                     {
     473             :                         // Moves to the previous layer.
     474           0 :                         SwitchLayer (-1);
     475             :                     }
     476             :                 }
     477             :             }
     478             :         }
     479           0 :         break;
     480             : 
     481             :         case KEY_PAGEDOWN:
     482             :         {
     483           0 :             if( rKEvt.GetKeyCode().IsMod1() && rKEvt.GetKeyCode().IsMod2() )
     484           0 :                 break;
     485           0 :             if(mpViewShell->ISA(DrawViewShell) && !bSlideShow)
     486             :             {
     487             :                 // The page-down key switches layers or pages depending on the
     488             :                 // modifier key.
     489           0 :                 if ( ! rKEvt.GetKeyCode().GetAllModifier())
     490             :                 {
     491             :                     // With no modifier pressed we move to the next slide.
     492           0 :                     mpView->SdrEndTextEdit();
     493             : 
     494             :                     // Next page.
     495           0 :                     bReturn = sal_True;
     496           0 :                     SdPage* pPage = static_cast<DrawViewShell*>(mpViewShell)->GetActualPage();
     497           0 :                     sal_uInt16 nSdPage = (pPage->GetPageNum() - 1) / 2;
     498             : 
     499           0 :                     if (nSdPage < mpDoc->GetSdPageCount(pPage->GetPageKind()) - 1)
     500             :                     {
     501             :                         // Switch the page and send events regarding
     502             :                         // deactivation the old page and activating the new
     503             :                         // one.
     504             :                         TabControl* pPageTabControl =
     505           0 :                             static_cast<DrawViewShell*>(mpViewShell)->GetPageTabControl();
     506           0 :                         if (pPageTabControl->IsReallyShown())
     507           0 :                             pPageTabControl->SendDeactivatePageEvent ();
     508           0 :                         static_cast<DrawViewShell*>(mpViewShell)->SwitchPage(nSdPage + 1);
     509           0 :                         if (pPageTabControl->IsReallyShown())
     510           0 :                             pPageTabControl->SendActivatePageEvent ();
     511             :                     }
     512             :                 }
     513           0 :                 else if (rKEvt.GetKeyCode().IsMod1())
     514             :                 {
     515             :                     // With the CONTROL modifier we switch layers.
     516           0 :                     if (static_cast<DrawViewShell*>(mpViewShell)->IsLayerModeActive())
     517             :                     {
     518             :                         // With the layer mode active pressing page-down
     519             :                         // moves to the next layer.
     520           0 :                         SwitchLayer (+1);
     521             :                     }
     522             :                 }
     523             :             }
     524             :         }
     525           0 :         break;
     526             : 
     527             :         // change select state when focus is on poly point
     528             :         case KEY_SPACE:
     529             :         {
     530           0 :             const SdrHdlList& rHdlList = mpView->GetHdlList();
     531           0 :             SdrHdl* pHdl = rHdlList.GetFocusHdl();
     532             : 
     533           0 :             if(pHdl)
     534             :             {
     535           0 :                 if(pHdl->GetKind() == HDL_POLY)
     536             :                 {
     537             :                     // rescue ID of point with focus
     538           0 :                     sal_uInt32 nPol(pHdl->GetPolyNum());
     539           0 :                     sal_uInt32 nPnt(pHdl->GetPointNum());
     540             : 
     541           0 :                     if(mpView->IsPointMarked(*pHdl))
     542             :                     {
     543           0 :                         if(rKEvt.GetKeyCode().IsShift())
     544             :                         {
     545           0 :                             mpView->UnmarkPoint(*pHdl);
     546             :                         }
     547             :                     }
     548             :                     else
     549             :                     {
     550           0 :                         if(!rKEvt.GetKeyCode().IsShift())
     551             :                         {
     552           0 :                             mpView->UnmarkAllPoints();
     553             :                         }
     554             : 
     555           0 :                         mpView->MarkPoint(*pHdl);
     556             :                     }
     557             : 
     558           0 :                     if(0L == rHdlList.GetFocusHdl())
     559             :                     {
     560             :                         // restore point with focus
     561           0 :                         SdrHdl* pNewOne = 0L;
     562             : 
     563           0 :                         for(sal_uInt32 a(0); !pNewOne && a < rHdlList.GetHdlCount(); a++)
     564             :                         {
     565           0 :                             SdrHdl* pAct = rHdlList.GetHdl(a);
     566             : 
     567           0 :                             if(pAct
     568           0 :                                 && pAct->GetKind() == HDL_POLY
     569           0 :                                 && pAct->GetPolyNum() == nPol
     570           0 :                                 && pAct->GetPointNum() == nPnt)
     571             :                             {
     572           0 :                                 pNewOne = pAct;
     573             :                             }
     574             :                         }
     575             : 
     576           0 :                         if(pNewOne)
     577             :                         {
     578           0 :                             ((SdrHdlList&)rHdlList).SetFocusHdl(pNewOne);
     579             :                         }
     580             :                     }
     581             : 
     582           0 :                     bReturn = sal_True;
     583             :                 }
     584             :             }
     585             :         }
     586           0 :         break;
     587             : 
     588             :         case KEY_UP:
     589             :         case KEY_DOWN:
     590             :         case KEY_LEFT:
     591             :         case KEY_RIGHT:
     592             :         {
     593           0 :             if (!mpView->IsTextEdit() && !bSlideShow)
     594             :             {
     595           0 :                 long nX = 0;
     596           0 :                 long nY = 0;
     597             : 
     598           0 :                 if (nCode == KEY_UP)
     599             :                 {
     600             :                     // scroll up
     601           0 :                     nX = 0;
     602           0 :                     nY =-1;
     603             :                 }
     604           0 :                 else if (nCode == KEY_DOWN)
     605             :                 {
     606             :                     // scroll down
     607           0 :                     nX = 0;
     608           0 :                     nY = 1;
     609             :                 }
     610           0 :                 else if (nCode == KEY_LEFT)
     611             :                 {
     612             :                     // scroll left
     613           0 :                     nX =-1;
     614           0 :                     nY = 0;
     615             :                 }
     616           0 :                 else if (nCode == KEY_RIGHT)
     617             :                 {
     618             :                     // scroll right
     619           0 :                     nX = 1;
     620           0 :                     nY = 0;
     621             :                 }
     622             : 
     623           0 :                 if (mpView->AreObjectsMarked() && !rKEvt.GetKeyCode().IsMod1() &&
     624           0 :                     !mpDocSh->IsReadOnly())
     625             :                 {
     626           0 :                     const SdrHdlList& rHdlList = mpView->GetHdlList();
     627           0 :                     SdrHdl* pHdl = rHdlList.GetFocusHdl();
     628             : 
     629           0 :                     sal_Bool bIsMoveOfConnectedHandle(sal_False);
     630           0 :                     sal_Bool bOldSuppress = false;
     631           0 :                     SdrEdgeObj* pEdgeObj = 0L;
     632             : 
     633           0 :                     if(pHdl && pHdl->GetObj() && pHdl->GetObj()->ISA(SdrEdgeObj) && 0 == pHdl->GetPolyNum())
     634             :                     {
     635           0 :                         pEdgeObj = (SdrEdgeObj*)pHdl->GetObj();
     636             : 
     637           0 :                         if(0L == pHdl->GetPointNum())
     638             :                         {
     639           0 :                             if(pEdgeObj->GetConnection(true).GetObject())
     640             :                             {
     641           0 :                                 bIsMoveOfConnectedHandle = sal_True;
     642             :                             }
     643             :                         }
     644           0 :                         if(1L == pHdl->GetPointNum())
     645             :                         {
     646           0 :                             if(pEdgeObj->GetConnection(false).GetObject())
     647             :                             {
     648           0 :                                 bIsMoveOfConnectedHandle = sal_True;
     649             :                             }
     650             :                         }
     651             :                     }
     652             : 
     653           0 :                     if(pEdgeObj)
     654             :                     {
     655             :                         // Suppress default connects to inside object and object center
     656           0 :                         bOldSuppress = pEdgeObj->GetSuppressDefaultConnect();
     657           0 :                         pEdgeObj->SetSuppressDefaultConnect(true);
     658             :                     }
     659             : 
     660           0 :                     if(bIsMoveOfConnectedHandle)
     661             :                     {
     662           0 :                         sal_uInt16 nMarkHdSiz(mpView->GetMarkHdlSizePixel());
     663           0 :                         Size aHalfConSiz(nMarkHdSiz + 1, nMarkHdSiz + 1);
     664           0 :                         aHalfConSiz = mpWindow->PixelToLogic(aHalfConSiz);
     665             : 
     666           0 :                         if(100 < aHalfConSiz.Width())
     667           0 :                             nX *= aHalfConSiz.Width();
     668             :                         else
     669           0 :                             nX *= 100;
     670             : 
     671           0 :                         if(100 < aHalfConSiz.Height())
     672           0 :                             nY *= aHalfConSiz.Height();
     673             :                         else
     674           0 :                             nY *= 100;
     675             :                     }
     676           0 :                     else if(rKEvt.GetKeyCode().IsMod2())
     677             :                     {
     678             :                         // move in 1 pixel distance
     679           0 :                         Size aLogicSizeOnePixel = mpWindow->PixelToLogic(Size(1,1));
     680           0 :                         nX *= aLogicSizeOnePixel.Width();
     681           0 :                         nY *= aLogicSizeOnePixel.Height();
     682             :                     }
     683           0 :                     else if(rKEvt.GetKeyCode().IsShift())
     684             :                     {
     685           0 :                         nX *= 1000;
     686           0 :                         nY *= 1000;
     687             :                     }
     688             :                     else
     689             :                     {
     690             :                         // old, fixed move distance
     691           0 :                         nX *= 100;
     692           0 :                         nY *= 100;
     693             :                     }
     694             : 
     695           0 :                     if(0L == pHdl)
     696             :                     {
     697             :                         // only take action when move is allowed
     698           0 :                         if(mpView->IsMoveAllowed())
     699             :                         {
     700             :                             // restrict movement to WorkArea
     701           0 :                             const Rectangle& rWorkArea = mpView->GetWorkArea();
     702             : 
     703           0 :                             if(!rWorkArea.IsEmpty())
     704             :                             {
     705           0 :                                 Rectangle aMarkRect(mpView->GetMarkedObjRect());
     706           0 :                                 aMarkRect.Move(nX, nY);
     707             : 
     708           0 :                                 if(!aMarkRect.IsInside(rWorkArea))
     709             :                                 {
     710           0 :                                     if(aMarkRect.Left() < rWorkArea.Left())
     711             :                                     {
     712           0 :                                         nX += rWorkArea.Left() - aMarkRect.Left();
     713             :                                     }
     714             : 
     715           0 :                                     if(aMarkRect.Right() > rWorkArea.Right())
     716             :                                     {
     717           0 :                                         nX -= aMarkRect.Right() - rWorkArea.Right();
     718             :                                     }
     719             : 
     720           0 :                                     if(aMarkRect.Top() < rWorkArea.Top())
     721             :                                     {
     722           0 :                                         nY += rWorkArea.Top() - aMarkRect.Top();
     723             :                                     }
     724             : 
     725           0 :                                     if(aMarkRect.Bottom() > rWorkArea.Bottom())
     726             :                                     {
     727           0 :                                         nY -= aMarkRect.Bottom() - rWorkArea.Bottom();
     728             :                                     }
     729             :                                 }
     730             :                             }
     731             : 
     732             :                             // no handle selected
     733           0 :                             if(0 != nX || 0 != nY)
     734             :                             {
     735           0 :                                 mpView->MoveAllMarked(Size(nX, nY));
     736             : 
     737           0 :                                 mpView->MakeVisible(mpView->GetAllMarkedRect(), *mpWindow);
     738             :                             }
     739             :                         }
     740             :                     }
     741             :                     else
     742             :                     {
     743             :                         // move handle with index nHandleIndex
     744           0 :                         if(pHdl && (nX || nY))
     745             :                         {
     746             :                             // now move the Handle (nX, nY)
     747           0 :                             Point aStartPoint(pHdl->GetPos());
     748           0 :                             Point aEndPoint(pHdl->GetPos() + Point(nX, nY));
     749           0 :                             const SdrDragStat& rDragStat = mpView->GetDragStat();
     750             : 
     751             :                             // start dragging
     752           0 :                             mpView->BegDragObj(aStartPoint, 0, pHdl, 0);
     753             : 
     754           0 :                             if(mpView->IsDragObj())
     755             :                             {
     756           0 :                                 bool bWasNoSnap = rDragStat.IsNoSnap();
     757           0 :                                 sal_Bool bWasSnapEnabled = mpView->IsSnapEnabled();
     758             : 
     759             :                                 // switch snapping off
     760           0 :                                 if(!bWasNoSnap)
     761           0 :                                     ((SdrDragStat&)rDragStat).SetNoSnap(true);
     762           0 :                                 if(bWasSnapEnabled)
     763           0 :                                     mpView->SetSnapEnabled(false);
     764             : 
     765           0 :                                 mpView->MovAction(aEndPoint);
     766           0 :                                 mpView->EndDragObj();
     767             : 
     768             :                                 // restore snap
     769           0 :                                 if(!bWasNoSnap)
     770           0 :                                     ((SdrDragStat&)rDragStat).SetNoSnap(bWasNoSnap);
     771           0 :                                 if(bWasSnapEnabled)
     772           0 :                                     mpView->SetSnapEnabled(bWasSnapEnabled);
     773             :                             }
     774             : 
     775             :                             // make moved handle visible
     776           0 :                             Rectangle aVisRect(aEndPoint - Point(100, 100), Size(200, 200));
     777           0 :                             mpView->MakeVisible(aVisRect, *mpWindow);
     778             :                         }
     779             :                     }
     780             : 
     781           0 :                     if(pEdgeObj)
     782             :                     {
     783             :                         // Restore original suppress value
     784           0 :                         pEdgeObj->SetSuppressDefaultConnect(bOldSuppress);
     785             :                     }
     786             :                 }
     787             :                 else
     788             :                 {
     789             :                     // scroll page
     790           0 :                     mpViewShell->ScrollLines(nX, nY);
     791             :                 }
     792             : 
     793           0 :                 bReturn = sal_True;
     794             :             }
     795             :         }
     796           0 :         break;
     797             :     }
     798             : 
     799           0 :     if (bReturn)
     800             :     {
     801           0 :         mpWindow->ReleaseMouse();
     802             :     }
     803             : 
     804             :     // when a text-editable object is selected and the
     805             :     // input character is printable, activate text edit on that object
     806             :     // and feed character to object
     807           0 :     if(!bReturn && !mpDocSh->IsReadOnly())
     808             :     {
     809           0 :         if(!mpView->IsTextEdit() && mpViewShell)
     810             :         {
     811           0 :             const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
     812             : 
     813           0 :             if(1 == rMarkList.GetMarkCount())
     814             :             {
     815           0 :                 SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
     816             : 
     817             :                 // #i118485# allow TextInput for OLEs, too
     818           0 :                 if(pObj->ISA(SdrTextObj) && pObj->HasTextEdit())
     819             :                 {
     820             :                     // use common IsSimpleCharInput from the EditEngine.
     821           0 :                     sal_Bool bPrintable(EditEngine::IsSimpleCharInput(rKEvt));
     822             : 
     823           0 :                     if(bPrintable)
     824             :                     {
     825             :                         // try to activate textedit mode for the selected object
     826           0 :                         SfxStringItem aInputString(SID_ATTR_CHAR, OUString(rKEvt.GetCharCode()));
     827             : 
     828             :                         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(
     829             :                             SID_ATTR_CHAR,
     830             :                             SFX_CALLMODE_ASYNCHRON,
     831             :                             &aInputString,
     832           0 :                             0L);
     833             : 
     834             :                         // consumed
     835           0 :                         bReturn = sal_True;
     836             :                     }
     837             :                 }
     838             :             }
     839             :             else
     840             :             {
     841             :                 // test if there is a title object there. If yes, try to
     842             :                 // set it to edit mode and start typing...
     843           0 :                 if(mpViewShell->ISA(DrawViewShell)
     844           0 :                     && EditEngine::IsSimpleCharInput(rKEvt))
     845             :                 {
     846             :                     DrawViewShell* pDrawViewShell =
     847           0 :                         static_cast<DrawViewShell*>(mpViewShell);
     848           0 :                     SdPage* pActualPage = pDrawViewShell->GetActualPage();
     849           0 :                     SdrTextObj* pCandidate = 0L;
     850             : 
     851           0 :                     if(pActualPage)
     852             :                     {
     853           0 :                         SdrObjListIter aIter(*pActualPage, IM_DEEPNOGROUPS);
     854             : 
     855           0 :                         while(aIter.IsMore() && !pCandidate)
     856             :                         {
     857           0 :                             SdrObject* pObj = aIter.Next();
     858             : 
     859           0 :                             if(pObj && pObj->ISA(SdrTextObj))
     860             :                             {
     861           0 :                                 sal_uInt32 nInv(pObj->GetObjInventor());
     862           0 :                                 sal_uInt16 nKnd(pObj->GetObjIdentifier());
     863             : 
     864           0 :                                 if(SdrInventor == nInv && OBJ_TITLETEXT == nKnd)
     865             :                                 {
     866           0 :                                     pCandidate = (SdrTextObj*)pObj;
     867             :                                 }
     868             :                             }
     869           0 :                         }
     870             :                     }
     871             : 
     872             :                     // when candidate found and candidate is untouched, start editing text...
     873           0 :                     if(pCandidate && pCandidate->IsEmptyPresObj())
     874             :                     {
     875           0 :                         mpView->UnMarkAll();
     876           0 :                         mpView->MarkObj(pCandidate, mpView->GetSdrPageView());
     877           0 :                         SfxStringItem aInputString(SID_ATTR_CHAR, OUString(rKEvt.GetCharCode()));
     878             : 
     879             :                         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(
     880             :                             SID_ATTR_CHAR,
     881             :                             SFX_CALLMODE_ASYNCHRON,
     882             :                             &aInputString,
     883           0 :                             0L);
     884             : 
     885             :                         // consumed
     886           0 :                         bReturn = sal_True;
     887             :                     }
     888             :                 }
     889             :             }
     890             :         }
     891             :     }
     892             : 
     893           0 :     return(bReturn);
     894             : }
     895             : 
     896           0 : sal_Bool FuPoor::MouseMove(const MouseEvent& )
     897             : {
     898           0 :     return sal_False;
     899             : }
     900             : 
     901           0 : void FuPoor::SelectionHasChanged()
     902             : {
     903           0 :     const SdrHdlList& rHdlList = mpView->GetHdlList();
     904           0 :     ((SdrHdlList&)rHdlList).ResetFocusHdl();
     905           0 : }
     906             : 
     907             : /**
     908             :  * Cut object to clipboard
     909             :  */
     910           0 : void FuPoor::DoCut()
     911             : {
     912           0 :     if (mpView)
     913             :     {
     914           0 :         mpView->DoCut(mpWindow);
     915             :     }
     916           0 : }
     917             : 
     918             : /**
     919             :  * Copy object to clipboard
     920             :  */
     921           0 : void FuPoor::DoCopy()
     922             : {
     923           0 :     if (mpView)
     924             :     {
     925           0 :         mpView->DoCopy(mpWindow);
     926             :     }
     927           0 : }
     928             : 
     929             : /**
     930             :  * Paste object from clipboard
     931             :  */
     932           0 : void FuPoor::DoPaste()
     933             : {
     934           0 :     if (mpView)
     935             :     {
     936           0 :         mpView->DoPaste(mpWindow);
     937             :     }
     938           0 : }
     939             : 
     940             : /**
     941             :  * Paste unformatted text from clipboard
     942             :  */
     943           0 : void FuPoor::DoPasteUnformatted()
     944             : {
     945           0 :     if (mpView)
     946             :     {
     947           0 :         sal_Int8 nAction = DND_ACTION_COPY;
     948           0 :         TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( mpViewShell->GetActiveWindow() ) );
     949           0 :         if (aDataHelper.GetTransferable().is())
     950             :         {
     951             :             mpView->InsertData( aDataHelper,
     952           0 :                                 mpWindow->PixelToLogic( Rectangle( Point(), mpWindow->GetOutputSizePixel() ).Center() ),
     953           0 :                                 nAction, sal_False, FORMAT_STRING);
     954           0 :         }
     955             :     }
     956           0 : }
     957             : 
     958             : /**
     959             :  * Timer handler for Drag&Drop
     960             :  */
     961           0 : IMPL_LINK_NOARG(FuPoor, DragHdl)
     962             : {
     963           0 :     if( mpView )
     964             :     {
     965           0 :         sal_uInt16 nHitLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(HITPIX,0)).Width() );
     966           0 :         SdrHdl* pHdl = mpView->PickHandle(aMDPos);
     967             : 
     968           0 :         if ( pHdl==NULL && mpView->IsMarkedHit(aMDPos, nHitLog)
     969           0 :              && !mpView->IsPresObjSelected(sal_False, sal_True) )
     970             :         {
     971           0 :             mpWindow->ReleaseMouse();
     972           0 :             bIsInDragMode = sal_True;
     973           0 :             mpView->StartDrag( aMDPos, mpWindow );
     974             :         }
     975             :     }
     976           0 :     return 0;
     977             : }
     978             : 
     979           0 : sal_Bool FuPoor::Command(const CommandEvent& rCEvt)
     980             : {
     981           0 :     return( mpView->Command(rCEvt,mpWindow) );
     982             : }
     983             : 
     984             : /**
     985             :  * Timer handler for window scrolling
     986             :  */
     987           0 : IMPL_LINK_NOARG_INLINE_START(FuPoor, DelayHdl)
     988             : {
     989           0 :     aDelayToScrollTimer.Stop ();
     990           0 :     bScrollable = sal_True;
     991             : 
     992           0 :     Point aPnt(mpWindow->GetPointerPosPixel());
     993             : 
     994             :     // use remembered MouseButton state to create correct
     995             :     // MouseEvents for this artifical MouseMove.
     996           0 :     MouseMove(MouseEvent(aPnt, 1, 0, GetMouseButtonCode()));
     997             : 
     998           0 :     return 0;
     999             : }
    1000           0 : IMPL_LINK_INLINE_END( FuPoor, DelayHdl, Timer *, pTimer )
    1001             : 
    1002           0 : sal_Bool FuPoor::MouseButtonUp (const MouseEvent& rMEvt)
    1003             : {
    1004             :     // remember button state for creation of own MouseEvents
    1005           0 :     SetMouseButtonCode(rMEvt.GetButtons());
    1006             : 
    1007           0 :     aDelayToScrollTimer.Stop ();
    1008             :     return bScrollable  =
    1009           0 :         bDelayActive = sal_False;
    1010             : }
    1011             : 
    1012           0 : sal_Bool FuPoor::MouseButtonDown(const MouseEvent& rMEvt)
    1013             : {
    1014             :     // remember button state for creation of own MouseEvents
    1015           0 :     SetMouseButtonCode(rMEvt.GetButtons());
    1016             : 
    1017           0 :     return sal_False;
    1018             : }
    1019             : 
    1020           0 : void FuPoor::StartDelayToScrollTimer ()
    1021             : {
    1022           0 :     bDelayActive = sal_True;
    1023           0 :     aDelayToScrollTimer.Start ();
    1024           0 : }
    1025             : 
    1026           0 : sal_Bool FuPoor::RequestHelp(const HelpEvent& rHEvt)
    1027             : {
    1028           0 :     sal_Bool bReturn = sal_False;
    1029             : 
    1030           0 :     SdrPageView* pPV = mpView->GetSdrPageView();
    1031             : 
    1032           0 :     if (pPV)
    1033             :     {
    1034           0 :         SdPage* pPage = (SdPage*) pPV->GetPage();
    1035             : 
    1036           0 :         if (pPage)
    1037             :         {
    1038           0 :             bReturn = pPage->RequestHelp(mpWindow, mpView, rHEvt);
    1039             :         }
    1040             :     }
    1041             : 
    1042           0 :     return(bReturn);
    1043             : }
    1044             : 
    1045           0 : void FuPoor::Paint(const Rectangle&, ::sd::Window* )
    1046             : {
    1047           0 : }
    1048             : 
    1049           0 : void FuPoor::ReceiveRequest(SfxRequest& rReq)
    1050             : {
    1051           0 :     const SfxItemSet* pSet = rReq.GetArgs();
    1052             : 
    1053           0 :     if (pSet)
    1054             :     {
    1055           0 :         if( pSet->GetItemState( nSlotId ) == SFX_ITEM_SET )
    1056             :         {
    1057           0 :             const SfxPoolItem& rItem = pSet->Get( nSlotId );
    1058             : 
    1059           0 :             if( rItem.ISA( SfxAllEnumItem ) )
    1060             :             {
    1061           0 :                 nSlotValue = ( ( const SfxAllEnumItem& ) rItem ).GetValue();
    1062             :             }
    1063             :         }
    1064             :     }
    1065           0 : }
    1066             : 
    1067           0 : SdrObject* FuPoor::CreateDefaultObject(const sal_uInt16, const Rectangle& )
    1068             : {
    1069             :     // empty base implementation
    1070           0 :     return 0L;
    1071             : }
    1072             : 
    1073           0 : void FuPoor::ImpForceQuadratic(Rectangle& rRect)
    1074             : {
    1075           0 :     if(rRect.GetWidth() > rRect.GetHeight())
    1076             :     {
    1077             :         rRect = Rectangle(
    1078           0 :             Point(rRect.Left() + ((rRect.GetWidth() - rRect.GetHeight()) / 2), rRect.Top()),
    1079           0 :             Size(rRect.GetHeight(), rRect.GetHeight()));
    1080             :     }
    1081             :     else
    1082             :     {
    1083             :         rRect = Rectangle(
    1084           0 :             Point(rRect.Left(), rRect.Top() + ((rRect.GetHeight() - rRect.GetWidth()) / 2)),
    1085           0 :             Size(rRect.GetWidth(), rRect.GetWidth()));
    1086             :     }
    1087           0 : }
    1088             : 
    1089             : 
    1090             : 
    1091             : 
    1092           0 : void FuPoor::SwitchLayer (sal_Int32 nOffset)
    1093             : {
    1094           0 :     if(mpViewShell && mpViewShell->ISA(DrawViewShell))
    1095             :     {
    1096             :         DrawViewShell* pDrawViewShell =
    1097           0 :             static_cast<DrawViewShell*>(mpViewShell);
    1098             : 
    1099             :         // Calculate the new index.
    1100           0 :         sal_Int32 nIndex = pDrawViewShell->GetActiveTabLayerIndex() + nOffset;
    1101             : 
    1102             :         // Make sure the new index lies inside the range of valid indices.
    1103           0 :         if (nIndex < 0)
    1104           0 :             nIndex = 0;
    1105           0 :         else if (nIndex >= pDrawViewShell->GetTabLayerCount ())
    1106           0 :             nIndex = pDrawViewShell->GetTabLayerCount() - 1;
    1107             : 
    1108             :         // Set the new active layer.
    1109           0 :         if (nIndex != pDrawViewShell->GetActiveTabLayerIndex ())
    1110             :         {
    1111             :             LayerTabBar* pLayerTabControl =
    1112           0 :                 static_cast<DrawViewShell*>(mpViewShell)->GetLayerTabControl();
    1113           0 :             if (pLayerTabControl != NULL)
    1114           0 :                 pLayerTabControl->SendDeactivatePageEvent ();
    1115             : 
    1116           0 :             pDrawViewShell->SetActiveTabLayerIndex (nIndex);
    1117             : 
    1118           0 :             if (pLayerTabControl != NULL)
    1119           0 :                 pLayerTabControl->SendActivatePageEvent ();
    1120             :         }
    1121             :     }
    1122           0 : }
    1123             : 
    1124             : /** is called when the currenct function should be aborted. <p>
    1125             :     This is used when a function gets a KEY_ESCAPE but can also
    1126             :     be called directly.
    1127             : 
    1128             :     @returns true if a active function was aborted
    1129             : */
    1130           0 : bool FuPoor::cancel()
    1131             : {
    1132           0 :     if ( !this->ISA(FuSelection) )
    1133             :     {
    1134           0 :         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
    1135           0 :         return true;
    1136             :     }
    1137             : 
    1138           0 :     return false;
    1139             : }
    1140             : 
    1141             : // #i33136#
    1142           0 : bool FuPoor::doConstructOrthogonal() const
    1143             : {
    1144             :     return (
    1145           0 :         SID_DRAW_XLINE == nSlotId ||
    1146           0 :         SID_DRAW_CIRCLEARC == nSlotId ||
    1147           0 :         SID_DRAW_SQUARE == nSlotId ||
    1148           0 :         SID_DRAW_SQUARE_NOFILL == nSlotId ||
    1149           0 :         SID_DRAW_SQUARE_ROUND == nSlotId ||
    1150           0 :         SID_DRAW_SQUARE_ROUND_NOFILL == nSlotId ||
    1151           0 :         SID_DRAW_CIRCLE == nSlotId ||
    1152           0 :         SID_DRAW_CIRCLE_NOFILL == nSlotId ||
    1153           0 :         SID_DRAW_CIRCLEPIE == nSlotId ||
    1154           0 :         SID_DRAW_CIRCLEPIE_NOFILL == nSlotId ||
    1155           0 :         SID_DRAW_CIRCLECUT == nSlotId ||
    1156           0 :         SID_DRAW_CIRCLECUT_NOFILL == nSlotId ||
    1157           0 :         SID_DRAW_XPOLYGON == nSlotId ||
    1158           0 :         SID_DRAW_XPOLYGON_NOFILL == nSlotId ||
    1159           0 :         SID_3D_CUBE == nSlotId ||
    1160           0 :         SID_3D_SPHERE == nSlotId ||
    1161           0 :         SID_3D_SHELL == nSlotId ||
    1162           0 :         SID_3D_HALF_SPHERE == nSlotId ||
    1163           0 :         SID_3D_TORUS == nSlotId ||
    1164           0 :         SID_3D_CYLINDER == nSlotId ||
    1165           0 :         SID_3D_CONE == nSlotId ||
    1166           0 :         SID_3D_PYRAMID == nSlotId);
    1167             : }
    1168             : 
    1169           0 : void FuPoor::DoExecute( SfxRequest& )
    1170             : {
    1171           0 : }
    1172             : 
    1173             : } // end of namespace sd
    1174             : 
    1175             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10