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