diff options
author | Cédric Bosdonnat <cedric.bosdonnat.ooo@free.fr> | 2011-09-15 10:54:46 +0200 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat.ooo@free.fr> | 2011-09-15 10:57:30 +0200 |
commit | c95d90199397b529de1a9979c065a7f35e52a188 (patch) | |
tree | 0d09b69bc627a184716e8d436f4e3403fa6b7938 | |
parent | 8081794d91884f471494a0bbf41e69f5ec80e247 (diff) |
Header/Footer: add the Border and Background... menu item
-rw-r--r-- | svx/inc/svx/hdft.hxx | 6 | ||||
-rw-r--r-- | svx/source/dialog/hdft.cxx | 92 | ||||
-rw-r--r-- | sw/inc/cmdid.h | 1 | ||||
-rw-r--r-- | sw/inc/swcommands.h | 1 | ||||
-rw-r--r-- | sw/source/ui/app/mn.src | 6 | ||||
-rw-r--r-- | sw/source/ui/docvw/HeaderFooterWin.cxx | 48 |
6 files changed, 115 insertions, 39 deletions
diff --git a/svx/inc/svx/hdft.hxx b/svx/inc/svx/hdft.hxx index b1dd6b82e58c..a196ee7870b5 100644 --- a/svx/inc/svx/hdft.hxx +++ b/svx/inc/svx/hdft.hxx @@ -40,6 +40,12 @@ #include <svx/pagectrl.hxx> #include "svx/svxdllapi.h" +namespace svx +{ + SVX_DLLPUBLIC bool ShowBorderBackgroundDlg( Window* pParent, SfxItemSet* pBBSet, + bool bEnableBackgroundSelector ); +} + // class SvxHFPage ------------------------------------------------------ class SVX_DLLPUBLIC SvxHFPage: public SfxTabPage diff --git a/svx/source/dialog/hdft.cxx b/svx/source/dialog/hdft.cxx index 90438e867974..245c939cf339 100644 --- a/svx/source/dialog/hdft.cxx +++ b/svx/source/dialog/hdft.cxx @@ -89,6 +89,36 @@ static sal_uInt16 pRanges[] = 0 }; +namespace svx { + + bool ShowBorderBackgroundDlg( Window* pParent, SfxItemSet* pBBSet, + bool bEnableBackgroundSelector ) + { + bool bRes = false; + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + if(pFact) + { + SfxAbstractTabDialog* pDlg = pFact->CreateSvxBorderBackgroundDlg( pParent, *pBBSet, bEnableBackgroundSelector ); + DBG_ASSERT(pDlg, "Dialogdiet fail!"); + if ( pDlg->Execute() == RET_OK && pDlg->GetOutputItemSet() ) + { + SfxItemIter aIter( *pDlg->GetOutputItemSet() ); + const SfxPoolItem* pItem = aIter.FirstItem(); + + while ( pItem ) + { + if ( !IsInvalidItem( pItem ) ) + pBBSet->Put( *pItem ); + pItem = aIter.NextItem(); + } + bRes = true; + } + delete pDlg; + } + return bRes; + } +} + // returns the Which values to the range @@ -531,54 +561,38 @@ IMPL_LINK( SvxHFPage, BackgroundHdl, Button *, EMPTYARG ) pBBSet->Put( *pItem ); } - SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); - if(pFact) + if ( svx::ShowBorderBackgroundDlg( this, pBBSet, bEnableBackgroundSelector ) ) { - SfxAbstractTabDialog* pDlg = pFact->CreateSvxBorderBackgroundDlg( this, *pBBSet, bEnableBackgroundSelector ); - DBG_ASSERT(pDlg, "Dialogdiet fail!"); - if ( pDlg->Execute() == RET_OK && pDlg->GetOutputItemSet() ) - { - SfxItemIter aIter( *pDlg->GetOutputItemSet() ); - const SfxPoolItem* pItem = aIter.FirstItem(); - - while ( pItem ) - { - if ( !IsInvalidItem( pItem ) ) - pBBSet->Put( *pItem ); - pItem = aIter.NextItem(); - } + //---------------------------------------------------------------- - //---------------------------------------------------------------- - - sal_uInt16 nWhich = GetWhich( SID_ATTR_BRUSH ); - - if ( pBBSet->GetItemState( nWhich ) == SFX_ITEM_SET ) - { - const SvxBrushItem& rItem = (const SvxBrushItem&)pBBSet->Get( nWhich ); - if ( nId == SID_ATTR_PAGE_HEADERSET ) - aBspWin.SetHdColor( rItem.GetColor() ); - else - aBspWin.SetFtColor( rItem.GetColor() ); - } + sal_uInt16 nWhich = GetWhich( SID_ATTR_BRUSH ); - //---------------------------------------------------------------- + if ( pBBSet->GetItemState( nWhich ) == SFX_ITEM_SET ) + { + const SvxBrushItem& rItem = (const SvxBrushItem&)pBBSet->Get( nWhich ); + if ( nId == SID_ATTR_PAGE_HEADERSET ) + aBspWin.SetHdColor( rItem.GetColor() ); + else + aBspWin.SetFtColor( rItem.GetColor() ); + } - nWhich = GetWhich( SID_ATTR_BORDER_OUTER ); + //---------------------------------------------------------------- - if ( pBBSet->GetItemState( nWhich ) == SFX_ITEM_SET ) - { - const SvxBoxItem& rItem = (const SvxBoxItem&)pBBSet->Get( nWhich ); + nWhich = GetWhich( SID_ATTR_BORDER_OUTER ); - if ( nId == SID_ATTR_PAGE_HEADERSET ) - aBspWin.SetHdBorder( rItem ); - else - aBspWin.SetFtBorder( rItem ); - } + if ( pBBSet->GetItemState( nWhich ) == SFX_ITEM_SET ) + { + const SvxBoxItem& rItem = (const SvxBoxItem&)pBBSet->Get( nWhich ); - UpdateExample(); + if ( nId == SID_ATTR_PAGE_HEADERSET ) + aBspWin.SetHdBorder( rItem ); + else + aBspWin.SetFtBorder( rItem ); } - delete pDlg; + + UpdateExample(); } + return 0; } diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h index 466e07da285f..087a3c2165da 100644 --- a/sw/inc/cmdid.h +++ b/sw/inc/cmdid.h @@ -1017,6 +1017,7 @@ included in c-context files, so c++ style stuff will cause problems. #define FN_HEADERFOOTER_EDIT (FN_HEADERFOOTER+1) #define FN_HEADERFOOTER_DELETE (FN_HEADERFOOTER+2) +#define FN_HEADERFOOTER_BORDERBACK (FN_HEADERFOOTER+3) /*-------------------------------------------------------------------- Region: Parameter diff --git a/sw/inc/swcommands.h b/sw/inc/swcommands.h index 036abc820037..9e8343e62865 100644 --- a/sw/inc/swcommands.h +++ b/sw/inc/swcommands.h @@ -435,5 +435,6 @@ #define CMD_FN_COPY_HYPERLINK_LOCATION ".uno:CopyHyperlinkLocation"
#define CMD_FN_HEADERFOOTER_EDIT ".uno:HeaderFooterEdit"
#define CMD_FN_HEADERFOOTER_DELETE ".uno:HeaderFooterDelete"
+#define CMD_FN_HEADERFOOTER_BORDERBACK ".uno:HeaderFooterBorderBackground"
#endif
diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src index 4156ba2232c4..3a5c21c50d6c 100644 --- a/sw/source/ui/app/mn.src +++ b/sw/source/ui/app/mn.src @@ -1446,6 +1446,12 @@ Menu MN_HEADERFOOTER_BUTTON }; MenuItem { + Identifier = FN_HEADERFOOTER_BORDERBACK ; + HelpID = CMD_FN_HEADERFOOTER_BORDERBACK ; + Text [ en-US ] = "Border and Background..." ; + }; + MenuItem + { Identifier = FN_HEADERFOOTER_DELETE ; HelpID = CMD_FN_HEADERFOOTER_DELETE ; Text [ en-US ] = "Delete $1..." ; diff --git a/sw/source/ui/docvw/HeaderFooterWin.cxx b/sw/source/ui/docvw/HeaderFooterWin.cxx index 1f7bbaefb54b..a7066398a602 100644 --- a/sw/source/ui/docvw/HeaderFooterWin.cxx +++ b/sw/source/ui/docvw/HeaderFooterWin.cxx @@ -45,7 +45,9 @@ #include <basegfx/polygon/b2dpolygon.hxx> #include <basegfx/color/bcolortools.hxx> +#include <editeng/boxitem.hxx> #include <svtools/svtdata.hxx> +#include <svx/hdft.hxx> #include <vcl/decoview.hxx> #include <vcl/gradient.hxx> #include <vcl/menubtn.hxx> @@ -292,6 +294,52 @@ void SwHeaderFooterWin::ExecuteCommand( sal_uInt16 nSlot ) nPageId, &rSh ); } break; + case FN_HEADERFOOTER_BORDERBACK: + { + const SwPageDesc* pDesc = m_pPageFrm->GetPageDesc(); + const SwFrmFmt& rMaster = pDesc->GetMaster(); + SwFrmFmt* pHFFmt = const_cast< SwFrmFmt* >( rMaster.GetFooter().GetFooterFmt() ); + if ( m_bIsHeader ) + pHFFmt = const_cast< SwFrmFmt* >( rMaster.GetHeader().GetHeaderFmt() ); + + + SfxItemPool* pPool = pHFFmt->GetAttrSet().GetPool(); + SfxItemSet aSet( *pPool, + RES_BACKGROUND, RES_BACKGROUND, + RES_BOX, RES_BOX, + SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, + RES_SHADOW, RES_SHADOW, 0 ); + + aSet.Put( pHFFmt->GetAttrSet() ); + + // Create a box info item... needed by the dialog + SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); + const SfxPoolItem *pBoxInfo; + if ( SFX_ITEM_SET == pHFFmt->GetAttrSet().GetItemState( SID_ATTR_BORDER_INNER, + sal_True, &pBoxInfo) ) + aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo; + + aBoxInfo.SetTable( sal_False ); + aBoxInfo.SetDist( sal_True); + aBoxInfo.SetMinDist( sal_False ); + aBoxInfo.SetDefDist( MIN_BORDER_DIST ); + aBoxInfo.SetValid( VALID_DISABLE ); + aSet.Put( aBoxInfo ); + + if ( svx::ShowBorderBackgroundDlg( this, &aSet, true ) ) + { + const SfxPoolItem* pItem; + if ( SFX_ITEM_SET == aSet.GetItemState( RES_BACKGROUND, sal_False, &pItem ) ) + pHFFmt->SetFmtAttr( *pItem ); + + if ( SFX_ITEM_SET == aSet.GetItemState( RES_BOX, sal_False, &pItem ) ) + pHFFmt->SetFmtAttr( *pItem ); + + if ( SFX_ITEM_SET == aSet.GetItemState( RES_SHADOW, sal_False, &pItem ) ) + pHFFmt->SetFmtAttr( *pItem ); + } + } + break; case FN_HEADERFOOTER_DELETE: { rSh.ChangeHeaderOrFooter( rStyleName, m_bIsHeader, false, true ); |