LCOV - code coverage report
Current view: top level - sd/source/ui/dlg - headerfooterdlg.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 357 0.0 %
Date: 2014-04-14 Functions: 0 43 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10