[Libreoffice-commits] core.git: Branch 'libreoffice-5-4' - cui/source include/svx sd/source

Caolán McNamara caolanm at redhat.com
Thu Aug 17 11:46:25 UTC 2017


 cui/source/inc/backgrnd.hxx      |    1 
 cui/source/tabpages/backgrnd.cxx |  104 ++++++++++++++++++++++++++++++---------
 include/svx/flagsdef.hxx         |   11 ++--
 sd/source/ui/dlg/dlgchar.cxx     |    2 
 sd/source/ui/func/fuchar.cxx     |   26 ---------
 5 files changed, 91 insertions(+), 53 deletions(-)

New commits:
commit a407285747c65894bc858c4aa722a24e57caca31
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Aug 11 11:51:09 2017 +0100

    Resolves: tdf#110077 move the SvxBackgroundColorItem<->SvxBrushItem conversion
    
    into the dialog itself
    
    Reviewed-on: https://gerrit.libreoffice.org/41029
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit 6284804c2ccb3ad8bb6e1c1dac8d622f66b8c07d)
    
    Change-Id: I83db9f02145a4927257dd5691f82dad1a11eaea6
    Reviewed-on: https://gerrit.libreoffice.org/41168
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/cui/source/inc/backgrnd.hxx b/cui/source/inc/backgrnd.hxx
index d95fe6084ea3..351477fe2dca 100644
--- a/cui/source/inc/backgrnd.hxx
+++ b/cui/source/inc/backgrnd.hxx
@@ -107,6 +107,7 @@ private:
     bool        bIsGraphicValid     : 1;
     bool        bLinkOnly           : 1;
     bool        bHighlighting       : 1;
+    bool        bCharBackColor      : 1;
     bool        m_bColorSelected    : 1;
     Graphic     aBgdGraphic;
     OUString    aBgdGraphicPath;
diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx
index d5acbd4ba00a..1e67159f15a6 100644
--- a/cui/source/tabpages/backgrnd.cxx
+++ b/cui/source/tabpages/backgrnd.cxx
@@ -39,6 +39,7 @@
 #include <editeng/eerdll.hxx>
 
 #include <editeng/brushitem.hxx>
+#include <editeng/colritem.hxx>
 #include "backgrnd.hxx"
 
 #include <svx/xtable.hxx>
@@ -331,6 +332,7 @@ SvxBackgroundTabPage::SvxBackgroundTabPage(vcl::Window* pParent, const SfxItemSe
     , bIsGraphicValid(false)
     , bLinkOnly(false)
     , bHighlighting(false)
+    , bCharBackColor(false)
     , m_bColorSelected(false)
     , pPageImpl(new SvxBackgroundPage_Impl)
     , pImportDlg(nullptr)
@@ -461,7 +463,7 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet )
 
 
     // get and evaluate Input-BrushItem
-    const SvxBrushItem* pBgdAttr = nullptr;
+    bool bBrushItemSet = false;
     sal_uInt16 nSlot = SID_ATTR_BRUSH;
     const SfxPoolItem* pItem;
     sal_uInt16 nDestValue = USHRT_MAX;
@@ -489,20 +491,39 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet )
     {
         nSlot = SID_ATTR_BRUSH_CHAR;
     }
+    else if( bCharBackColor )
+    {
+        nSlot = SID_ATTR_CHAR_BACK_COLOR;
+    }
+
     //#111173# the destination item is missing when the parent style has been changed
     if(USHRT_MAX == nDestValue && m_pTblLBox->IsVisible())
         nDestValue = 0;
-    sal_uInt16 nWhich = GetWhich( nSlot );
+    sal_uInt16 nWhich = GetWhich(nSlot);
+    SvxBrushItem aBgdAttr(nWhich);
 
