LCOV - code coverage report
Current view: top level - svx/source/dialog - hdft.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 548 0.2 %
Date: 2015-06-13 12:38:46 Functions: 2 33 6.1 %
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 <svl/itemiter.hxx>
      21             : #include <sfx2/app.hxx>
      22             : #include <sfx2/objsh.hxx>
      23             : #include <sfx2/module.hxx>
      24             : #include <vcl/msgbox.hxx>
      25             : #include <vcl/graph.hxx>
      26             : #include <sfx2/sfxsids.hrc>
      27             : #include <svx/svxids.hrc>
      28             : #include <svx/dialogs.hrc>
      29             : 
      30             : #include <svl/intitem.hxx>
      31             : 
      32             : #include <svx/hdft.hxx>
      33             : #include <svx/pageitem.hxx>
      34             : 
      35             : #include "svx/dlgutil.hxx"
      36             : #include <svx/dialmgr.hxx>
      37             : #include <sfx2/htmlmode.hxx>
      38             : 
      39             : #include <editeng/brushitem.hxx>
      40             : #include <editeng/lrspitem.hxx>
      41             : #include <editeng/ulspitem.hxx>
      42             : #include <editeng/shaditem.hxx>
      43             : #include <editeng/sizeitem.hxx>
      44             : #include <editeng/boxitem.hxx>
      45             : 
      46             : #include <svx/svxdlg.hxx>
      47             : #include <boost/scoped_ptr.hpp>
      48             : 
      49             : //UUUU
      50             : #include <svx/xdef.hxx>
      51             : #include <svx/xenum.hxx>
      52             : #include <svx/xfillit0.hxx>
      53             : #include <svx/unobrushitemhelper.hxx>
      54             : #include <sfx2/request.hxx>
      55             : 
      56             : using namespace com::sun::star;
      57             : 
      58             : // Word 97 incompatibility (#i19922#)
      59             : static const long MINBODY = 56;  // 1mm in twips rounded
      60             : 
      61             : // default distance to Header or footer
      62             : static const long DEF_DIST_WRITER = 500;    // 5mm (Writer)
      63             : static const long DEF_DIST_CALC = 250;      // 2.5mm (Calc)
      64             : 
      65             : const sal_uInt16 SvxHFPage::pRanges[] =
      66             : {
      67             :     SID_ATTR_BRUSH,          SID_ATTR_BRUSH,
      68             : 
      69             :     //UUUU Support DrawingLayer FillStyles (no real call to below GetRanges()
      70             :     // detected, still do the complete transition)
      71             :     XATTR_FILL_FIRST,        XATTR_FILL_LAST,
      72             : 
      73             :     SID_ATTR_BORDER_OUTER,   SID_ATTR_BORDER_OUTER,
      74             :     SID_ATTR_BORDER_INNER,   SID_ATTR_BORDER_INNER,
      75             :     SID_ATTR_BORDER_SHADOW,  SID_ATTR_BORDER_SHADOW,
      76             :     SID_ATTR_LRSPACE,        SID_ATTR_LRSPACE,
      77             :     SID_ATTR_ULSPACE,        SID_ATTR_ULSPACE,
      78             :     SID_ATTR_PAGE_SIZE,      SID_ATTR_PAGE_SIZE,
      79             :     SID_ATTR_PAGE_HEADERSET, SID_ATTR_PAGE_HEADERSET,
      80             :     SID_ATTR_PAGE_FOOTERSET, SID_ATTR_PAGE_FOOTERSET,
      81             :     SID_ATTR_PAGE_ON,        SID_ATTR_PAGE_ON,
      82             :     SID_ATTR_PAGE_DYNAMIC,   SID_ATTR_PAGE_DYNAMIC,
      83             :     SID_ATTR_PAGE_SHARED,    SID_ATTR_PAGE_SHARED,
      84             :     SID_ATTR_PAGE_SHARED_FIRST,    SID_ATTR_PAGE_SHARED_FIRST,
      85             :     SID_ATTR_HDFT_DYNAMIC_SPACING, SID_ATTR_HDFT_DYNAMIC_SPACING,
      86             :     0
      87             : };
      88             : 
      89             : namespace svx {
      90             : 
      91           0 :     bool ShowBorderBackgroundDlg( vcl::Window* pParent, SfxItemSet* pBBSet,
      92             :             bool bEnableBackgroundSelector )
      93             :     {
      94           0 :         bool bRes = false;
      95           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
      96           0 :         if(pFact)
      97             :         {
      98           0 :             boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSvxBorderBackgroundDlg( pParent, *pBBSet, bEnableBackgroundSelector ));
      99             :             DBG_ASSERT(pDlg, "Dialog creation failed!");
     100           0 :             if ( pDlg->Execute() == RET_OK && pDlg->GetOutputItemSet() )
     101             :             {
     102           0 :                 SfxItemIter aIter( *pDlg->GetOutputItemSet() );
     103           0 :                 const SfxPoolItem* pItem = aIter.FirstItem();
     104             : 
     105           0 :                 while ( pItem )
     106             :                 {
     107           0 :                     if ( !IsInvalidItem( pItem ) )
     108           0 :                         pBBSet->Put( *pItem );
     109           0 :                     pItem = aIter.NextItem();
     110             :                 }
     111           0 :                 bRes = true;
     112           0 :             }
     113             :         }
     114           0 :         return bRes;
     115             :     }
     116             : }
     117             : 
     118           0 : VclPtr<SfxTabPage> SvxHeaderPage::Create( vcl::Window* pParent, const SfxItemSet* rSet )
     119             : {
     120           0 :     return VclPtr<SvxHeaderPage>::Create( pParent, *rSet );
     121             : }
     122             : 
     123             : 
     124             : 
     125           0 : VclPtr<SfxTabPage> SvxFooterPage::Create( vcl::Window* pParent, const SfxItemSet* rSet )
     126             : {
     127           0 :     return VclPtr<SvxFooterPage>::Create( pParent, *rSet );
     128             : }
     129             : 
     130             : 
     131             : 
     132           0 : SvxHeaderPage::SvxHeaderPage( vcl::Window* pParent, const SfxItemSet& rAttr ) :
     133             : 
     134           0 :     SvxHFPage( pParent, rAttr, SID_ATTR_PAGE_HEADERSET )
     135             : 
     136             : {
     137           0 : }
     138             : 
     139             : 
     140             : 
     141           0 : SvxFooterPage::SvxFooterPage( vcl::Window* pParent, const SfxItemSet& rAttr ) :
     142             : 
     143           0 :     SvxHFPage( pParent, rAttr, SID_ATTR_PAGE_FOOTERSET )
     144             : 
     145             : {
     146           0 : }
     147             : 
     148             : 
     149           0 : SvxHFPage::SvxHFPage( vcl::Window* pParent, const SfxItemSet& rSet, sal_uInt16 nSetId ) :
     150             :     SfxTabPage(pParent, "HFFormatPage", "svx/ui/headfootformatpage.ui", &rSet),
     151             :     nId(nSetId),
     152             :     pBBSet(NULL),
     153             :     // bitfield
     154             :     mbDisableQueryBox(false),
     155             :     mbEnableBackgroundSelector(true),
     156           0 :     mbEnableDrawingLayerFillStyles(false)
     157             : {
     158           0 :     get(m_pCntSharedBox,"checkSameLR");
     159           0 :     get(m_pCntSharedFirstBox,"checkSameFP");
     160           0 :     get(m_pLMEdit,"spinMargLeft");
     161           0 :     get(m_pLMLbl,"labelLeftMarg");
     162           0 :     get(m_pRMEdit,"spinMargRight");
     163           0 :     get(m_pRMLbl,"labelRightMarg");
     164           0 :     get(m_pDistEdit,"spinSpacing");
     165           0 :     get(m_pDistFT,"labelSpacing");
     166           0 :     get(m_pDynSpacingCB,"checkDynSpacing");
     167           0 :     get(m_pHeightFT,"labelHeight");
     168           0 :     get(m_pHeightEdit,"spinHeight");
     169           0 :     get(m_pHeightDynBtn,"checkAutofit");
     170           0 :     get(m_pBspWin,"drawingareaPageHF");
     171           0 :     get(m_pBackgroundBtn,"buttonMore");
     172             : 
     173             :     //swap header <-> footer in UI
     174           0 :     if(nId == SID_ATTR_PAGE_FOOTERSET)
     175             :     {
     176           0 :         get(m_pPageLbl,"labelFooterFormat");
     177           0 :         get(m_pTurnOnBox, "checkFooterOn");
     178             :     }
     179             :     else //Header
     180             :     {
     181           0 :         get(m_pPageLbl,"labelHeaderFormat");
     182           0 :         get(m_pTurnOnBox, "checkHeaderOn");
     183             :     }
     184           0 :     m_pTurnOnBox->Show();
     185           0 :     m_pPageLbl->Show();
     186             : 
     187           0 :     InitHandler();
     188           0 :     m_pBspWin->EnableRTL( false );
     189             : 
     190             :     // This Page needs ExchangeSupport
     191           0 :     SetExchangeSupport();
     192             : 
     193             : 
     194             :     // Set metrics
     195           0 :     FieldUnit eFUnit = GetModuleFieldUnit( rSet );
     196           0 :     SetFieldUnit( *m_pDistEdit, eFUnit );
     197           0 :     SetFieldUnit( *m_pHeightEdit, eFUnit );
     198           0 :     SetFieldUnit( *m_pLMEdit, eFUnit );
     199           0 :     SetFieldUnit( *m_pRMEdit, eFUnit );
     200           0 : }
     201             : 
     202             : 
     203             : 
     204           0 : SvxHFPage::~SvxHFPage()
     205             : {
     206           0 :     disposeOnce();
     207           0 : }
     208             : 
     209           0 : void SvxHFPage::dispose()
     210             : {
     211           0 :     delete pBBSet;
     212           0 :     m_pPageLbl.clear();
     213           0 :     m_pTurnOnBox.clear();
     214           0 :     m_pCntSharedBox.clear();
     215           0 :     m_pCntSharedFirstBox.clear();
     216           0 :     m_pLMLbl.clear();
     217           0 :     m_pLMEdit.clear();
     218           0 :     m_pRMLbl.clear();
     219           0 :     m_pRMEdit.clear();
     220           0 :     m_pDistFT.clear();
     221           0 :     m_pDistEdit.clear();
     222           0 :     m_pDynSpacingCB.clear();
     223           0 :     m_pHeightFT.clear();
     224           0 :     m_pHeightEdit.clear();
     225           0 :     m_pHeightDynBtn.clear();
     226           0 :     m_pBspWin.clear();
     227           0 :     m_pBackgroundBtn.clear();
     228           0 :     SfxTabPage::dispose();
     229           0 : }
     230             : 
     231             : 
     232             : 
     233           0 : bool SvxHFPage::FillItemSet( SfxItemSet* rSet )
     234             : {
     235           0 :     const sal_uInt16 nWSize = GetWhich(SID_ATTR_PAGE_SIZE);
     236           0 :     const sal_uInt16 nWLRSpace = GetWhich(SID_ATTR_LRSPACE);
     237           0 :     const sal_uInt16 nWULSpace = GetWhich(SID_ATTR_ULSPACE);
     238           0 :     const sal_uInt16 nWOn = GetWhich(SID_ATTR_PAGE_ON);
     239           0 :     const sal_uInt16 nWDynamic = GetWhich(SID_ATTR_PAGE_DYNAMIC);
     240           0 :     const sal_uInt16 nWDynSpacing = GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING);
     241           0 :     const sal_uInt16 nWShared = GetWhich(SID_ATTR_PAGE_SHARED);
     242           0 :     const sal_uInt16 nWSharedFirst = GetWhich( SID_ATTR_PAGE_SHARED_FIRST );
     243           0 :     const sal_uInt16 nWBrush = GetWhich(SID_ATTR_BRUSH);
     244           0 :     const sal_uInt16 nWBox = GetWhich(SID_ATTR_BORDER_OUTER);
     245           0 :     const sal_uInt16 nWBoxInfo = GetWhich(SID_ATTR_BORDER_INNER);
     246           0 :     const sal_uInt16 nWShadow = GetWhich(SID_ATTR_BORDER_SHADOW);
     247             : 
     248             :     const sal_uInt16 aWhichTab[] = {
     249             :         nWSize, nWSize,
     250             :         nWLRSpace, nWLRSpace,
     251             :         nWULSpace, nWULSpace,
     252             :         nWOn, nWOn,
     253             :         nWDynamic, nWDynamic,
     254             :         nWShared, nWShared,
     255             :         nWSharedFirst, nWSharedFirst,
     256             :         nWBrush, nWBrush,
     257             :         nWBoxInfo, nWBoxInfo,
     258             :         nWBox, nWBox,
     259             :         nWShadow, nWShadow,
     260             :         nWDynSpacing, nWDynSpacing,
     261             : 
     262             :         //UUUU take over DrawingLayer FillStyles
     263             :         XATTR_FILL_FIRST, XATTR_FILL_LAST,                // [1014
     264             : 
     265           0 :         0, 0};
     266             : 
     267           0 :     const SfxItemSet& rOldSet = GetItemSet();
     268           0 :     SfxItemPool* pPool = rOldSet.GetPool();
     269             :     DBG_ASSERT(pPool,"no pool :-(");
     270           0 :     SfxMapUnit eUnit = pPool->GetMetric(nWSize);
     271           0 :     SfxItemSet aSet(*pPool,aWhichTab);
     272             : 
     273           0 :     if(mbEnableDrawingLayerFillStyles)
     274             :     {
     275             :         //UUUU When using the XATTR_FILLSTYLE DrawingLayer FillStyle definition
     276             :         // extra action has to be done here since the pool default is drawing::FillStyle_SOLID
     277             :         // instead of drawing::FillStyle_NONE (to have the default blue fill color at start).
     278           0 :         aSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
     279             :     }
     280             : 
     281           0 :     aSet.Put( SfxBoolItem( nWOn,      m_pTurnOnBox->IsChecked() ) );
     282           0 :     aSet.Put( SfxBoolItem( nWDynamic, m_pHeightDynBtn->IsChecked() ) );
     283           0 :     aSet.Put( SfxBoolItem( nWShared,  m_pCntSharedBox->IsChecked() ) );
     284           0 :     if(m_pCntSharedFirstBox->IsVisible())
     285           0 :         aSet.Put( SfxBoolItem( nWSharedFirst,  m_pCntSharedFirstBox->IsChecked() ) );
     286           0 :     if(m_pDynSpacingCB->IsVisible() && SFX_WHICH_MAX > nWDynSpacing)
     287             :     {
     288           0 :         boost::scoped_ptr<SfxBoolItem> pBoolItem(static_cast<SfxBoolItem*>(pPool->GetDefaultItem(nWDynSpacing).Clone()));
     289           0 :         pBoolItem->SetValue(m_pDynSpacingCB->IsChecked());
     290           0 :         aSet.Put(*pBoolItem);
     291             :     }
     292             : 
     293             :     // Size
     294           0 :     SvxSizeItem aSizeItem( static_cast<const SvxSizeItem&>(rOldSet.Get( nWSize )) );
     295           0 :     Size        aSize( aSizeItem.GetSize() );
     296           0 :     long        nDist = GetCoreValue( *m_pDistEdit, eUnit );
     297           0 :     long        nH    = GetCoreValue( *m_pHeightEdit, eUnit );
     298             : 
     299           0 :     nH += nDist; // add distance
     300           0 :     aSize.Height() = nH;
     301           0 :     aSizeItem.SetSize( aSize );
     302           0 :     aSet.Put( aSizeItem );
     303             : 
     304             :     // Margins
     305           0 :     SvxLRSpaceItem aLR( nWLRSpace );
     306           0 :     aLR.SetLeft( (sal_uInt16)GetCoreValue( *m_pLMEdit, eUnit ) );
     307           0 :     aLR.SetRight( (sal_uInt16)GetCoreValue( *m_pRMEdit, eUnit ) );
     308           0 :     aSet.Put( aLR );
     309             : 
     310           0 :     SvxULSpaceItem aUL( nWULSpace );
     311           0 :     if ( nId == SID_ATTR_PAGE_HEADERSET )
     312           0 :         aUL.SetLower( (sal_uInt16)nDist );
     313             :     else
     314           0 :         aUL.SetUpper( (sal_uInt16)nDist );
     315           0 :     aSet.Put( aUL );
     316             : 
     317             :     // Background and border?
     318           0 :     if (pBBSet)
     319             :     {
     320           0 :         aSet.Put(*pBBSet);
     321             :     }
     322             :     else
     323             :     {
     324             :         const SfxPoolItem* pItem;
     325             : 
     326           0 :         if(SfxItemState::SET == GetItemSet().GetItemState(GetWhich(nId), false, &pItem))
     327             :         {
     328           0 :             const SfxItemSet* _pSet = &(static_cast< const SvxSetItem* >(pItem)->GetItemSet());
     329             : 
     330           0 :             if(_pSet->GetItemState(nWBrush) == SfxItemState::SET)
     331             :             {
     332           0 :                 aSet.Put(_pSet->Get(nWBrush));
     333             :             }
     334             : 
     335           0 :             if(_pSet->GetItemState(nWBoxInfo) == SfxItemState::SET)
     336             :             {
     337           0 :                 aSet.Put(_pSet->Get(nWBoxInfo));
     338             :             }
     339             : 
     340           0 :             if(_pSet->GetItemState(nWBox) == SfxItemState::SET)
     341             :             {
     342           0 :                 aSet.Put(_pSet->Get(nWBox));
     343             :             }
     344             : 
     345           0 :             if(_pSet->GetItemState(nWShadow) == SfxItemState::SET)
     346             :             {
     347           0 :                 aSet.Put(_pSet->Get(nWShadow));
     348             :             }
     349             : 
     350             :             //UUUU take care of [XATTR_XATTR_FILL_FIRST .. XATTR_FILL_LAST]
     351           0 :             for(sal_uInt16 nFillStyleId(XATTR_FILL_FIRST); nFillStyleId <= XATTR_FILL_LAST; nFillStyleId++)
     352             :             {
     353           0 :                 if(_pSet->GetItemState(nFillStyleId) == SfxItemState::SET)
     354             :                 {
     355           0 :                     aSet.Put(_pSet->Get(nFillStyleId));
     356             :                 }
     357             :             }
     358             :         }
     359             :     }
     360             : 
     361             :     // Flush the SetItem
     362           0 :     SvxSetItem aSetItem( GetWhich( nId ), aSet );
     363           0 :     rSet->Put( aSetItem );
     364             : 
     365           0 :     return true;
     366             : }
     367             : 
     368             : 
     369           0 : void SvxHFPage::Reset( const SfxItemSet* rSet )
     370             : {
     371           0 :     ActivatePage( *rSet );
     372           0 :     ResetBackground_Impl( *rSet );
     373             : 
     374           0 :     SfxItemPool* pPool = GetItemSet().GetPool();
     375             :     DBG_ASSERT( pPool, "Where is the pool" );
     376           0 :     SfxMapUnit eUnit = pPool->GetMetric( GetWhich( SID_ATTR_PAGE_SIZE ) );
     377             : 
     378             :     //hide "same content on first page when this is calc
     379           0 :     bool bIsCalc = false;
     380           0 :     const SfxPoolItem* pExt1 = GetItem(*rSet, SID_ATTR_PAGE_EXT1);
     381           0 :     const SfxPoolItem* pExt2 = GetItem(*rSet, SID_ATTR_PAGE_EXT2);
     382           0 :     if (pExt1 && pExt1->ISA(SfxBoolItem) && pExt2 && pExt2->ISA(SfxBoolItem))
     383           0 :         bIsCalc = true;
     384           0 :     m_pCntSharedFirstBox->Show(!bIsCalc);
     385             : 
     386             :     // Evaluate header-/footer- attributes
     387           0 :     const SvxSetItem* pSetItem = 0;
     388             : 
     389           0 :     if ( SfxItemState::SET == rSet->GetItemState( GetWhich(nId), false,
     390           0 :                                             reinterpret_cast<const SfxPoolItem**>(&pSetItem) ) )
     391             :     {
     392           0 :         const SfxItemSet& rHeaderSet = pSetItem->GetItemSet();
     393             :         const SfxBoolItem& rHeaderOn =
     394           0 :             static_cast<const SfxBoolItem&>(rHeaderSet.Get(GetWhich(SID_ATTR_PAGE_ON)));
     395             : 
     396           0 :         m_pTurnOnBox->Check(rHeaderOn.GetValue());
     397             : 
     398           0 :         if ( rHeaderOn.GetValue() )
     399             :         {
     400             :             const SfxBoolItem& rDynamic =
     401           0 :                 static_cast<const SfxBoolItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_DYNAMIC ) ));
     402             :             const SfxBoolItem& rShared =
     403           0 :                 static_cast<const SfxBoolItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SHARED ) ));
     404           0 :             const SfxBoolItem* pSharedFirst = 0;
     405           0 :             if (rHeaderSet.HasItem(GetWhich(SID_ATTR_PAGE_SHARED_FIRST)))
     406           0 :                 pSharedFirst = static_cast<const SfxBoolItem*>(&rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SHARED_FIRST ) ));
     407             :             const SvxSizeItem& rSize =
     408           0 :                 static_cast<const SvxSizeItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ));
     409             :             const SvxULSpaceItem& rUL =
     410           0 :                 static_cast<const SvxULSpaceItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_ULSPACE ) ));
     411             :             const SvxLRSpaceItem& rLR =
     412           0 :                 static_cast<const SvxLRSpaceItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ));
     413           0 :             if(m_pDynSpacingCB->IsVisible())
     414             :             {
     415             :                 const SfxBoolItem& rDynSpacing =
     416           0 :                     static_cast<const SfxBoolItem&>(rHeaderSet.Get(GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING)));
     417           0 :                 m_pDynSpacingCB->Check(rDynSpacing.GetValue());
     418             :             }
     419             : 
     420             : 
     421           0 :             if ( nId == SID_ATTR_PAGE_HEADERSET )
     422             :             {   // Header
     423           0 :                 SetMetricValue( *m_pDistEdit, rUL.GetLower(), eUnit );
     424           0 :                 SetMetricValue( *m_pHeightEdit, rSize.GetSize().Height() - rUL.GetLower(), eUnit );
     425             :             }
     426             :             else
     427             :             {   // Footer
     428           0 :                 SetMetricValue( *m_pDistEdit, rUL.GetUpper(), eUnit );
     429           0 :                 SetMetricValue( *m_pHeightEdit, rSize.GetSize().Height() - rUL.GetUpper(), eUnit );
     430             :             }
     431             : 
     432           0 :             m_pHeightDynBtn->Check(rDynamic.GetValue());
     433           0 :             SetMetricValue( *m_pLMEdit, rLR.GetLeft(), eUnit );
     434           0 :             SetMetricValue( *m_pRMEdit, rLR.GetRight(), eUnit );
     435           0 :             m_pCntSharedBox->Check(rShared.GetValue());
     436           0 :             if (pSharedFirst)
     437           0 :                 m_pCntSharedFirstBox->Check(pSharedFirst->GetValue());
     438             :             else
     439           0 :                 m_pCntSharedFirstBox->Hide();
     440             :         }
     441             :         else
     442           0 :             pSetItem = 0;
     443             :     }
     444             :     else
     445             :     {
     446             :         // defaults for distance and height
     447           0 :         long nDefaultDist = bIsCalc ? DEF_DIST_CALC : DEF_DIST_WRITER;
     448           0 :         SetMetricValue( *m_pDistEdit, nDefaultDist, SFX_MAPUNIT_100TH_MM );
     449           0 :         SetMetricValue( *m_pHeightEdit, 500, SFX_MAPUNIT_100TH_MM );
     450             :     }
     451             : 
     452           0 :     if ( !pSetItem )
     453             :     {
     454           0 :         m_pTurnOnBox->Check( false );
     455           0 :         m_pHeightDynBtn->Check( true );
     456           0 :         m_pCntSharedBox->Check( true );
     457           0 :         m_pCntSharedFirstBox->Check( true );
     458             :     }
     459             : 
     460           0 :     TurnOnHdl(0);
     461             : 
     462           0 :     m_pTurnOnBox->SaveValue();
     463           0 :     m_pDistEdit->SaveValue();
     464           0 :     m_pHeightEdit->SaveValue();
     465           0 :     m_pHeightDynBtn->SaveValue();
     466           0 :     m_pLMEdit->SaveValue();
     467           0 :     m_pRMEdit->SaveValue();
     468           0 :     m_pCntSharedBox->SaveValue();
     469           0 :     RangeHdl( 0 );
     470             : 
     471           0 :     const SfxPoolItem* pItem = 0;
     472             :     SfxObjectShell* pShell;
     473           0 :     if(SfxItemState::SET == rSet->GetItemState(SID_HTML_MODE, false, &pItem) ||
     474           0 :         ( 0 != (pShell = SfxObjectShell::Current()) &&
     475           0 :                     0 != (pItem = pShell->GetItem(SID_HTML_MODE))))
     476             :     {
     477           0 :         sal_uInt16 nHtmlMode = 0;
     478           0 :         nHtmlMode = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     479           0 :         if(nHtmlMode & HTMLMODE_ON)
     480             :         {
     481           0 :             m_pCntSharedBox->Hide();
     482           0 :             m_pBackgroundBtn->Hide();
     483             :         }
     484             :     }
     485             : 
     486           0 : }
     487             : 
     488           0 : void SvxHFPage::InitHandler()
     489             : {
     490           0 :     m_pTurnOnBox->SetClickHdl(LINK(this,   SvxHFPage, TurnOnHdl));
     491           0 :     m_pDistEdit->SetModifyHdl(LINK(this,   SvxHFPage, DistModify));
     492           0 :     m_pDistEdit->SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl));
     493             : 
     494           0 :     m_pHeightEdit->SetModifyHdl(LINK(this,     SvxHFPage, HeightModify));
     495           0 :     m_pHeightEdit->SetLoseFocusHdl(LINK(this,SvxHFPage,RangeHdl));
     496             : 
     497           0 :     m_pLMEdit->SetModifyHdl(LINK(this,         SvxHFPage, BorderModify));
     498           0 :     m_pLMEdit->SetLoseFocusHdl(LINK(this,  SvxHFPage, RangeHdl));
     499           0 :     m_pRMEdit->SetModifyHdl(LINK(this,         SvxHFPage, BorderModify));
     500           0 :     m_pRMEdit->SetLoseFocusHdl(LINK(this,  SvxHFPage, RangeHdl));
     501           0 :     m_pBackgroundBtn->SetClickHdl(LINK(this,SvxHFPage, BackgroundHdl));
     502           0 : }
     503             : 
     504           0 : IMPL_LINK( SvxHFPage, TurnOnHdl, CheckBox *, pBox )
     505             : {
     506           0 :     if ( m_pTurnOnBox->IsChecked() )
     507             :     {
     508           0 :         m_pDistFT->Enable();
     509           0 :         m_pDistEdit->Enable();
     510           0 :         m_pDynSpacingCB->Enable();
     511           0 :         m_pHeightFT->Enable();
     512           0 :         m_pHeightEdit->Enable();
     513           0 :         m_pHeightDynBtn->Enable();
     514           0 :         m_pLMLbl->Enable();
     515           0 :         m_pLMEdit->Enable();
     516           0 :         m_pRMLbl->Enable();
     517           0 :         m_pRMEdit->Enable();
     518             : 
     519           0 :         sal_uInt16 nUsage = m_pBspWin->GetUsage();
     520             : 
     521           0 :         if( nUsage == SVX_PAGE_RIGHT || nUsage == SVX_PAGE_LEFT )
     522           0 :             m_pCntSharedBox->Disable();
     523             :         else
     524             :         {
     525           0 :             m_pCntSharedBox->Enable();
     526           0 :             m_pCntSharedFirstBox->Enable();
     527             :         }
     528           0 :         m_pBackgroundBtn->Enable();
     529             :     }
     530             :     else
     531             :     {
     532           0 :         bool bDelete = true;
     533             : 
     534           0 :         if ( !mbDisableQueryBox && pBox && m_pTurnOnBox->GetSavedValue() == TRISTATE_TRUE )
     535             :         {
     536             :             short nResult;
     537           0 :             if (nId == SID_ATTR_PAGE_HEADERSET)
     538           0 :                 nResult = ScopedVclPtrInstance<DeleteHeaderDialog>::Create(this)->Execute();
     539             :             else
     540           0 :                 nResult = ScopedVclPtrInstance<DeleteFooterDialog>::Create(this)->Execute();
     541           0 :             bDelete = nResult == RET_YES;
     542             :         }
     543             : 
     544           0 :         if ( bDelete )
     545             :         {
     546           0 :             m_pDistFT->Disable();
     547           0 :             m_pDistEdit->Disable();
     548           0 :             m_pDynSpacingCB->Enable(false);
     549           0 :             m_pHeightFT->Disable();
     550           0 :             m_pHeightEdit->Disable();
     551           0 :             m_pHeightDynBtn->Disable();
     552             : 
     553           0 :             m_pLMLbl->Disable();
     554           0 :             m_pLMEdit->Disable();
     555           0 :             m_pRMLbl->Disable();
     556           0 :             m_pRMEdit->Disable();
     557             : 
     558           0 :             m_pCntSharedBox->Disable();
     559           0 :             m_pBackgroundBtn->Disable();
     560           0 :             m_pCntSharedFirstBox->Disable();
     561             :         }
     562             :         else
     563           0 :             m_pTurnOnBox->Check();
     564             :     }
     565           0 :     UpdateExample();
     566           0 :     return 0;
     567             : }
     568             : 
     569           0 : IMPL_LINK_NOARG(SvxHFPage, DistModify)
     570             : {
     571           0 :     UpdateExample();
     572           0 :     return 0;
     573             : }
     574             : 
     575           0 : IMPL_LINK_NOARG(SvxHFPage, HeightModify)
     576             : {
     577           0 :     UpdateExample();
     578             : 
     579           0 :     return 0;
     580             : }
     581             : 
     582           0 : IMPL_LINK_NOARG(SvxHFPage, BorderModify)
     583             : {
     584           0 :     UpdateExample();
     585           0 :     return 0;
     586             : }
     587             : 
     588           0 : IMPL_LINK_NOARG(SvxHFPage, BackgroundHdl)
     589             : {
     590           0 :     if(!pBBSet)
     591             :     {
     592             :         // Use only the necessary items for border and background
     593           0 :         const sal_uInt16 nOuter(GetWhich(SID_ATTR_BORDER_OUTER));
     594           0 :         const sal_uInt16 nInner(GetWhich(SID_ATTR_BORDER_INNER, false));
     595           0 :         const sal_uInt16 nShadow(GetWhich(SID_ATTR_BORDER_SHADOW));
     596             : 
     597           0 :         if(mbEnableDrawingLayerFillStyles)
     598             :         {
     599             :             pBBSet = new SfxItemSet(
     600           0 :                 *GetItemSet().GetPool(),
     601             :                 XATTR_FILL_FIRST, XATTR_FILL_LAST,  // DrawingLayer FillStyle definitions
     602             :                 SID_COLOR_TABLE, SID_BITMAP_LIST,   // XPropertyLists for Color, Gradient, Hatch and Graphic fills
     603             :                 nOuter, nOuter,
     604             :                 nInner, nInner,
     605             :                 nShadow, nShadow,
     606           0 :                 0, 0);
     607             : 
     608             :             //UUUU copy items for XPropertyList entries from the DrawModel so that
     609             :             // the Area TabPage can access them
     610             :             static const sal_uInt16 nCopyFlags[] = {
     611             :                 SID_COLOR_TABLE,
     612             :                 SID_GRADIENT_LIST,
     613             :                 SID_HATCH_LIST,
     614             :                 SID_BITMAP_LIST,
     615             :                 0
     616             :             };
     617             : 
     618           0 :             for(sal_uInt16 a(0); nCopyFlags[a]; a++)
     619             :             {
     620           0 :                 const SfxPoolItem* pItem = GetItemSet().GetItem(nCopyFlags[a]);
     621             : 
     622           0 :                 if(pItem)
     623             :                 {
     624           0 :                     pBBSet->Put(*pItem);
     625             :                 }
     626             :                 else
     627             :                 {
     628             :                     OSL_ENSURE(false, "XPropertyList missing (!)");
     629             :                 }
     630             :             }
     631             :         }
     632             :         else
     633             :         {
     634           0 :             const sal_uInt16 nBrush(GetWhich(SID_ATTR_BRUSH));
     635             : 
     636             :             pBBSet = new SfxItemSet(
     637           0 :                 *GetItemSet().GetPool(),
     638             :                 nBrush, nBrush,
     639             :                 nOuter, nOuter,
     640             :                 nInner, nInner,
     641             :                 nShadow, nShadow,
     642           0 :                 0, 0);
     643             :         }
     644             : 
     645             :         const SfxPoolItem* pItem;
     646             : 
     647           0 :         if(SfxItemState::SET == GetItemSet().GetItemState(GetWhich(nId), false, &pItem))
     648             :         {
     649             :             // If a SfxItemSet from the SetItem for SID_ATTR_PAGE_HEADERSET or
     650             :             // SID_ATTR_PAGE_FOOTERSET exists, use it's content
     651           0 :             pBBSet->Put(static_cast<const SvxSetItem*>(pItem)->GetItemSet());
     652             :         }
     653             :         else
     654             :         {
     655           0 :             if(mbEnableDrawingLayerFillStyles)
     656             :             {
     657             :                 //UUUU The style for header/footer is not yet created, need to reset
     658             :                 // XFillStyleItem to drawing::FillStyle_NONE which is the same as in the style
     659             :                 // initialization. This needs to be done since the pool default for
     660             :                 // XFillStyleItem is drawing::FillStyle_SOLID
     661           0 :                 pBBSet->Put(XFillStyleItem(drawing::FillStyle_NONE));
     662             :             }
     663             :         }
     664             : 
     665           0 :         if(SfxItemState::SET == GetItemSet().GetItemState(nInner, false, &pItem))
     666             :         {
     667             :             // The set InfoItem is always required
     668           0 :             pBBSet->Put(*pItem);
     669             :         }
     670             :     }
     671             : 
     672           0 :     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     673             : 
     674           0 :     if(pFact)
     675             :     {
     676             :         //UUUU
     677             :         SfxAbstractTabDialog* pDlg = pFact->CreateSvxBorderBackgroundDlg(
     678             :             this,
     679             :             *pBBSet,
     680             :             mbEnableBackgroundSelector,
     681           0 :             mbEnableDrawingLayerFillStyles);
     682             : 
     683             :         DBG_ASSERT(pDlg,"Dialog creation failed!");
     684           0 :         if(RET_OK == pDlg->Execute() && pDlg->GetOutputItemSet())
     685             :         {
     686           0 :             SfxItemIter aIter(*pDlg->GetOutputItemSet());
     687           0 :             const SfxPoolItem* pItem = aIter.FirstItem();
     688             : 
     689           0 :             while(pItem)
     690             :             {
     691           0 :                 if(!IsInvalidItem(pItem))
     692             :                 {
     693           0 :                     pBBSet->Put(*pItem);
     694             :                 }
     695             : 
     696           0 :                 pItem = aIter.NextItem();
     697             :             }
     698             : 
     699             :             {
     700           0 :                 drawinglayer::attribute::SdrAllFillAttributesHelperPtr aFillAttributes;
     701             : 
     702           0 :                 if(mbEnableDrawingLayerFillStyles)
     703             :                 {
     704             :                     //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
     705           0 :                     aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(*pBBSet));
     706             :                 }
     707             :                 else
     708             :                 {
     709           0 :                     const sal_uInt16 nWhich = GetWhich(SID_ATTR_BRUSH);
     710             : 
     711           0 :                     if(pBBSet->GetItemState(nWhich) == SfxItemState::SET)
     712             :                     {
     713             :                         //UUUU create FillAttributes from SvxBrushItem
     714           0 :                         const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(pBBSet->Get(nWhich));
     715           0 :                         SfxItemSet aTempSet(*pBBSet->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
     716             : 
     717           0 :                         setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
     718           0 :                         aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
     719             :                     }
     720             :                 }
     721             : 
     722           0 :                 if(SID_ATTR_PAGE_HEADERSET == nId)
     723             :                 {
     724             :                     //m_pBspWin->SetHdColor(rItem.GetColor());
     725           0 :                     m_pBspWin->setHeaderFillAttributes(aFillAttributes);
     726             :                 }
     727             :                 else
     728             :                 {
     729             :                     //m_pBspWin->SetFtColor(rItem.GetColor());
     730           0 :                     m_pBspWin->setFooterFillAttributes(aFillAttributes);
     731           0 :                 }
     732             :             }
     733             : 
     734             :             {
     735           0 :                 const sal_uInt16 nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
     736             : 
     737           0 :                 if(pBBSet->GetItemState(nWhich) == SfxItemState::SET)
     738             :                 {
     739           0 :                     const SvxBoxItem& rItem = static_cast<const SvxBoxItem&>(pBBSet->Get(nWhich));
     740             : 
     741           0 :                     if(nId == SID_ATTR_PAGE_HEADERSET)
     742           0 :                         m_pBspWin->SetHdBorder(rItem);
     743             :                     else
     744           0 :                         m_pBspWin->SetFtBorder(rItem);
     745             :                 }
     746           0 :             }
     747             : 
     748             :         }
     749             : 
     750           0 :         UpdateExample();
     751             :     }
     752             : 
     753           0 :     return 0;
     754             : }
     755             : 
     756           0 : void SvxHFPage::UpdateExample()
     757             : {
     758           0 :     if ( nId == SID_ATTR_PAGE_HEADERSET )
     759             :     {
     760           0 :         m_pBspWin->SetHeader( m_pTurnOnBox->IsChecked() );
     761           0 :         m_pBspWin->SetHdHeight( GetCoreValue( *m_pHeightEdit, SFX_MAPUNIT_TWIP ) );
     762           0 :         m_pBspWin->SetHdDist( GetCoreValue( *m_pDistEdit, SFX_MAPUNIT_TWIP ) );
     763           0 :         m_pBspWin->SetHdLeft( GetCoreValue( *m_pLMEdit, SFX_MAPUNIT_TWIP ) );
     764           0 :         m_pBspWin->SetHdRight( GetCoreValue( *m_pRMEdit, SFX_MAPUNIT_TWIP ) );
     765             :     }
     766             :     else
     767             :     {
     768           0 :         m_pBspWin->SetFooter( m_pTurnOnBox->IsChecked() );
     769           0 :         m_pBspWin->SetFtHeight( GetCoreValue( *m_pHeightEdit, SFX_MAPUNIT_TWIP ) );
     770           0 :         m_pBspWin->SetFtDist( GetCoreValue( *m_pDistEdit, SFX_MAPUNIT_TWIP ) );
     771           0 :         m_pBspWin->SetFtLeft( GetCoreValue( *m_pLMEdit, SFX_MAPUNIT_TWIP ) );
     772           0 :         m_pBspWin->SetFtRight( GetCoreValue( *m_pRMEdit, SFX_MAPUNIT_TWIP ) );
     773             :     }
     774           0 :     m_pBspWin->Invalidate();
     775           0 : }
     776             : 
     777           0 : void SvxHFPage::ResetBackground_Impl( const SfxItemSet& rSet )
     778             : {
     779           0 :     sal_uInt16 nWhich(GetWhich(SID_ATTR_PAGE_HEADERSET));
     780             : 
     781           0 :     if (SfxItemState::SET == rSet.GetItemState(nWhich, false))
     782             :     {
     783           0 :         const SvxSetItem& rSetItem = static_cast< const SvxSetItem& >(rSet.Get(nWhich, false));
     784           0 :         const SfxItemSet& rTmpSet = rSetItem.GetItemSet();
     785           0 :         const SfxBoolItem& rOn = static_cast< const SfxBoolItem& >(rTmpSet.Get(GetWhich(SID_ATTR_PAGE_ON)));
     786             : 
     787           0 :         if(rOn.GetValue())
     788             :         {
     789           0 :             drawinglayer::attribute::SdrAllFillAttributesHelperPtr aHeaderFillAttributes;
     790             : 
     791           0 :             if(mbEnableDrawingLayerFillStyles)
     792             :             {
     793             :                 //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
     794           0 :                 aHeaderFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rTmpSet));
     795             :             }
     796             :             else
     797             :             {
     798           0 :                 nWhich = GetWhich(SID_ATTR_BRUSH);
     799             : 
     800           0 :                 if(SfxItemState::SET == rTmpSet.GetItemState(nWhich))
     801             :                 {
     802             :                     //UUUU create FillAttributes from SvxBrushItem
     803           0 :                     const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rTmpSet.Get(nWhich));
     804           0 :                     SfxItemSet aTempSet(*rTmpSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
     805             : 
     806           0 :                     setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
     807           0 :                     aHeaderFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
     808             :                 }
     809             :             }
     810             : 
     811           0 :             m_pBspWin->setHeaderFillAttributes(aHeaderFillAttributes);
     812           0 :             nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
     813             : 
     814           0 :             if(rTmpSet.GetItemState(nWhich) == SfxItemState::SET)
     815             :             {
     816             :                 const SvxBoxItem& rItem =
     817           0 :                     static_cast<const SvxBoxItem&>(rTmpSet.Get(nWhich));
     818           0 :                 m_pBspWin->SetHdBorder(rItem);
     819           0 :             }
     820             :         }
     821             :     }
     822             : 
     823           0 :     nWhich = GetWhich(SID_ATTR_PAGE_FOOTERSET);
     824             : 
     825           0 :     if (SfxItemState::SET == rSet.GetItemState(nWhich, false))
     826             :     {
     827           0 :         const SvxSetItem& rSetItem = static_cast< const SvxSetItem& >(rSet.Get(nWhich, false));
     828           0 :         const SfxItemSet& rTmpSet = rSetItem.GetItemSet();
     829           0 :         const SfxBoolItem& rOn = static_cast< const SfxBoolItem& >(rTmpSet.Get(GetWhich(SID_ATTR_PAGE_ON)));
     830             : 
     831           0 :         if(rOn.GetValue())
     832             :         {
     833           0 :             drawinglayer::attribute::SdrAllFillAttributesHelperPtr aFooterFillAttributes;
     834             : 
     835           0 :             if(mbEnableDrawingLayerFillStyles)
     836             :             {
     837             :                 //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
     838           0 :                 aFooterFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rTmpSet));
     839             :             }
     840             :             else
     841             :             {
     842           0 :                 nWhich = GetWhich(SID_ATTR_BRUSH);
     843             : 
     844           0 :                 if(SfxItemState::SET == rTmpSet.GetItemState(nWhich))
     845             :                 {
     846             :                     //UUUU create FillAttributes from SvxBrushItem
     847           0 :                     const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rTmpSet.Get(nWhich));
     848           0 :                     SfxItemSet aTempSet(*rTmpSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
     849             : 
     850           0 :                     setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
     851           0 :                     aFooterFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
     852             :                 }
     853             :             }
     854             : 
     855           0 :             m_pBspWin->setFooterFillAttributes(aFooterFillAttributes);
     856           0 :             nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
     857             : 
     858           0 :             if(rTmpSet.GetItemState(nWhich) == SfxItemState::SET)
     859             :             {
     860           0 :                 const SvxBoxItem& rItem = static_cast< const SvxBoxItem& >(rTmpSet.Get(nWhich));
     861           0 :                 m_pBspWin->SetFtBorder(rItem);
     862           0 :             }
     863             :         }
     864             :     }
     865             : 
     866           0 :     drawinglayer::attribute::SdrAllFillAttributesHelperPtr aPageFillAttributes;
     867             : 
     868           0 :     if(mbEnableDrawingLayerFillStyles)
     869             :     {
     870             :         //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
     871           0 :         aPageFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rSet));
     872             :     }
     873             :     else
     874             :     {
     875           0 :         nWhich = GetWhich(SID_ATTR_BRUSH);
     876             : 
     877           0 :         if(rSet.GetItemState(nWhich) >= SfxItemState::DEFAULT)
     878             :         {
     879             :             //UUUU create FillAttributes from SvxBrushItem
     880           0 :             const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rSet.Get(nWhich));
     881           0 :             SfxItemSet aTempSet(*rSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
     882             : 
     883           0 :             setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
     884           0 :             aPageFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
     885             :         }
     886             :     }
     887             : 
     888           0 :     m_pBspWin->setPageFillAttributes(aPageFillAttributes);
     889           0 :     nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
     890             : 
     891           0 :     if(rSet.GetItemState(nWhich) >= SfxItemState::DEFAULT)
     892             :     {
     893           0 :         const SvxBoxItem& rItem = static_cast< const SvxBoxItem& >(rSet.Get(nWhich));
     894           0 :         m_pBspWin->SetBorder(rItem);
     895           0 :     }
     896           0 : }
     897             : 
     898           0 : void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
     899             : {
     900           0 :     const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_LRSPACE );
     901             : 
     902           0 :     if ( pItem )
     903             :     {
     904             :         // Set left and right margins
     905           0 :         const SvxLRSpaceItem& rLRSpace = static_cast<const SvxLRSpaceItem&>(*pItem);
     906             : 
     907           0 :         m_pBspWin->SetLeft( rLRSpace.GetLeft() );
     908           0 :         m_pBspWin->SetRight( rLRSpace.GetRight() );
     909             :     }
     910             :     else
     911             :     {
     912           0 :         m_pBspWin->SetLeft( 0 );
     913           0 :         m_pBspWin->SetRight( 0 );
     914             :     }
     915             : 
     916           0 :     pItem = GetItem( rSet, SID_ATTR_ULSPACE );
     917             : 
     918           0 :     if ( pItem )
     919             :     {
     920             :         // Set top and bottom margins
     921           0 :         const SvxULSpaceItem& rULSpace = static_cast<const SvxULSpaceItem&>(*pItem);
     922             : 
     923           0 :         m_pBspWin->SetTop( rULSpace.GetUpper() );
     924           0 :         m_pBspWin->SetBottom( rULSpace.GetLower() );
     925             :     }
     926             :     else
     927             :     {
     928           0 :         m_pBspWin->SetTop( 0 );
     929           0 :         m_pBspWin->SetBottom( 0 );
     930             :     }
     931             : 
     932           0 :     sal_uInt16 nUsage = SVX_PAGE_ALL;
     933           0 :     pItem = GetItem( rSet, SID_ATTR_PAGE );
     934             : 
     935           0 :     if ( pItem )
     936           0 :         nUsage = static_cast<const SvxPageItem*>(pItem)->GetPageUsage();
     937             : 
     938           0 :     m_pBspWin->SetUsage( nUsage );
     939             : 
     940           0 :     if ( SVX_PAGE_RIGHT == nUsage || SVX_PAGE_LEFT == nUsage )
     941           0 :         m_pCntSharedBox->Disable();
     942             :     else
     943             :     {
     944           0 :         m_pCntSharedBox->Enable();
     945           0 :         m_pCntSharedFirstBox->Enable();
     946             :     }
     947           0 :     pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE );
     948             : 
     949           0 :     if ( pItem )
     950             :     {
     951             :         // Orientation and Size from the PageItem
     952           0 :         const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(*pItem);
     953             :         // if the size is already swapped (Landscape)
     954           0 :         m_pBspWin->SetSize( rSize.GetSize() );
     955             :     }
     956             : 
     957             :     // Evaluate Header attribute
     958           0 :     const SvxSetItem* pSetItem = 0;
     959             : 
     960           0 :     if ( SfxItemState::SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_HEADERSET ),
     961             :                                             false,
     962           0 :                                             reinterpret_cast<const SfxPoolItem**>(&pSetItem) ) )
     963             :     {
     964           0 :         const SfxItemSet& rHeaderSet = pSetItem->GetItemSet();
     965             :         const SfxBoolItem& rHeaderOn =
     966           0 :             static_cast<const SfxBoolItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ));
     967             : 
     968           0 :         if ( rHeaderOn.GetValue() )
     969             :         {
     970             :             const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(
     971           0 :                 rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ));
     972             :             const SvxULSpaceItem& rUL = static_cast<const SvxULSpaceItem&>(
     973           0 :                 rHeaderSet.Get( GetWhich(SID_ATTR_ULSPACE ) ));
     974             :             const SvxLRSpaceItem& rLR = static_cast<const SvxLRSpaceItem&>(
     975           0 :                 rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ));
     976           0 :             long nDist = rUL.GetLower();
     977             : 
     978           0 :             m_pBspWin->SetHdHeight( rSize.GetSize().Height() - nDist );
     979           0 :             m_pBspWin->SetHdDist( nDist );
     980           0 :             m_pBspWin->SetHdLeft( rLR.GetLeft() );
     981           0 :             m_pBspWin->SetHdRight( rLR.GetRight() );
     982           0 :             m_pBspWin->SetHeader( true );
     983             :         }
     984             :         else
     985           0 :             pSetItem = 0;
     986             :     }
     987             : 
     988           0 :     if ( !pSetItem )
     989             :     {
     990           0 :         m_pBspWin->SetHeader( false );
     991             : 
     992           0 :         if ( SID_ATTR_PAGE_HEADERSET == nId )
     993             :         {
     994           0 :             m_pCntSharedBox->Disable();
     995           0 :             m_pCntSharedFirstBox->Disable();
     996             :         }
     997             :     }
     998           0 :     pSetItem = 0;
     999             : 
    1000           0 :     if ( SfxItemState::SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_FOOTERSET ),
    1001             :                                             false,
    1002           0 :                                             reinterpret_cast<const SfxPoolItem**>(&pSetItem) ) )
    1003             :     {
    1004           0 :         const SfxItemSet& rFooterSet = pSetItem->GetItemSet();
    1005             :         const SfxBoolItem& rFooterOn =
    1006           0 :             static_cast<const SfxBoolItem&>(rFooterSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ));
    1007             : 
    1008           0 :         if ( rFooterOn.GetValue() )
    1009             :         {
    1010             :             const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(
    1011           0 :                 rFooterSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ));
    1012             :             const SvxULSpaceItem& rUL = static_cast<const SvxULSpaceItem&>(
    1013           0 :                 rFooterSet.Get( GetWhich( SID_ATTR_ULSPACE ) ));
    1014             :             const SvxLRSpaceItem& rLR = static_cast<const SvxLRSpaceItem&>(
    1015           0 :                 rFooterSet.Get( GetWhich( SID_ATTR_LRSPACE ) ));
    1016           0 :             long nDist = rUL.GetUpper();
    1017             : 
    1018           0 :             m_pBspWin->SetFtHeight( rSize.GetSize().Height() - nDist );
    1019           0 :             m_pBspWin->SetFtDist( nDist );
    1020           0 :             m_pBspWin->SetFtLeft( rLR.GetLeft() );
    1021           0 :             m_pBspWin->SetFtRight( rLR.GetRight() );
    1022           0 :             m_pBspWin->SetFooter( true );
    1023             :         }
    1024             :         else
    1025           0 :             pSetItem = 0;
    1026             :     }
    1027             : 
    1028           0 :     if ( !pSetItem )
    1029             :     {
    1030           0 :         m_pBspWin->SetFooter( false );
    1031             : 
    1032           0 :         if ( SID_ATTR_PAGE_FOOTERSET == nId )
    1033             :         {
    1034           0 :             m_pCntSharedBox->Disable();
    1035           0 :             m_pCntSharedFirstBox->Disable();
    1036             :         }
    1037             :     }
    1038             : 
    1039           0 :     pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 );
    1040             : 
    1041           0 :     if ( pItem && pItem->ISA(SfxBoolItem) )
    1042             :     {
    1043           0 :         m_pBspWin->SetTable( true );
    1044           0 :         m_pBspWin->SetHorz( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1045             :     }
    1046             : 
    1047           0 :     pItem = GetItem( rSet, SID_ATTR_PAGE_EXT2 );
    1048             : 
    1049           0 :     if ( pItem && pItem->ISA(SfxBoolItem) )
    1050             :     {
    1051           0 :         m_pBspWin->SetTable( true );
    1052           0 :         m_pBspWin->SetVert( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1053             :     }
    1054           0 :     ResetBackground_Impl( rSet );
    1055           0 :     RangeHdl( 0 );
    1056           0 : }
    1057             : 
    1058           0 : SfxTabPage::sfxpg SvxHFPage::DeactivatePage( SfxItemSet* _pSet )
    1059             : {
    1060           0 :     if ( _pSet )
    1061           0 :         FillItemSet( _pSet );
    1062           0 :     return LEAVE_PAGE;
    1063             : }
    1064             : 
    1065           0 : IMPL_LINK_NOARG(SvxHFPage, RangeHdl)
    1066             : {
    1067           0 :     long nHHeight = m_pBspWin->GetHdHeight();
    1068           0 :     long nHDist   = m_pBspWin->GetHdDist();
    1069             : 
    1070           0 :     long nFHeight = m_pBspWin->GetFtHeight();
    1071           0 :     long nFDist   = m_pBspWin->GetFtDist();
    1072             : 
    1073             :     long nHeight = std::max( (long)MINBODY,
    1074           0 :         static_cast<long>(m_pHeightEdit->Denormalize( m_pHeightEdit->GetValue( FUNIT_TWIP ) ) ) );
    1075           0 :     long nDist   = m_pTurnOnBox->IsChecked() ?
    1076           0 :         static_cast<long>(m_pDistEdit->Denormalize( m_pDistEdit->GetValue( FUNIT_TWIP ) )) : 0;
    1077             : 
    1078             :     long nMin;
    1079             :     long nMax;
    1080             : 
    1081           0 :     if ( nId == SID_ATTR_PAGE_HEADERSET )
    1082             :     {
    1083           0 :         nHHeight = nHeight;
    1084           0 :         nHDist   = nDist;
    1085             :     }
    1086             :     else
    1087             :     {
    1088           0 :         nFHeight = nHeight;
    1089           0 :         nFDist   = nDist;
    1090             :     }
    1091             : 
    1092             :     // Current values of the side edges
    1093           0 :     long nBT = m_pBspWin->GetTop();
    1094           0 :     long nBB = m_pBspWin->GetBottom();
    1095           0 :     long nBL = m_pBspWin->GetLeft();
    1096           0 :     long nBR = m_pBspWin->GetRight();
    1097             : 
    1098           0 :     long nH  = m_pBspWin->GetSize().Height();
    1099           0 :     long nW  = m_pBspWin->GetSize().Width();
    1100             : 
    1101             :     // Borders
    1102           0 :     if ( nId == SID_ATTR_PAGE_HEADERSET )
    1103             :     {
    1104             :         // Header
    1105           0 :         nMin = ( nH - nBB - nBT ) / 5; // 20%
    1106           0 :         nMax = std::max( nH - nMin - nHDist - nFDist - nFHeight - nBB - nBT,
    1107           0 :                     nMin );
    1108           0 :         m_pHeightEdit->SetMax( m_pHeightEdit->Normalize( nMax ), FUNIT_TWIP );
    1109           0 :         nMin = ( nH - nBB - nBT ) / 5; // 20%
    1110           0 :         nDist = std::max( nH - nMin - nHHeight - nFDist - nFHeight - nBB - nBT,
    1111           0 :                      long(0) );
    1112           0 :         m_pDistEdit->SetMax( m_pDistEdit->Normalize( nDist ), FUNIT_TWIP );
    1113             :     }
    1114             :     else
    1115             :     {
    1116             :         // Footer
    1117           0 :         nMin = ( nH - nBT - nBB ) / 5; // 20%
    1118           0 :         nMax = std::max( nH - nMin - nFDist - nHDist - nHHeight - nBT - nBB,
    1119           0 :                     nMin );
    1120           0 :         m_pHeightEdit->SetMax( m_pHeightEdit->Normalize( nMax ), FUNIT_TWIP );
    1121           0 :         nMin = ( nH - nBT - nBB ) / 5; // 20%
    1122           0 :         nDist = std::max( nH - nMin - nFHeight - nHDist - nHHeight - nBT - nBB,
    1123           0 :                      long(0) );
    1124           0 :         m_pDistEdit->SetMax( m_pDistEdit->Normalize( nDist ), FUNIT_TWIP );
    1125             :     }
    1126             : 
    1127             :     // Limit Indentation
    1128           0 :     nMax = nW - nBL - nBR -
    1129           0 :            static_cast<long>(m_pRMEdit->Denormalize( m_pRMEdit->GetValue( FUNIT_TWIP ) )) - MINBODY;
    1130           0 :     m_pLMEdit->SetMax( m_pLMEdit->Normalize( nMax ), FUNIT_TWIP );
    1131             : 
    1132           0 :     nMax = nW - nBL - nBR -
    1133           0 :            static_cast<long>(m_pLMEdit->Denormalize( m_pLMEdit->GetValue( FUNIT_TWIP ) )) - MINBODY;
    1134           0 :     m_pRMEdit->SetMax( m_pLMEdit->Normalize( nMax ), FUNIT_TWIP );
    1135           0 :     return 0;
    1136             : }
    1137             : 
    1138           0 : static void lcl_Move(vcl::Window& rWin, sal_Int32 nDiff)
    1139             : {
    1140           0 :     Point aPos(rWin.GetPosPixel());
    1141           0 :     aPos.Y() -= nDiff;
    1142           0 :     rWin.SetPosPixel(aPos);
    1143           0 : }
    1144             : 
    1145           0 : void SvxHFPage::EnableDynamicSpacing()
    1146             : {
    1147           0 :     m_pDynSpacingCB->Show();
    1148             :     //move all following controls
    1149             :     vcl::Window* aMoveWindows[] =
    1150             :     {
    1151             :         m_pHeightFT,
    1152             :         m_pHeightEdit,
    1153             :         m_pHeightDynBtn,
    1154             :         m_pBackgroundBtn,
    1155             :         0
    1156           0 :     };
    1157           0 :     sal_Int32 nOffset = m_pTurnOnBox->GetPosPixel().Y() - m_pCntSharedBox->GetPosPixel().Y();
    1158           0 :     sal_Int32 nIdx = 0;
    1159           0 :     while(aMoveWindows[nIdx])
    1160           0 :         lcl_Move(*aMoveWindows[nIdx++], nOffset);
    1161           0 : }
    1162             : 
    1163           0 : void SvxHFPage::PageCreated(const SfxAllItemSet &rSet)
    1164             : {
    1165             :     //UUUU
    1166           0 :     SFX_ITEMSET_ARG (&rSet, pSupportDrawingLayerFillStyleItem, SfxBoolItem, SID_DRAWINGLAYER_FILLSTYLES, false);
    1167             : 
    1168           0 :     if(pSupportDrawingLayerFillStyleItem)
    1169             :     {
    1170           0 :         const bool bNew(pSupportDrawingLayerFillStyleItem->GetValue());
    1171             : 
    1172           0 :         EnableDrawingLayerFillStyles(bNew);
    1173             :     }
    1174         390 : }
    1175             : 
    1176             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11