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