-    if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT )
-        pBgdAttr = static_cast<const SvxBrushItem*>(&( rSet->Get( nWhich ) ));
+    if (rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT)
+    {
+        if (!bCharBackColor)
+            aBgdAttr = static_cast<const SvxBrushItem&>(rSet->Get(nWhich));
+        else
+        {
+            // EE_CHAR_BKGCOLOR is SvxBackgroundColorItem, but char background tabpage
+            // can only work with SvxBrushItems
+            // extract Color out of SvxBackColorItem
+            Color aBackColor = static_cast<const SvxBackgroundColorItem&>(rSet->Get(nWhich)).GetValue();
+            // make new SvxBrushItem with this Color
+            aBgdAttr = SvxBrushItem(aBackColor, SID_ATTR_BRUSH_CHAR);
+        }
+        bBrushItemSet = true;
+    }
 
     m_pBtnTile->Check();
 
-    if ( pBgdAttr )
+    if (bBrushItemSet)
     {
-        FillControls_Impl(*pBgdAttr, aUserData);
-        aBgdColor = const_cast<SvxBrushItem*>(pBgdAttr)->GetColor();
+        FillControls_Impl(aBgdAttr, aUserData);
+        aBgdColor = aBgdAttr.GetColor();
     }
     else
     {
@@ -537,22 +558,22 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet )
             nWhich = GetWhich( SID_ATTR_BRUSH );
             if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT )
             {
-                pBgdAttr = static_cast<const SvxBrushItem*>(&( rSet->Get( nWhich ) ));
-                pTableBck_Impl->pCellBrush = new SvxBrushItem(*pBgdAttr);
+                aBgdAttr = static_cast<const SvxBrushItem&>(rSet->Get(nWhich));
+                pTableBck_Impl->pCellBrush = new SvxBrushItem(aBgdAttr);
             }
             pTableBck_Impl->nCellWhich = nWhich;
 
             if ( rSet->GetItemState( SID_ATTR_BRUSH_ROW, false ) >= SfxItemState::DEFAULT )
             {
-                pBgdAttr = static_cast<const SvxBrushItem*>(&( rSet->Get( SID_ATTR_BRUSH_ROW ) ));
-                pTableBck_Impl->pRowBrush = new SvxBrushItem(*pBgdAttr);
+                aBgdAttr = static_cast<const SvxBrushItem&>(rSet->Get(SID_ATTR_BRUSH_ROW));
+                pTableBck_Impl->pRowBrush = new SvxBrushItem(aBgdAttr);
             }
             pTableBck_Impl->nRowWhich = SID_ATTR_BRUSH_ROW;
 
             if ( rSet->GetItemState( SID_ATTR_BRUSH_TABLE, false ) >= SfxItemState::DEFAULT )
             {
-                pBgdAttr = static_cast<const SvxBrushItem*>(&( rSet->Get( SID_ATTR_BRUSH_TABLE ) ));
-                pTableBck_Impl->pTableBrush = new SvxBrushItem(*pBgdAttr);
+                aBgdAttr = static_cast<const SvxBrushItem&>(rSet->Get(SID_ATTR_BRUSH_TABLE));
+                pTableBck_Impl->pTableBrush = new SvxBrushItem(aBgdAttr);
             }
             pTableBck_Impl->nTableWhich = SID_ATTR_BRUSH_TABLE;
 
@@ -564,8 +585,22 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet )
             nWhich = GetWhich( SID_ATTR_BRUSH_CHAR );
             if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT )
             {
-                pBgdAttr = static_cast<const SvxBrushItem*>(&( rSet->Get( nWhich ) ));
-                pHighlighting.reset(new SvxBrushItem(*pBgdAttr));
+                aBgdAttr = static_cast<const SvxBrushItem&>(rSet->Get(nWhich));
+                pHighlighting.reset(new SvxBrushItem(aBgdAttr));
+            }
+        }
+        else if( bCharBackColor )
+        {
+            nWhich = GetWhich(SID_ATTR_CHAR_BACK_COLOR);
+            if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT )
+            {
+                // EE_CHAR_BKGCOLOR is SvxBackgroundColorItem, but char background tabpage
+                // can only work with SvxBrushItems
+                // extract Color out of SvxBackColorItem
+                Color aBackColor = static_cast<const SvxBackgroundColorItem&>(rSet->Get(nWhich)).GetValue();
+                // make new SvxBrushItem with this Color
+                aBgdAttr = SvxBrushItem(aBackColor, SID_ATTR_BRUSH_CHAR);
+                pHighlighting.reset(new SvxBrushItem(aBgdAttr));
             }
         }
     }
