move the SvxBackgroundColorItem<->SvxBrushItem conversion
into the dialog itself
Change-Id: I83db9f02145a4927257dd5691f82dad1a11eaea6
Reviewed-on: https://gerrit.libreoffice.org/41029
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/inc/backgrnd.hxx b/cui/source/inc/backgrnd.hxx
index de75d69..d7e71a0 100644
--- a/cui/source/inc/backgrnd.hxx
+++ b/cui/source/inc/backgrnd.hxx
@@ -106,6 +106,7 @@ private:
bool bAllowShowSelector : 1;
bool bIsGraphicValid : 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 b368463..ffa76d2 100644
--- a/cui/source/tabpages/backgrnd.cxx
+++ b/cui/source/tabpages/backgrnd.cxx
@@ -37,6 +37,7 @@
#include <editeng/eerdll.hxx>
#include <editeng/brushitem.hxx>
#include <editeng/colritem.hxx>
#include "backgrnd.hxx"
#include <svx/xtable.hxx>
@@ -317,6 +318,7 @@ SvxBackgroundTabPage::SvxBackgroundTabPage(vcl::Window* pParent, const SfxItemSe
, bAllowShowSelector(true)
, bIsGraphicValid(false)
, bHighlighting(false)
, bCharBackColor(false)
, m_bColorSelected(false)
, pPageImpl(new SvxBackgroundPage_Impl)
, pImportDlg(nullptr)
@@ -441,7 +443,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;
@@ -469,20 +471,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
{
@@ -517,22 +538,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;
@@ -544,8 +565,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));
}
}
}
@@ -570,6 +605,7 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet )
}
bool bModified = false;
bool bCompareOldBrush = true;
sal_uInt16 nSlot = SID_ATTR_BRUSH;
if ( m_pTblLBox->IsVisible() )
@@ -591,15 +627,21 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet )
{
nSlot = SID_ATTR_BRUSH_CHAR;
}
else if( bCharBackColor )
{
nSlot = SID_ATTR_CHAR_BACK_COLOR;
bCompareOldBrush = false;
}
sal_uInt16 nWhich = GetWhich( nSlot );
const SfxPoolItem* pOld = GetOldItem( *rCoreSet, 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) );
@@ -700,6 +742,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 ) );
@@ -1373,10 +1431,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 0207a0e..30b1ff4 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 57c7f2d..f605126 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 4a8aedd..b5c5a18 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(), svl::Items<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;