Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include <com/sun/star/awt/Key.hpp>
22 :
23 : #include "showwindow.hxx"
24 :
25 : #include <unotools/syslocale.hxx>
26 : #include <sfx2/viewfrm.hxx>
27 :
28 :
29 : #include "res_bmp.hrc"
30 : #include "slideshow.hxx"
31 : #include "ViewShellBase.hxx"
32 : #include "sdresid.hxx"
33 : #include "helpids.h"
34 : #include "strings.hrc"
35 : #include <vcl/virdev.hxx>
36 :
37 : using namespace ::com::sun::star;
38 :
39 : namespace sd {
40 :
41 : static const sal_uLong HIDE_MOUSE_TIMEOUT = 10000;
42 : static const sal_uLong SHOW_MOUSE_TIMEOUT = 1000;
43 :
44 : // =============================================================================
45 :
46 0 : ShowWindow::ShowWindow( const ::rtl::Reference< SlideshowImpl >& xController, ::Window* pParent )
47 : : ::sd::Window( pParent )
48 : , mnPauseTimeout( SLIDE_NO_TIMEOUT )
49 : , mnRestartPageIndex( PAGE_NO_END )
50 : , meShowWindowMode(SHOWWINDOWMODE_NORMAL)
51 : , mbShowNavigatorAfterSpecialMode( false )
52 : , mbMouseAutoHide(true)
53 : , mbMouseCursorHidden(false)
54 : , mnFirstMouseMove(0)
55 0 : , mxController( xController )
56 : {
57 0 : SetOutDevViewType( OUTDEV_VIEWTYPE_SLIDESHOW );
58 :
59 : // Do never mirror the preview window. This explicitly includes right
60 : // to left writing environments.
61 0 : EnableRTL (sal_False);
62 :
63 0 : MapMode aMap(GetMapMode());
64 0 : aMap.SetMapUnit(MAP_100TH_MM);
65 0 : SetMapMode(aMap);
66 :
67 : // HelpId setzen
68 0 : SetHelpId( HID_SD_WIN_PRESENTATION );
69 0 : SetUniqueId( HID_SD_WIN_PRESENTATION );
70 :
71 0 : maPauseTimer.SetTimeoutHdl( LINK( this, ShowWindow, PauseTimeoutHdl ) );
72 0 : maPauseTimer.SetTimeout( 1000 );
73 0 : maMouseTimer.SetTimeoutHdl( LINK( this, ShowWindow, MouseTimeoutHdl ) );
74 0 : maMouseTimer.SetTimeout( HIDE_MOUSE_TIMEOUT );
75 :
76 0 : maShowBackground = Wallpaper( Color( COL_BLACK ) );
77 0 : SetBackground(); // avoids that VCL paints any background!
78 0 : GetParent()->Show();
79 0 : AddEventListener( LINK( this, ShowWindow, EventHdl ) );
80 0 : }
81 :
82 0 : ShowWindow::~ShowWindow(void)
83 : {
84 0 : maPauseTimer.Stop();
85 0 : maMouseTimer.Stop();
86 0 : }
87 :
88 : /*************************************************************************
89 : |*
90 : |* Keyboard event
91 : |*
92 : \************************************************************************/
93 :
94 0 : void ShowWindow::KeyInput(const KeyEvent& rKEvt)
95 : {
96 0 : bool bReturn = false;
97 :
98 0 : if( SHOWWINDOWMODE_PREVIEW == meShowWindowMode )
99 : {
100 0 : TerminateShow();
101 0 : bReturn = true;
102 : }
103 0 : else if( SHOWWINDOWMODE_END == meShowWindowMode )
104 : {
105 0 : const int nKeyCode = rKEvt.GetKeyCode().GetCode();
106 0 : switch( nKeyCode )
107 : {
108 : case KEY_PAGEUP:
109 : case KEY_LEFT:
110 : case KEY_UP:
111 : case KEY_P:
112 : case KEY_HOME:
113 : case KEY_END:
114 : case awt::Key::CONTEXTMENU:
115 : // these keys will be handled by the slide show even
116 : // while in end mode
117 0 : break;
118 : default:
119 0 : TerminateShow();
120 0 : bReturn = true;
121 : }
122 : }
123 0 : else if( SHOWWINDOWMODE_BLANK == meShowWindowMode )
124 : {
125 0 : RestartShow();
126 0 : bReturn = true;
127 : }
128 0 : else if( SHOWWINDOWMODE_PAUSE == meShowWindowMode )
129 : {
130 0 : const int nKeyCode = rKEvt.GetKeyCode().GetCode();
131 0 : switch( nKeyCode )
132 : {
133 : case KEY_ESCAPE:
134 0 : TerminateShow();
135 0 : bReturn = true;
136 0 : break;
137 : case KEY_PAGEUP:
138 : case KEY_RIGHT:
139 : case KEY_UP:
140 : case KEY_P:
141 : case KEY_HOME:
142 : case KEY_END:
143 : case awt::Key::CONTEXTMENU:
144 : // these keys will be handled by the slide show even
145 : // while in end mode
146 0 : break;
147 : default:
148 0 : RestartShow();
149 0 : bReturn = true;
150 0 : break;
151 : }
152 : }
153 :
154 0 : if( !bReturn )
155 : {
156 0 : if( mxController.is() )
157 0 : bReturn = mxController->keyInput(rKEvt);
158 :
159 0 : if( !bReturn )
160 : {
161 0 : if( mpViewShell )
162 : {
163 0 : mpViewShell->KeyInput(rKEvt,this);
164 : }
165 : else
166 : {
167 0 : Window::KeyInput(rKEvt);
168 : }
169 : }
170 : }
171 :
172 0 : if( mpViewShell )
173 0 : mpViewShell->SetActiveWindow( this );
174 0 : }
175 :
176 : /*************************************************************************
177 : |*
178 : |* MouseButtonDown event
179 : |*
180 : \************************************************************************/
181 :
182 0 : void ShowWindow::MouseButtonDown(const MouseEvent& /*rMEvt*/)
183 : {
184 0 : if( SHOWWINDOWMODE_PREVIEW == meShowWindowMode )
185 : {
186 0 : TerminateShow();
187 : }
188 0 : else if( mpViewShell )
189 : {
190 0 : mpViewShell->SetActiveWindow( this );
191 : }
192 0 : }
193 :
194 : /*************************************************************************
195 : |*
196 : |* MouseMove event
197 : |*
198 : \************************************************************************/
199 :
200 0 : void ShowWindow::MouseMove(const MouseEvent& /*rMEvt*/)
201 : {
202 0 : if( mbMouseAutoHide )
203 : {
204 0 : if( mbMouseCursorHidden )
205 : {
206 0 : if( mnFirstMouseMove )
207 : {
208 : // if this is not the first mouse move while hidden, see if
209 : // enough time has pasted to show mouse pointer again
210 0 : sal_uLong nTime = Time::GetSystemTicks();
211 0 : if( (nTime - mnFirstMouseMove) >= SHOW_MOUSE_TIMEOUT )
212 : {
213 0 : ShowPointer( sal_True );
214 0 : mnFirstMouseMove = 0;
215 0 : mbMouseCursorHidden = false;
216 0 : maMouseTimer.SetTimeout( HIDE_MOUSE_TIMEOUT );
217 0 : maMouseTimer.Start();
218 : }
219 : }
220 : else
221 : {
222 : // if this is the first mouse move, note current
223 : // time and start idle timer to cancel show mouse pointer
224 : // again if not enough mouse movement is measured
225 0 : mnFirstMouseMove = Time::GetSystemTicks();
226 0 : maMouseTimer.SetTimeout( 2*SHOW_MOUSE_TIMEOUT );
227 0 : maMouseTimer.Start();
228 : }
229 : }
230 : else
231 : {
232 : // current mousemove restarts the idle timer to hide the mouse
233 0 : maMouseTimer.Start();
234 : }
235 : }
236 :
237 0 : if( mpViewShell )
238 0 : mpViewShell->SetActiveWindow( this );
239 0 : }
240 :
241 : /*************************************************************************
242 : |*
243 : |* MouseButtonUp event
244 : |*
245 : \************************************************************************/
246 :
247 0 : void ShowWindow::MouseButtonUp(const MouseEvent& rMEvt)
248 : {
249 0 : if( SHOWWINDOWMODE_PREVIEW == meShowWindowMode )
250 : {
251 0 : TerminateShow();
252 : }
253 0 : else if( (SHOWWINDOWMODE_END == meShowWindowMode) && !rMEvt.IsRight() )
254 : {
255 0 : TerminateShow();
256 : }
257 0 : else if( (( SHOWWINDOWMODE_BLANK == meShowWindowMode ) || ( SHOWWINDOWMODE_PAUSE == meShowWindowMode ))
258 0 : && !rMEvt.IsRight() )
259 : {
260 0 : RestartShow();
261 : }
262 : else
263 : {
264 0 : if( mxController.is() )
265 0 : mxController->mouseButtonUp( rMEvt );
266 : }
267 0 : }
268 :
269 : /*************************************************************************
270 : |*
271 : |* Paint-Event: wenn FuSlideShow noch erreichbar ist, weiterleiten
272 : |*
273 : \************************************************************************/
274 :
275 0 : void ShowWindow::Paint(const Rectangle& rRect)
276 : {
277 0 : if( (meShowWindowMode == SHOWWINDOWMODE_NORMAL) || (meShowWindowMode == SHOWWINDOWMODE_PREVIEW) )
278 : {
279 0 : if( mxController.is() )
280 : {
281 0 : mxController->paint(rRect);
282 : }
283 0 : else if(mpViewShell )
284 : {
285 0 : mpViewShell->Paint(rRect, this);
286 : }
287 : }
288 : else
289 : {
290 0 : DrawWallpaper( rRect, maShowBackground );
291 :
292 0 : if( SHOWWINDOWMODE_END == meShowWindowMode )
293 : {
294 0 : DrawEndScene();
295 : }
296 0 : else if( SHOWWINDOWMODE_PAUSE == meShowWindowMode )
297 : {
298 0 : DrawPauseScene( false );
299 : }
300 0 : else if( SHOWWINDOWMODE_BLANK == meShowWindowMode )
301 : {
302 0 : DrawBlankScene();
303 : }
304 : }
305 0 : }
306 :
307 : /*************************************************************************
308 : |*
309 : |* Notify
310 : |*
311 : \************************************************************************/
312 :
313 0 : long ShowWindow::Notify(NotifyEvent& rNEvt)
314 : {
315 0 : long nOK = sal_False;
316 0 : if (!nOK)
317 0 : nOK = Window::Notify(rNEvt);
318 :
319 0 : return nOK;
320 : }
321 :
322 :
323 : // -----------------------------------------------------------------------------
324 :
325 0 : void ShowWindow::GetFocus()
326 : {
327 : // Basisklasse
328 0 : Window::GetFocus();
329 0 : }
330 :
331 : // -----------------------------------------------------------------------------
332 :
333 0 : void ShowWindow::LoseFocus()
334 : {
335 0 : Window::LoseFocus();
336 :
337 0 : if( SHOWWINDOWMODE_PREVIEW == meShowWindowMode)
338 0 : TerminateShow();
339 0 : }
340 :
341 : // -----------------------------------------------------------------------------
342 :
343 0 : void ShowWindow::Resize()
344 : {
345 0 : ::sd::Window::Resize();
346 0 : }
347 :
348 : // -----------------------------------------------------------------------------
349 :
350 0 : void ShowWindow::Move()
351 : {
352 0 : ::sd::Window::Move();
353 0 : }
354 :
355 : // -----------------------------------------------------------------------------
356 :
357 0 : bool ShowWindow::SetEndMode()
358 : {
359 0 : if( ( SHOWWINDOWMODE_NORMAL == meShowWindowMode ) && mpViewShell && mpViewShell->GetView() )
360 : {
361 0 : DeleteWindowFromPaintView();
362 0 : meShowWindowMode = SHOWWINDOWMODE_END;
363 0 : maShowBackground = Wallpaper( Color( COL_BLACK ) );
364 :
365 : // hide navigator if it is visible
366 0 : if( mpViewShell->GetViewFrame()->GetChildWindow( SID_NAVIGATOR ) )
367 : {
368 0 : mpViewShell->GetViewFrame()->ShowChildWindow( SID_NAVIGATOR, sal_False );
369 0 : mbShowNavigatorAfterSpecialMode = true;
370 : }
371 :
372 0 : Invalidate();
373 : }
374 :
375 0 : return( SHOWWINDOWMODE_END == meShowWindowMode );
376 : }
377 :
378 : // -----------------------------------------------------------------------------
379 :
380 0 : bool ShowWindow::SetPauseMode( sal_Int32 nPageIndexToRestart, sal_Int32 nTimeout, Graphic* pLogo )
381 : {
382 0 : rtl::Reference< SlideShow > xSlideShow;
383 :
384 0 : if( mpViewShell )
385 0 : xSlideShow = SlideShow::GetSlideShow( mpViewShell->GetViewShellBase() );
386 :
387 0 : if( xSlideShow.is() && !nTimeout )
388 : {
389 0 : xSlideShow->jumpToPageIndex( nPageIndexToRestart );
390 : }
391 0 : else if( ( SHOWWINDOWMODE_NORMAL == meShowWindowMode ) && mpViewShell && mpViewShell->GetView() )
392 : {
393 0 : DeleteWindowFromPaintView();
394 0 : mnPauseTimeout = nTimeout;
395 0 : mnRestartPageIndex = nPageIndexToRestart;
396 0 : meShowWindowMode = SHOWWINDOWMODE_PAUSE;
397 0 : maShowBackground = Wallpaper( Color( COL_BLACK ) );
398 :
399 : // hide navigator if it is visible
400 0 : if( mpViewShell->GetViewFrame()->GetChildWindow( SID_NAVIGATOR ) )
401 : {
402 0 : mpViewShell->GetViewFrame()->ShowChildWindow( SID_NAVIGATOR, sal_False );
403 0 : mbShowNavigatorAfterSpecialMode = true;
404 : }
405 :
406 0 : if( pLogo )
407 0 : maLogo = *pLogo;
408 :
409 0 : Invalidate();
410 :
411 0 : if( SLIDE_NO_TIMEOUT != mnPauseTimeout )
412 0 : maPauseTimer.Start();
413 : }
414 :
415 0 : return( SHOWWINDOWMODE_PAUSE == meShowWindowMode );
416 : }
417 :
418 : // -----------------------------------------------------------------------------
419 :
420 0 : bool ShowWindow::SetBlankMode( sal_Int32 nPageIndexToRestart, const Color& rBlankColor )
421 : {
422 0 : if( ( SHOWWINDOWMODE_NORMAL == meShowWindowMode ) && mpViewShell && mpViewShell->GetView() )
423 : {
424 0 : DeleteWindowFromPaintView();
425 0 : mnRestartPageIndex = nPageIndexToRestart;
426 0 : meShowWindowMode = SHOWWINDOWMODE_BLANK;
427 0 : maShowBackground = Wallpaper( rBlankColor );
428 :
429 : // hide navigator if it is visible
430 0 : if( mpViewShell->GetViewFrame()->GetChildWindow( SID_NAVIGATOR ) )
431 : {
432 0 : mpViewShell->GetViewFrame()->ShowChildWindow( SID_NAVIGATOR, sal_False );
433 0 : mbShowNavigatorAfterSpecialMode = true;
434 : }
435 :
436 0 : Invalidate();
437 : }
438 :
439 0 : return( SHOWWINDOWMODE_BLANK == meShowWindowMode );
440 : }
441 :
442 : // -----------------------------------------------------------------------------
443 :
444 0 : void ShowWindow::SetPreviewMode()
445 : {
446 0 : meShowWindowMode = SHOWWINDOWMODE_PREVIEW;
447 0 : }
448 :
449 : // -----------------------------------------------------------------------------
450 :
451 0 : void ShowWindow::TerminateShow()
452 : {
453 0 : maLogo.Clear();
454 0 : maPauseTimer.Stop();
455 0 : maMouseTimer.Stop();
456 0 : Erase();
457 0 : maShowBackground = Wallpaper( Color( COL_BLACK ) );
458 0 : meShowWindowMode = SHOWWINDOWMODE_NORMAL;
459 0 : mnPauseTimeout = SLIDE_NO_TIMEOUT;
460 :
461 0 : if( mpViewShell )
462 : {
463 : // show navigator?
464 0 : if( mbShowNavigatorAfterSpecialMode )
465 : {
466 0 : mpViewShell->GetViewFrame()->ShowChildWindow( SID_NAVIGATOR, sal_True );
467 0 : mbShowNavigatorAfterSpecialMode = false;
468 : }
469 : }
470 :
471 0 : if( mxController.is() )
472 0 : mxController->endPresentation();
473 :
474 0 : mnRestartPageIndex = PAGE_NO_END;
475 0 : }
476 :
477 : // -----------------------------------------------------------------------------
478 :
479 0 : void ShowWindow::RestartShow()
480 : {
481 0 : RestartShow( mnRestartPageIndex );
482 0 : }
483 :
484 : // -----------------------------------------------------------------------------
485 :
486 0 : void ShowWindow::RestartShow( sal_Int32 nPageIndexToRestart )
487 :
488 : {
489 0 : ShowWindowMode eOldShowWindowMode = meShowWindowMode;
490 :
491 0 : maLogo.Clear();
492 0 : maPauseTimer.Stop();
493 0 : Erase();
494 0 : maShowBackground = Wallpaper( Color( COL_BLACK ) );
495 0 : meShowWindowMode = SHOWWINDOWMODE_NORMAL;
496 0 : mnPauseTimeout = SLIDE_NO_TIMEOUT;
497 :
498 0 : if( mpViewShell )
499 : {
500 0 : rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( mpViewShell->GetViewShellBase() ) );
501 :
502 0 : if( xSlideShow.is() )
503 : {
504 0 : AddWindowToPaintView();
505 :
506 0 : if( SHOWWINDOWMODE_BLANK == eOldShowWindowMode )
507 : {
508 0 : xSlideShow->pause(false);
509 0 : Invalidate();
510 : }
511 : else
512 : {
513 0 : xSlideShow->jumpToPageIndex( nPageIndexToRestart );
514 : }
515 0 : }
516 : }
517 :
518 0 : mnRestartPageIndex = PAGE_NO_END;
519 :
520 : // show navigator?
521 0 : if( mbShowNavigatorAfterSpecialMode )
522 : {
523 0 : mpViewShell->GetViewFrame()->ShowChildWindow( SID_NAVIGATOR, sal_True );
524 0 : mbShowNavigatorAfterSpecialMode = false;
525 : }
526 0 : }
527 :
528 : // -----------------------------------------------------------------------------
529 :
530 0 : void ShowWindow::DrawPauseScene( bool bTimeoutOnly )
531 : {
532 0 : const MapMode& rMap = GetMapMode();
533 0 : const Point aOutOrg( PixelToLogic( Point() ) );
534 0 : const Size aOutSize( GetOutputSize() );
535 0 : const Size aTextSize( LogicToLogic( Size( 0, 14 ), MAP_POINT, rMap ) );
536 0 : const Size aOffset( LogicToLogic( Size( 1000, 1000 ), MAP_100TH_MM, rMap ) );
537 0 : String aText( SdResId( STR_PRES_PAUSE ) );
538 0 : bool bDrawn = false;
539 :
540 0 : Font aFont( GetSettings().GetStyleSettings().GetMenuFont() );
541 0 : const Font aOldFont( GetFont() );
542 :
543 0 : aFont.SetSize( aTextSize );
544 0 : aFont.SetColor( COL_WHITE );
545 0 : aFont.SetCharSet( aOldFont.GetCharSet() );
546 0 : aFont.SetLanguage( aOldFont.GetLanguage() );
547 :
548 0 : if( !bTimeoutOnly && ( maLogo.GetType() != GRAPHIC_NONE ) )
549 : {
550 0 : Size aGrfSize;
551 :
552 0 : if( maLogo.GetPrefMapMode() == MAP_PIXEL )
553 0 : aGrfSize = PixelToLogic( maLogo.GetPrefSize() );
554 : else
555 0 : aGrfSize = LogicToLogic( maLogo.GetPrefSize(), maLogo.GetPrefMapMode(), rMap );
556 :
557 0 : const Point aGrfPos( Max( aOutOrg.X() + aOutSize.Width() - aGrfSize.Width() - aOffset.Width(), aOutOrg.X() ),
558 0 : Max( aOutOrg.Y() + aOutSize.Height() - aGrfSize.Height() - aOffset.Height(), aOutOrg.Y() ) );
559 :
560 0 : if( maLogo.IsAnimated() )
561 0 : maLogo.StartAnimation( this, aGrfPos, aGrfSize, (long) this );
562 : else
563 0 : maLogo.Draw( this, aGrfPos, aGrfSize );
564 : }
565 :
566 0 : if( SLIDE_NO_TIMEOUT != mnPauseTimeout )
567 : {
568 0 : MapMode aVMap( rMap );
569 0 : VirtualDevice aVDev( *this );
570 :
571 0 : aVMap.SetOrigin( Point() );
572 0 : aVDev.SetMapMode( aVMap );
573 0 : aVDev.SetBackground( Wallpaper( Color( COL_BLACK ) ) );
574 :
575 : // set font first, to determine real output height
576 0 : aVDev.SetFont( aFont );
577 :
578 0 : const Size aVDevSize( aOutSize.Width(), aVDev.GetTextHeight() );
579 :
580 0 : if( aVDev.SetOutputSize( aVDevSize ) )
581 : {
582 : // Note: if performance gets an issue here, we can use NumberFormatter directly
583 0 : SvtSysLocale aSysLocale;
584 0 : const LocaleDataWrapper& aLocaleData = aSysLocale.GetLocaleData();
585 :
586 0 : aText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " ( " ));
587 0 : aText += aLocaleData.getDuration( Time( 0, 0, mnPauseTimeout ) );
588 0 : aText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " )" ));
589 0 : aVDev.DrawText( Point( aOffset.Width(), 0 ), aText );
590 0 : DrawOutDev( Point( aOutOrg.X(), aOffset.Height() ), aVDevSize, Point(), aVDevSize, aVDev );
591 0 : bDrawn = true;
592 0 : }
593 : }
594 :
595 0 : if( !bDrawn )
596 : {
597 0 : SetFont( aFont );
598 0 : DrawText( Point( aOutOrg.X() + aOffset.Width(), aOutOrg.Y() + aOffset.Height() ), aText );
599 0 : SetFont( aOldFont );
600 0 : }
601 0 : }
602 :
603 : // -----------------------------------------------------------------------------
604 :
605 0 : void ShowWindow::DrawEndScene()
606 : {
607 0 : const Font aOldFont( GetFont() );
608 0 : Font aFont( GetSettings().GetStyleSettings().GetMenuFont() );
609 :
610 0 : const Point aOutOrg( PixelToLogic( Point() ) );
611 0 : const Size aTextSize( LogicToLogic( Size( 0, 14 ), MAP_POINT, GetMapMode() ) );
612 0 : const String aText( SdResId( STR_PRES_SOFTEND ) );
613 :
614 0 : aFont.SetSize( aTextSize );
615 0 : aFont.SetColor( COL_WHITE );
616 0 : aFont.SetCharSet( aOldFont.GetCharSet() );
617 0 : aFont.SetLanguage( aOldFont.GetLanguage() );
618 0 : SetFont( aFont );
619 0 : DrawText( Point( aOutOrg.X() + aTextSize.Height(), aOutOrg.Y() + aTextSize.Height() ), aText );
620 0 : SetFont( aOldFont );
621 0 : }
622 :
623 : // -----------------------------------------------------------------------------
624 :
625 0 : void ShowWindow::DrawBlankScene()
626 : {
627 : // just blank through background color => nothing to be done here
628 0 : }
629 :
630 : // -----------------------------------------------------------------------------
631 :
632 0 : IMPL_LINK( ShowWindow, PauseTimeoutHdl, Timer*, pTimer )
633 : {
634 0 : if( !( --mnPauseTimeout ) )
635 0 : RestartShow();
636 : else
637 : {
638 0 : DrawPauseScene( true );
639 0 : pTimer->Start();
640 : }
641 :
642 0 : return 0L;
643 : }
644 :
645 0 : IMPL_LINK_NOARG(ShowWindow, MouseTimeoutHdl)
646 : {
647 0 : if( mbMouseCursorHidden )
648 : {
649 : // not enough mouse movements since first recording so
650 : // cancle show mouse pointer for now
651 0 : mnFirstMouseMove = 0;
652 : }
653 : else
654 : {
655 : // mouse has been idle to long, hide pointer
656 0 : ShowPointer( sal_False );
657 0 : mbMouseCursorHidden = true;
658 : }
659 0 : return 0L;
660 : }
661 :
662 0 : IMPL_LINK( ShowWindow, EventHdl, VclWindowEvent*, pEvent )
663 : {
664 0 : if( mbMouseAutoHide )
665 : {
666 0 : if (pEvent->GetId() == VCLEVENT_WINDOW_SHOW)
667 : {
668 0 : maMouseTimer.SetTimeout( HIDE_MOUSE_TIMEOUT );
669 0 : maMouseTimer.Start();
670 : }
671 : }
672 0 : return 0L;
673 : }
674 :
675 0 : void ShowWindow::SetPresentationArea( const Rectangle& rPresArea )
676 : {
677 0 : maPresArea = rPresArea;
678 0 : }
679 :
680 0 : void ShowWindow::DeleteWindowFromPaintView()
681 : {
682 0 : if( mpViewShell->GetView() )
683 0 : mpViewShell->GetView()->DeleteWindowFromPaintView( this );
684 :
685 0 : sal_uInt16 nChild = GetChildCount();
686 0 : while( nChild-- )
687 0 : GetChild( nChild )->Show( sal_False );
688 0 : }
689 :
690 0 : void ShowWindow::AddWindowToPaintView()
691 : {
692 0 : if( mpViewShell->GetView() )
693 0 : mpViewShell->GetView()->AddWindowToPaintView( this );
694 :
695 0 : sal_uInt16 nChild = GetChildCount();
696 0 : while( nChild-- )
697 0 : GetChild( nChild )->Show( sal_True );
698 0 : }
699 :
700 9 : } // end of namespace sd
701 :
702 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|