summaryrefslogtreecommitdiff
path: root/sd/source/ui/dlg/headerfooterdlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/dlg/headerfooterdlg.cxx')
-rwxr-xr-xsd/source/ui/dlg/headerfooterdlg.cxx942
1 files changed, 942 insertions, 0 deletions
diff --git a/sd/source/ui/dlg/headerfooterdlg.cxx b/sd/source/ui/dlg/headerfooterdlg.cxx
new file mode 100755
index 000000000000..b48a1682bba6
--- /dev/null
+++ b/sd/source/ui/dlg/headerfooterdlg.cxx
@@ -0,0 +1,942 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#ifdef SD_DLLIMPLEMENTATION
+#undef SD_DLLIMPLEMENTATION
+#endif
+
+#ifndef _SVX_DIALOGS_HRC
+#include <svx/dialogs.hrc>
+#endif
+#include <editeng/eeitem.hxx>
+#include <editeng/flditem.hxx>
+#include <editeng/langitem.hxx>
+#include <svx/langbox.hxx>
+#include <svx/svdotext.hxx>
+#include <editeng/editeng.hxx>
+#include <sfx2/viewfrm.hxx>
+
+#ifndef _SD_SDRESID_HXX
+#include "sdresid.hxx"
+#endif
+
+#include <vcl/fixed.hxx>
+#include <vcl/button.hxx>
+#include <vcl/edit.hxx>
+#include <vcl/combobox.hxx>
+
+#include "helpids.h"
+#include "Outliner.hxx"
+#include "dialogs.hrc"
+#include "headerfooterdlg.hxx"
+#include "DrawDocShell.hxx"
+#include "drawdoc.hxx"
+#include "ViewShell.hxx"
+
+///////////////////////////////////////////////////////////////////////
+// preview control for presentation layout
+///////////////////////////////////////////////////////////////////////
+#include <vcl/ctrl.hxx>
+#ifndef _SV_COLOR_HXX
+#include <tools/color.hxx>
+#endif
+#include <i18npool/mslangid.hxx>
+#include <svtools/colorcfg.hxx>
+#include <svx/xlndsit.hxx>
+#include <svx/xlineit0.hxx>
+#include <svx/xlnclit.hxx>
+#include <vcl/decoview.hxx>
+
+#include "undoheaderfooter.hxx"
+#include "sdundogr.hxx"
+#include "ViewShell.hxx"
+
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+namespace sd
+{
+
+class PresLayoutPreview : public Control
+{
+private:
+ SdPage* mpMaster;
+ HeaderFooterSettings maSettings;
+ Size maPageSize;
+ Rectangle maOutRect;
+
+private:
+ void Paint( OutputDevice& aOut, SdrTextObj* pObj, bool bVisible, bool bDotted = false );
+
+public:
+ PresLayoutPreview( ::Window* pParent, const ResId& rResId, SdPage* pMaster );
+ ~PresLayoutPreview();
+
+ virtual void Paint( const Rectangle& rRect );
+
+ void update( HeaderFooterSettings& rSettings );
+};
+
+}
+
+///////////////////////////////////////////////////////////////////////
+// tab page for slide & header'n'notes
+///////////////////////////////////////////////////////////////////////
+
+namespace sd
+{
+
+const int nDateTimeFormatsCount = 10;
+int nDateTimeFormats[nDateTimeFormatsCount] =
+{
+ SVXDATEFORMAT_A,
+ SVXDATEFORMAT_F,
+ SVXDATEFORMAT_D,
+ SVXDATEFORMAT_C,
+
+ SVXDATEFORMAT_A | (SVXTIMEFORMAT_24_HM << 4),
+ SVXDATEFORMAT_A | (SVXTIMEFORMAT_12_HM << 4),
+
+ (SVXTIMEFORMAT_24_HM << 4),
+ (SVXTIMEFORMAT_24_HMS <<4),
+
+ (SVXTIMEFORMAT_12_HM << 4 ),
+ (SVXTIMEFORMAT_12_HMS << 4 )
+};
+
+class HeaderFooterTabPage : public TabPage
+{
+private:
+ FixedLine maFLIncludeOnPage;
+
+ CheckBox maCBHeader;
+ FixedText maFTHeader;
+ Edit maTBHeader;
+
+ FixedLine maFLDateTime;
+ CheckBox maCBDateTime;
+ RadioButton maRBDateTimeFixed;
+ RadioButton maRBDateTimeAutomatic;
+ Edit maTBDateTimeFixed;
+ ListBox maCBDateTimeFormat;
+ FixedText maFTDateTimeLanguage;
+ SvxLanguageBox maCBDateTimeLanguage;
+
+ FixedLine maFLFooter;
+ CheckBox maCBFooter;
+ FixedText maFTFooter;
+ Edit maTBFooter;
+
+ FixedLine maFLSlideNumber;
+ CheckBox maCBSlideNumber;
+
+ FixedLine maFLNotOnTitle;
+ CheckBox maCBNotOnTitle;
+
+ PushButton maPBApplyToAll;
+ PushButton maPBApply;
+ CancelButton maPBCancel;
+ HelpButton maPBHelp;
+
+ PresLayoutPreview maCTPreview;
+
+ SdPage* mpCurrentPage;
+ SdDrawDocument * mpDoc;
+ HeaderFooterDialog* mpDialog;
+ LanguageType meOldLanguage;
+
+ bool mbHandoutMode;
+
+ DECL_LINK( UpdateOnClickHdl, void * );
+
+ DECL_LINK( ClickApplyToAllHdl, void * );
+ DECL_LINK( ClickApplyHdl, void * );
+ DECL_LINK( ClickCancelHdl, void * );
+
+ DECL_LINK( LanguageChangeHdl, void * );
+
+ void FillFormatList(int eFormat);
+ void GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet );
+ void GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet, SdPage* pPage );
+
+public:
+ HeaderFooterTabPage( HeaderFooterDialog* pDialog, ::Window* pParent, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode );
+ ~HeaderFooterTabPage();
+
+ static SfxTabPage* Create( ::Window*, const SfxItemSet& );
+ static USHORT* GetRanges();
+
+ void init( const HeaderFooterSettings& rSettings, bool bNotOnTitle, bool bHasApply );
+ void getData( HeaderFooterSettings& rSettings, bool& rNotOnTitle );
+ void update();
+};
+
+}
+
+///////////////////////////////////////////////////////////////////////
+
+using namespace ::sd;
+
+
+HeaderFooterDialog::HeaderFooterDialog( ViewShell* pViewShell, ::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage ) :
+ TabDialog ( pParent, SdResId( RID_SD_DLG_HEADERFOOTER ) ),
+ maTabCtrl( this, SdResId( 1 ) ),
+ mpDoc( pDoc ),
+ mpCurrentPage( pCurrentPage ),
+ mpViewShell( pViewShell )
+{
+ FreeResource();
+
+ SdPage* pSlide;
+ SdPage* pNotes;
+ if( pCurrentPage->GetPageKind() == PK_STANDARD )
+ {
+ pSlide = pCurrentPage;
+ pNotes = (SdPage*)pDoc->GetPage( pCurrentPage->GetPageNum() + 1 );
+ }
+ else if( pCurrentPage->GetPageKind() == PK_NOTES )
+ {
+ pNotes = pCurrentPage;
+ pSlide = (SdPage*)pDoc->GetPage( pCurrentPage->GetPageNum() -1 );
+ mpCurrentPage = pSlide;
+ }
+ else
+ {
+ // handout
+ pSlide = pDoc->GetSdPage( 0, PK_STANDARD );
+ pNotes = pDoc->GetSdPage( 0, PK_NOTES );
+ mpCurrentPage = NULL;
+ }
+
+// maTabCtrl.SetHelpId( HID_XML_FILTER_TABPAGE_CTRL );
+ maTabCtrl.Show();
+
+ mpSlideTabPage = new HeaderFooterTabPage( this, &maTabCtrl, pDoc, pSlide, false );
+ mpSlideTabPage->SetHelpId( HID_SD_TABPAGE_HEADERFOOTER_SLIDE );
+ maTabCtrl.SetTabPage( RID_SD_TABPAGE_HEADERFOOTER_SLIDE, mpSlideTabPage );
+
+ Size aSiz = mpSlideTabPage->GetSizePixel();
+ Size aCtrlSiz = maTabCtrl.GetOutputSizePixel();
+ // set size on TabControl only if smaller than TabPage
+ if ( aCtrlSiz.Width() < aSiz.Width() || aCtrlSiz.Height() < aSiz.Height() )
+ {
+ maTabCtrl.SetOutputSizePixel( aSiz );
+ aCtrlSiz = aSiz;
+ }
+
+ mpNotesHandoutsTabPage = new HeaderFooterTabPage( this, &maTabCtrl, pDoc, pNotes, true );
+ mpNotesHandoutsTabPage->SetHelpId( HID_SD_TABPAGE_HEADERFOOTER_NOTESHANDOUT );
+ maTabCtrl.SetTabPage( RID_SD_TABPAGE_HEADERFOOTER_NOTESHANDOUT, mpNotesHandoutsTabPage );
+
+ aSiz = mpNotesHandoutsTabPage->GetSizePixel();
+ if ( aCtrlSiz.Width() < aSiz.Width() || aCtrlSiz.Height() < aSiz.Height() )
+ {
+ maTabCtrl.SetOutputSizePixel( aSiz );
+ aCtrlSiz = aSiz;
+ }
+
+ ActivatePageHdl( &maTabCtrl );
+
+ AdjustLayout();
+
+ maTabCtrl.SetActivatePageHdl( LINK( this, HeaderFooterDialog, ActivatePageHdl ) );
+ maTabCtrl.SetDeactivatePageHdl( LINK( this, HeaderFooterDialog, DeactivatePageHdl ) );
+
+ maSlideSettings = pSlide->getHeaderFooterSettings();
+
+ const HeaderFooterSettings& rTitleSettings = mpDoc->GetSdPage(0, PK_STANDARD)->getHeaderFooterSettings();
+ bool bNotOnTitle = !rTitleSettings.mbFooterVisible && !rTitleSettings.mbSlideNumberVisible && !rTitleSettings.mbDateTimeVisible;
+
+ mpSlideTabPage->init( maSlideSettings, bNotOnTitle, mpCurrentPage != NULL );
+
+ maNotesHandoutSettings = pNotes->getHeaderFooterSettings();
+ mpNotesHandoutsTabPage->init( maNotesHandoutSettings, false, false );
+}
+
+// -----------------------------------------------------------------------
+
+HeaderFooterDialog::~HeaderFooterDialog()
+{
+ delete mpSlideTabPage;
+ delete mpNotesHandoutsTabPage;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterDialog, ActivatePageHdl, TabControl *, pTabCtrl )
+{
+ const USHORT nId = pTabCtrl->GetCurPageId();
+ TabPage* pTabPage = pTabCtrl->GetTabPage( nId );
+ pTabPage->Show();
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterDialog, DeactivatePageHdl, TabControl *, EMPTYARG )
+{
+ return TRUE;
+}
+
+// -----------------------------------------------------------------------
+
+short HeaderFooterDialog::Execute()
+{
+ USHORT nRet = TabDialog::Execute();
+ if( nRet )
+ mpViewShell->GetDocSh()->SetModified();
+ return nRet;
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterDialog::ApplyToAll( TabPage* pPage )
+{
+ apply( true, pPage == mpSlideTabPage );
+ EndDialog(1);
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterDialog::Apply( TabPage* pPage )
+{
+ apply( false, pPage == mpSlideTabPage );
+ EndDialog(1);
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterDialog::Cancel( TabPage* )
+{
+ EndDialog();
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterDialog::apply( bool bToAll, bool bForceSlides )
+{
+ SdUndoGroup* pUndoGroup = new SdUndoGroup(mpDoc);
+ String aComment( GetText() );
+ pUndoGroup->SetComment( aComment );
+
+ HeaderFooterSettings aNewSettings;
+ bool bNewNotOnTitle;
+
+ // change slide settings first ...
+
+ mpSlideTabPage->getData( aNewSettings, bNewNotOnTitle );
+
+ // only if we pressed apply or apply all on the slide tab page or if the slide settings
+ // have been changed
+ if( bForceSlides || !(aNewSettings == maSlideSettings) )
+ {
+ // apply to all slides
+ if( bToAll )
+ {
+ int nPageCount = mpDoc->GetSdPageCount( PK_STANDARD );
+ int nPage;
+ for( nPage = 0; nPage < nPageCount; nPage++ )
+ {
+ SdPage* pPage = mpDoc->GetSdPage( (USHORT)nPage, PK_STANDARD );
+ change( pUndoGroup, pPage, aNewSettings );
+ }
+ }
+ else
+ {
+ // apply only to the current slide
+ DBG_ASSERT( mpCurrentPage && mpCurrentPage->GetPageKind() == PK_STANDARD, "no current page to apply to!" );
+ if( mpCurrentPage && (mpCurrentPage->GetPageKind() == PK_STANDARD) )
+ {
+ change( pUndoGroup, mpCurrentPage, aNewSettings );
+ }
+ }
+ }
+
+ // if we don't want to have header&footer on the first slide
+ if( bNewNotOnTitle )
+ {
+ // just hide them, plain simple UI feature
+ HeaderFooterSettings aTempSettings = mpDoc->GetSdPage( 0, PK_STANDARD )->getHeaderFooterSettings();
+
+ aTempSettings.mbFooterVisible = false;
+ aTempSettings.mbSlideNumberVisible = false;
+ aTempSettings.mbDateTimeVisible = false;
+
+ change( pUndoGroup, mpDoc->GetSdPage( 0, PK_STANDARD ), aTempSettings );
+ }
+
+ // now notes settings
+
+ mpNotesHandoutsTabPage->getData( aNewSettings, bNewNotOnTitle );
+
+ // only if we pressed apply or apply all on the notes tab page or if the notes settings
+ // have been changed
+ if( !bForceSlides || !(aNewSettings == maNotesHandoutSettings) )
+ {
+ // first set to all notes pages
+ int nPageCount = mpDoc->GetSdPageCount( PK_NOTES );
+ int nPage;
+ for( nPage = 0; nPage < nPageCount; nPage++ )
+ {
+ SdPage* pPage = mpDoc->GetSdPage( (USHORT)nPage, PK_NOTES );
+
+ change( pUndoGroup, pPage, aNewSettings );
+ }
+
+ // and last but not least to the handout page
+ change( pUndoGroup, mpDoc->GetMasterSdPage( 0, PK_HANDOUT ), aNewSettings );
+ }
+
+ // Undo Gruppe dem Undo Manager uebergeben
+ mpViewShell->GetViewFrame()->GetObjectShell()->GetUndoManager()->AddUndoAction(pUndoGroup);
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterDialog::change( SdUndoGroup* pUndoGroup, SdPage* pPage, const HeaderFooterSettings& rNewSettings )
+{
+ pUndoGroup->AddAction(new SdHeaderFooterUndoAction(mpDoc, pPage, rNewSettings ));
+ pPage->setHeaderFooterSettings( rNewSettings );
+}
+
+///////////////////////////////////////////////////////////////////////
+
+inline void moveY( ::Window& rWin, int deltaY )
+{
+ Point aPos = rWin.GetPosPixel();
+ aPos.Y() += deltaY;
+ rWin.SetPosPixel( aPos );
+}
+
+HeaderFooterTabPage::HeaderFooterTabPage( HeaderFooterDialog* pDialog, ::Window* pWindow, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode ) :
+ TabPage( pWindow, SdResId( RID_SD_TABPAGE_HEADERFOOTER ) ),
+ maFLIncludeOnPage( this, SdResId( FL_INCLUDE_ON_PAGE ) ),
+ maCBHeader( this, SdResId( CB_HEADER ) ),
+ maFTHeader( this, SdResId( FT_HEADER ) ),
+ maTBHeader( this, SdResId( TB_HEADER_FIXED ) ),
+ maFLDateTime( this, SdResId( FL_DATETIME ) ),
+ maCBDateTime( this, SdResId( CB_DATETIME ) ),
+ maRBDateTimeFixed( this, SdResId( RB_DATETIME_FIXED ) ),
+ maRBDateTimeAutomatic( this, SdResId( RB_DATETIME_AUTOMATIC ) ),
+ maTBDateTimeFixed( this, SdResId( TB_DATETIME_FIXED ) ),
+ maCBDateTimeFormat( this, SdResId( CB_DATETIME_FORMAT ) ),
+ maFTDateTimeLanguage( this, SdResId( FT_DATETIME_LANGUAGE ) ),
+ maCBDateTimeLanguage( this, SdResId( CB_DATETIME_LANGUAGE ) ),
+
+ maFLFooter( this, SdResId( FL_FOOTER ) ),
+ maCBFooter( this, SdResId( CB_FOOTER ) ),
+ maFTFooter( this, SdResId( FT_FOOTER ) ),
+ maTBFooter( this, SdResId( TB_FOOTER_FIXED ) ),
+
+ maFLSlideNumber( this, SdResId( FL_SLIDENUMBER ) ),
+ maCBSlideNumber( this, SdResId( CB_SLIDENUMBER ) ),
+
+ maFLNotOnTitle( this, SdResId( FL_NOTONTITLE ) ),
+ maCBNotOnTitle( this, SdResId( CB_NOTONTITLE ) ),
+
+ maPBApplyToAll( this, SdResId( BT_APPLYTOALL ) ),
+ maPBApply( this, SdResId( BT_APPLY ) ),
+ maPBCancel( this, SdResId( BT_CANCEL ) ),
+ maPBHelp( this, SdResId( BT_HELP ) ),
+
+ maCTPreview( this, SdResId( CT_PREVIEW ),
+ pActualPage ?
+ (pActualPage->IsMasterPage() ? pActualPage : (SdPage*)(&(pActualPage->TRG_GetMasterPage()))) :
+ (pDoc->GetMasterSdPage( 0, bHandoutMode ? PK_NOTES : PK_STANDARD )) ),
+ mpCurrentPage(pActualPage),
+ mpDoc(pDoc),
+ mpDialog(pDialog),
+ mbHandoutMode( bHandoutMode )
+
+{
+ pDoc->StopWorkStartupDelay();
+
+ if( !mbHandoutMode )
+ {
+ int deltaY = maCBHeader.GetPosPixel().Y() - maCBDateTime.GetPosPixel().Y();
+
+ moveY( maCBDateTime, deltaY );
+ moveY( maRBDateTimeFixed, deltaY );
+ moveY( maRBDateTimeAutomatic, deltaY );
+ moveY( maTBDateTimeFixed, deltaY );
+ moveY( maCBDateTimeFormat, deltaY );
+ moveY( maFTDateTimeLanguage, deltaY );
+ moveY( maCBDateTimeLanguage, deltaY );
+ moveY( maFLFooter, deltaY );
+ moveY( maCBFooter, deltaY );
+ moveY( maFTFooter, deltaY );
+ moveY( maTBFooter, deltaY );
+ moveY( maFLSlideNumber, deltaY );
+ moveY( maCBSlideNumber, deltaY );
+ moveY( maFLNotOnTitle, deltaY );
+ moveY( maCBNotOnTitle, deltaY );
+ }
+ else
+ {
+ int deltaY = maPBApply.GetPosPixel().Y() - maPBCancel.GetPosPixel().Y();
+
+ moveY( maPBCancel, deltaY );
+ moveY( maPBHelp, deltaY );
+
+ String aPageNumberStr( SdResId( STR_PAGE_NUMBER ) );
+ maCBSlideNumber.SetText( aPageNumberStr );
+
+ String aIncludeOnPageStr( SdResId( STR_INCLUDE_ON_PAGE ) );
+ maFLIncludeOnPage.SetText( aIncludeOnPageStr );
+ }
+
+ FreeResource();
+
+ maPBApply.Show( !mbHandoutMode );
+ maCBHeader.Show( mbHandoutMode );
+ maFTHeader.Show( mbHandoutMode );
+ maTBHeader.Show( mbHandoutMode );
+ maFLDateTime.Show( mbHandoutMode );
+ maFLNotOnTitle.Show( !mbHandoutMode );
+ maCBNotOnTitle.Show( !mbHandoutMode );
+
+ maCBDateTime.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
+ maRBDateTimeFixed.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
+ maRBDateTimeAutomatic.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
+ maCBFooter.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
+ maCBHeader.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
+ maCBSlideNumber.SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) );
+
+ maPBApplyToAll.SetClickHdl( LINK( this, HeaderFooterTabPage, ClickApplyToAllHdl ) );
+ maPBApply.SetClickHdl( LINK( this, HeaderFooterTabPage, ClickApplyHdl ) );
+ maPBCancel.SetClickHdl( LINK( this, HeaderFooterTabPage, ClickCancelHdl ) );
+
+ maCBDateTimeLanguage.SetLanguageList( LANG_LIST_ALL|LANG_LIST_ONLY_KNOWN, false );
+ maCBDateTimeLanguage.SetSelectHdl( LINK( this, HeaderFooterTabPage, LanguageChangeHdl ) );
+
+ GetOrSetDateTimeLanguage( meOldLanguage, false );
+ meOldLanguage = MsLangId::getRealLanguage( meOldLanguage );
+ maCBDateTimeLanguage.SelectLanguage( meOldLanguage );
+
+ FillFormatList(SVXDATEFORMAT_A);
+
+}
+// -----------------------------------------------------------------------
+
+HeaderFooterTabPage::~HeaderFooterTabPage()
+{
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterTabPage, LanguageChangeHdl, void *, EMPTYARG )
+{
+ FillFormatList( (int)(sal_IntPtr)maCBDateTimeFormat.GetEntryData( maCBDateTimeFormat.GetSelectEntryPos() ) );
+
+
+ return 0L;
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterTabPage::FillFormatList( int eFormat )
+{
+ LanguageType eLanguage = maCBDateTimeLanguage.GetSelectLanguage();
+
+ maCBDateTimeFormat.Clear();
+
+ Date aDate;
+ Time aTime;
+
+ int nFormat;
+ for( nFormat = 0; nFormat < nDateTimeFormatsCount; nFormat++ )
+ {
+ String aStr( SvxDateTimeField::GetFormatted( aDate, aTime, nDateTimeFormats[nFormat], *(SD_MOD()->GetNumberFormatter()), eLanguage ) );
+ USHORT nEntry = maCBDateTimeFormat.InsertEntry( aStr );
+ maCBDateTimeFormat.SetEntryData( nEntry, (void*)nDateTimeFormats[nFormat] );
+ if( nDateTimeFormats[nFormat] == eFormat )
+ {
+ maCBDateTimeFormat.SelectEntryPos( nEntry );
+ maCBDateTimeFormat.SetText( aStr );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterTabPage::init( const HeaderFooterSettings& rSettings, bool bNotOnTitle, bool bHasApply )
+{
+ maCBDateTime.Check( rSettings.mbDateTimeVisible );
+ maRBDateTimeFixed.Check( rSettings.mbDateTimeIsFixed );
+ maRBDateTimeAutomatic.Check( !rSettings.mbDateTimeIsFixed );
+ maTBDateTimeFixed.SetText( rSettings.maDateTimeText );
+
+ maCBHeader.Check( rSettings.mbHeaderVisible );
+ maTBHeader.SetText( rSettings.maHeaderText );
+
+ maCBFooter.Check( rSettings.mbFooterVisible );
+ maTBFooter.SetText( rSettings.maFooterText );
+
+ maCBSlideNumber.Check( rSettings.mbSlideNumberVisible );
+
+ maCBNotOnTitle.Check( bNotOnTitle );
+ maPBApply.Enable( bHasApply );
+
+ maCBDateTimeLanguage.SelectLanguage( meOldLanguage );
+
+ USHORT nPos;
+ for( nPos = 0; nPos < maCBDateTimeFormat.GetEntryCount(); nPos++ )
+ {
+ int nFormat = (int)(sal_IntPtr)maCBDateTimeFormat.GetEntryData( nPos );
+ if( nFormat == rSettings.meDateTimeFormat )
+ {
+ maCBDateTimeFormat.SelectEntryPos( nPos );
+ maCBDateTimeFormat.SetText( maCBDateTimeFormat.GetEntry(nPos) );
+ break;
+ }
+ }
+
+ update();
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterTabPage::getData( HeaderFooterSettings& rSettings, bool& rNotOnTitle )
+{
+ rSettings.mbDateTimeVisible = maCBDateTime.IsChecked();
+ rSettings.mbDateTimeIsFixed = maRBDateTimeFixed.IsChecked();
+ rSettings.maDateTimeText = maTBDateTimeFixed.GetText();
+ rSettings.mbFooterVisible = maCBFooter.IsChecked();
+ rSettings.maFooterText = maTBFooter.GetText();
+ rSettings.mbSlideNumberVisible = maCBSlideNumber.IsChecked();
+ rSettings.mbHeaderVisible = maCBHeader.IsChecked();
+ rSettings.maHeaderText = maTBHeader.GetText();
+
+ if( maCBDateTimeFormat.GetSelectEntryCount() == 1 )
+ rSettings.meDateTimeFormat = (int)(sal_IntPtr)maCBDateTimeFormat.GetEntryData( maCBDateTimeFormat.GetSelectEntryPos() );
+
+ LanguageType eLanguage = maCBDateTimeLanguage.GetSelectLanguage();
+ if( eLanguage != meOldLanguage )
+ GetOrSetDateTimeLanguage( eLanguage, true );
+
+ rNotOnTitle = maCBNotOnTitle.IsChecked();
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterTabPage::update()
+{
+ maRBDateTimeFixed.Enable( maCBDateTime.IsChecked() );
+ maTBDateTimeFixed.Enable( maRBDateTimeFixed.IsChecked() && maCBDateTime.IsChecked() );
+ maRBDateTimeAutomatic.Enable( maCBDateTime.IsChecked() );
+ maCBDateTimeFormat.Enable( maCBDateTime.IsChecked() && maRBDateTimeAutomatic.IsChecked() );
+ maFTDateTimeLanguage.Enable( maCBDateTime.IsChecked() && maRBDateTimeAutomatic.IsChecked() );
+ maCBDateTimeLanguage.Enable( maCBDateTime.IsChecked() && maRBDateTimeAutomatic.IsChecked() );
+
+ maFTFooter.Enable( maCBFooter.IsChecked() );
+ maTBFooter.Enable( maCBFooter.IsChecked() );
+
+ maFTHeader.Enable( maCBHeader.IsChecked() );
+ maTBHeader.Enable( maCBHeader.IsChecked() );
+
+ HeaderFooterSettings aSettings;
+ bool bNotOnTitle;
+ getData( aSettings, bNotOnTitle );
+ maCTPreview.update( aSettings );
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterTabPage, UpdateOnClickHdl, void *, EMPTYARG )
+{
+ update();
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterTabPage, ClickApplyToAllHdl, void *, EMPTYARG )
+{
+ mpDialog->ApplyToAll( this );
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterTabPage, ClickApplyHdl, void *, EMPTYARG )
+{
+ mpDialog->Apply( this );
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+IMPL_LINK( HeaderFooterTabPage, ClickCancelHdl, void *, EMPTYARG )
+{
+ mpDialog->Cancel( this );
+ return 0;
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet )
+{
+ if( mbHandoutMode )
+ {
+ // if set, set it on all notes master pages
+ if( bSet )
+ {
+ USHORT nPageCount = mpDoc->GetMasterSdPageCount( PK_NOTES );
+ USHORT nPage;
+ for( nPage = 0; nPage < nPageCount; nPage++ )
+ {
+ GetOrSetDateTimeLanguage( rLanguage, bSet, mpDoc->GetMasterSdPage( nPage, PK_NOTES ) );
+ }
+ }
+
+ // and set it, or just get it from the handout master page
+ GetOrSetDateTimeLanguage( rLanguage, bSet, mpDoc->GetMasterSdPage( 0, PK_HANDOUT ) );
+ }
+ else
+ {
+ // get the language from the first master page
+ // or set it to all master pages
+ USHORT nPageCount = bSet ? mpDoc->GetMasterSdPageCount( PK_NOTES ) : 1;
+ USHORT nPage;
+ for( nPage = 0; nPage < nPageCount; nPage++ )
+ {
+ GetOrSetDateTimeLanguage( rLanguage, bSet, mpDoc->GetMasterSdPage( nPage, PK_STANDARD ) );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet, SdPage* pPage )
+{
+ if( pPage )
+ {
+ SdrTextObj* pObj = (SdrTextObj*)pPage->GetPresObj( PRESOBJ_DATETIME );
+ if( pObj )
+ {
+ Outliner* pOutl = mpDoc->GetInternalOutliner();
+ pOutl->Init( OUTLINERMODE_TEXTOBJECT );
+ USHORT nOutlMode = pOutl->GetMode();
+
+ EditEngine* pEdit = const_cast< EditEngine* >(&pOutl->GetEditEngine());
+
+ OutlinerParaObject* pOPO = pObj->GetOutlinerParaObject();
+ if( pOPO )
+ pOutl->SetText( *pOPO );
+
+ EFieldInfo aFieldInfo;
+ aFieldInfo.pFieldItem = NULL;
+
+ USHORT nParaCount = pEdit->GetParagraphCount();
+ USHORT nPara;
+ for( nPara = 0; (nPara < nParaCount) && (aFieldInfo.pFieldItem == NULL); nPara++ )
+ {
+ USHORT nFieldCount = pEdit->GetFieldCount( nPara );
+ USHORT nField;
+ for( nField = 0; (nField < nFieldCount) && (aFieldInfo.pFieldItem == NULL); nField++ )
+ {
+ aFieldInfo = pEdit->GetFieldInfo( nPara, nField );
+ if( aFieldInfo.pFieldItem )
+ {
+ const SvxFieldData* pFieldData = aFieldInfo.pFieldItem->GetField();
+ if( pFieldData && pFieldData->ISA( SvxDateTimeField ) )
+ {
+ break;
+ }
+ }
+ aFieldInfo.pFieldItem = NULL;
+ }
+ }
+
+
+ if( aFieldInfo.pFieldItem != NULL )
+ {
+ if( bSet )
+ {
+ SfxItemSet aSet( pEdit->GetAttribs( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex, aFieldInfo.aPosition.nIndex+1, bSet ? GETATTRIBS_CHARATTRIBS : GETATTRIBS_ALL ) );
+
+ SvxLanguageItem aItem( rLanguage, EE_CHAR_LANGUAGE );
+ aSet.Put( aItem );
+
+ SvxLanguageItem aItemCJK( rLanguage, EE_CHAR_LANGUAGE_CJK );
+ aSet.Put( aItemCJK );
+
+ SvxLanguageItem aItemCTL( rLanguage, EE_CHAR_LANGUAGE_CTL );
+ aSet.Put( aItemCTL );
+
+ ESelection aSel( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex, aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex+1 );
+ pEdit->QuickSetAttribs( aSet, aSel );
+
+ pObj->SetOutlinerParaObject( pOutl->CreateParaObject() );
+ pOutl->UpdateFields();
+ }
+ else
+ {
+ rLanguage = pOutl->GetLanguage( aFieldInfo.aPosition.nPara, aFieldInfo.aPosition.nIndex );
+ }
+ }
+
+ pOutl->Clear();
+ pOutl->Init( nOutlMode );
+ }
+ }
+}
+
+///////////////////////////////////////////////////////////////////////
+
+PresLayoutPreview::PresLayoutPreview( ::Window* pParent, const ResId& rResId, SdPage* pMaster )
+:Control( pParent, rResId ), mpMaster( pMaster ), maPageSize( pMaster->GetSize() )
+{
+}
+
+// -----------------------------------------------------------------------
+
+PresLayoutPreview::~PresLayoutPreview()
+{
+}
+
+// -----------------------------------------------------------------------
+
+void PresLayoutPreview::update( HeaderFooterSettings& rSettings )
+{
+ maSettings = rSettings;
+ Invalidate();
+}
+
+// -----------------------------------------------------------------------
+
+void PresLayoutPreview::Paint( OutputDevice& aOut, SdrTextObj* pObj, bool bVisible, bool bDotted /* = false*/ )
+{
+ // get object transformation
+ basegfx::B2DHomMatrix aObjectTransform;
+ basegfx::B2DPolyPolygon aObjectPolyPolygon;
+ pObj->TRGetBaseGeometry(aObjectTransform, aObjectPolyPolygon);
+
+ // build complete transformation by adding view transformation from
+ // logic page coordinates to local pixel coordinates
+ const double fScaleX((double)maOutRect.getWidth() / (double)maPageSize.Width());
+ const double fScaleY((double)maOutRect.getHeight() / (double)maPageSize.Height());
+ aObjectTransform.scale(fScaleX, fScaleY);
+ aObjectTransform.translate(maOutRect.TopLeft().X(), maOutRect.TopLeft().Y());
+
+ // create geometry using unit range and object transform
+ basegfx::B2DPolyPolygon aGeometry(basegfx::tools::createUnitPolygon());
+ aGeometry.transform(aObjectTransform);
+
+ // apply line pattern if wanted
+ if(bDotted)
+ {
+ ::std::vector<double> aPattern;
+ static double fFactor(1.0);
+ aPattern.push_back(3.0 * fFactor);
+ aPattern.push_back(1.0 * fFactor);
+
+ basegfx::B2DPolyPolygon aDashed;
+ basegfx::tools::applyLineDashing(aGeometry, aPattern, &aDashed);
+ aGeometry = aDashed;
+ }
+
+ // determine line color
+ svtools::ColorConfig aColorConfig;
+ svtools::ColorConfigValue aColor( aColorConfig.GetColorValue( bVisible ? svtools::FONTCOLOR : svtools::OBJECTBOUNDARIES ) );
+
+ // paint at OutDev
+ aOut.SetLineColor(Color(aColor.nColor));
+ aOut.SetFillColor();
+
+ for(sal_uInt32 a(0); a < aGeometry.count(); a++)
+ {
+ aOut.DrawPolyLine(aGeometry.getB2DPolygon(a));
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void PresLayoutPreview::Paint( const Rectangle& )
+{
+ Push();
+
+ svtools::ColorConfig aColorConfig;
+ svtools::ColorConfigValue aColor( aColorConfig.GetColorValue( svtools::APPBACKGROUND ) );
+
+ maOutRect = Rectangle( Point(0,0), GetOutputSize() );
+
+ // calculate page size with correct aspect ratio
+ int nWidth, nHeight;
+ if( maPageSize.Width() > maPageSize.Height() )
+ {
+ nWidth = maOutRect.GetWidth();
+ nHeight = long( (double)(nWidth * maPageSize.Height()) / (double)maPageSize.Width() );
+ }
+ else
+ {
+ nHeight = maOutRect.GetHeight();
+ nWidth = long( (double)(nHeight * maPageSize.Width()) / (double)maPageSize.Height() );
+ }
+
+ maOutRect.nLeft += (maOutRect.GetWidth() - nWidth) >> 1;
+ maOutRect.nRight = maOutRect.nLeft + nWidth - 1;
+ maOutRect.nTop += (maOutRect.GetHeight() - nHeight) >> 1;
+ maOutRect.nBottom = maOutRect.nTop + nHeight - 1;
+
+ // draw decoration frame
+ DecorationView aDecoView( this );
+ maOutRect = aDecoView.DrawFrame( maOutRect, FRAME_HIGHLIGHT_IN );
+
+ // draw page background
+ SetFillColor( Color(COL_WHITE) );
+ DrawRect( maOutRect );
+
+ // paint presentation objects from masterpage
+ SdrTextObj* pMasterTitle = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_TITLE );
+ SdrTextObj* pMasterOutline = (SdrTextObj*)mpMaster->GetPresObj( mpMaster->GetPageKind()==PK_NOTES ? PRESOBJ_NOTES : PRESOBJ_OUTLINE );
+ SdrTextObj* pHeader = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_HEADER );
+ SdrTextObj* pFooter = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_FOOTER );
+ SdrTextObj* pDate = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_DATETIME );
+ SdrTextObj* pNumber = (SdrTextObj*)mpMaster->GetPresObj( PRESOBJ_SLIDENUMBER );
+
+ if( pMasterTitle )
+ Paint( *this, pMasterTitle, true, true );
+ if( pMasterOutline )
+ Paint( *this, pMasterOutline, true, true );
+ if( pHeader )
+ Paint( *this, pHeader, maSettings.mbHeaderVisible );
+ if( pFooter )
+ Paint( *this, pFooter, maSettings.mbFooterVisible );
+ if( pDate )
+ Paint( *this, pDate, maSettings.mbDateTimeVisible );
+ if( pNumber )
+ Paint( *this, pNumber, maSettings.mbSlideNumberVisible );
+
+ Pop();
+}