xref: /trunk/main/sd/source/ui/slideshow/showwin.cxx (revision 9d97e9635cf537de28a9272394b68cfd2c8f8314)
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