Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #ifdef SD_DLLIMPLEMENTATION
31 : : #undef SD_DLLIMPLEMENTATION
32 : : #endif
33 : :
34 : : #include <svx/dialogs.hrc>
35 : : #include <editeng/eeitem.hxx>
36 : : #include <editeng/flditem.hxx>
37 : : #include <editeng/langitem.hxx>
38 : : #include <svx/langbox.hxx>
39 : : #include <svx/svdotext.hxx>
40 : : #include <editeng/editeng.hxx>
41 : : #include <sfx2/viewfrm.hxx>
42 : :
43 : : #include "sdresid.hxx"
44 : :
45 : : #include <vcl/fixed.hxx>
46 : : #include <vcl/button.hxx>
47 : : #include <vcl/edit.hxx>
48 : : #include <vcl/combobox.hxx>
49 : :
50 : : #include "helpids.h"
51 : : #include "Outliner.hxx"
52 : : #include "dialogs.hrc"
53 : : #include "headerfooterdlg.hxx"
54 : : #include "DrawDocShell.hxx"
55 : : #include "drawdoc.hxx"
56 : : #include "ViewShell.hxx"
57 : :
58 : : ///////////////////////////////////////////////////////////////////////
59 : : // preview control for presentation layout
60 : : ///////////////////////////////////////////////////////////////////////
61 : : #include <vcl/ctrl.hxx>
62 : : #include <tools/color.hxx>
63 : : #include <i18npool/mslangid.hxx>
64 : : #include <svtools/colorcfg.hxx>
65 : : #include <svx/xlndsit.hxx>
66 : : #include <svx/xlineit0.hxx>
67 : : #include <svx/xlnclit.hxx>
68 : : #include <vcl/decoview.hxx>
69 : :
70 : : #include "undoheaderfooter.hxx"
71 : : #include "sdundogr.hxx"
72 : :
73 : : #include <basegfx/matrix/b2dhommatrix.hxx>
74 : : #include <basegfx/polygon/b2dpolygontools.hxx>
75 : : #include <basegfx/polygon/b2dpolypolygontools.hxx>
76 : :
77 : : namespace sd
78 : : {
79 : :
80 : : class PresLayoutPreview : public Control
81 : : {
82 : : private:
83 : : SdPage* mpMaster;
84 : : HeaderFooterSettings maSettings;
85 : : Size maPageSize;
86 : : Rectangle maOutRect;
87 : :
88 : : private:
89 : : void Paint( OutputDevice& aOut, SdrTextObj* pObj, bool bVisible, bool bDotted = false );
90 : :
91 : : public:
92 : : PresLayoutPreview( ::Window* pParent, const ResId& rResId, SdPage* pMaster );
93 : : ~PresLayoutPreview();
94 : :
95 : : virtual void Paint( const Rectangle& rRect );
96 : :
97 : : void update( HeaderFooterSettings& rSettings );
98 : : };
99 : :
100 : : }
101 : :
102 : : ///////////////////////////////////////////////////////////////////////
103 : : // tab page for slide & header'n'notes
104 : : ///////////////////////////////////////////////////////////////////////
105 : :
106 : : namespace sd
107 : : {
108 : :
109 : : const int nDateTimeFormatsCount = 10;
110 : : int nDateTimeFormats[nDateTimeFormatsCount] =
111 : : {
112 : : SVXDATEFORMAT_A,
113 : : SVXDATEFORMAT_F,
114 : : SVXDATEFORMAT_D,
115 : : SVXDATEFORMAT_C,
116 : :
117 : : SVXDATEFORMAT_A | (SVXTIMEFORMAT_24_HM << 4),
118 : : SVXDATEFORMAT_A | (SVXTIMEFORMAT_12_HM << 4),
119 : :
120 : : (SVXTIMEFORMAT_24_HM << 4),
121 : : (SVXTIMEFORMAT_24_HMS <<4),
122 : :
123 : : (SVXTIMEFORMAT_12_HM << 4 ),
124 : : (SVXTIMEFORMAT_12_HMS << 4 )
125 : : };
126 : :
127 : : class HeaderFooterTabPage : public TabPage
128 : : {
129 : : private:
130 : : FixedLine maFLIncludeOnPage;
131 : :
132 : : CheckBox maCBHeader;
133 : : FixedText maFTHeader;
134 : : Edit maTBHeader;
135 : :
136 : : FixedLine maFLDateTime;
137 : : CheckBox maCBDateTime;
138 : : RadioButton maRBDateTimeFixed;
139 : : RadioButton maRBDateTimeAutomatic;
140 : : Edit maTBDateTimeFixed;
141 : : ListBox maCBDateTimeFormat;
142 : : FixedText maFTDateTimeLanguage;
143 : : SvxLanguageBox maCBDateTimeLanguage;
144 : :
145 : : FixedLine maFLFooter;
146 : : CheckBox maCBFooter;
147 : : FixedText maFTFooter;
148 : : Edit maTBFooter;
149 : :
150 : : FixedLine maFLSlideNumber;
151 : : CheckBox maCBSlideNumber;
152 : :
153 : : FixedLine maFLNotOnTitle;
154 : : CheckBox maCBNotOnTitle;
155 : :
156 : : PushButton maPBApplyToAll;
157 : : PushButton maPBApply;
158 : : CancelButton maPBCancel;
159 : : HelpButton maPBHelp;
160 : :
161 : : PresLayoutPreview maCTPreview;
162 : :
163 : : SdPage* mpCurrentPage;
164 : : SdDrawDocument * mpDoc;
165 : : HeaderFooterDialog* mpDialog;
166 : : LanguageType meOldLanguage;
167 : :
168 : : bool mbHandoutMode;
169 : :
170 : : DECL_LINK( UpdateOnClickHdl, void * );
171 : :
172 : : DECL_LINK( ClickApplyToAllHdl, void * );
173 : : DECL_LINK( ClickApplyHdl, void * );
174 : : DECL_LINK( ClickCancelHdl, void * );
175 : :
176 : : DECL_LINK( LanguageChangeHdl, void * );
177 : :
178 : : void FillFormatList(int eFormat);
179 : : void GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet );
180 : : void GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet, SdPage* pPage );
181 : :
182 : : public:
183 : : HeaderFooterTabPage( HeaderFooterDialog* pDialog, ::Window* pParent, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode );
184 : : ~HeaderFooterTabPage();
185 : :
186 : : static SfxTabPage* Create( ::Window*, const SfxItemSet& );
187 : : static sal_uInt16* GetRanges();
188 : :
189 : : void init( const HeaderFooterSettings& rSettings, bool bNotOnTitle, bool bHasApply );
190 : : void getData( HeaderFooterSettings& rSettings, bool& rNotOnTitle );
191 : : void update();
192 : : };
193 : :
194 : : }
195 : :
196 : : ///////////////////////////////////////////////////////////////////////
197 : :
198 : : using namespace ::sd;
199 : :
200 : :
201 : 0 : HeaderFooterDialog::HeaderFooterDialog( ViewShell* pViewShell, ::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage ) :
202 : : TabDialog ( pParent, SdResId( RID_SD_DLG_HEADERFOOTER ) ),
203 : : maTabCtrl( this, SdResId( 1 ) ),
204 : : mpDoc( pDoc ),
205 : : mpCurrentPage( pCurrentPage ),
206 : 0 : mpViewShell( pViewShell )
207 : : {
208 : 0 : FreeResource();
209 : :
210 : : SdPage* pSlide;
211 : : SdPage* pNotes;
212 : 0 : if( pCurrentPage->GetPageKind() == PK_STANDARD )
213 : : {
214 : 0 : pSlide = pCurrentPage;
215 : 0 : pNotes = (SdPage*)pDoc->GetPage( pCurrentPage->GetPageNum() + 1 );
216 : : }
217 : 0 : else if( pCurrentPage->GetPageKind() == PK_NOTES )
218 : : {
219 : 0 : pNotes = pCurrentPage;
220 : 0 : pSlide = (SdPage*)pDoc->GetPage( pCurrentPage->GetPageNum() -1 );
221 : 0 : mpCurrentPage = pSlide;
222 : : }
223 : : else
224 : : {
225 : : // handout
226 : 0 : pSlide = pDoc->GetSdPage( 0, PK_STANDARD );
227 : 0 : pNotes = pDoc->GetSdPage( 0, PK_NOTES );
228 : 0 : mpCurrentPage = NULL;
229 : : }
230 : :
231 : : // maTabCtrl.SetHelpId( HID_XML_FILTER_TABPAGE_CTRL );
232 : 0 : maTabCtrl.Show();
233 : :
234 : 0 : mpSlideTabPage = new HeaderFooterTabPage( this, &maTabCtrl, pDoc, pSlide, false );
235 : 0 : mpSlideTabPage->SetHelpId( HID_SD_TABPAGE_HEADERFOOTER_SLIDE );
236 : 0 : maTabCtrl.SetTabPage( RID_SD_TABPAGE_HEADERFOOTER_SLIDE, mpSlideTabPage );
237 : :
238 : 0 : Size aSiz = mpSlideTabPage->GetSizePixel();
239 : 0 : Size aCtrlSiz = maTabCtrl.GetOutputSizePixel();
240 : : // set size on TabControl only if smaller than TabPage
241 : 0 : if ( aCtrlSiz.Width() < aSiz.Width() || aCtrlSiz.Height() < aSiz.Height() )
242 : : {
243 : 0 : maTabCtrl.SetOutputSizePixel( aSiz );
244 : 0 : aCtrlSiz = aSiz;
245 : : }
246 : :
247 : 0 : mpNotesHandoutsTabPage = new HeaderFooterTabPage( this, &maTabCtrl, pDoc, pNotes, true );
248 : 0 : mpNotesHandoutsTabPage->SetHelpId( HID_SD_TABPAGE_HEADERFOOTER_NOTESHANDOUT );
249 : 0 : maTabCtrl.SetTabPage( RID_SD_TABPAGE_HEADERFOOTER_NOTESHANDOUT, mpNotesHandoutsTabPage );
250 : :
251 : 0 : aSiz = mpNotesHandoutsTabPage->GetSizePixel();
252 : 0 : if ( aCtrlSiz.Width() < aSiz.Width() || aCtrlSiz.Height() < aSiz.Height() )
253 : : {
254 : 0 : maTabCtrl.SetOutputSizePixel( aSiz );
255 : 0 : aCtrlSiz = aSiz;
256 : : }
257 : :
258 : 0 : ActivatePageHdl( &maTabCtrl );
259 : :
260 : 0 : AdjustLayout();
261 : :
262 : 0 : maTabCtrl.SetActivatePageHdl( LINK( this, HeaderFooterDialog, ActivatePageHdl ) );
263 : 0 : maTabCtrl.SetDeactivatePageHdl( LINK( this, HeaderFooterDialog, DeactivatePageHdl ) );
264 : :
265 : 0 : maSlideSettings = pSlide->getHeaderFooterSettings();
266 : :
267 : 0 : const HeaderFooterSettings& rTitleSettings = mpDoc->GetSdPage(0, PK_STANDARD)->getHeaderFooterSettings();
268 : 0 : bool bNotOnTitle = !rTitleSettings.mbFooterVisible && !rTitleSettings.mbSlideNumberVisible && !rTitleSettings.mbDateTimeVisible;
269 : :
270 : 0 : mpSlideTabPage->init( maSlideSettings, bNotOnTitle, mpCurrentPage != NULL );
271 : :
272 : 0 : maNotesHandoutSettings = pNotes->getHeaderFooterSettings();
273 : 0 : mpNotesHandoutsTabPage->init( maNotesHandoutSettings, false, false );
274 : 0 : }
275 : :
276 : : // -----------------------------------------------------------------------
277 : :
278 : 0 : HeaderFooterDialog::~HeaderFooterDialog()
279 : : {
280 : 0 : delete mpSlideTabPage;
281 : 0 : delete mpNotesHandoutsTabPage;
282 : 0 : }
283 : :
284 : : // -----------------------------------------------------------------------
285 : :
286 : 0 : IMPL_LINK( HeaderFooterDialog, ActivatePageHdl, TabControl *, pTabCtrl )
287 : : {
288 : 0 : const sal_uInt16 nId = pTabCtrl->GetCurPageId();
289 : 0 : TabPage* pTabPage = pTabCtrl->GetTabPage( nId );
290 : 0 : pTabPage->Show();
291 : :
292 : 0 : return 0;
293 : : }
294 : :
295 : : // -----------------------------------------------------------------------
296 : :
297 : 0 : IMPL_LINK_NOARG(HeaderFooterDialog, DeactivatePageHdl)
298 : : {
299 : 0 : return sal_True;
300 : : }
301 : :
302 : : // -----------------------------------------------------------------------
303 : :
304 : 0 : short HeaderFooterDialog::Execute()
305 : : {
306 : 0 : sal_uInt16 nRet = TabDialog::Execute();
307 : 0 : if( nRet )
308 : 0 : mpViewShell->GetDocSh()->SetModified();
309 : 0 : return nRet;
310 : : }
311 : :
312 : : // -----------------------------------------------------------------------
313 : :
314 : 0 : void HeaderFooterDialog::ApplyToAll( TabPage* pPage )
315 : : {
316 : 0 : apply( true, pPage == mpSlideTabPage );
317 : 0 : EndDialog(1);
318 : 0 : }
319 : :
320 : : // -----------------------------------------------------------------------
321 : :
322 : 0 : void HeaderFooterDialog::Apply( TabPage* pPage )
323 : : {
324 : 0 : apply( false, pPage == mpSlideTabPage );
325 : 0 : EndDialog(1);
326 : 0 : }
327 : :
328 : : // -----------------------------------------------------------------------
329 : :
330 : 0 : void HeaderFooterDialog::Cancel( TabPage* )
331 : : {
332 : 0 : EndDialog();
333 : 0 : }
334 : :
335 : : // -----------------------------------------------------------------------
336 : :
337 : 0 : void HeaderFooterDialog::apply( bool bToAll, bool bForceSlides )
338 : : {
339 : 0 : SdUndoGroup* pUndoGroup = new SdUndoGroup(mpDoc);
340 : 0 : String aComment( GetText() );
341 : 0 : pUndoGroup->SetComment( aComment );
342 : :
343 : 0 : HeaderFooterSettings aNewSettings;
344 : : bool bNewNotOnTitle;
345 : :
346 : : // change slide settings first ...
347 : :
348 : 0 : mpSlideTabPage->getData( aNewSettings, bNewNotOnTitle );
349 : :
350 : : // only if we pressed apply or apply all on the slide tab page or if the slide settings
351 : : // have been changed
352 : 0 : if( bForceSlides || !(aNewSettings == maSlideSettings) )
353 : : {
354 : : // apply to all slides
355 : 0 : if( bToAll )
356 : : {
357 : 0 : int nPageCount = mpDoc->GetSdPageCount( PK_STANDARD );
358 : : int nPage;
359 : 0 : for( nPage = 0; nPage < nPageCount; nPage++ )
360 : : {
361 : 0 : SdPage* pPage = mpDoc->GetSdPage( (sal_uInt16)nPage, PK_STANDARD );
362 : 0 : change( pUndoGroup, pPage, aNewSettings );
363 : : }
364 : : }
365 : : else
366 : : {
367 : : // apply only to the current slide
368 : : DBG_ASSERT( mpCurrentPage && mpCurrentPage->GetPageKind() == PK_STANDARD, "no current page to apply to!" );
369 : 0 : if( mpCurrentPage && (mpCurrentPage->GetPageKind() == PK_STANDARD) )
370 : : {
371 : 0 : change( pUndoGroup, mpCurrentPage, aNewSettings );
372 : : }
373 : : }
374 : : }
375 : :
376 : : // if we don't want to have header&footer on the first slide
377 : 0 : if( bNewNotOnTitle )
378 : : {
379 : : // just hide them, plain simple UI feature
380 : 0 : HeaderFooterSettings aTempSettings = mpDoc->GetSdPage( 0, PK_STANDARD )->getHeaderFooterSettings();
381 : :
382 : 0 : aTempSettings.mbFooterVisible = false;
383 : 0 : aTempSettings.mbSlideNumberVisible = false;
384 : 0 : aTempSettings.mbDateTimeVisible = false;
385 : :
386 : 0 : change( pUndoGroup, mpDoc->GetSdPage( 0, PK_STANDARD ), aTempSettings );
387 : : }
388 : :
389 : : // now notes settings
390 : :
391 : 0 : mpNotesHandoutsTabPage->getData( aNewSettings, bNewNotOnTitle );
392 : :
393 : : // only if we pressed apply or apply all on the notes tab page or if the notes settings
394 : : // have been changed
395 : 0 : if( !bForceSlides || !(aNewSettings == maNotesHandoutSettings) )
396 : : {
397 : : // first set to all notes pages
398 : 0 : int nPageCount = mpDoc->GetSdPageCount( PK_NOTES );
399 : : int nPage;
400 : 0 : for( nPage = 0; nPage < nPageCount; nPage++ )
401 : : {
402 : 0 : SdPage* pPage = mpDoc->GetSdPage( (sal_uInt16)nPage, PK_NOTES );
403 : :
404 : 0 : change( pUndoGroup, pPage, aNewSettings );
405 : : }
406 : :
407 : : // and last but not least to the handout page
408 : 0 : change( pUndoGroup, mpDoc->GetMasterSdPage( 0, PK_HANDOUT ), aNewSettings );
409 : : }
410 : :
411 : : // Undo Gruppe dem Undo Manager uebergeben
412 : 0 : mpViewShell->GetViewFrame()->GetObjectShell()->GetUndoManager()->AddUndoAction(pUndoGroup);
413 : 0 : }
414 : :
415 : : // -----------------------------------------------------------------------
416 : :
417 : 0 : void HeaderFooterDialog::change( SdUndoGroup* pUndoGroup, SdPage* pPage, const HeaderFooterSettings& rNewSettings )
418 : : {
419 : 0 : pUndoGroup->AddAction(new SdHeaderFooterUndoAction(mpDoc, pPage, rNewSettings ));
420 : 0 : pPage->setHeaderFooterSettings( rNewSettings );
421 : 0 : }
422 : :
423 : : ///////////////////////////////////////////////////////////////////////
424 : :
425 : 0 : inline void moveY( ::Window& rWin, int deltaY )
426 : : {
427 : 0 : Point aPos = rWin.GetPosPixel();
428 : 0 : aPos.Y() += deltaY;
429 : 0 : rWin.SetPosPixel( aPos );
430 : 0 : }
431 : :
432 : 0 : HeaderFooterTabPage::HeaderFooterTabPage( HeaderFooterDialog* pDialog, ::Window* pWindow, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode ) :
433 : : TabPage( pWindow, SdResId( RID_SD_TABPAGE_HEADERFOOTER ) ),
434 : : maFLIncludeOnPage( this, SdResId( FL_INCLUDE_ON_PAGE ) ),
435 : : maCBHeader( this, SdResId( CB_HEADER ) ),
436 : : maFTHeader( this, SdResId( FT_HEADER ) ),
437 : : maTBHeader( this, SdResId( TB_HEADER_FIXED ) ),
438 : : maFLDateTime( this, SdResId( FL_DATETIME ) ),
439 : : maCBDateTime( this, SdResId( CB_DATETIME ) ),
440 : : maRBDateTimeFixed( this, SdResId( RB_DATETIME_FIXED ) ),
441 : : maRBDateTimeAutomatic( this, SdResId( RB_DATETIME_AUTOMATIC ) ),
442 : : maTBDateTimeFixed( this, SdResId( TB_DATETIME_FIXED ) ),
443 : : maCBDateTimeFormat( this, SdResId( CB_DATETIME_FORMAT ) ),
444 : : maFTDateTimeLanguage( this, SdResId( FT_DATETIME_LANGUAGE ) ),
445 : : maCBDateTimeLanguage( this, SdResId( CB_DATETIME_LANGUAGE ) ),
446 : :
447 : : maFLFooter( this, SdResId( FL_FOOTER ) ),
448 : : maCBFooter( this, SdResId( CB_FOOTER ) ),
449 : : maFTFooter( this, SdResId( FT_FOOTER ) ),
450 : : maTBFooter( this, SdResId( TB_FOOTER_FIXED ) ),
451 : :
452 : : maFLSlideNumber( this, SdResId( FL_SLIDENUMBER ) ),
453 : : maCBSlideNumber( this, SdResId( CB_SLIDENUMBER ) ),
454 : :
455 : : maFLNotOnTitle( this, SdResId( FL_NOTONTITLE ) ),
456 : : maCBNotOnTitle( this, SdResId( CB_NOTONTITLE ) ),
457 : :
458 : : maPBApplyToAll( this, SdResId( BT_APPLYTOALL ) ),
459 : : maPBApply( this, SdResId( BT_APPLY ) ),
460 : : maPBCancel( this, SdResId( BT_CANCEL ) ),
461 : : maPBHelp( this, SdResId( BT_HELP ) ),
462 : :
463 : : maCTPreview( this, SdResId( CT_PREVIEW ),
464 : : pActualPage ?
465 : 0 : (pActualPage->IsMasterPage() ? pActualPage : (SdPage*)(&(pActualPage->TRG_GetMasterPage()))) :
466 : 0 : (pDoc->GetMasterSdPage( 0, bHandoutMode ? PK_NOTES : PK_STANDARD )) ),
467 : : mpCurrentPage(pActualPage),
468 : : mpDoc(pDoc),
469 : : mpDialog(pDialog),
470 : 0 : mbHandoutMode( bHandoutMode )
471 : :
472 : : {
473 : 0 : pDoc->StopWorkStartupDelay();
474 : :
475 : 0 : if( !mbHandoutMode )
476 : : {
477 : 0 : int deltaY = maCBHeader.GetPosPixel().Y() - maCBDateTime.GetPosPixel().Y();
478 : :
479 : 0 : moveY( maCBDateTime, deltaY );
480 : 0 : moveY( maRBDateTimeFixed, deltaY );
481 : 0 : moveY( maRBDateTimeAutomatic, deltaY );
482 : 0 : moveY( maTBDateTimeFixed, deltaY );
483 : 0 : moveY( maCBDateTimeFormat, deltaY );
484 : 0 : moveY( maFTDateTimeLanguage, deltaY );
485 : 0 : moveY( maCBDateTimeLanguage, deltaY );
486 : 0 : moveY( maFLFooter, deltaY );
487 : 0 : moveY( maCBFooter, deltaY );
488 : 0 : moveY( maFTFooter, deltaY );
489 : 0 : moveY( maTBFooter, deltaY );
490 : 0 : moveY( maFLSlideNumber, deltaY );
491 : 0 : moveY( maCBSlideNumber, deltaY );
492 : 0 : moveY( maFLNotOnTitle, deltaY );
493 : 0 : moveY( maCBNotOnTitle, deltaY );
494 : : }
495 : : else
496 : : {
497 : 0 : int deltaY = maPBApply.GetPosPixel().Y() - maPBCancel.GetPosPixel().Y();
498 : :
499 : 0 : moveY( maPBCancel, deltaY );
500 : 0 : moveY( maPBHelp, deltaY );
501 : :
502 : 0 : String aPageNumberStr( SdResId( STR_PAGE_NUMBER ) );
503 : 0 : maCBSlideNumber.SetText( aPageNumberStr );
504 : :
505 : 0 : String aIncludeOnPageStr( SdResId( STR_INCLUDE_ON_PAGE ) );
506 : 0 : maFLIncludeOnPage.SetText( aIncludeOnPageStr );
507 : : }
508 : :
509 : 0 : FreeResource();
510 : :
511 : 0 : maPBApply.Show( !mbHandoutMode );
512 : 0 : maCBHeader.Show( mbHandoutMode );
513 : 0 : maFTHeader.Show( mbHandoutMode );
514 : 0 : maTBHeader.Show( mbHandoutMode );
515 : 0 : maFLDateTime.Show( mbHandoutMode );
516 : 0 : maFLNotOnTitle.Show( !mbHandoutMode );
517 : 0 : maCBNotOnTitle.Show( !mbHandoutMode );
518 : :
519 : 0 : maCBDateTime.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
520 : 0 : maRBDateTimeFixed.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
521 : 0 : maRBDateTimeAutomatic.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
522 : 0 : maCBFooter.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
523 : 0 : maCBHeader.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
524 : 0 : maCBSlideNumber.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
525 : :
526 : 0 : maPBApplyToAll.SetClickHdl( LINK( this, HeaderFooterTabPage, ClickApplyToAllHdl ) );
527 : 0 : maPBApply.SetClickHdl( LINK( this, HeaderFooterTabPage, ClickApplyHdl ) );
528 : 0 : maPBCancel.SetClickHdl( LINK( this, HeaderFooterTabPage, ClickCancelHdl ) );
529 : :
530 : 0 : maCBDateTimeLanguage.SetLanguageList( LANG_LIST_ALL|LANG_LIST_ONLY_KNOWN, false );
531 : 0 : maCBDateTimeLanguage.SetSelectHdl( LINK( this, HeaderFooterTabPage, LanguageChangeHdl ) );
532 : :
533 : 0 : GetOrSetDateTimeLanguage( meOldLanguage, false );
534 : 0 : meOldLanguage = MsLangId::getRealLanguage( meOldLanguage );
535 : 0 : maCBDateTimeLanguage.SelectLanguage( meOldLanguage );
536 : :
537 : 0 : FillFormatList(SVXDATEFORMAT_A);
538 : :
539 : 0 : maTBHeader.SetAccessibleRelationMemberOf(&maCBHeader);
540 : 0 : maRBDateTimeFixed.SetAccessibleRelationMemberOf(&maCBDateTime);
541 : 0 : maRBDateTimeAutomatic.SetAccessibleRelationMemberOf(&maCBDateTime);
542 : 0 : maTBDateTimeFixed.SetAccessibleName(maRBDateTimeFixed.GetText());
543 : 0 : maTBDateTimeFixed.SetAccessibleRelationMemberOf(&maCBDateTime);
544 : 0 : maTBDateTimeFixed.SetAccessibleRelationLabeledBy(&maRBDateTimeFixed);
545 : 0 : maCBDateTimeFormat.SetAccessibleRelationMemberOf(&maCBDateTime);
546 : 0 : maCBDateTimeFormat.SetAccessibleName(maRBDateTimeAutomatic.GetText());
547 : 0 : maCBDateTimeFormat.SetAccessibleRelationLabeledBy(&maRBDateTimeAutomatic);
548 : 0 : maCBDateTimeLanguage.SetAccessibleRelationMemberOf(&maCBDateTime);
549 : 0 : maTBFooter.SetAccessibleRelationMemberOf(&maCBFooter);
550 : 0 : maCBSlideNumber.SetAccessibleRelationMemberOf(&maFLIncludeOnPage);
551 : 0 : maCBFooter.SetAccessibleRelationMemberOf(&maFLIncludeOnPage);
552 : 0 : }
553 : : // -----------------------------------------------------------------------
554 : :
555 : 0 : HeaderFooterTabPage::~HeaderFooterTabPage()
556 : : {
557 : 0 : }
558 : :
559 : : // -----------------------------------------------------------------------
560 : :
561 : 0 : IMPL_LINK_NOARG(HeaderFooterTabPage, LanguageChangeHdl)
562 : : {
563 : 0 : FillFormatList( (int)(sal_IntPtr)maCBDateTimeFormat.GetEntryData( maCBDateTimeFormat.GetSelectEntryPos() ) );
564 : :
565 : :
566 : 0 : return 0L;
567 : : }
568 : :
569 : : // -----------------------------------------------------------------------
570 : :
571 : 0 : void HeaderFooterTabPage::FillFormatList( int eFormat )
572 : : {
573 : 0 : LanguageType eLanguage = maCBDateTimeLanguage.GetSelectLanguage();
574 : :
575 : 0 : maCBDateTimeFormat.Clear();
576 : :
577 : 0 : Date aDate( Date::SYSTEM );
578 : 0 : Time aTime( Time::SYSTEM );
579 : :
580 : : int nFormat;
581 : 0 : for( nFormat = 0; nFormat < nDateTimeFormatsCount; nFormat++ )
582 : : {
583 : 0 : String aStr( SvxDateTimeField::GetFormatted( aDate, aTime, nDateTimeFormats[nFormat], *(SD_MOD()->GetNumberFormatter()), eLanguage ) );
584 : 0 : sal_uInt16 nEntry = maCBDateTimeFormat.InsertEntry( aStr );
585 : 0 : maCBDateTimeFormat.SetEntryData( nEntry, (void*)(sal_IntPtr)nDateTimeFormats[nFormat] );
586 : 0 : if( nDateTimeFormats[nFormat] == eFormat )
587 : : {
588 : 0 : maCBDateTimeFormat.SelectEntryPos( nEntry );
589 : 0 : maCBDateTimeFormat.SetText( aStr );
590 : : }
591 : 0 : }
592 : 0 : }
593 : :
594 : : // -----------------------------------------------------------------------
595 : :
596 : 0 : void HeaderFooterTabPage::init( const HeaderFooterSettings& rSettings, bool bNotOnTitle, bool bHasApply )
597 : : {
598 : 0 : maCBDateTime.Check( rSettings.mbDateTimeVisible );
599 : 0 : maRBDateTimeFixed.Check( rSettings.mbDateTimeIsFixed );
600 : 0 : maRBDateTimeAutomatic.Check( !rSettings.mbDateTimeIsFixed );
601 : 0 : maTBDateTimeFixed.SetText( rSettings.maDateTimeText );
602 : :
603 : 0 : maCBHeader.Check( rSettings.mbHeaderVisible );
604 : 0 : maTBHeader.SetText( rSettings.maHeaderText );
605 : :
606 : 0 : maCBFooter.Check( rSettings.mbFooterVisible );
607 : 0 : maTBFooter.SetText( rSettings.maFooterText );
608 : :
609 : 0 : maCBSlideNumber.Check( rSettings.mbSlideNumberVisible );
610 : :
611 : 0 : maCBNotOnTitle.Check( bNotOnTitle );
612 : 0 : maPBApply.Enable( bHasApply );
613 : :
614 : 0 : maCBDateTimeLanguage.SelectLanguage( meOldLanguage );
615 : :
616 : : sal_uInt16 nPos;
617 : 0 : for( nPos = 0; nPos < maCBDateTimeFormat.GetEntryCount(); nPos++ )
618 : : {
619 : 0 : int nFormat = (int)(sal_IntPtr)maCBDateTimeFormat.GetEntryData( nPos );
620 : 0 : if( nFormat == rSettings.meDateTimeFormat )
621 : : {
622 : 0 : maCBDateTimeFormat.SelectEntryPos( nPos );
623 : 0 : maCBDateTimeFormat.SetText( maCBDateTimeFormat.GetEntry(nPos) );
624 : 0 : break;
625 : : }
626 : : }
627 : :
628 : 0 : update();
629 : 0 : }
630 : :
631 : : // -----------------------------------------------------------------------
632 : :
633 : 0 : void HeaderFooterTabPage::getData( HeaderFooterSettings& rSettings, bool& rNotOnTitle )
634 : : {
635 : 0 : rSettings.mbDateTimeVisible = maCBDateTime.IsChecked();
636 : 0 : rSettings.mbDateTimeIsFixed = maRBDateTimeFixed.IsChecked();
637 : 0 : rSettings.maDateTimeText = maTBDateTimeFixed.GetText();
638 : 0 : rSettings.mbFooterVisible = maCBFooter.IsChecked();
639 : 0 : rSettings.maFooterText = maTBFooter.GetText();
640 : 0 : rSettings.mbSlideNumberVisible = maCBSlideNumber.IsChecked();
641 : 0 : rSettings.mbHeaderVisible = maCBHeader.IsChecked();
642 : 0 : rSettings.maHeaderText = maTBHeader.GetText();
643 : :
644 : 0 : if( maCBDateTimeFormat.GetSelectEntryCount() == 1 )
645 : 0 : rSettings.meDateTimeFormat = (int)(sal_IntPtr)maCBDateTimeFormat.GetEntryData( maCBDateTimeFormat.GetSelectEntryPos() );
646 : :
647 : 0 : LanguageType eLanguage = maCBDateTimeLanguage.GetSelectLanguage();
648 : 0 : if( eLanguage != meOldLanguage )
649 : 0 : GetOrSetDateTimeLanguage( eLanguage, true );
650 : :
651 : 0 : rNotOnTitle = maCBNotOnTitle.IsChecked();
652 : 0 : }
653 : :
654 : : // -----------------------------------------------------------------------
655 : :
656 : 0 : void HeaderFooterTabPage::update()
657 : : {
658 : 0 : maRBDateTimeFixed.Enable( maCBDateTime.IsChecked() );
659 : 0 : maTBDateTimeFixed.Enable( maRBDateTimeFixed.IsChecked() && maCBDateTime.IsChecked() );
660 : 0 : maRBDateTimeAutomatic.Enable( maCBDateTime.IsChecked() );
661 : 0 : maCBDateTimeFormat.Enable( maCBDateTime.IsChecked() && maRBDateTimeAutomatic.IsChecked() );
662 : 0 : maFTDateTimeLanguage.Enable( maCBDateTime.IsChecked() && maRBDateTimeAutomatic.IsChecked() );
663 : 0 : maCBDateTimeLanguage.Enable( maCBDateTime.IsChecked() && maRBDateTimeAutomatic.IsChecked() );
664 : :
665 : 0 : maFTFooter.Enable( maCBFooter.IsChecked() );
666 : 0 : maTBFooter.Enable( maCBFooter.IsChecked() );
667 : :
668 : 0 : maFTHeader.Enable( maCBHeader.IsChecked() );
669 : 0 : maTBHeader.Enable( maCBHeader.IsChecked() );
670 : :
671 : 0 : HeaderFooterSettings aSettings;
672 : : bool bNotOnTitle;
673 : 0 : getData( aSettings, bNotOnTitle );
674 : 0 : maCTPreview.update( aSettings );
675 : 0 : }
676 : :
677 : : // -----------------------------------------------------------------------
678 : :
679 : 0 : IMPL_LINK_NOARG(HeaderFooterTabPage, UpdateOnClickHdl)
680 : : {
681 : 0 : update();
682 : :
683 : 0 : return 0;
684 : : }
685 : :
686 : : // -----------------------------------------------------------------------
687 : :
688 : 0 : IMPL_LINK_NOARG(HeaderFooterTabPage, ClickApplyToAllHdl)
689 : : {
690 : 0 : mpDialog->ApplyToAll( this );
691 : 0 : return 0;
692 : : }
693 : :
694 : : // -----------------------------------------------------------------------
695 : :
696 : 0 : IMPL_LINK_NOARG(HeaderFooterTabPage, ClickApplyHdl)
697 : : {
698 : 0 : mpDialog->Apply( this );
699 : 0 : return 0;
700 : : }
701 : :
702 : : // -----------------------------------------------------------------------
703 : :
704 : 0 : IMPL_LINK_NOARG(HeaderFooterTabPage, ClickCancelHdl)
705 : : {
706 : 0 : mpDialog->Cancel( this );
707 : 0 : return 0;
708 : : }
709 : :
710 : : // -----------------------------------------------------------------------
711 : :
712 : 0 : void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet )
713 : : {
714 : 0 : if( mbHandoutMode )
715 : : {
716 : : // if set, set it on all notes master pages
717 : 0 : if( bSet )
718 : : {
719 : 0 : sal_uInt16 nPageCount = mpDoc->GetMasterSdPageCount( PK_NOTES );
720 : : sal_uInt16 nPage;
721 : 0 : for( nPage = 0; nPage < nPageCount; nPage++ )
722 : : {
723 : 0 : GetOrSetDateTimeLanguage( rLanguage, bSet, mpDoc->GetMasterSdPage( nPage, PK_NOTES ) );
724 : : }
725 : : }
726 : :
727 : : // and set it, or just get it from the handout master page
728 : 0 : GetOrSetDateTimeLanguage( rLanguage, bSet, mpDoc->GetMasterSdPage( 0, PK_HANDOUT ) );
729 : : }
730 : : else
731 : : {
732 : : // get the language from the first master page
733 : : // or set it to all master pages
734 : 0 : sal_uInt16 nPageCount = bSet ? mpDoc->GetMasterSdPageCount( PK_NOTES ) : 1;
735 : : sal_uInt16 nPage;
736 : 0 : for( nPage = 0; nPage < nPageCount; nPage++ )
737 : : {
738 : 0 : GetOrSetDateTimeLanguage( rLanguage, bSet, mpDoc->GetMasterSdPage( nPage, PK_STANDARD ) );
739 : : }
740 : : }
741 : 0 : }
742 : :
743 : : // -----------------------------------------------------------------------
744 : :
745 : 0 : void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet, SdPage* pPage )
746 : : {
747 : 0 : if( pPage )
748 : : {
749 : 0 : SdrTextObj* pObj = (SdrTextObj*)pPage->GetPresObj( PRESOBJ_DATETIME );
750 : 0 : if( pObj )
751 : : {
752 : 0 : Outliner* pOutl = mpDoc->GetInternalOutliner();
753 : 0 : pOutl->Init( OUTLINERMODE_TEXTOBJECT );
754 : 0 : sal_uInt16 nOutlMode = pOutl->GetMode();
755 : :
756 : 0 : EditEngine* pEdit = const_cast< EditEngine* >(&pOutl->GetEditEngine());
757 : :
758 : 0 : OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject();
759 : 0 : if( pOPO )
760 : 0 : pOutl->SetText( *pOPO );
761 : :
762 : 0 : EFieldInfo aFieldInfo;
763 : 0 : aFieldInfo.pFieldItem = NULL;
764 : :
765 : 0 : sal_uInt16 nParaCount = pEdit->GetParagraphCount();
766 : : sal_uInt16 nPara;
767 : 0 : for( nPara = 0; (nPara < nParaCount) && (aFieldInfo.pFieldItem == NULL); nPara++ )
768 : : {
769 : 0 : sal_uInt16 nFieldCount = pEdit->GetFieldCount( nPara );
770 : : sal_uInt16 nField;
771 : 0 : for( nField = 0; (nField < nFieldCount) && (aFieldInfo.pFieldItem == NULL); nField++ )
772 : : {
773 : 0 : aFieldInfo = pEdit->GetFieldInfo( nPara, nField );
774 : 0 : if( aFieldInfo.pFieldItem )
775 : : {
776 : 0 : const SvxFieldData* pFieldData = aFieldInfo.pFieldItem->GetField();
777 : 0 : if( pFieldData && pFieldData->ISA( SvxDateTimeField ) )
778 : : {
779 : 0 : break;
780 : : }
781 : : }
782 : 0 : aFieldInfo.pFieldItem = NULL;
783 : : }
784 : : }
785 : :
786 : :
787 : 0 : if( aFieldInfo.pFieldItem != NULL )
788 : : {
789 : 0 : if( bSet )
790 : : {
791 : 0 : SfxItemSet aSet( pEdit->GetAttribs( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex, aFieldInfo.aPosition.nIndex+1, bSet ? GETATTRIBS_CHARATTRIBS : GETATTRIBS_ALL ) );
792 : :
793 : 0 : SvxLanguageItem aItem( rLanguage, EE_CHAR_LANGUAGE );
794 : 0 : aSet.Put( aItem );
795 : :
796 : 0 : SvxLanguageItem aItemCJK( rLanguage, EE_CHAR_LANGUAGE_CJK );
797 : 0 : aSet.Put( aItemCJK );
798 : :
799 : 0 : SvxLanguageItem aItemCTL( rLanguage, EE_CHAR_LANGUAGE_CTL );
800 : 0 : aSet.Put( aItemCTL );
801 : :
802 : 0 : ESelection aSel( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex, aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex+1 );
803 : 0 : pEdit->QuickSetAttribs( aSet, aSel );
804 : :
805 : 0 : pObj->SetOutlinerParaObject( pOutl->CreateParaObject() );
806 : 0 : pOutl->UpdateFields();
807 : : }
808 : : else
809 : : {
810 : 0 : rLanguage = pOutl->GetLanguage( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex );
811 : : }
812 : : }
813 : :
814 : 0 : pOutl->Clear();
815 : 0 : pOutl->Init( nOutlMode );
816 : : }
817 : : }
818 : 0 : }
819 : :
820 : : ///////////////////////////////////////////////////////////////////////
821 : :
822 : 0 : PresLayoutPreview::PresLayoutPreview( ::Window* pParent, const ResId& rResId, SdPage* pMaster )
823 : 0 : :Control( pParent, rResId ), mpMaster( pMaster ), maPageSize( pMaster->GetSize() )
824 : : {
825 : 0 : }
826 : :
827 : : // -----------------------------------------------------------------------
828 : :
829 : 0 : PresLayoutPreview::~PresLayoutPreview()
830 : : {
831 : 0 : }
832 : :
833 : : // -----------------------------------------------------------------------
834 : :
835 : 0 : void PresLayoutPreview::update( HeaderFooterSettings& rSettings )
836 : : {
837 : 0 : maSettings = rSettings;
838 : 0 : Invalidate();
839 : 0 : }
840 : :
841 : : // -----------------------------------------------------------------------
842 : :
843 : 0 : void PresLayoutPreview::Paint( OutputDevice& aOut, SdrTextObj* pObj, bool bVisible, bool bDotted /* = false*/ )
844 : : {
845 : : // get object transformation
846 : 0 : basegfx::B2DHomMatrix aObjectTransform;
847 : 0 : basegfx::B2DPolyPolygon aObjectPolyPolygon;
848 : 0 : pObj->TRGetBaseGeometry(aObjectTransform, aObjectPolyPolygon);
849 : :
850 : : // build complete transformation by adding view transformation from
851 : : // logic page coordinates to local pixel coordinates
852 : 0 : const double fScaleX((double)maOutRect.getWidth() / (double)maPageSize.Width());
853 : 0 : const double fScaleY((double)maOutRect.getHeight() / (double)maPageSize.Height());
854 : 0 : aObjectTransform.scale(fScaleX, fScaleY);
855 : 0 : aObjectTransform.translate(maOutRect.TopLeft().X(), maOutRect.TopLeft().Y());
856 : :
857 : : // create geometry using unit range and object transform
858 : 0 : basegfx::B2DPolyPolygon aGeometry(basegfx::tools::createUnitPolygon());
859 : 0 : aGeometry.transform(aObjectTransform);
860 : :
861 : : // apply line pattern if wanted
862 : 0 : if(bDotted)
863 : : {
864 : 0 : ::std::vector<double> aPattern;
865 : : static double fFactor(1.0);
866 : 0 : aPattern.push_back(3.0 * fFactor);
867 : 0 : aPattern.push_back(1.0 * fFactor);
868 : :
869 : 0 : basegfx::B2DPolyPolygon aDashed;
870 : 0 : basegfx::tools::applyLineDashing(aGeometry, aPattern, &aDashed);
871 : 0 : aGeometry = aDashed;
872 : : }
873 : :
874 : : // determine line color
875 : 0 : svtools::ColorConfig aColorConfig;
876 : 0 : svtools::ColorConfigValue aColor( aColorConfig.GetColorValue( bVisible ? svtools::FONTCOLOR : svtools::OBJECTBOUNDARIES ) );
877 : :
878 : : // paint at OutDev
879 : 0 : aOut.SetLineColor(Color(aColor.nColor));
880 : 0 : aOut.SetFillColor();
881 : :
882 : 0 : for(sal_uInt32 a(0); a < aGeometry.count(); a++)
883 : : {
884 : 0 : aOut.DrawPolyLine(aGeometry.getB2DPolygon(a));
885 : 0 : }
886 : 0 : }
887 : :
888 : : // -----------------------------------------------------------------------
889 : :
890 : 0 : void PresLayoutPreview::Paint( const Rectangle& )
891 : : {
892 : 0 : Push();
893 : :
894 : 0 : maOutRect = Rectangle( Point(0,0), GetOutputSize() );
895 : :
896 : : // calculate page size with correct aspect ratio
897 : : int nWidth, nHeight;
898 : 0 : if( maPageSize.Width() > maPageSize.Height() )
899 : : {
900 : 0 : nWidth = maOutRect.GetWidth();
901 : 0 : nHeight = long( (double)(nWidth * maPageSize.Height()) / (double)maPageSize.Width() );
902 : : }
903 : : else
904 : : {
905 : 0 : nHeight = maOutRect.GetHeight();
906 : 0 : nWidth = long( (double)(nHeight * maPageSize.Width()) / (double)maPageSize.Height() );
907 : : }
908 : :
909 : 0 : maOutRect.nLeft += (maOutRect.GetWidth() - nWidth) >> 1;
910 : 0 : maOutRect.nRight = maOutRect.nLeft + nWidth - 1;
911 : 0 : maOutRect.nTop += (maOutRect.GetHeight() - nHeight) >> 1;
912 : 0 : maOutRect.nBottom = maOutRect.nTop + nHeight - 1;
913 : :
914 : : // draw decoration frame
915 : 0 : DecorationView aDecoView( this );
916 : 0 : maOutRect = aDecoView.DrawFrame( maOutRect, FRAME_HIGHLIGHT_IN );
917 : :
918 : : // draw page background
919 : 0 : SetFillColor( Color(COL_WHITE) );
920 : 0 : DrawRect( maOutRect );
921 : :
922 : : // paint presentation objects from masterpage
923 : 0 : SdrTextObj* pMasterTitle = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_TITLE );
924 : 0 : SdrTextObj* pMasterOutline = (SdrTextObj*)mpMaster->GetPresObj( mpMaster->GetPageKind()==PK_NOTES ? PRESOBJ_NOTES : PRESOBJ_OUTLINE );
925 : 0 : SdrTextObj* pHeader = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_HEADER );
926 : 0 : SdrTextObj* pFooter = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_FOOTER );
927 : 0 : SdrTextObj* pDate = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_DATETIME );
928 : 0 : SdrTextObj* pNumber = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_SLIDENUMBER );
929 : :
930 : 0 : if( pMasterTitle )
931 : 0 : Paint( *this, pMasterTitle, true, true );
932 : 0 : if( pMasterOutline )
933 : 0 : Paint( *this, pMasterOutline, true, true );
934 : 0 : if( pHeader )
935 : 0 : Paint( *this, pHeader, maSettings.mbHeaderVisible );
936 : 0 : if( pFooter )
937 : 0 : Paint( *this, pFooter, maSettings.mbFooterVisible );
938 : 0 : if( pDate )
939 : 0 : Paint( *this, pDate, maSettings.mbDateTimeVisible );
940 : 0 : if( pNumber )
941 : 0 : Paint( *this, pNumber, maSettings.mbSlideNumberVisible );
942 : :
943 : 0 : Pop();
944 : 0 : }
945 : :
946 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|