xref: /trunk/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