/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_svx.hxx" #include #include #include #include #include #include #include #include #include #include #include "hdft.hrc" #include #define _SVX_HDFT_CXX #include #include #include "svx/dlgutil.hxx" #include #include "svx/htmlmode.hxx" #include #include #include #include #include #include #include //CHINA001 #include //CHINA001 //UUUU #include #include #include #include #include // static ---------------------------------------------------------------- // --> OD 2004-06-18 #i19922# //static const long MINBODY = 284; // 0,5cm in twips aufgerundet static const long MINBODY = 56; // 1mm in twips rounded // default distance to Header or footer static const long DEF_DIST_WRITER = 500; // 5mm (Writer) static const long DEF_DIST_CALC = 250; // 2,5mm (Calc) static sal_uInt16 pRanges[] = { SID_ATTR_BRUSH, SID_ATTR_BRUSH, //UUUU Support DrawingLayer FillStyles (no real call to below GetRanges() // detected, still do the complete transition) XATTR_FILL_FIRST, XATTR_FILL_LAST, SID_ATTR_BORDER_OUTER, SID_ATTR_BORDER_OUTER, SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_SHADOW, SID_ATTR_BORDER_SHADOW, SID_ATTR_LRSPACE, SID_ATTR_LRSPACE, SID_ATTR_ULSPACE, SID_ATTR_ULSPACE, SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_HEADERSET, SID_ATTR_PAGE_HEADERSET, SID_ATTR_PAGE_FOOTERSET, SID_ATTR_PAGE_FOOTERSET, SID_ATTR_PAGE_ON, SID_ATTR_PAGE_ON, SID_ATTR_PAGE_DYNAMIC, SID_ATTR_PAGE_DYNAMIC, SID_ATTR_PAGE_SHARED, SID_ATTR_PAGE_SHARED, SID_ATTR_HDFT_DYNAMIC_SPACING, SID_ATTR_HDFT_DYNAMIC_SPACING, 0 }; /*-------------------------------------------------------------------- Beschreibung: --------------------------------------------------------------------*/ // gibt den Bereich der Which-Werte zurueck sal_uInt16* SvxHeaderPage::GetRanges() { return pRanges; } //------------------------------------------------------------------------ SfxTabPage* SvxHeaderPage::Create( Window* pParent, const SfxItemSet& rSet ) { return new SvxHeaderPage( pParent, rSet ); } //------------------------------------------------------------------------ sal_uInt16* SvxFooterPage::GetRanges() { return pRanges; } // ----------------------------------------------------------------------- SfxTabPage* SvxFooterPage::Create( Window* pParent, const SfxItemSet& rSet ) { return new SvxFooterPage( pParent, rSet ); } // ----------------------------------------------------------------------- SvxHeaderPage::SvxHeaderPage( Window* pParent, const SfxItemSet& rAttr ) : SvxHFPage( pParent, RID_SVXPAGE_HEADER, rAttr, SID_ATTR_PAGE_HEADERSET ) { } // ----------------------------------------------------------------------- SvxFooterPage::SvxFooterPage( Window* pParent, const SfxItemSet& rAttr ) : SvxHFPage( pParent, RID_SVXPAGE_FOOTER, rAttr, SID_ATTR_PAGE_FOOTERSET ) { } // ----------------------------------------------------------------------- SvxHFPage::SvxHFPage( Window* pParent, sal_uInt16 nResId, const SfxItemSet& rAttr, sal_uInt16 nSetId ) : SfxTabPage( pParent, SVX_RES( nResId ), rAttr ), aFrm ( this, SVX_RES( FL_FRAME ) ), aTurnOnBox ( this, SVX_RES( CB_TURNON ) ), aCntSharedBox ( this, SVX_RES( CB_SHARED ) ), aLMLbl ( this, SVX_RES( FT_LMARGIN ) ), aLMEdit ( this, SVX_RES( ED_LMARGIN ) ), aRMLbl ( this, SVX_RES( FT_RMARGIN ) ), aRMEdit ( this, SVX_RES( ED_RMARGIN ) ), aDistFT ( this, SVX_RES( FT_DIST ) ), aDistEdit ( this, SVX_RES( ED_DIST ) ), aDynSpacingCB ( this, SVX_RES( CB_DYNSPACING ) ), aHeightFT ( this, SVX_RES( FT_HEIGHT ) ), aHeightEdit ( this, SVX_RES( ED_HEIGHT ) ), aHeightDynBtn ( this, SVX_RES( CB_HEIGHT_DYN ) ), aBspWin ( this, SVX_RES( WN_BSP ) ), aBackgroundBtn ( this, SVX_RES( BTN_EXTRAS ) ), nId ( nSetId ), pBBSet ( NULL ), // bitfield mbDisableQueryBox(false), mbEnableBackgroundSelector(true), mbEnableDrawingLayerFillStyles(false) { InitHandler(); aBspWin.EnableRTL( sal_False ); // diese Page braucht ExchangeSupport SetExchangeSupport(); FreeResource(); // Metrik einstellen FieldUnit eFUnit = GetModuleFieldUnit( rAttr ); SetFieldUnit( aDistEdit, eFUnit ); SetFieldUnit( aHeightEdit, eFUnit ); SetFieldUnit( aLMEdit, eFUnit ); SetFieldUnit( aRMEdit, eFUnit ); aTurnOnBox.SetAccessibleRelationMemberOf( &aFrm ); aCntSharedBox.SetAccessibleRelationMemberOf( &aFrm ); aLMLbl.SetAccessibleRelationMemberOf( &aFrm ); aLMEdit.SetAccessibleRelationMemberOf( &aFrm ); aRMLbl.SetAccessibleRelationMemberOf( &aFrm ); aRMEdit.SetAccessibleRelationMemberOf( &aFrm ); aDistFT.SetAccessibleRelationMemberOf( &aFrm ); aDistEdit.SetAccessibleRelationMemberOf( &aFrm ); aDynSpacingCB.SetAccessibleRelationMemberOf( &aFrm ); aHeightFT.SetAccessibleRelationMemberOf( &aFrm ); aHeightEdit.SetAccessibleRelationMemberOf( &aFrm ); aHeightDynBtn.SetAccessibleRelationMemberOf( &aFrm ); aBackgroundBtn.SetAccessibleRelationMemberOf(&aFrm); } // ----------------------------------------------------------------------- SvxHFPage::~SvxHFPage() { delete pBBSet; } // ----------------------------------------------------------------------- sal_Bool SvxHFPage::FillItemSet( SfxItemSet& rSet ) { const sal_uInt16 nWSize = GetWhich(SID_ATTR_PAGE_SIZE); const sal_uInt16 nWLRSpace = GetWhich(SID_ATTR_LRSPACE); const sal_uInt16 nWULSpace = GetWhich(SID_ATTR_ULSPACE); const sal_uInt16 nWOn = GetWhich(SID_ATTR_PAGE_ON); const sal_uInt16 nWDynamic = GetWhich(SID_ATTR_PAGE_DYNAMIC); const sal_uInt16 nWDynSpacing = GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING); const sal_uInt16 nWShared = GetWhich(SID_ATTR_PAGE_SHARED); const sal_uInt16 nWBrush = GetWhich(SID_ATTR_BRUSH); const sal_uInt16 nWBox = GetWhich(SID_ATTR_BORDER_OUTER); const sal_uInt16 nWBoxInfo = GetWhich(SID_ATTR_BORDER_INNER); const sal_uInt16 nWShadow = GetWhich(SID_ATTR_BORDER_SHADOW); const sal_uInt16 aWhichTab[] = { nWSize, nWSize, nWLRSpace, nWLRSpace, nWULSpace, nWULSpace, nWOn, nWOn, nWDynamic, nWDynamic, nWShared, nWShared, nWBrush, nWBrush, nWBoxInfo, nWBoxInfo, nWBox, nWBox, nWShadow, nWShadow, nWDynSpacing, nWDynSpacing, //UUUU take over DrawingLayer FillStyles XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014 0, 0}; const SfxItemSet& rOldSet = GetItemSet(); SfxItemPool* pPool = rOldSet.GetPool(); DBG_ASSERT(pPool,"no pool :-("); SfxMapUnit eUnit = pPool->GetMetric(nWSize); SfxItemSet aSet(*pPool,aWhichTab); if(mbEnableDrawingLayerFillStyles) { //UUUU When using the XATTR_FILLSTYLE DrawingLayer FillStyle definition // extra action has to be done here since the pool default is XFILL_SOLID // instead of XFILL_NONE (to have the default blue fill color at start). aSet.Put(XFillStyleItem(XFILL_NONE)); } //-------------------------------------------------------------------- aSet.Put( SfxBoolItem( nWOn, aTurnOnBox.IsChecked() ) ); aSet.Put( SfxBoolItem( nWDynamic, aHeightDynBtn.IsChecked() ) ); aSet.Put( SfxBoolItem( nWShared, aCntSharedBox.IsChecked() ) ); if(aDynSpacingCB.IsVisible() && SFX_WHICH_MAX > nWDynSpacing) { SfxBoolItem* pBoolItem = (SfxBoolItem*)pPool->GetDefaultItem(nWDynSpacing).Clone(); pBoolItem->SetValue(aDynSpacingCB.IsChecked()); aSet.Put(*pBoolItem); delete pBoolItem; } // Groesse SvxSizeItem aSizeItem( (const SvxSizeItem&)rOldSet.Get( nWSize ) ); Size aSize( aSizeItem.GetSize() ); long nDist = GetCoreValue( aDistEdit, eUnit ); long nH = GetCoreValue( aHeightEdit, eUnit ); // fixe Hoehe? // if ( !aHeightDynBtn.IsChecked() ) nH += nDist; // dann Abstand dazu addieren aSize.Height() = nH; aSizeItem.SetSize( aSize ); aSet.Put( aSizeItem ); // Raender SvxLRSpaceItem aLR( nWLRSpace ); aLR.SetLeft( (sal_uInt16)GetCoreValue( aLMEdit, eUnit ) ); aLR.SetRight( (sal_uInt16)GetCoreValue( aRMEdit, eUnit ) ); aSet.Put( aLR ); SvxULSpaceItem aUL( nWULSpace ); if ( nId == SID_ATTR_PAGE_HEADERSET ) aUL.SetLower( (sal_uInt16)nDist ); else aUL.SetUpper( (sal_uInt16)nDist ); aSet.Put( aUL ); // Hintergrund und Umrandung? if(pBBSet) { aSet.Put(*pBBSet); } else { const SfxItemSet* _pSet; const SfxPoolItem* pItem; if(SFX_ITEM_SET == GetItemSet().GetItemState(GetWhich(nId), sal_False, &pItem)) { _pSet = &(static_cast< const SvxSetItem* >(pItem)->GetItemSet()); if(_pSet->GetItemState(nWBrush) == SFX_ITEM_SET) { aSet.Put(_pSet->Get(nWBrush)); } if(_pSet->GetItemState(nWBoxInfo) == SFX_ITEM_SET) { aSet.Put(_pSet->Get(nWBoxInfo)); } if(_pSet->GetItemState(nWBox) == SFX_ITEM_SET) { aSet.Put(_pSet->Get(nWBox)); } if(_pSet->GetItemState(nWShadow) == SFX_ITEM_SET) { aSet.Put(_pSet->Get(nWShadow)); } //UUUU take care of [XATTR_XATTR_FILL_FIRST .. XATTR_FILL_LAST] for(sal_uInt16 nFillStyleId(XATTR_FILL_FIRST); nFillStyleId <= XATTR_FILL_LAST; nFillStyleId++) { if(_pSet->GetItemState(nFillStyleId) == SFX_ITEM_SET) { aSet.Put(_pSet->Get(nFillStyleId)); } } } } // Das SetItem wegschreiben SvxSetItem aSetItem( GetWhich( nId ), aSet ); rSet.Put( aSetItem ); return sal_True; } // ----------------------------------------------------------------------- void SvxHFPage::Reset( const SfxItemSet& rSet ) { ActivatePage( rSet ); ResetBackground_Impl( rSet ); SfxItemPool* pPool = GetItemSet().GetPool(); DBG_ASSERT( pPool, "Wo ist der Pool" ); SfxMapUnit eUnit = pPool->GetMetric( GetWhich( SID_ATTR_PAGE_SIZE ) ); // Kopf-/Fusszeilen-Attribute auswerten // const SvxSetItem* pSetItem = 0; if ( SFX_ITEM_SET == rSet.GetItemState( GetWhich(nId), sal_False, (const SfxPoolItem**)&pSetItem ) ) { const SfxItemSet& rHeaderSet = pSetItem->GetItemSet(); const SfxBoolItem& rHeaderOn = (const SfxBoolItem&)rHeaderSet.Get(GetWhich(SID_ATTR_PAGE_ON)); aTurnOnBox.Check(rHeaderOn.GetValue()); if ( rHeaderOn.GetValue() ) { const SfxBoolItem& rDynamic = (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_DYNAMIC ) ); const SfxBoolItem& rShared = (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SHARED ) ); const SvxSizeItem& rSize = (const SvxSizeItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ); const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rHeaderSet.Get( GetWhich( SID_ATTR_ULSPACE ) ); const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ); if(aDynSpacingCB.IsVisible()) { const SfxBoolItem& rDynSpacing = (const SfxBoolItem&)rHeaderSet.Get(GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING)); aDynSpacingCB.Check(rDynSpacing.GetValue()); } if ( nId == SID_ATTR_PAGE_HEADERSET ) { // Kopfzeile SetMetricValue( aDistEdit, rUL.GetLower(), eUnit ); SetMetricValue( aHeightEdit, rSize.GetSize().Height() - rUL.GetLower(), eUnit ); } else { // Fusszeile SetMetricValue( aDistEdit, rUL.GetUpper(), eUnit ); SetMetricValue( aHeightEdit, rSize.GetSize().Height() - rUL.GetUpper(), eUnit ); } aHeightDynBtn.Check(rDynamic.GetValue()); SetMetricValue( aLMEdit, rLR.GetLeft(), eUnit ); SetMetricValue( aRMEdit, rLR.GetRight(), eUnit ); aCntSharedBox.Check(rShared.GetValue()); } else pSetItem = 0; } else { // defaults for distance and height long nDefaultDist = DEF_DIST_WRITER; const SfxPoolItem* pExt1 = GetItem( rSet, SID_ATTR_PAGE_EXT1 ); const SfxPoolItem* pExt2 = GetItem( rSet, SID_ATTR_PAGE_EXT2 ); if ( pExt1 && pExt1->ISA(SfxBoolItem) && pExt2 && pExt2->ISA(SfxBoolItem) ) nDefaultDist = DEF_DIST_CALC; SetMetricValue( aDistEdit, nDefaultDist, SFX_MAPUNIT_100TH_MM ); SetMetricValue( aHeightEdit, 500, SFX_MAPUNIT_100TH_MM ); } if ( !pSetItem ) { aTurnOnBox.Check( sal_False ); aHeightDynBtn.Check( sal_True ); aCntSharedBox.Check( sal_True ); } TurnOnHdl(0); aTurnOnBox.SaveValue(); aDistEdit.SaveValue(); aHeightEdit.SaveValue(); aHeightDynBtn.SaveValue(); aLMEdit.SaveValue(); aRMEdit.SaveValue(); aCntSharedBox.SaveValue(); RangeHdl( 0 ); sal_uInt16 nHtmlMode = 0; const SfxPoolItem* pItem = 0; SfxObjectShell* pShell; if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem) || ( 0 != (pShell = SfxObjectShell::Current()) && 0 != (pItem = pShell->GetItem(SID_HTML_MODE)))) { nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue(); if(nHtmlMode & HTMLMODE_ON) { aCntSharedBox.Hide(); aBackgroundBtn.Hide(); } } } /*-------------------------------------------------------------------- Beschreibung: Handler initialisieren --------------------------------------------------------------------*/ void SvxHFPage::InitHandler() { aTurnOnBox.SetClickHdl(LINK(this, SvxHFPage, TurnOnHdl)); aDistEdit.SetModifyHdl(LINK(this, SvxHFPage, DistModify)); aDistEdit.SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl)); aHeightEdit.SetModifyHdl(LINK(this, SvxHFPage, HeightModify)); aHeightEdit.SetLoseFocusHdl(LINK(this,SvxHFPage,RangeHdl)); aLMEdit.SetModifyHdl(LINK(this, SvxHFPage, BorderModify)); aLMEdit.SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl)); aRMEdit.SetModifyHdl(LINK(this, SvxHFPage, BorderModify)); aRMEdit.SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl)); aBackgroundBtn.SetClickHdl(LINK(this,SvxHFPage, BackgroundHdl)); } /*-------------------------------------------------------------------- Beschreibung: Ein/aus --------------------------------------------------------------------*/ IMPL_LINK( SvxHFPage, TurnOnHdl, CheckBox *, pBox ) { if ( aTurnOnBox.IsChecked() ) { aDistFT.Enable(); aDistEdit.Enable(); aDynSpacingCB.Enable(); aHeightFT.Enable(); aHeightEdit.Enable(); aHeightDynBtn.Enable(); aLMLbl.Enable(); aLMEdit.Enable(); aRMLbl.Enable(); aRMEdit.Enable(); sal_uInt16 nUsage = aBspWin.GetUsage(); if( nUsage == SVX_PAGE_RIGHT || nUsage == SVX_PAGE_LEFT ) aCntSharedBox.Disable(); else aCntSharedBox.Enable(); aBackgroundBtn.Enable(); } else { sal_Bool bDelete = sal_True; if ( !mbDisableQueryBox && pBox && aTurnOnBox.GetSavedValue() == sal_True ) bDelete = ( QueryBox( this, SVX_RES( RID_SVXQBX_DELETE_HEADFOOT ) ).Execute() == RET_YES ); if ( bDelete ) { aDistFT.Disable(); aDistEdit.Disable(); aDynSpacingCB.Enable(sal_False); aHeightFT.Disable(); aHeightEdit.Disable(); aHeightDynBtn.Disable(); aLMLbl.Disable(); aLMEdit.Disable(); aRMLbl.Disable(); aRMEdit.Disable(); aCntSharedBox.Disable(); aBackgroundBtn.Disable(); } else aTurnOnBox.Check(); } UpdateExample(); return 0; } /*-------------------------------------------------------------------- Beschreibung: Abstand im Bsp Modifizieren --------------------------------------------------------------------*/ IMPL_LINK_INLINE_START( SvxHFPage, DistModify, MetricField *, EMPTYARG ) { UpdateExample(); return 0; } IMPL_LINK_INLINE_END( SvxHFPage, DistModify, MetricField *, EMPTYARG ) IMPL_LINK_INLINE_START( SvxHFPage, HeightModify, MetricField *, EMPTYARG ) { UpdateExample(); return 0; } IMPL_LINK_INLINE_END( SvxHFPage, HeightModify, MetricField *, EMPTYARG ) /*-------------------------------------------------------------------- Beschreibung: Raender einstellen --------------------------------------------------------------------*/ IMPL_LINK_INLINE_START( SvxHFPage, BorderModify, MetricField *, EMPTYARG ) { UpdateExample(); return 0; } IMPL_LINK_INLINE_END( SvxHFPage, BorderModify, MetricField *, EMPTYARG ) /*-------------------------------------------------------------------- Beschreibung: Hintergrund --------------------------------------------------------------------*/ IMPL_LINK( SvxHFPage, BackgroundHdl, Button *, EMPTYARG ) { if(!pBBSet) { // nur die n"otigen Items f"uer Umrandung und Hintergrund benutzen const sal_uInt16 nOuter(GetWhich(SID_ATTR_BORDER_OUTER)); const sal_uInt16 nInner(GetWhich(SID_ATTR_BORDER_INNER, sal_False)); const sal_uInt16 nShadow(GetWhich(SID_ATTR_BORDER_SHADOW)); if(mbEnableDrawingLayerFillStyles) { pBBSet = new SfxItemSet( *GetItemSet().GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST, // DrawingLayer FillStyle definitions SID_COLOR_TABLE, SID_BITMAP_LIST, // XPropertyLists for Color, Gradient, Hatch and Graphic fills nOuter, nOuter, nInner, nInner, nShadow, nShadow, 0, 0); //UUUU copy items for XPropertyList entries from the DrawModel so that // the Area TabPage can access them static const sal_uInt16 nCopyFlags[] = { SID_COLOR_TABLE, SID_GRADIENT_LIST, SID_HATCH_LIST, SID_BITMAP_LIST, 0 }; for(sal_uInt16 a(0); nCopyFlags[a]; a++) { const SfxPoolItem* pItem = GetItemSet().GetItem(nCopyFlags[a]); if(pItem) { pBBSet->Put(*pItem); } else { OSL_ENSURE(false, "XPropertyList missing (!)"); } } } else { const sal_uInt16 nBrush(GetWhich(SID_ATTR_BRUSH)); pBBSet = new SfxItemSet( *GetItemSet().GetPool(), nBrush, nBrush, nOuter, nOuter, nInner, nInner, nShadow, nShadow, 0, 0); } const SfxPoolItem* pItem; if(SFX_ITEM_SET == GetItemSet().GetItemState(GetWhich(nId), sal_False, &pItem)) { // If a SfxItemSet from the SetItem for SID_ATTR_PAGE_HEADERSET or // SID_ATTR_PAGE_FOOTERSET exists, use it's content pBBSet->Put(((SvxSetItem*)pItem)->GetItemSet()); } else { if(mbEnableDrawingLayerFillStyles) { //UUUU The style for header/footer is not yet created, need to reset // XFillStyleItem to XFILL_NONE which is the same as in the style // initialization. This needs to be done since the pool default for // XFillStyleItem is XFILL_SOLID pBBSet->Put(XFillStyleItem(XFILL_NONE)); } } if(SFX_ITEM_SET == GetItemSet().GetItemState(nInner, sal_False, &pItem)) { // das gesetze InfoItem wird immer ben"otigt pBBSet->Put(*pItem); } } SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); if(pFact) { //UUUU SfxAbstractTabDialog* pDlg = pFact->CreateSvxBorderBackgroundDlg( this, *pBBSet, mbEnableBackgroundSelector, mbEnableDrawingLayerFillStyles); DBG_ASSERT(pDlg,"Dialogdiet fail!");//CHINA001 if(RET_OK == pDlg->Execute() && pDlg->GetOutputItemSet()) { SfxItemIter aIter(*pDlg->GetOutputItemSet()); const SfxPoolItem* pItem = aIter.FirstItem(); while(pItem) { if(!IsInvalidItem(pItem)) { pBBSet->Put(*pItem); } pItem = aIter.NextItem(); } //---------------------------------------------------------------- { drawinglayer::attribute::SdrAllFillAttributesHelperPtr aFillAttributes; if(mbEnableDrawingLayerFillStyles) { //UUUU create FillAttributes directly from DrawingLayer FillStyle entries aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(*pBBSet)); } else { const sal_uInt16 nWhich = GetWhich(SID_ATTR_BRUSH); if(pBBSet->GetItemState(nWhich) == SFX_ITEM_SET) { //UUUU create FillAttributes from SvxBrushItem const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(pBBSet->Get(nWhich)); SfxItemSet aTempSet(*pBBSet->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST); setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet); aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet)); } } if(SID_ATTR_PAGE_HEADERSET == nId) { //aBspWin.SetHdColor(rItem.GetColor()); aBspWin.setHeaderFillAttributes(aFillAttributes); } else { //aBspWin.SetFtColor(rItem.GetColor()); aBspWin.setFooterFillAttributes(aFillAttributes); } } //---------------------------------------------------------------- { const sal_uInt16 nWhich = GetWhich(SID_ATTR_BORDER_OUTER); if(pBBSet->GetItemState(nWhich) == SFX_ITEM_SET) { const SvxBoxItem& rItem = (const SvxBoxItem&)pBBSet->Get(nWhich); if(nId == SID_ATTR_PAGE_HEADERSET) aBspWin.SetHdBorder(rItem); else aBspWin.SetFtBorder(rItem); } } UpdateExample(); } delete pDlg; } return 0; } /*-------------------------------------------------------------------- Beschreibung: Bsp --------------------------------------------------------------------*/ void SvxHFPage::UpdateExample() { if ( nId == SID_ATTR_PAGE_HEADERSET ) { aBspWin.SetHeader( aTurnOnBox.IsChecked() ); aBspWin.SetHdHeight( GetCoreValue( aHeightEdit, SFX_MAPUNIT_TWIP ) ); aBspWin.SetHdDist( GetCoreValue( aDistEdit, SFX_MAPUNIT_TWIP ) ); aBspWin.SetHdLeft( GetCoreValue( aLMEdit, SFX_MAPUNIT_TWIP ) ); aBspWin.SetHdRight( GetCoreValue( aRMEdit, SFX_MAPUNIT_TWIP ) ); } else { aBspWin.SetFooter( aTurnOnBox.IsChecked() ); aBspWin.SetFtHeight( GetCoreValue( aHeightEdit, SFX_MAPUNIT_TWIP ) ); aBspWin.SetFtDist( GetCoreValue( aDistEdit, SFX_MAPUNIT_TWIP ) ); aBspWin.SetFtLeft( GetCoreValue( aLMEdit, SFX_MAPUNIT_TWIP ) ); aBspWin.SetFtRight( GetCoreValue( aRMEdit, SFX_MAPUNIT_TWIP ) ); } aBspWin.Invalidate(); } /*-------------------------------------------------------------------- Beschreibung: Hintergrund im Beispiel setzen --------------------------------------------------------------------*/ void SvxHFPage::ResetBackground_Impl( const SfxItemSet& rSet ) { sal_uInt16 nWhich(GetWhich(SID_ATTR_PAGE_HEADERSET)); if(SFX_ITEM_SET == rSet.GetItemState(nWhich, sal_False)) { const SvxSetItem& rSetItem = static_cast< const SvxSetItem& >(rSet.Get(nWhich, sal_False)); const SfxItemSet& rTmpSet = rSetItem.GetItemSet(); const SfxBoolItem& rOn = static_cast< const SfxBoolItem& >(rTmpSet.Get(GetWhich(SID_ATTR_PAGE_ON))); if(rOn.GetValue()) { drawinglayer::attribute::SdrAllFillAttributesHelperPtr aHeaderFillAttributes; if(mbEnableDrawingLayerFillStyles) { //UUUU create FillAttributes directly from DrawingLayer FillStyle entries aHeaderFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rTmpSet)); } else { nWhich = GetWhich(SID_ATTR_BRUSH); if(SFX_ITEM_SET == rTmpSet.GetItemState(nWhich)) { //UUUU create FillAttributes from SvxBrushItem const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rTmpSet.Get(nWhich)); SfxItemSet aTempSet(*rTmpSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST); setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet); aHeaderFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet)); } } aBspWin.setHeaderFillAttributes(aHeaderFillAttributes); nWhich = GetWhich(SID_ATTR_BORDER_OUTER); if(rTmpSet.GetItemState(nWhich) == SFX_ITEM_SET) { const SvxBoxItem& rItem = (const SvxBoxItem&)rTmpSet.Get(nWhich); aBspWin.SetHdBorder(rItem); } } } nWhich = GetWhich(SID_ATTR_PAGE_FOOTERSET); if(SFX_ITEM_SET == rSet.GetItemState(nWhich, sal_False)) { const SvxSetItem& rSetItem = static_cast< const SvxSetItem& >(rSet.Get(nWhich, sal_False)); const SfxItemSet& rTmpSet = rSetItem.GetItemSet(); const SfxBoolItem& rOn = static_cast< const SfxBoolItem& >(rTmpSet.Get(GetWhich(SID_ATTR_PAGE_ON))); if(rOn.GetValue()) { drawinglayer::attribute::SdrAllFillAttributesHelperPtr aFooterFillAttributes; if(mbEnableDrawingLayerFillStyles) { //UUUU create FillAttributes directly from DrawingLayer FillStyle entries aFooterFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rTmpSet)); } else { nWhich = GetWhich(SID_ATTR_BRUSH); if(SFX_ITEM_SET == rTmpSet.GetItemState(nWhich)) { //UUUU create FillAttributes from SvxBrushItem const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rTmpSet.Get(nWhich)); SfxItemSet aTempSet(*rTmpSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST); setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet); aFooterFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet)); } } aBspWin.setFooterFillAttributes(aFooterFillAttributes); nWhich = GetWhich(SID_ATTR_BORDER_OUTER); if(rTmpSet.GetItemState(nWhich) == SFX_ITEM_SET) { const SvxBoxItem& rItem = static_cast< const SvxBoxItem& >(rTmpSet.Get(nWhich)); aBspWin.SetFtBorder(rItem); } } } drawinglayer::attribute::SdrAllFillAttributesHelperPtr aPageFillAttributes; if(mbEnableDrawingLayerFillStyles) { //UUUU create FillAttributes directly from DrawingLayer FillStyle entries aPageFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rSet)); } else { nWhich = GetWhich(SID_ATTR_BRUSH); if(rSet.GetItemState(nWhich) >= SFX_ITEM_AVAILABLE) { //UUUU create FillAttributes from SvxBrushItem const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rSet.Get(nWhich)); SfxItemSet aTempSet(*rSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST); setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet); aPageFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet)); } } aBspWin.setPageFillAttributes(aPageFillAttributes); nWhich = GetWhich(SID_ATTR_BORDER_OUTER); if(rSet.GetItemState(nWhich) >= SFX_ITEM_AVAILABLE) { const SvxBoxItem& rItem = static_cast< const SvxBoxItem& >(rSet.Get(nWhich)); aBspWin.SetBorder(rItem); } } /*-------------------------------------------------------------------- Beschreibung: --------------------------------------------------------------------*/ void SvxHFPage::ActivatePage( const SfxItemSet& rSet ) { const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_LRSPACE ); if ( pItem ) { // linken und rechten Rand einstellen const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)*pItem; aBspWin.SetLeft( rLRSpace.GetLeft() ); aBspWin.SetRight( rLRSpace.GetRight() ); } else { aBspWin.SetLeft( 0 ); aBspWin.SetRight( 0 ); } pItem = GetItem( rSet, SID_ATTR_ULSPACE ); if ( pItem ) { // oberen und unteren Rand einstellen const SvxULSpaceItem& rULSpace = (const SvxULSpaceItem&)*pItem; aBspWin.SetTop( rULSpace.GetUpper() ); aBspWin.SetBottom( rULSpace.GetLower() ); } else { aBspWin.SetTop( 0 ); aBspWin.SetBottom( 0 ); } sal_uInt16 nUsage = SVX_PAGE_ALL; pItem = GetItem( rSet, SID_ATTR_PAGE ); if ( pItem ) nUsage = ( (const SvxPageItem*)pItem )->GetPageUsage(); aBspWin.SetUsage( nUsage ); if ( SVX_PAGE_RIGHT == nUsage || SVX_PAGE_LEFT == nUsage ) aCntSharedBox.Disable(); else aCntSharedBox.Enable(); pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE ); if ( pItem ) { // Orientation und Size aus dem PageItem const SvxSizeItem& rSize = (const SvxSizeItem&)*pItem; // die Groesse ist ggf. schon geswappt (Querformat) aBspWin.SetSize( rSize.GetSize() ); } // Kopfzeilen-Attribute auswerten const SvxSetItem* pSetItem = 0; if ( SFX_ITEM_SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_HEADERSET ), sal_False, (const SfxPoolItem**)&pSetItem ) ) { const SfxItemSet& rHeaderSet = pSetItem->GetItemSet(); const SfxBoolItem& rHeaderOn = (const SfxBoolItem&)rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ); if ( rHeaderOn.GetValue() ) { const SvxSizeItem& rSize = (const SvxSizeItem&) rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ); const SvxULSpaceItem& rUL = (const SvxULSpaceItem&) rHeaderSet.Get( GetWhich(SID_ATTR_ULSPACE ) ); const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&) rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ); long nDist = rUL.GetLower(); aBspWin.SetHdHeight( rSize.GetSize().Height() - nDist ); aBspWin.SetHdDist( nDist ); aBspWin.SetHdLeft( rLR.GetLeft() ); aBspWin.SetHdRight( rLR.GetRight() ); aBspWin.SetHeader( sal_True ); } else pSetItem = 0; } if ( !pSetItem ) { aBspWin.SetHeader( sal_False ); if ( SID_ATTR_PAGE_HEADERSET == nId ) aCntSharedBox.Disable(); } pSetItem = 0; if ( SFX_ITEM_SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_FOOTERSET ), sal_False, (const SfxPoolItem**)&pSetItem ) ) { const SfxItemSet& rFooterSet = pSetItem->GetItemSet(); const SfxBoolItem& rFooterOn = (const SfxBoolItem&)rFooterSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ); if ( rFooterOn.GetValue() ) { const SvxSizeItem& rSize = (const SvxSizeItem&) rFooterSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ); const SvxULSpaceItem& rUL = (const SvxULSpaceItem&) rFooterSet.Get( GetWhich( SID_ATTR_ULSPACE ) ); const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&) rFooterSet.Get( GetWhich( SID_ATTR_LRSPACE ) ); long nDist = rUL.GetUpper(); aBspWin.SetFtHeight( rSize.GetSize().Height() - nDist ); aBspWin.SetFtDist( nDist ); aBspWin.SetFtLeft( rLR.GetLeft() ); aBspWin.SetFtRight( rLR.GetRight() ); aBspWin.SetFooter( sal_True ); } else pSetItem = 0; } if ( !pSetItem ) { aBspWin.SetFooter( sal_False ); if ( SID_ATTR_PAGE_FOOTERSET == nId ) aCntSharedBox.Disable(); } pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 ); if ( pItem && pItem->ISA(SfxBoolItem) ) { aBspWin.SetTable( sal_True ); aBspWin.SetHorz( ( (SfxBoolItem*)pItem )->GetValue() ); } pItem = GetItem( rSet, SID_ATTR_PAGE_EXT2 ); if ( pItem && pItem->ISA(SfxBoolItem) ) { aBspWin.SetTable( sal_True ); aBspWin.SetVert( ( (SfxBoolItem*)pItem )->GetValue() ); } ResetBackground_Impl( rSet ); RangeHdl( 0 ); } /*-------------------------------------------------------------------- Beschreibung: --------------------------------------------------------------------*/ int SvxHFPage::DeactivatePage( SfxItemSet* _pSet ) { if ( _pSet ) FillItemSet( *_pSet ); return LEAVE_PAGE; } /*-------------------------------------------------------------------- Beschreibung: Berech --------------------------------------------------------------------*/ IMPL_LINK( SvxHFPage, RangeHdl, Edit *, EMPTYARG ) { long nHHeight = aBspWin.GetHdHeight(); long nHDist = aBspWin.GetHdDist(); long nFHeight = aBspWin.GetFtHeight(); long nFDist = aBspWin.GetFtDist(); long nHeight = Max( (long)MINBODY, static_cast(aHeightEdit.Denormalize( aHeightEdit.GetValue( FUNIT_TWIP ) ) ) ); long nDist = aTurnOnBox.IsChecked() ? static_cast(aDistEdit.Denormalize( aDistEdit.GetValue( FUNIT_TWIP ) )) : 0; long nMin; long nMax; if ( nId == SID_ATTR_PAGE_HEADERSET ) { nHHeight = nHeight; nHDist = nDist; } else { nFHeight = nHeight; nFDist = nDist; } // Aktuelle Werte der Seitenraender long nBT = aBspWin.GetTop(); long nBB = aBspWin.GetBottom(); long nBL = aBspWin.GetLeft(); long nBR = aBspWin.GetRight(); long nH = aBspWin.GetSize().Height(); long nW = aBspWin.GetSize().Width(); // Grenzen if ( nId == SID_ATTR_PAGE_HEADERSET ) { // Header nMin = ( nH - nBB - nBT ) / 5; // 20% nMax = Max( nH - nMin - nHDist - nFDist - nFHeight - nBB - nBT, nMin ); aHeightEdit.SetMax( aHeightEdit.Normalize( nMax ), FUNIT_TWIP ); nMin = ( nH - nBB - nBT ) / 5; // 20% nDist = Max( nH - nMin - nHHeight - nFDist - nFHeight - nBB - nBT, long(0) ); aDistEdit.SetMax( aDistEdit.Normalize( nDist ), FUNIT_TWIP ); } else { // Footer nMin = ( nH - nBT - nBB ) / 5; // 20% nMax = Max( nH - nMin - nFDist - nHDist - nHHeight - nBT - nBB, nMin ); aHeightEdit.SetMax( aHeightEdit.Normalize( nMax ), FUNIT_TWIP ); nMin = ( nH - nBT - nBB ) / 5; // 20% nDist = Max( nH - nMin - nFHeight - nHDist - nHHeight - nBT - nBB, long(0) ); aDistEdit.SetMax( aDistEdit.Normalize( nDist ), FUNIT_TWIP ); } // Einzuege beschraenken nMax = nW - nBL - nBR - static_cast(aRMEdit.Denormalize( aRMEdit.GetValue( FUNIT_TWIP ) )) - MINBODY; aLMEdit.SetMax( aLMEdit.Normalize( nMax ), FUNIT_TWIP ); nMax = nW - nBL - nBR - static_cast(aLMEdit.Denormalize( aLMEdit.GetValue( FUNIT_TWIP ) )) - MINBODY; aRMEdit.SetMax( aLMEdit.Normalize( nMax ), FUNIT_TWIP ); return 0; } /* -----------------------------26.08.2002 12:49------------------------------ ---------------------------------------------------------------------------*/ void lcl_Move(Window& rWin, sal_Int32 nDiff) { Point aPos(rWin.GetPosPixel()); aPos.Y() -= nDiff; rWin.SetPosPixel(aPos); } void SvxHFPage::EnableDynamicSpacing() { aDynSpacingCB.Show(); //move all following controls Window* aMoveWindows[] = { &aHeightFT, &aHeightEdit, &aHeightDynBtn, &aBackgroundBtn, 0 }; sal_Int32 nOffset = aTurnOnBox.GetPosPixel().Y() - aCntSharedBox.GetPosPixel().Y(); sal_Int32 nIdx = 0; while(aMoveWindows[nIdx]) lcl_Move(*aMoveWindows[nIdx++], nOffset); } void SvxHFPage::PageCreated(SfxAllItemSet aSet) { //UUUU SFX_ITEMSET_ARG (&aSet, pSupportDrawingLayerFillStyleItem, SfxBoolItem, SID_DRAWINGLAYER_FILLSTYLES, sal_False); if(pSupportDrawingLayerFillStyleItem) { const bool bNew(pSupportDrawingLayerFillStyleItem->GetValue()); EnableDrawingLayerFillStyles(bNew); } } //eof