diff --git a/0001-add-char-highlighting-background-tab-to-graphics-sty.patch b/0001-add-char-highlighting-background-tab-to-graphics-sty.patch index c2b4fb2..1458c7d 100644 --- a/0001-add-char-highlighting-background-tab-to-graphics-sty.patch +++ b/0001-add-char-highlighting-background-tab-to-graphics-sty.patch @@ -1,17 +1,284 @@ -From c4bc798c3b2043b0e92573c87c4fb3e17043ee59 Mon Sep 17 00:00:00 2001 +From 79aa7096421965e6931a893186a64dee6d9c6400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Fri, 11 Aug 2017 12:31:13 +0100 +Date: Fri, 11 Aug 2017 11:51:09 +0100 Subject: [PATCH] add char highlighting (background) tab to graphics styles dialog +move the SvxBackgroundColorItem<->SvxBrushItem conversion + +into the dialog itself + +Change-Id: I83db9f02145a4927257dd5691f82dad1a11eaea6 + +improve scoping a little + +Change-Id: Ie2e86852f7c4754070d3eb7e8981d674f04a6d80 +(cherry picked from commit a162b21c2b393534a9f6433c9b2b674aaaecf1a7) + Change-Id: I2cf3872116ae59051847d73612a2f4f8385d34d8 --- - sd/source/ui/dlg/tabtempl.cxx | 7 +++++++ - sd/source/ui/func/fuchar.cxx | 2 +- - sd/source/ui/inc/tabtempl.hxx | 1 + - sd/uiconfig/simpress/ui/templatedialog.ui | 14 ++++++++++++++ - 4 files changed, 23 insertions(+), 1 deletion(-) + 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/dlg/tabtempl.cxx | 7 ++ + sd/source/ui/func/fuchar.cxx | 26 +------- + sd/source/ui/inc/tabtempl.hxx | 1 + + sd/uiconfig/simpress/ui/templatedialog.ui | 14 ++++ + 8 files changed, 113 insertions(+), 53 deletions(-) +diff --git a/cui/source/inc/backgrnd.hxx b/cui/source/inc/backgrnd.hxx +index d95fe60..351477f 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 d5acbd4..762edcf 100644 +--- a/cui/source/tabpages/backgrnd.cxx ++++ b/cui/source/tabpages/backgrnd.cxx +@@ -39,6 +39,7 @@ + #include + + #include ++#include + #include "backgrnd.hxx" + + #include +@@ -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(&( rSet->Get( nWhich ) )); ++ if (rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT) ++ { ++ if (!bCharBackColor) ++ aBgdAttr = static_cast(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(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(pBgdAttr)->GetColor(); ++ FillControls_Impl(aBgdAttr, aUserData); ++ aBgdColor = const_cast(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(&( rSet->Get( nWhich ) )); +- pTableBck_Impl->pCellBrush = new SvxBrushItem(*pBgdAttr); ++ aBgdAttr = static_cast(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(&( rSet->Get( SID_ATTR_BRUSH_ROW ) )); +- pTableBck_Impl->pRowBrush = new SvxBrushItem(*pBgdAttr); ++ aBgdAttr = static_cast(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(&( rSet->Get( SID_ATTR_BRUSH_TABLE ) )); +- pTableBck_Impl->pTableBrush = new SvxBrushItem(*pBgdAttr); ++ aBgdAttr = static_cast(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(&( rSet->Get( nWhich ) )); +- pHighlighting.reset(new SvxBrushItem(*pBgdAttr)); ++ aBgdAttr = static_cast(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(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(*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(*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 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 : is_typed_flags {}; ++ template<> struct typed_flags : is_typed_flags {}; + } + + // flags for SvxBorderTabPage +diff --git a/sd/source/ui/dlg/dlgchar.cxx b/sd/source/ui/dlg/dlgchar.cxx +index bcf4437..cb37af4 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(SvxBackgroundTabFlags::SHOW_HIGHLIGHTING))); ++ aSet.Put(SfxUInt32Item(SID_FLAG_TYPE,static_cast(SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR))); + rPage.PageCreated(aSet); + } + } diff --git a/sd/source/ui/dlg/tabtempl.cxx b/sd/source/ui/dlg/tabtempl.cxx index 17e962b..9042bf5 100644 --- a/sd/source/ui/dlg/tabtempl.cxx @@ -45,18 +312,44 @@ index 17e962b..9042bf5 100644 { rPage.PageCreated(aSet); diff --git a/sd/source/ui/func/fuchar.cxx b/sd/source/ui/func/fuchar.cxx -index b5c5a18..1ffa757 100644 +index 4a8aedd..1ffa757 100644 --- a/sd/source/ui/func/fuchar.cxx +++ b/sd/source/ui/func/fuchar.cxx -@@ -68,7 +68,7 @@ void FuChar::DoExecute( SfxRequest& rReq ) +@@ -68,33 +68,9 @@ void FuChar::DoExecute( SfxRequest& rReq ) SfxItemSet aEditAttr( mpDoc->GetPool() ); mpView->GetAttributes( aEditAttr ); -- SfxItemSet aNewAttr(mpViewShell->GetPool(), svl::Items{}); +- 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(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 pDlg(pFact ? pFact->CreateSdTabCharDialog(mpViewShell->GetActiveWindow(), &aNewAttr, mpDoc->GetDocSh() ) : nullptr); + sal_uInt16 nResult = RET_CANCEL; diff --git a/sd/source/ui/inc/tabtempl.hxx b/sd/source/ui/inc/tabtempl.hxx index d5c2f5e..bc00417 100644 --- a/sd/source/ui/inc/tabtempl.hxx