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