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 #include "fuconarc.hxx" 32*cdf0e10cSrcweir #include <svx/svdpagv.hxx> 33*cdf0e10cSrcweir #include <svx/svdocirc.hxx> 34*cdf0e10cSrcweir #include <sfx2/request.hxx> 35*cdf0e10cSrcweir #include <svl/intitem.hxx> 36*cdf0e10cSrcweir #include <svl/aeitem.hxx> 37*cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 38*cdf0e10cSrcweir #include <svx/svdobj.hxx> 39*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #include <svx/svxids.hrc> 43*cdf0e10cSrcweir #include <math.h> 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir #include "app.hrc" 46*cdf0e10cSrcweir #include "Window.hxx" 47*cdf0e10cSrcweir #include "drawdoc.hxx" 48*cdf0e10cSrcweir #include "res_bmp.hrc" 49*cdf0e10cSrcweir #include "View.hxx" 50*cdf0e10cSrcweir #include "ViewShell.hxx" 51*cdf0e10cSrcweir #include "ViewShellBase.hxx" 52*cdf0e10cSrcweir #include "ToolBarManager.hxx" 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir // #97016# 55*cdf0e10cSrcweir #include <svx/sxciaitm.hxx> 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir namespace sd { 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir TYPEINIT1( FuConstructArc, FuConstruct ); 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir /************************************************************************* 62*cdf0e10cSrcweir |* 63*cdf0e10cSrcweir |* Konstruktor 64*cdf0e10cSrcweir |* 65*cdf0e10cSrcweir \************************************************************************/ 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir FuConstructArc::FuConstructArc ( 68*cdf0e10cSrcweir ViewShell* pViewSh, 69*cdf0e10cSrcweir ::sd::Window* pWin, 70*cdf0e10cSrcweir ::sd::View* pView, 71*cdf0e10cSrcweir SdDrawDocument* pDoc, 72*cdf0e10cSrcweir SfxRequest& rReq ) 73*cdf0e10cSrcweir : FuConstruct( pViewSh, pWin, pView, pDoc, rReq ) 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir } 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir FunctionReference FuConstructArc::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq, bool bPermanent ) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir FuConstructArc* pFunc; 80*cdf0e10cSrcweir FunctionReference xFunc( pFunc = new FuConstructArc( pViewSh, pWin, pView, pDoc, rReq ) ); 81*cdf0e10cSrcweir xFunc->DoExecute(rReq); 82*cdf0e10cSrcweir pFunc->SetPermanent(bPermanent); 83*cdf0e10cSrcweir return xFunc; 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir void FuConstructArc::DoExecute( SfxRequest& rReq ) 87*cdf0e10cSrcweir { 88*cdf0e10cSrcweir FuConstruct::DoExecute( rReq ); 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir mpViewShell->GetViewShellBase().GetToolBarManager()->SetToolBar( 91*cdf0e10cSrcweir ToolBarManager::TBG_FUNCTION, 92*cdf0e10cSrcweir ToolBarManager::msDrawingObjectToolBar); 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir const SfxItemSet *pArgs = rReq.GetArgs (); 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir if (pArgs) 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pCenterX, SfxUInt32Item, ID_VAL_CENTER_X, sal_False); 99*cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pCenterY, SfxUInt32Item, ID_VAL_CENTER_Y, sal_False); 100*cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pAxisX, SfxUInt32Item, ID_VAL_AXIS_X, sal_False); 101*cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pAxisY, SfxUInt32Item, ID_VAL_AXIS_Y, sal_False); 102*cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pPhiStart, SfxUInt32Item, ID_VAL_ANGLESTART, sal_False); 103*cdf0e10cSrcweir SFX_REQUEST_ARG (rReq, pPhiEnd, SfxUInt32Item, ID_VAL_ANGLEEND, sal_False); 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir Rectangle aNewRectangle (pCenterX->GetValue () - pAxisX->GetValue () / 2, 106*cdf0e10cSrcweir pCenterY->GetValue () - pAxisY->GetValue () / 2, 107*cdf0e10cSrcweir pCenterX->GetValue () + pAxisX->GetValue () / 2, 108*cdf0e10cSrcweir pCenterY->GetValue () + pAxisY->GetValue () / 2); 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir Activate(); // Setzt aObjKind 111*cdf0e10cSrcweir SdrCircObj* pNewCircle = 112*cdf0e10cSrcweir new SdrCircObj((SdrObjKind) mpView->GetCurrentObjIdentifier(), 113*cdf0e10cSrcweir aNewRectangle, 114*cdf0e10cSrcweir (long) (pPhiStart->GetValue () * 10.0), 115*cdf0e10cSrcweir (long) (pPhiEnd->GetValue () * 10.0)); 116*cdf0e10cSrcweir SdrPageView *pPV = mpView->GetSdrPageView(); 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir mpView->InsertObjectAtView(pNewCircle, *pPV, SDRINSERT_SETDEFLAYER); 119*cdf0e10cSrcweir } 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir /************************************************************************* 123*cdf0e10cSrcweir |* 124*cdf0e10cSrcweir |* MouseButtonDown-event 125*cdf0e10cSrcweir |* 126*cdf0e10cSrcweir \************************************************************************/ 127*cdf0e10cSrcweir 128*cdf0e10cSrcweir sal_Bool FuConstructArc::MouseButtonDown( const MouseEvent& rMEvt ) 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir sal_Bool bReturn = FuConstruct::MouseButtonDown( rMEvt ); 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir if ( rMEvt.IsLeft() && !mpView->IsAction() ) 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); 135*cdf0e10cSrcweir mpWindow->CaptureMouse(); 136*cdf0e10cSrcweir sal_uInt16 nDrgLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() ); 137*cdf0e10cSrcweir mpView->BegCreateObj(aPnt, (OutputDevice*) NULL, nDrgLog); 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir SdrObject* pObj = mpView->GetCreateObj(); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir if (pObj) 142*cdf0e10cSrcweir { 143*cdf0e10cSrcweir SfxItemSet aAttr(mpDoc->GetPool()); 144*cdf0e10cSrcweir SetStyleSheet(aAttr, pObj); 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir //-/ pObj->NbcSetAttributes(aAttr, sal_False); 147*cdf0e10cSrcweir pObj->SetMergedItemSet(aAttr); 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir bReturn = sal_True; 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir return bReturn; 153*cdf0e10cSrcweir } 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir /************************************************************************* 156*cdf0e10cSrcweir |* 157*cdf0e10cSrcweir |* MouseMove-event 158*cdf0e10cSrcweir |* 159*cdf0e10cSrcweir \************************************************************************/ 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir sal_Bool FuConstructArc::MouseMove( const MouseEvent& rMEvt ) 162*cdf0e10cSrcweir { 163*cdf0e10cSrcweir return FuConstruct::MouseMove(rMEvt); 164*cdf0e10cSrcweir } 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir /************************************************************************* 167*cdf0e10cSrcweir |* 168*cdf0e10cSrcweir |* MouseButtonUp-event 169*cdf0e10cSrcweir |* 170*cdf0e10cSrcweir \************************************************************************/ 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir sal_Bool FuConstructArc::MouseButtonUp( const MouseEvent& rMEvt ) 173*cdf0e10cSrcweir { 174*cdf0e10cSrcweir sal_Bool bReturn = sal_False; 175*cdf0e10cSrcweir sal_Bool bCreated = sal_False; 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir if ( mpView->IsCreateObj() && rMEvt.IsLeft() ) 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir sal_uLong nCount = mpView->GetSdrPageView()->GetObjList()->GetObjCount(); 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir if (mpView->EndCreateObj(SDRCREATE_NEXTPOINT) ) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir if (nCount != mpView->GetSdrPageView()->GetObjList()->GetObjCount()) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir bCreated = sal_True; 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir bReturn = sal_True; 192*cdf0e10cSrcweir } 193*cdf0e10cSrcweir 194*cdf0e10cSrcweir bReturn = FuConstruct::MouseButtonUp (rMEvt) || bReturn; 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir if (!bPermanent && bCreated) 197*cdf0e10cSrcweir mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir return bReturn; 200*cdf0e10cSrcweir } 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir /************************************************************************* 203*cdf0e10cSrcweir |* 204*cdf0e10cSrcweir |* Tastaturereignisse bearbeiten 205*cdf0e10cSrcweir |* 206*cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls 207*cdf0e10cSrcweir |* sal_False. 208*cdf0e10cSrcweir |* 209*cdf0e10cSrcweir \************************************************************************/ 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir sal_Bool FuConstructArc::KeyInput(const KeyEvent& rKEvt) 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir sal_Bool bReturn = FuConstruct::KeyInput(rKEvt); 214*cdf0e10cSrcweir return(bReturn); 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir /************************************************************************* 218*cdf0e10cSrcweir |* 219*cdf0e10cSrcweir |* Function aktivieren 220*cdf0e10cSrcweir |* 221*cdf0e10cSrcweir \************************************************************************/ 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir void FuConstructArc::Activate() 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir SdrObjKind aObjKind; 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir switch( nSlotId ) 228*cdf0e10cSrcweir { 229*cdf0e10cSrcweir case SID_DRAW_ARC : 230*cdf0e10cSrcweir case SID_DRAW_CIRCLEARC: 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir aObjKind = OBJ_CARC; 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir break; 235*cdf0e10cSrcweir 236*cdf0e10cSrcweir case SID_DRAW_PIE : 237*cdf0e10cSrcweir case SID_DRAW_PIE_NOFILL : 238*cdf0e10cSrcweir case SID_DRAW_CIRCLEPIE : 239*cdf0e10cSrcweir case SID_DRAW_CIRCLEPIE_NOFILL: 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir aObjKind = OBJ_SECT; 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir break; 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir case SID_DRAW_ELLIPSECUT : 246*cdf0e10cSrcweir case SID_DRAW_ELLIPSECUT_NOFILL: 247*cdf0e10cSrcweir case SID_DRAW_CIRCLECUT : 248*cdf0e10cSrcweir case SID_DRAW_CIRCLECUT_NOFILL : 249*cdf0e10cSrcweir { 250*cdf0e10cSrcweir aObjKind = OBJ_CCUT; 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir break; 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir default: 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir aObjKind = OBJ_CARC; 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir break; 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir mpView->SetCurrentObj((sal_uInt16)aObjKind); 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir FuConstruct::Activate(); 264*cdf0e10cSrcweir // FuDraw::Activate(); 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir /************************************************************************* 268*cdf0e10cSrcweir |* 269*cdf0e10cSrcweir |* Function deaktivieren 270*cdf0e10cSrcweir |* 271*cdf0e10cSrcweir \************************************************************************/ 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir void FuConstructArc::Deactivate() 274*cdf0e10cSrcweir { 275*cdf0e10cSrcweir FuConstruct::Deactivate(); 276*cdf0e10cSrcweir // FuDraw::Deactivate(); 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir // #97016# 280*cdf0e10cSrcweir SdrObject* FuConstructArc::CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle) 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir // case SID_DRAW_ARC: 283*cdf0e10cSrcweir // case SID_DRAW_CIRCLEARC: 284*cdf0e10cSrcweir // case SID_DRAW_PIE: 285*cdf0e10cSrcweir // case SID_DRAW_PIE_NOFILL: 286*cdf0e10cSrcweir // case SID_DRAW_CIRCLEPIE: 287*cdf0e10cSrcweir // case SID_DRAW_CIRCLEPIE_NOFILL: 288*cdf0e10cSrcweir // case SID_DRAW_ELLIPSECUT: 289*cdf0e10cSrcweir // case SID_DRAW_ELLIPSECUT_NOFILL: 290*cdf0e10cSrcweir // case SID_DRAW_CIRCLECUT: 291*cdf0e10cSrcweir // case SID_DRAW_CIRCLECUT_NOFILL: 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir SdrObject* pObj = SdrObjFactory::MakeNewObject( 294*cdf0e10cSrcweir mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(), 295*cdf0e10cSrcweir 0L, mpDoc); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir if(pObj) 298*cdf0e10cSrcweir { 299*cdf0e10cSrcweir if(pObj->ISA(SdrCircObj)) 300*cdf0e10cSrcweir { 301*cdf0e10cSrcweir Rectangle aRect(rRectangle); 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir if(SID_DRAW_ARC == nID || 304*cdf0e10cSrcweir SID_DRAW_CIRCLEARC == nID || 305*cdf0e10cSrcweir SID_DRAW_CIRCLEPIE == nID || 306*cdf0e10cSrcweir SID_DRAW_CIRCLEPIE_NOFILL == nID || 307*cdf0e10cSrcweir SID_DRAW_CIRCLECUT == nID || 308*cdf0e10cSrcweir SID_DRAW_CIRCLECUT_NOFILL == nID) 309*cdf0e10cSrcweir { 310*cdf0e10cSrcweir // force quadratic 311*cdf0e10cSrcweir ImpForceQuadratic(aRect); 312*cdf0e10cSrcweir } 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir pObj->SetLogicRect(aRect); 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir SfxItemSet aAttr(mpDoc->GetPool()); 317*cdf0e10cSrcweir aAttr.Put(SdrCircStartAngleItem(9000)); 318*cdf0e10cSrcweir aAttr.Put(SdrCircEndAngleItem(0)); 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir if(SID_DRAW_PIE_NOFILL == nID || 321*cdf0e10cSrcweir SID_DRAW_CIRCLEPIE_NOFILL == nID || 322*cdf0e10cSrcweir SID_DRAW_ELLIPSECUT_NOFILL == nID || 323*cdf0e10cSrcweir SID_DRAW_CIRCLECUT_NOFILL == nID) 324*cdf0e10cSrcweir { 325*cdf0e10cSrcweir aAttr.Put(XFillStyleItem(XFILL_NONE)); 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir pObj->SetMergedItemSet(aAttr); 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir else 331*cdf0e10cSrcweir { 332*cdf0e10cSrcweir DBG_ERROR("Object is NO circle object"); 333*cdf0e10cSrcweir } 334*cdf0e10cSrcweir } 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir return pObj; 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir 339*cdf0e10cSrcweir } // end of namespace sd 340