1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*f6e50924SAndrew Rist * distributed with this work for additional information
6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10*f6e50924SAndrew Rist *
11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist *
13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17*f6e50924SAndrew Rist * specific language governing permissions and limitations
18*f6e50924SAndrew Rist * under the License.
19*f6e50924SAndrew Rist *
20*f6e50924SAndrew Rist *************************************************************/
21*f6e50924SAndrew Rist
22*f6e50924SAndrew 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
Changed(const SdrObject & rObj,SdrUserCallType eType,const Rectangle &)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
GraphCtrl(Window * pParent,const WinBits nWinBits)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
GraphCtrl(Window * pParent,const ResId & rResId)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
~GraphCtrl()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
SetWinStyle(WinBits nWinBits)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
InitSdrModel()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
SetGraphic(const Graphic & rGraphic,sal_Bool bNewModel)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
Resize()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
Paint(const Rectangle & rRect)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
SdrObjChanged(const SdrObject &)363cdf0e10cSrcweir void GraphCtrl::SdrObjChanged( const SdrObject& )
364cdf0e10cSrcweir {
365cdf0e10cSrcweir }
366cdf0e10cSrcweir
367cdf0e10cSrcweir
368cdf0e10cSrcweir /*************************************************************************
369cdf0e10cSrcweir |*
370cdf0e10cSrcweir |*
371cdf0e10cSrcweir |*
372cdf0e10cSrcweir \************************************************************************/
373cdf0e10cSrcweir
SdrObjCreated(const SdrObject &)374cdf0e10cSrcweir void GraphCtrl::SdrObjCreated( const SdrObject& )
375cdf0e10cSrcweir {
376cdf0e10cSrcweir }
377cdf0e10cSrcweir
378cdf0e10cSrcweir
379cdf0e10cSrcweir /*************************************************************************
380cdf0e10cSrcweir |*
381cdf0e10cSrcweir |*
382cdf0e10cSrcweir |*
383cdf0e10cSrcweir \************************************************************************/
384cdf0e10cSrcweir
MarkListHasChanged()385cdf0e10cSrcweir void GraphCtrl::MarkListHasChanged()
386cdf0e10cSrcweir {
387cdf0e10cSrcweir if ( aMarkObjLink.IsSet() )
388cdf0e10cSrcweir aMarkObjLink.Call( this );
389cdf0e10cSrcweir }
390cdf0e10cSrcweir
391cdf0e10cSrcweir
392cdf0e10cSrcweir /*************************************************************************
393cdf0e10cSrcweir |*
394cdf0e10cSrcweir |*
395cdf0e10cSrcweir |*
396cdf0e10cSrcweir \************************************************************************/
397cdf0e10cSrcweir
KeyInput(const KeyEvent & rKEvt)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
654cdf0e10cSrcweir 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
MouseButtonDown(const MouseEvent & rMEvt)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
MouseMove(const MouseEvent & rMEvt)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
MouseButtonUp(const MouseEvent & rMEvt)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
GetSelectedSdrObject() const825cdf0e10cSrcweir 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
SetEditMode(const sal_Bool _bEditMode)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
SetPolyEditMode(const sal_uInt16 _nPolyEdit)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
SetObjKind(const SdrObjKind _eObjKind)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
GetStringFromDouble(const double & rDouble)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
IMPL_LINK(GraphCtrl,UpdateHdl,Timer *,pTimer)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
CreateAccessible()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