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_svx.hxx" 30*cdf0e10cSrcweir #include <svl/itempool.hxx> 31*cdf0e10cSrcweir #include <vcl/dialog.hxx> 32*cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 33*cdf0e10cSrcweir #include <unotools/syslocale.hxx> 34*cdf0e10cSrcweir #include <rtl/math.hxx> 35*cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx> 36*cdf0e10cSrcweir #ifndef _UNOTOOLS_PROCESSFACTORY_HXX 37*cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #include <vcl/svapp.hxx> 40*cdf0e10cSrcweir #include <osl/mutex.hxx> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #include <svx/graphctl.hxx> 43*cdf0e10cSrcweir #include "GraphCtlAccessibleContext.hxx" 44*cdf0e10cSrcweir #include "svx/xoutbmp.hxx" 45*cdf0e10cSrcweir #include <svx/svxids.hrc> 46*cdf0e10cSrcweir #include <svx/svdpage.hxx> 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir // #i72889# 49*cdf0e10cSrcweir #include "svx/sdrpaintwindow.hxx" 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir /************************************************************************* 52*cdf0e10cSrcweir |* 53*cdf0e10cSrcweir |* 54*cdf0e10cSrcweir |* 55*cdf0e10cSrcweir \************************************************************************/ 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir void GraphCtrlUserCall::Changed( const SdrObject& rObj, SdrUserCallType eType, const Rectangle& /*rOldBoundRect*/ ) 58*cdf0e10cSrcweir { 59*cdf0e10cSrcweir switch( eType ) 60*cdf0e10cSrcweir { 61*cdf0e10cSrcweir case( SDRUSERCALL_MOVEONLY ): 62*cdf0e10cSrcweir case( SDRUSERCALL_RESIZE ): 63*cdf0e10cSrcweir rWin.SdrObjChanged( rObj ); 64*cdf0e10cSrcweir break; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir case( SDRUSERCALL_INSERTED ): 67*cdf0e10cSrcweir rWin.SdrObjCreated( rObj ); 68*cdf0e10cSrcweir break; 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir default: 71*cdf0e10cSrcweir break; 72*cdf0e10cSrcweir } 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir /************************************************************************* 77*cdf0e10cSrcweir |* 78*cdf0e10cSrcweir |* 79*cdf0e10cSrcweir |* 80*cdf0e10cSrcweir \************************************************************************/ 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir GraphCtrl::GraphCtrl( Window* pParent, const WinBits nWinBits ) : 83*cdf0e10cSrcweir Control ( pParent, nWinBits ), 84*cdf0e10cSrcweir aMap100 ( MAP_100TH_MM ), 85*cdf0e10cSrcweir eObjKind ( OBJ_NONE ), 86*cdf0e10cSrcweir nPolyEdit ( 0 ), 87*cdf0e10cSrcweir bEditMode ( sal_False ), 88*cdf0e10cSrcweir bSdrMode ( sal_False ), 89*cdf0e10cSrcweir mpAccContext ( NULL ), 90*cdf0e10cSrcweir pModel ( NULL ), 91*cdf0e10cSrcweir pView ( NULL ) 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir pUserCall = new GraphCtrlUserCall( *this ); 94*cdf0e10cSrcweir aUpdateTimer.SetTimeout( 200 ); 95*cdf0e10cSrcweir aUpdateTimer.SetTimeoutHdl( LINK( this, GraphCtrl, UpdateHdl ) ); 96*cdf0e10cSrcweir aUpdateTimer.Start(); 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir SetWinStyle( nWinBits ); 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir EnableRTL( sal_False ); 101*cdf0e10cSrcweir } 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir /************************************************************************* 105*cdf0e10cSrcweir |* 106*cdf0e10cSrcweir |* 107*cdf0e10cSrcweir |* 108*cdf0e10cSrcweir \************************************************************************/ 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir GraphCtrl::GraphCtrl( Window* pParent, const ResId& rResId ) : 111*cdf0e10cSrcweir Control ( pParent, rResId ), 112*cdf0e10cSrcweir aMap100 ( MAP_100TH_MM ), 113*cdf0e10cSrcweir nWinStyle ( 0 ), 114*cdf0e10cSrcweir eObjKind ( OBJ_NONE ), 115*cdf0e10cSrcweir nPolyEdit ( 0 ), 116*cdf0e10cSrcweir bEditMode ( sal_False ), 117*cdf0e10cSrcweir bSdrMode ( sal_False ), 118*cdf0e10cSrcweir bAnim ( sal_False ), 119*cdf0e10cSrcweir mpAccContext ( NULL ), 120*cdf0e10cSrcweir pModel ( NULL ), 121*cdf0e10cSrcweir pView ( NULL ) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir pUserCall = new GraphCtrlUserCall( *this ); 124*cdf0e10cSrcweir aUpdateTimer.SetTimeout( 500 ); 125*cdf0e10cSrcweir aUpdateTimer.SetTimeoutHdl( LINK( this, GraphCtrl, UpdateHdl ) ); 126*cdf0e10cSrcweir aUpdateTimer.Start(); 127*cdf0e10cSrcweir EnableRTL( sal_False ); 128*cdf0e10cSrcweir } 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir /************************************************************************* 132*cdf0e10cSrcweir |* 133*cdf0e10cSrcweir |* 134*cdf0e10cSrcweir |* 135*cdf0e10cSrcweir \************************************************************************/ 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir GraphCtrl::~GraphCtrl() 138*cdf0e10cSrcweir { 139*cdf0e10cSrcweir if( mpAccContext ) 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir mpAccContext->disposing(); 142*cdf0e10cSrcweir mpAccContext->release(); 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir delete pView; 145*cdf0e10cSrcweir delete pModel; 146*cdf0e10cSrcweir delete pUserCall; 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir /************************************************************************* 151*cdf0e10cSrcweir |* 152*cdf0e10cSrcweir |* 153*cdf0e10cSrcweir |* 154*cdf0e10cSrcweir \************************************************************************/ 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir void GraphCtrl::SetWinStyle( WinBits nWinBits ) 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir nWinStyle = nWinBits; 159*cdf0e10cSrcweir bAnim = ( nWinStyle & WB_ANIMATION ) == WB_ANIMATION; 160*cdf0e10cSrcweir bSdrMode = ( nWinStyle & WB_SDRMODE ) == WB_SDRMODE; 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); 163*cdf0e10cSrcweir SetBackground( Wallpaper( rStyleSettings.GetWindowColor() ) ); 164*cdf0e10cSrcweir SetMapMode( aMap100 ); 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir delete pView; 167*cdf0e10cSrcweir pView = NULL; 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir delete pModel; 170*cdf0e10cSrcweir pModel = NULL; 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir if ( bSdrMode ) 173*cdf0e10cSrcweir InitSdrModel(); 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir /************************************************************************* 178*cdf0e10cSrcweir |* 179*cdf0e10cSrcweir |* 180*cdf0e10cSrcweir |* 181*cdf0e10cSrcweir \************************************************************************/ 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir void GraphCtrl::InitSdrModel() 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir ::vos::OGuard aGuard (Application::GetSolarMutex()); 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir SdrPage* pPage; 188*cdf0e10cSrcweir 189*cdf0e10cSrcweir // alten Kram zerstoeren 190*cdf0e10cSrcweir delete pView; 191*cdf0e10cSrcweir delete pModel; 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir // Model anlegen 194*cdf0e10cSrcweir pModel = new SdrModel; 195*cdf0e10cSrcweir pModel->GetItemPool().FreezeIdRanges(); 196*cdf0e10cSrcweir pModel->SetScaleUnit( aMap100.GetMapUnit() ); 197*cdf0e10cSrcweir pModel->SetScaleFraction( Fraction( 1, 1 ) ); 198*cdf0e10cSrcweir pModel->SetDefaultFontHeight( 500 ); 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir pPage = new SdrPage( *pModel ); 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir pPage->SetSize( aGraphSize ); 203*cdf0e10cSrcweir pPage->SetBorder( 0, 0, 0, 0 ); 204*cdf0e10cSrcweir pModel->InsertPage( pPage ); 205*cdf0e10cSrcweir pModel->SetChanged( sal_False ); 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir // View anlegen 208*cdf0e10cSrcweir pView = new GraphCtrlView( pModel, this ); 209*cdf0e10cSrcweir pView->SetWorkArea( Rectangle( Point(), aGraphSize ) ); 210*cdf0e10cSrcweir pView->EnableExtendedMouseEventDispatcher( sal_True ); 211*cdf0e10cSrcweir pView->ShowSdrPage(pView->GetModel()->GetPage(0)); 212*cdf0e10cSrcweir // pView->ShowSdrPage(pView->GetModel()->GetPage(0)); 213*cdf0e10cSrcweir pView->SetFrameDragSingles( sal_True ); 214*cdf0e10cSrcweir pView->SetMarkedPointsSmooth( SDRPATHSMOOTH_SYMMETRIC ); 215*cdf0e10cSrcweir pView->SetEditMode( sal_True ); 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir // #i72889# set neeeded flags 218*cdf0e10cSrcweir pView->SetPagePaintingAllowed(false); 219*cdf0e10cSrcweir pView->SetBufferedOutputAllowed(true); 220*cdf0e10cSrcweir pView->SetBufferedOverlayAllowed(true); 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir // Tell the accessibility object about the changes. 223*cdf0e10cSrcweir if (mpAccContext != NULL) 224*cdf0e10cSrcweir mpAccContext->setModelAndView (pModel, pView); 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir /************************************************************************* 229*cdf0e10cSrcweir |* 230*cdf0e10cSrcweir |* 231*cdf0e10cSrcweir |* 232*cdf0e10cSrcweir \************************************************************************/ 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir void GraphCtrl::SetGraphic( const Graphic& rGraphic, sal_Bool bNewModel ) 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir // Bitmaps dithern wir ggf. fuer die Anzeige 237*cdf0e10cSrcweir if ( !bAnim && ( rGraphic.GetType() == GRAPHIC_BITMAP ) ) 238*cdf0e10cSrcweir { 239*cdf0e10cSrcweir if ( rGraphic.IsTransparent() ) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir Bitmap aBmp( rGraphic.GetBitmap() ); 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir DitherBitmap( aBmp ); 244*cdf0e10cSrcweir aGraphic = Graphic( BitmapEx( aBmp, rGraphic.GetBitmapEx().GetMask() ) ); 245*cdf0e10cSrcweir } 246*cdf0e10cSrcweir else 247*cdf0e10cSrcweir { 248*cdf0e10cSrcweir Bitmap aBmp( rGraphic.GetBitmap() ); 249*cdf0e10cSrcweir DitherBitmap( aBmp ); 250*cdf0e10cSrcweir aGraphic = aBmp; 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir else 254*cdf0e10cSrcweir aGraphic = rGraphic; 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir if ( aGraphic.GetPrefMapMode().GetMapUnit() == MAP_PIXEL ) 257*cdf0e10cSrcweir aGraphSize = Application::GetDefaultDevice()->PixelToLogic( aGraphic.GetPrefSize(), aMap100 ); 258*cdf0e10cSrcweir else 259*cdf0e10cSrcweir aGraphSize = OutputDevice::LogicToLogic( aGraphic.GetPrefSize(), aGraphic.GetPrefMapMode(), aMap100 ); 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir if ( bSdrMode && bNewModel ) 262*cdf0e10cSrcweir InitSdrModel(); 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir if ( aGraphSizeLink.IsSet() ) 265*cdf0e10cSrcweir aGraphSizeLink.Call( this ); 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir Resize(); 268*cdf0e10cSrcweir Invalidate(); 269*cdf0e10cSrcweir } 270*cdf0e10cSrcweir 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir /************************************************************************* 273*cdf0e10cSrcweir |* 274*cdf0e10cSrcweir |* 275*cdf0e10cSrcweir |* 276*cdf0e10cSrcweir \************************************************************************/ 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir void GraphCtrl::Resize() 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir Control::Resize(); 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir if ( aGraphSize.Width() && aGraphSize.Height() ) 283*cdf0e10cSrcweir { 284*cdf0e10cSrcweir MapMode aDisplayMap( aMap100 ); 285*cdf0e10cSrcweir Point aNewPos; 286*cdf0e10cSrcweir Size aNewSize; 287*cdf0e10cSrcweir const Size aWinSize = PixelToLogic( GetOutputSizePixel(), aDisplayMap ); 288*cdf0e10cSrcweir const long nWidth = aWinSize.Width(); 289*cdf0e10cSrcweir const long nHeight = aWinSize.Height(); 290*cdf0e10cSrcweir double fGrfWH = (double) aGraphSize.Width() / aGraphSize.Height(); 291*cdf0e10cSrcweir double fWinWH = (double) nWidth / nHeight; 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir // Bitmap an Thumbgroesse anpassen 294*cdf0e10cSrcweir if ( fGrfWH < fWinWH) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir aNewSize.Width() = (long) ( (double) nHeight * fGrfWH ); 297*cdf0e10cSrcweir aNewSize.Height()= nHeight; 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir else 300*cdf0e10cSrcweir { 301*cdf0e10cSrcweir aNewSize.Width() = nWidth; 302*cdf0e10cSrcweir aNewSize.Height()= (long) ( (double) nWidth / fGrfWH ); 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir aNewPos.X() = ( nWidth - aNewSize.Width() ) >> 1; 306*cdf0e10cSrcweir aNewPos.Y() = ( nHeight - aNewSize.Height() ) >> 1; 307*cdf0e10cSrcweir 308*cdf0e10cSrcweir // MapMode fuer Engine umsetzen 309*cdf0e10cSrcweir aDisplayMap.SetScaleX( Fraction( aNewSize.Width(), aGraphSize.Width() ) ); 310*cdf0e10cSrcweir aDisplayMap.SetScaleY( Fraction( aNewSize.Height(), aGraphSize.Height() ) ); 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir aDisplayMap.SetOrigin( LogicToLogic( aNewPos, aMap100, aDisplayMap ) ); 313*cdf0e10cSrcweir SetMapMode( aDisplayMap ); 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir Invalidate(); 317*cdf0e10cSrcweir } 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir /************************************************************************* 321*cdf0e10cSrcweir |* 322*cdf0e10cSrcweir |* 323*cdf0e10cSrcweir |* 324*cdf0e10cSrcweir \************************************************************************/ 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir void GraphCtrl::Paint( const Rectangle& rRect ) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir // #i72889# used splitted repaint to be able to paint an own background 329*cdf0e10cSrcweir // even to the buffered view 330*cdf0e10cSrcweir const bool bGraphicValid(GRAPHIC_NONE != aGraphic.GetType()); 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir if(bSdrMode) 333*cdf0e10cSrcweir { 334*cdf0e10cSrcweir SdrPaintWindow* pPaintWindow = pView->BeginCompleteRedraw(this); 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir if(bGraphicValid) 337*cdf0e10cSrcweir { 338*cdf0e10cSrcweir OutputDevice& rTarget = pPaintWindow->GetTargetOutputDevice(); 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir rTarget.SetBackground(GetBackground()); 341*cdf0e10cSrcweir rTarget.Erase(); 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir aGraphic.Draw(&rTarget, Point(), aGraphSize); 344*cdf0e10cSrcweir } 345*cdf0e10cSrcweir 346*cdf0e10cSrcweir const Region aRepaintRegion(rRect); 347*cdf0e10cSrcweir pView->DoCompleteRedraw(*pPaintWindow, aRepaintRegion); 348*cdf0e10cSrcweir pView->EndCompleteRedraw(*pPaintWindow, true); 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir else 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir // #i73381# in non-SdrMode, paint to local directly 353*cdf0e10cSrcweir if(bGraphicValid) 354*cdf0e10cSrcweir { 355*cdf0e10cSrcweir aGraphic.Draw(this, Point(), aGraphSize); 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir } 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir /************************************************************************* 362*cdf0e10cSrcweir |* 363*cdf0e10cSrcweir |* 364*cdf0e10cSrcweir |* 365*cdf0e10cSrcweir \************************************************************************/ 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir void GraphCtrl::SdrObjChanged( const SdrObject& ) 368*cdf0e10cSrcweir { 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir 372*cdf0e10cSrcweir /************************************************************************* 373*cdf0e10cSrcweir |* 374*cdf0e10cSrcweir |* 375*cdf0e10cSrcweir |* 376*cdf0e10cSrcweir \************************************************************************/ 377*cdf0e10cSrcweir 378*cdf0e10cSrcweir void GraphCtrl::SdrObjCreated( const SdrObject& ) 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir } 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir 383*cdf0e10cSrcweir /************************************************************************* 384*cdf0e10cSrcweir |* 385*cdf0e10cSrcweir |* 386*cdf0e10cSrcweir |* 387*cdf0e10cSrcweir \************************************************************************/ 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir void GraphCtrl::MarkListHasChanged() 390*cdf0e10cSrcweir { 391*cdf0e10cSrcweir if ( aMarkObjLink.IsSet() ) 392*cdf0e10cSrcweir aMarkObjLink.Call( this ); 393*cdf0e10cSrcweir } 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir /************************************************************************* 397*cdf0e10cSrcweir |* 398*cdf0e10cSrcweir |* 399*cdf0e10cSrcweir |* 400*cdf0e10cSrcweir \************************************************************************/ 401*cdf0e10cSrcweir 402*cdf0e10cSrcweir void GraphCtrl::KeyInput( const KeyEvent& rKEvt ) 403*cdf0e10cSrcweir { 404*cdf0e10cSrcweir KeyCode aCode( rKEvt.GetKeyCode() ); 405*cdf0e10cSrcweir sal_Bool bProc = sal_False; 406*cdf0e10cSrcweir 407*cdf0e10cSrcweir switch ( aCode.GetCode() ) 408*cdf0e10cSrcweir { 409*cdf0e10cSrcweir case KEY_DELETE: 410*cdf0e10cSrcweir case KEY_BACKSPACE: 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir if ( bSdrMode ) 413*cdf0e10cSrcweir { 414*cdf0e10cSrcweir pView->DeleteMarked(); 415*cdf0e10cSrcweir bProc = sal_True; 416*cdf0e10cSrcweir if( !pView->AreObjectsMarked() ) 417*cdf0e10cSrcweir ((Dialog*)GetParent())->GrabFocusToFirstControl(); 418*cdf0e10cSrcweir } 419*cdf0e10cSrcweir } 420*cdf0e10cSrcweir break; 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir case KEY_ESCAPE: 423*cdf0e10cSrcweir { 424*cdf0e10cSrcweir if ( bSdrMode ) 425*cdf0e10cSrcweir { 426*cdf0e10cSrcweir if ( pView->IsAction() ) 427*cdf0e10cSrcweir { 428*cdf0e10cSrcweir pView->BrkAction(); 429*cdf0e10cSrcweir } 430*cdf0e10cSrcweir else if ( pView->AreObjectsMarked() ) 431*cdf0e10cSrcweir { 432*cdf0e10cSrcweir const SdrHdlList& rHdlList = pView->GetHdlList(); 433*cdf0e10cSrcweir SdrHdl* pHdl = rHdlList.GetFocusHdl(); 434*cdf0e10cSrcweir 435*cdf0e10cSrcweir if(pHdl) 436*cdf0e10cSrcweir { 437*cdf0e10cSrcweir ((SdrHdlList&)rHdlList).ResetFocusHdl(); 438*cdf0e10cSrcweir } 439*cdf0e10cSrcweir else 440*cdf0e10cSrcweir { 441*cdf0e10cSrcweir ((Dialog*)GetParent())->GrabFocusToFirstControl(); 442*cdf0e10cSrcweir } 443*cdf0e10cSrcweir } 444*cdf0e10cSrcweir else 445*cdf0e10cSrcweir { 446*cdf0e10cSrcweir ((Dialog*)GetParent())->GrabFocusToFirstControl(); 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir bProc = sal_True; 449*cdf0e10cSrcweir } 450*cdf0e10cSrcweir } 451*cdf0e10cSrcweir break; 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir case KEY_F11: 454*cdf0e10cSrcweir case KEY_TAB: 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir if( bSdrMode ) 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir if( !aCode.IsMod1() && !aCode.IsMod2() ) 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir bool bForward = !aCode.IsShift(); 461*cdf0e10cSrcweir // select next object 462*cdf0e10cSrcweir if ( ! pView->MarkNextObj( bForward )) 463*cdf0e10cSrcweir { 464*cdf0e10cSrcweir // At first or last object. Cycle to the other end 465*cdf0e10cSrcweir // of the list. 466*cdf0e10cSrcweir pView->UnmarkAllObj(); 467*cdf0e10cSrcweir pView->MarkNextObj (bForward); 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir bProc = sal_True; 470*cdf0e10cSrcweir } 471*cdf0e10cSrcweir else if(aCode.IsMod1()) 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir // select next handle 474*cdf0e10cSrcweir const SdrHdlList& rHdlList = pView->GetHdlList(); 475*cdf0e10cSrcweir sal_Bool bForward(!aCode.IsShift()); 476*cdf0e10cSrcweir 477*cdf0e10cSrcweir ((SdrHdlList&)rHdlList).TravelFocusHdl(bForward); 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir bProc = true; 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir } 482*cdf0e10cSrcweir } 483*cdf0e10cSrcweir break; 484*cdf0e10cSrcweir 485*cdf0e10cSrcweir case KEY_END: 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir 488*cdf0e10cSrcweir if ( aCode.IsMod1() ) 489*cdf0e10cSrcweir { 490*cdf0e10cSrcweir // #97016# mark last object 491*cdf0e10cSrcweir pView->UnmarkAllObj(); 492*cdf0e10cSrcweir pView->MarkNextObj(sal_False); 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir bProc = true; 495*cdf0e10cSrcweir } 496*cdf0e10cSrcweir } 497*cdf0e10cSrcweir break; 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir case KEY_HOME: 500*cdf0e10cSrcweir { 501*cdf0e10cSrcweir if ( aCode.IsMod1() ) 502*cdf0e10cSrcweir { 503*cdf0e10cSrcweir pView->UnmarkAllObj(); 504*cdf0e10cSrcweir pView->MarkNextObj(sal_True); 505*cdf0e10cSrcweir 506*cdf0e10cSrcweir bProc = true; 507*cdf0e10cSrcweir } 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir break; 510*cdf0e10cSrcweir 511*cdf0e10cSrcweir case KEY_UP: 512*cdf0e10cSrcweir case KEY_DOWN: 513*cdf0e10cSrcweir case KEY_LEFT: 514*cdf0e10cSrcweir case KEY_RIGHT: 515*cdf0e10cSrcweir { 516*cdf0e10cSrcweir long nX = 0; 517*cdf0e10cSrcweir long nY = 0; 518*cdf0e10cSrcweir 519*cdf0e10cSrcweir if (aCode.GetCode() == KEY_UP) 520*cdf0e10cSrcweir { 521*cdf0e10cSrcweir // Scroll nach oben 522*cdf0e10cSrcweir nX = 0; 523*cdf0e10cSrcweir nY =-1; 524*cdf0e10cSrcweir } 525*cdf0e10cSrcweir else if (aCode.GetCode() == KEY_DOWN) 526*cdf0e10cSrcweir { 527*cdf0e10cSrcweir // Scroll nach unten 528*cdf0e10cSrcweir nX = 0; 529*cdf0e10cSrcweir nY = 1; 530*cdf0e10cSrcweir } 531*cdf0e10cSrcweir else if (aCode.GetCode() == KEY_LEFT) 532*cdf0e10cSrcweir { 533*cdf0e10cSrcweir // Scroll nach links 534*cdf0e10cSrcweir nX =-1; 535*cdf0e10cSrcweir nY = 0; 536*cdf0e10cSrcweir } 537*cdf0e10cSrcweir else if (aCode.GetCode() == KEY_RIGHT) 538*cdf0e10cSrcweir { 539*cdf0e10cSrcweir // Scroll nach rechts 540*cdf0e10cSrcweir nX = 1; 541*cdf0e10cSrcweir nY = 0; 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir if (pView->AreObjectsMarked() && !aCode.IsMod1() ) 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir if(aCode.IsMod2()) 547*cdf0e10cSrcweir { 548*cdf0e10cSrcweir // #97016# move in 1 pixel distance 549*cdf0e10cSrcweir Size aLogicSizeOnePixel = PixelToLogic(Size(1,1)); 550*cdf0e10cSrcweir nX *= aLogicSizeOnePixel.Width(); 551*cdf0e10cSrcweir nY *= aLogicSizeOnePixel.Height(); 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir else 554*cdf0e10cSrcweir { 555*cdf0e10cSrcweir // old, fixed move distance 556*cdf0e10cSrcweir nX *= 100; 557*cdf0e10cSrcweir nY *= 100; 558*cdf0e10cSrcweir } 559*cdf0e10cSrcweir 560*cdf0e10cSrcweir // #97016# II 561*cdf0e10cSrcweir const SdrHdlList& rHdlList = pView->GetHdlList(); 562*cdf0e10cSrcweir SdrHdl* pHdl = rHdlList.GetFocusHdl(); 563*cdf0e10cSrcweir 564*cdf0e10cSrcweir if(0L == pHdl) 565*cdf0e10cSrcweir { 566*cdf0e10cSrcweir // #90129# restrict movement to WorkArea 567*cdf0e10cSrcweir const Rectangle& rWorkArea = pView->GetWorkArea(); 568*cdf0e10cSrcweir 569*cdf0e10cSrcweir if(!rWorkArea.IsEmpty()) 570*cdf0e10cSrcweir { 571*cdf0e10cSrcweir Rectangle aMarkRect(pView->GetMarkedObjRect()); 572*cdf0e10cSrcweir aMarkRect.Move(nX, nY); 573*cdf0e10cSrcweir 574*cdf0e10cSrcweir if(!aMarkRect.IsInside(rWorkArea)) 575*cdf0e10cSrcweir { 576*cdf0e10cSrcweir if(aMarkRect.Left() < rWorkArea.Left()) 577*cdf0e10cSrcweir { 578*cdf0e10cSrcweir nX += rWorkArea.Left() - aMarkRect.Left(); 579*cdf0e10cSrcweir } 580*cdf0e10cSrcweir 581*cdf0e10cSrcweir if(aMarkRect.Right() > rWorkArea.Right()) 582*cdf0e10cSrcweir { 583*cdf0e10cSrcweir nX -= aMarkRect.Right() - rWorkArea.Right(); 584*cdf0e10cSrcweir } 585*cdf0e10cSrcweir 586*cdf0e10cSrcweir if(aMarkRect.Top() < rWorkArea.Top()) 587*cdf0e10cSrcweir { 588*cdf0e10cSrcweir nY += rWorkArea.Top() - aMarkRect.Top(); 589*cdf0e10cSrcweir } 590*cdf0e10cSrcweir 591*cdf0e10cSrcweir if(aMarkRect.Bottom() > rWorkArea.Bottom()) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir nY -= aMarkRect.Bottom() - rWorkArea.Bottom(); 594*cdf0e10cSrcweir } 595*cdf0e10cSrcweir } 596*cdf0e10cSrcweir } 597*cdf0e10cSrcweir 598*cdf0e10cSrcweir // no handle selected 599*cdf0e10cSrcweir if(0 != nX || 0 != nY) 600*cdf0e10cSrcweir { 601*cdf0e10cSrcweir pView->MoveAllMarked(Size(nX, nY)); 602*cdf0e10cSrcweir } 603*cdf0e10cSrcweir } 604*cdf0e10cSrcweir else 605*cdf0e10cSrcweir { 606*cdf0e10cSrcweir // move handle with index nHandleIndex 607*cdf0e10cSrcweir if(pHdl && (nX || nY)) 608*cdf0e10cSrcweir { 609*cdf0e10cSrcweir // now move the Handle (nX, nY) 610*cdf0e10cSrcweir Point aStartPoint(pHdl->GetPos()); 611*cdf0e10cSrcweir Point aEndPoint(pHdl->GetPos() + Point(nX, nY)); 612*cdf0e10cSrcweir const SdrDragStat& rDragStat = pView->GetDragStat(); 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir // start dragging 615*cdf0e10cSrcweir pView->BegDragObj(aStartPoint, 0, pHdl, 0); 616*cdf0e10cSrcweir 617*cdf0e10cSrcweir if(pView->IsDragObj()) 618*cdf0e10cSrcweir { 619*cdf0e10cSrcweir FASTBOOL bWasNoSnap = rDragStat.IsNoSnap(); 620*cdf0e10cSrcweir sal_Bool bWasSnapEnabled = pView->IsSnapEnabled(); 621*cdf0e10cSrcweir 622*cdf0e10cSrcweir // switch snapping off 623*cdf0e10cSrcweir if(!bWasNoSnap) 624*cdf0e10cSrcweir ((SdrDragStat&)rDragStat).SetNoSnap(sal_True); 625*cdf0e10cSrcweir if(bWasSnapEnabled) 626*cdf0e10cSrcweir pView->SetSnapEnabled(sal_False); 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir pView->MovAction(aEndPoint); 629*cdf0e10cSrcweir pView->EndDragObj(); 630*cdf0e10cSrcweir 631*cdf0e10cSrcweir // restore snap 632*cdf0e10cSrcweir if(!bWasNoSnap) 633*cdf0e10cSrcweir ((SdrDragStat&)rDragStat).SetNoSnap(bWasNoSnap); 634*cdf0e10cSrcweir if(bWasSnapEnabled) 635*cdf0e10cSrcweir pView->SetSnapEnabled(bWasSnapEnabled); 636*cdf0e10cSrcweir } 637*cdf0e10cSrcweir } 638*cdf0e10cSrcweir } 639*cdf0e10cSrcweir 640*cdf0e10cSrcweir bProc = true; 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir } 643*cdf0e10cSrcweir break; 644*cdf0e10cSrcweir 645*cdf0e10cSrcweir case KEY_SPACE: 646*cdf0e10cSrcweir { 647*cdf0e10cSrcweir const SdrHdlList& rHdlList = pView->GetHdlList(); 648*cdf0e10cSrcweir SdrHdl* pHdl = rHdlList.GetFocusHdl(); 649*cdf0e10cSrcweir 650*cdf0e10cSrcweir if(pHdl) 651*cdf0e10cSrcweir { 652*cdf0e10cSrcweir if(pHdl->GetKind() == HDL_POLY) 653*cdf0e10cSrcweir { 654*cdf0e10cSrcweir // rescue ID of point with focus 655*cdf0e10cSrcweir sal_uInt32 nPol(pHdl->GetPolyNum()); 656*cdf0e10cSrcweir sal_uInt32 nPnt(pHdl->GetPointNum()); 657*cdf0e10cSrcweir 658*cdf0e10cSrcweir if(pView->IsPointMarked(*pHdl)) 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir if(rKEvt.GetKeyCode().IsShift()) 661*cdf0e10cSrcweir { 662*cdf0e10cSrcweir pView->UnmarkPoint(*pHdl); 663*cdf0e10cSrcweir } 664*cdf0e10cSrcweir } 665*cdf0e10cSrcweir else 666*cdf0e10cSrcweir { 667*cdf0e10cSrcweir if(!rKEvt.GetKeyCode().IsShift()) 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir pView->UnmarkAllPoints(); 670*cdf0e10cSrcweir } 671*cdf0e10cSrcweir 672*cdf0e10cSrcweir pView->MarkPoint(*pHdl); 673*cdf0e10cSrcweir } 674*cdf0e10cSrcweir 675*cdf0e10cSrcweir if(0L == rHdlList.GetFocusHdl()) 676*cdf0e10cSrcweir { 677*cdf0e10cSrcweir // restore point with focus 678*cdf0e10cSrcweir SdrHdl* pNewOne = 0L; 679*cdf0e10cSrcweir 680*cdf0e10cSrcweir for(sal_uInt32 a(0); !pNewOne && a < rHdlList.GetHdlCount(); a++) 681*cdf0e10cSrcweir { 682*cdf0e10cSrcweir SdrHdl* pAct = rHdlList.GetHdl(a); 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir if(pAct 685*cdf0e10cSrcweir && pAct->GetKind() == HDL_POLY 686*cdf0e10cSrcweir && pAct->GetPolyNum() == nPol 687*cdf0e10cSrcweir && pAct->GetPointNum() == nPnt) 688*cdf0e10cSrcweir { 689*cdf0e10cSrcweir pNewOne = pAct; 690*cdf0e10cSrcweir } 691*cdf0e10cSrcweir } 692*cdf0e10cSrcweir 693*cdf0e10cSrcweir if(pNewOne) 694*cdf0e10cSrcweir { 695*cdf0e10cSrcweir ((SdrHdlList&)rHdlList).SetFocusHdl(pNewOne); 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir } 698*cdf0e10cSrcweir 699*cdf0e10cSrcweir bProc = sal_True; 700*cdf0e10cSrcweir } 701*cdf0e10cSrcweir } 702*cdf0e10cSrcweir } 703*cdf0e10cSrcweir break; 704*cdf0e10cSrcweir 705*cdf0e10cSrcweir default: 706*cdf0e10cSrcweir break; 707*cdf0e10cSrcweir } 708*cdf0e10cSrcweir 709*cdf0e10cSrcweir if ( !bProc ) 710*cdf0e10cSrcweir Control::KeyInput( rKEvt ); 711*cdf0e10cSrcweir else 712*cdf0e10cSrcweir ReleaseMouse(); 713*cdf0e10cSrcweir } 714*cdf0e10cSrcweir 715*cdf0e10cSrcweir 716*cdf0e10cSrcweir /************************************************************************* 717*cdf0e10cSrcweir |* 718*cdf0e10cSrcweir |* 719*cdf0e10cSrcweir |* 720*cdf0e10cSrcweir \************************************************************************/ 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir void GraphCtrl::MouseButtonDown( const MouseEvent& rMEvt ) 723*cdf0e10cSrcweir { 724*cdf0e10cSrcweir if ( bSdrMode && ( rMEvt.GetClicks() < 2 ) ) 725*cdf0e10cSrcweir { 726*cdf0e10cSrcweir const Point aLogPt( PixelToLogic( rMEvt.GetPosPixel() ) ); 727*cdf0e10cSrcweir 728*cdf0e10cSrcweir if ( !Rectangle( Point(), aGraphSize ).IsInside( aLogPt ) && !pView->IsEditMode() ) 729*cdf0e10cSrcweir Control::MouseButtonDown( rMEvt ); 730*cdf0e10cSrcweir else 731*cdf0e10cSrcweir { 732*cdf0e10cSrcweir // Focus anziehen fuer Key-Inputs 733*cdf0e10cSrcweir GrabFocus(); 734*cdf0e10cSrcweir 735*cdf0e10cSrcweir if ( nPolyEdit ) 736*cdf0e10cSrcweir { 737*cdf0e10cSrcweir SdrViewEvent aVEvt; 738*cdf0e10cSrcweir SdrHitKind eHit = pView->PickAnything( rMEvt, SDRMOUSEBUTTONDOWN, aVEvt ); 739*cdf0e10cSrcweir 740*cdf0e10cSrcweir if ( nPolyEdit == SID_BEZIER_INSERT && eHit == SDRHIT_MARKEDOBJECT ) 741*cdf0e10cSrcweir pView->BegInsObjPoint( aLogPt, rMEvt.IsMod1()); 742*cdf0e10cSrcweir else 743*cdf0e10cSrcweir pView->MouseButtonDown( rMEvt, this ); 744*cdf0e10cSrcweir } 745*cdf0e10cSrcweir else 746*cdf0e10cSrcweir pView->MouseButtonDown( rMEvt, this ); 747*cdf0e10cSrcweir } 748*cdf0e10cSrcweir 749*cdf0e10cSrcweir SdrObject* pCreateObj = pView->GetCreateObj(); 750*cdf0e10cSrcweir 751*cdf0e10cSrcweir // Wir wollen das Inserten mitbekommen 752*cdf0e10cSrcweir if ( pCreateObj && !pCreateObj->GetUserCall() ) 753*cdf0e10cSrcweir pCreateObj->SetUserCall( pUserCall ); 754*cdf0e10cSrcweir 755*cdf0e10cSrcweir SetPointer( pView->GetPreferedPointer( aLogPt, this ) ); 756*cdf0e10cSrcweir } 757*cdf0e10cSrcweir else 758*cdf0e10cSrcweir Control::MouseButtonDown( rMEvt ); 759*cdf0e10cSrcweir } 760*cdf0e10cSrcweir 761*cdf0e10cSrcweir 762*cdf0e10cSrcweir /************************************************************************* 763*cdf0e10cSrcweir |* 764*cdf0e10cSrcweir |* 765*cdf0e10cSrcweir |* 766*cdf0e10cSrcweir \************************************************************************/ 767*cdf0e10cSrcweir 768*cdf0e10cSrcweir void GraphCtrl::MouseMove(const MouseEvent& rMEvt) 769*cdf0e10cSrcweir { 770*cdf0e10cSrcweir const Point aLogPos( PixelToLogic( rMEvt.GetPosPixel() ) ); 771*cdf0e10cSrcweir 772*cdf0e10cSrcweir if ( bSdrMode ) 773*cdf0e10cSrcweir { 774*cdf0e10cSrcweir pView->MouseMove( rMEvt, this ); 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir if( ( SID_BEZIER_INSERT == nPolyEdit ) && 777*cdf0e10cSrcweir !pView->PickHandle( aLogPos ) && 778*cdf0e10cSrcweir !pView->IsInsObjPoint() ) 779*cdf0e10cSrcweir { 780*cdf0e10cSrcweir SetPointer( POINTER_CROSS ); 781*cdf0e10cSrcweir } 782*cdf0e10cSrcweir else 783*cdf0e10cSrcweir SetPointer( pView->GetPreferedPointer( aLogPos, this ) ); 784*cdf0e10cSrcweir } 785*cdf0e10cSrcweir else 786*cdf0e10cSrcweir Control::MouseButtonUp( rMEvt ); 787*cdf0e10cSrcweir 788*cdf0e10cSrcweir if ( aMousePosLink.IsSet() ) 789*cdf0e10cSrcweir { 790*cdf0e10cSrcweir if ( Rectangle( Point(), aGraphSize ).IsInside( aLogPos ) ) 791*cdf0e10cSrcweir aMousePos = aLogPos; 792*cdf0e10cSrcweir else 793*cdf0e10cSrcweir aMousePos = Point(); 794*cdf0e10cSrcweir 795*cdf0e10cSrcweir aMousePosLink.Call( this ); 796*cdf0e10cSrcweir } 797*cdf0e10cSrcweir } 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir 800*cdf0e10cSrcweir /************************************************************************* 801*cdf0e10cSrcweir |* 802*cdf0e10cSrcweir |* 803*cdf0e10cSrcweir |* 804*cdf0e10cSrcweir \************************************************************************/ 805*cdf0e10cSrcweir 806*cdf0e10cSrcweir void GraphCtrl::MouseButtonUp(const MouseEvent& rMEvt) 807*cdf0e10cSrcweir { 808*cdf0e10cSrcweir if ( bSdrMode ) 809*cdf0e10cSrcweir { 810*cdf0e10cSrcweir if ( pView->IsInsObjPoint() ) 811*cdf0e10cSrcweir pView->EndInsObjPoint( SDRCREATE_FORCEEND ); 812*cdf0e10cSrcweir else 813*cdf0e10cSrcweir pView->MouseButtonUp( rMEvt, this ); 814*cdf0e10cSrcweir 815*cdf0e10cSrcweir ReleaseMouse(); 816*cdf0e10cSrcweir SetPointer( pView->GetPreferedPointer( PixelToLogic( rMEvt.GetPosPixel() ), this ) ); 817*cdf0e10cSrcweir } 818*cdf0e10cSrcweir else 819*cdf0e10cSrcweir Control::MouseButtonUp( rMEvt ); 820*cdf0e10cSrcweir } 821*cdf0e10cSrcweir 822*cdf0e10cSrcweir 823*cdf0e10cSrcweir /************************************************************************* 824*cdf0e10cSrcweir |* 825*cdf0e10cSrcweir |* 826*cdf0e10cSrcweir |* 827*cdf0e10cSrcweir \************************************************************************/ 828*cdf0e10cSrcweir 829*cdf0e10cSrcweir SdrObject* GraphCtrl::GetSelectedSdrObject() const 830*cdf0e10cSrcweir { 831*cdf0e10cSrcweir SdrObject* pSdrObj = NULL; 832*cdf0e10cSrcweir 833*cdf0e10cSrcweir if ( bSdrMode ) 834*cdf0e10cSrcweir { 835*cdf0e10cSrcweir const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 836*cdf0e10cSrcweir 837*cdf0e10cSrcweir if ( rMarkList.GetMarkCount() == 1 ) 838*cdf0e10cSrcweir pSdrObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj(); 839*cdf0e10cSrcweir } 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir return pSdrObj; 842*cdf0e10cSrcweir } 843*cdf0e10cSrcweir 844*cdf0e10cSrcweir 845*cdf0e10cSrcweir /************************************************************************* 846*cdf0e10cSrcweir |* 847*cdf0e10cSrcweir |* 848*cdf0e10cSrcweir |* 849*cdf0e10cSrcweir \************************************************************************/ 850*cdf0e10cSrcweir 851*cdf0e10cSrcweir void GraphCtrl::SetEditMode( const sal_Bool _bEditMode ) 852*cdf0e10cSrcweir { 853*cdf0e10cSrcweir if ( bSdrMode ) 854*cdf0e10cSrcweir { 855*cdf0e10cSrcweir bEditMode = _bEditMode; 856*cdf0e10cSrcweir pView->SetEditMode( bEditMode ); 857*cdf0e10cSrcweir eObjKind = OBJ_NONE; 858*cdf0e10cSrcweir pView->SetCurrentObj( sal::static_int_cast< sal_uInt16 >( eObjKind ) ); 859*cdf0e10cSrcweir } 860*cdf0e10cSrcweir else 861*cdf0e10cSrcweir bEditMode = sal_False; 862*cdf0e10cSrcweir } 863*cdf0e10cSrcweir 864*cdf0e10cSrcweir 865*cdf0e10cSrcweir /************************************************************************* 866*cdf0e10cSrcweir |* 867*cdf0e10cSrcweir |* 868*cdf0e10cSrcweir |* 869*cdf0e10cSrcweir \************************************************************************/ 870*cdf0e10cSrcweir 871*cdf0e10cSrcweir void GraphCtrl::SetPolyEditMode( const sal_uInt16 _nPolyEdit ) 872*cdf0e10cSrcweir { 873*cdf0e10cSrcweir if ( bSdrMode && ( _nPolyEdit != nPolyEdit ) ) 874*cdf0e10cSrcweir { 875*cdf0e10cSrcweir nPolyEdit = _nPolyEdit; 876*cdf0e10cSrcweir pView->SetFrameDragSingles( nPolyEdit == 0 ); 877*cdf0e10cSrcweir } 878*cdf0e10cSrcweir else 879*cdf0e10cSrcweir nPolyEdit = 0; 880*cdf0e10cSrcweir } 881*cdf0e10cSrcweir 882*cdf0e10cSrcweir 883*cdf0e10cSrcweir /************************************************************************* 884*cdf0e10cSrcweir |* 885*cdf0e10cSrcweir |* 886*cdf0e10cSrcweir |* 887*cdf0e10cSrcweir \************************************************************************/ 888*cdf0e10cSrcweir 889*cdf0e10cSrcweir void GraphCtrl::SetObjKind( const SdrObjKind _eObjKind ) 890*cdf0e10cSrcweir { 891*cdf0e10cSrcweir if ( bSdrMode ) 892*cdf0e10cSrcweir { 893*cdf0e10cSrcweir bEditMode = sal_False; 894*cdf0e10cSrcweir pView->SetEditMode( bEditMode ); 895*cdf0e10cSrcweir eObjKind = _eObjKind; 896*cdf0e10cSrcweir pView->SetCurrentObj( sal::static_int_cast< sal_uInt16 >( eObjKind ) ); 897*cdf0e10cSrcweir } 898*cdf0e10cSrcweir else 899*cdf0e10cSrcweir eObjKind = OBJ_NONE; 900*cdf0e10cSrcweir } 901*cdf0e10cSrcweir 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir /************************************************************************* 904*cdf0e10cSrcweir |* 905*cdf0e10cSrcweir |* 906*cdf0e10cSrcweir |* 907*cdf0e10cSrcweir \************************************************************************/ 908*cdf0e10cSrcweir 909*cdf0e10cSrcweir String GraphCtrl::GetStringFromDouble( const double& rDouble ) 910*cdf0e10cSrcweir { 911*cdf0e10cSrcweir sal_Unicode cSep = 912*cdf0e10cSrcweir SvtSysLocale().GetLocaleData().getNumDecimalSep().GetChar(0); 913*cdf0e10cSrcweir String aStr( ::rtl::math::doubleToUString( rDouble, 914*cdf0e10cSrcweir rtl_math_StringFormat_F, 2, cSep )); 915*cdf0e10cSrcweir return aStr; 916*cdf0e10cSrcweir } 917*cdf0e10cSrcweir 918*cdf0e10cSrcweir 919*cdf0e10cSrcweir /************************************************************************* 920*cdf0e10cSrcweir www|* 921*cdf0e10cSrcweir |* 922*cdf0e10cSrcweir |* 923*cdf0e10cSrcweir \************************************************************************/ 924*cdf0e10cSrcweir 925*cdf0e10cSrcweir IMPL_LINK( GraphCtrl, UpdateHdl, Timer*, pTimer ) 926*cdf0e10cSrcweir { 927*cdf0e10cSrcweir if ( aUpdateLink.IsSet() ) 928*cdf0e10cSrcweir aUpdateLink.Call( this ); 929*cdf0e10cSrcweir 930*cdf0e10cSrcweir pTimer->Start(); 931*cdf0e10cSrcweir 932*cdf0e10cSrcweir return 0L; 933*cdf0e10cSrcweir } 934*cdf0e10cSrcweir 935*cdf0e10cSrcweir 936*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > GraphCtrl::CreateAccessible() 937*cdf0e10cSrcweir { 938*cdf0e10cSrcweir if( mpAccContext == NULL ) 939*cdf0e10cSrcweir { 940*cdf0e10cSrcweir Window* pParent = GetParent(); 941*cdf0e10cSrcweir 942*cdf0e10cSrcweir DBG_ASSERT( pParent, "-GraphCtrl::CreateAccessible(): No Parent!" ); 943*cdf0e10cSrcweir 944*cdf0e10cSrcweir if( pParent ) 945*cdf0e10cSrcweir { 946*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xAccParent( pParent->GetAccessible() ); 947*cdf0e10cSrcweir 948*cdf0e10cSrcweir // #103856# Disable accessibility if no model/view data available 949*cdf0e10cSrcweir if( pView && 950*cdf0e10cSrcweir pModel && 951*cdf0e10cSrcweir xAccParent.is() ) 952*cdf0e10cSrcweir { 953*cdf0e10cSrcweir mpAccContext = new SvxGraphCtrlAccessibleContext( xAccParent, *this ); 954*cdf0e10cSrcweir mpAccContext->acquire(); 955*cdf0e10cSrcweir } 956*cdf0e10cSrcweir } 957*cdf0e10cSrcweir } 958*cdf0e10cSrcweir 959*cdf0e10cSrcweir return mpAccContext; 960*cdf0e10cSrcweir } 961