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