@@ -644,6 +679,7 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet )
         return FillItemSetWithWallpaperItem( *rCoreSet, SID_VIEW_FLD_PIC );
 
     bool bModified = false;
+    bool bCompareOldBrush = true;
     sal_uInt16 nSlot = SID_ATTR_BRUSH;
 
     if ( m_pTblLBox->IsVisible() )
@@ -665,15 +701,21 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet )
     {
         nSlot = SID_ATTR_BRUSH_CHAR;
     }
-    sal_uInt16 nWhich = GetWhich( nSlot );
+    else if( bCharBackColor )
+    {
+        nSlot = SID_ATTR_CHAR_BACK_COLOR;
+        bCompareOldBrush = false;
+    }
 
-    const SfxPoolItem* pOld = GetOldItem( *rCoreSet, nSlot );
-    SfxItemState eOldItemState = rCoreSet->GetItemState(nSlot, false);
-    const SfxItemSet& rOldSet = GetItemSet();
+    sal_uInt16 nWhich = GetWhich( nSlot );
 
-    if ( pOld )
+    const SfxPoolItem* pOld = GetOldItem(*rCoreSet, nSlot);
+    if (pOld && bCompareOldBrush)
     {
+        SfxItemState eOldItemState = rCoreSet->GetItemState(nSlot, false);
+        const SfxItemSet& rOldSet = GetItemSet();
         const SvxBrushItem& rOldItem    = static_cast<const SvxBrushItem&>(*pOld);
+
         SvxGraphicPosition  eOldPos     = rOldItem.GetGraphicPos();
         const bool          bIsBrush    = ( drawing::FillStyle_SOLID == lcl_getFillStyle(m_pLbSelect) );
 
@@ -774,6 +816,22 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet )
             bModified = ( bIsBrush || m_pBtnLink->IsChecked() || bIsGraphicValid );
         }
     }
+    else if (pOld && SID_ATTR_CHAR_BACK_COLOR == nSlot)
+    {
+        SfxItemState eOldItemState = rCoreSet->GetItemState(nSlot, false);
+        const SfxItemSet& rOldSet = GetItemSet();
+        const SvxBackgroundColorItem& rOldItem = static_cast<const SvxBackgroundColorItem&>(*pOld);
+
+        // Brush-treatment:
+        if ( rOldItem.GetValue() != aBgdColor ||
+             (SfxItemState::DEFAULT >= eOldItemState && m_bColorSelected))
+        {
+            bModified = true;
+            rCoreSet->Put(SvxBackgroundColorItem(aBgdColor, nWhich));
+        }
+        else if ( SfxItemState::DEFAULT == rOldSet.GetItemState( nWhich, false ) )
+            rCoreSet->ClearItem( nWhich );
+    }
     else if ( SID_ATTR_BRUSH_CHAR == nSlot && aBgdColor != Color( COL_WHITE ) )
     {
         rCoreSet->Put( SvxBrushItem( aBgdColor, nWhich ) );
@@ -1526,10 +1584,12 @@ void SvxBackgroundTabPage::PageCreated(const SfxAllItemSet& aSet)
         {
             ShowSelector();
         }
-        if ( nFlags & SvxBackgroundTabFlags::SHOW_HIGHLIGHTING )
+        if ((nFlags & SvxBackgroundTabFlags::SHOW_HIGHLIGHTING) ||
+            (nFlags & SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR))
         {
             m_pBackGroundColorLabelFT->SetText(CuiResId(RID_SVXSTR_CHARNAME_HIGHLIGHTING));
-            bHighlighting = true;
+            bHighlighting = bool(nFlags & SvxBackgroundTabFlags::SHOW_HIGHLIGHTING);
+            bCharBackColor = bool(nFlags & SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR);
         }
     }
 }
