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