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