[Libreoffice-commits] .: svx/inc svx/source sw/inc sw/source

Cédric Bosdonnat cbosdo at kemper.freedesktop.org
Thu Sep 15 01:57:47 PDT 2011


 svx/inc/svx/hdft.hxx                   |    6 ++
 svx/source/dialog/hdft.cxx             |   92 +++++++++++++++++++--------------
 sw/inc/cmdid.h                         |    1 
 sw/inc/swcommands.h                    |    1 
 sw/source/ui/app/mn.src                |    6 ++
 sw/source/ui/docvw/HeaderFooterWin.cxx |   48 +++++++++++++++++
 6 files changed, 115 insertions(+), 39 deletions(-)

New commits:
commit c95d90199397b529de1a9979c065a7f35e52a188
Author: Cédric Bosdonnat <cedric.bosdonnat.ooo at free.fr>
Date:   Thu Sep 15 10:54:46 2011 +0200

    Header/Footer: add the Border and Background... menu item

diff --git a/svx/inc/svx/hdft.hxx b/svx/inc/svx/hdft.hxx
index b1dd6b8..a196ee7 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 90438e8..245c939 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 466e07d..087a3c2 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 036abc8..9e8343e 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 4156ba2..3a5c21c 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 1f7bbae..a706639 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 );


More information about the Libreoffice-commits mailing list