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