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