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