diff --git a/include/svx/flagsdef.hxx b/include/svx/flagsdef.hxx
index 0207a0ef1df5..30b1ff401203 100644
--- a/include/svx/flagsdef.hxx
+++ b/include/svx/flagsdef.hxx
@@ -39,14 +39,15 @@ namespace o3tl
 // flags for SvxBackgroundTabPage
 enum class SvxBackgroundTabFlags
 {
-    NONE                = 0x00,
-    SHOW_SELECTOR       = 0x01,
-    SHOW_TBLCTL         = 0x08,
-    SHOW_HIGHLIGHTING   = 0x10,
+    NONE                 = 0x00,
+    SHOW_SELECTOR        = 0x01,
+    SHOW_TBLCTL          = 0x08,
+    SHOW_HIGHLIGHTING    = 0x10,
+    SHOW_CHAR_BKGCOLOR   = 0x20,
 };
 namespace o3tl
 {
-    template<> struct typed_flags<SvxBackgroundTabFlags> : is_typed_flags<SvxBackgroundTabFlags, 0x19> {};
+    template<> struct typed_flags<SvxBackgroundTabFlags> : is_typed_flags<SvxBackgroundTabFlags, 0x39> {};
 }
 
 // flags for SvxBorderTabPage
diff --git a/sd/source/ui/dlg/dlgchar.cxx b/sd/source/ui/dlg/dlgchar.cxx
index bcf443767eea..cb37af495eac 100644
--- a/sd/source/ui/dlg/dlgchar.cxx
+++ b/sd/source/ui/dlg/dlgchar.cxx
@@ -65,7 +65,7 @@ void SdCharDlg::PageCreated( sal_uInt16 nId, SfxTabPage &rPage )
     }
     else if (nId == mnCharBackground)
     {
-        aSet.Put(SfxUInt32Item(SID_FLAG_TYPE,static_cast<sal_uInt32>(SvxBackgroundTabFlags::SHOW_HIGHLIGHTING)));
+        aSet.Put(SfxUInt32Item(SID_FLAG_TYPE,static_cast<sal_uInt32>(SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR)));
         rPage.PageCreated(aSet);
     }
 }
diff --git a/sd/source/ui/func/fuchar.cxx b/sd/source/ui/func/fuchar.cxx
index 4a8aedd64ece..1ffa757f0879 100644
--- a/sd/source/ui/func/fuchar.cxx
+++ b/sd/source/ui/func/fuchar.cxx
@@ -68,33 +68,9 @@ void FuChar::DoExecute( SfxRequest& rReq )
         SfxItemSet aEditAttr( mpDoc->GetPool() );
         mpView->GetAttributes( aEditAttr );
 
-        static const sal_uInt16 aRanges[] =
-        {
-            EE_ITEMS_START, EE_ITEMS_END,
-            SID_ATTR_BRUSH_CHAR, SID_ATTR_BRUSH_CHAR,
-            0
-        };
-
-        SfxItemSet aNewAttr( mpViewShell->GetPool(),
-                                aRanges );
+        SfxItemSet aNewAttr(mpViewShell->GetPool(), EE_ITEMS_START, EE_ITEMS_END);
         aNewAttr.Put( aEditAttr, false );
 
-        // EE_CHAR_BKGCOLOR is SvxBackgroundColorItem, but char background tabpage
-        // can only work with SvxBrushItems (it requires major undertaking to have
-        // it support anything else). Do the following then:
-        const SfxPoolItem* pItem;
-        if ( aNewAttr.GetItemState( EE_CHAR_BKGCOLOR, true, &pItem ) == SfxItemState::SET )
-        {
-            // extract Color outta SvxBackColorItem
-            Color aBackColor = static_cast<const SvxBackgroundColorItem*>(pItem)->GetValue();
-            // make new SvxBrushItem with this Color
-            SvxBrushItem aBrushItem( aBackColor, SID_ATTR_BRUSH_CHAR );
-
-            aNewAttr.ClearItem( EE_CHAR_BKGCOLOR );
-            // and stick it into the set
-            aNewAttr.Put( aBrushItem );
-        }
-
         SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
         ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact ? pFact->CreateSdTabCharDialog(mpViewShell->GetActiveWindow(), &aNewAttr, mpDoc->GetDocSh() ) : nullptr);
         sal_uInt16 nResult = RET_CANCEL;


More information about the Libreoffice-commits mailing list