From 2fdc42d3feda4c89b95a186b4c65d369caa49020 Mon Sep 17 00:00:00 2001 From: Katarina Behrens Date: Wed, 3 May 2017 17:11:03 +0200 Subject: tdf#106127: Sidebar: Enable patterns as page background don't know who in their right mind would want to use it, but it's possible to set such background in the dialogs, so let's make this consistent Change-Id: I0d5dea0edfeae8d8ca65ad2bd18ced9a982a224c Reviewed-on: https://gerrit.libreoffice.org/37265 Tested-by: Jenkins Reviewed-by: Katarina Behrens --- sw/source/uibase/sidebar/PageStylesPanel.cxx | 129 +++++++++++++++++++-------- sw/source/uibase/sidebar/PageStylesPanel.hxx | 1 + 2 files changed, 95 insertions(+), 35 deletions(-) (limited to 'sw') diff --git a/sw/source/uibase/sidebar/PageStylesPanel.cxx b/sw/source/uibase/sidebar/PageStylesPanel.cxx index c7d5848ef657..e79e7ae9bd91 100644 --- a/sw/source/uibase/sidebar/PageStylesPanel.cxx +++ b/sw/source/uibase/sidebar/PageStylesPanel.cxx @@ -39,6 +39,16 @@ using namespace ::com::sun::star; namespace sw { namespace sidebar{ +enum eFillStyle +{ + NONE, + SOLID, + GRADIENT, + HATCH, + BITMAP, + PATTERN +}; + const SvxPageUsage aArr[] = { SvxPageUsage::All, @@ -158,11 +168,11 @@ void PageStylesPanel::Initialize() void PageStylesPanel::Update() { - const drawing::FillStyle eXFS = (drawing::FillStyle)mpBgFillType->GetSelectEntryPos(); + const eFillStyle eXFS = (eFillStyle)mpBgFillType->GetSelectEntryPos(); SfxObjectShell* pSh = SfxObjectShell::Current(); switch(eXFS) { - case drawing::FillStyle_NONE: + case NONE: { mpBgColorLB->Hide(); mpBgHatchingLB->Hide(); @@ -170,7 +180,7 @@ void PageStylesPanel::Update() mpBgBitmapLB->Hide(); } break; - case drawing::FillStyle_SOLID: + case SOLID: { mpBgBitmapLB->Hide(); mpBgGradientLB->Hide(); @@ -180,7 +190,7 @@ void PageStylesPanel::Update() mpBgColorLB->SelectEntry(aColor); } break; - case drawing::FillStyle_GRADIENT: + case GRADIENT: { mpBgBitmapLB->Hide(); mpBgHatchingLB->Hide(); @@ -195,7 +205,7 @@ void PageStylesPanel::Update() } break; - case drawing::FillStyle_HATCH: + case HATCH: { mpBgColorLB->Hide(); mpBgGradientLB->Hide(); @@ -210,17 +220,29 @@ void PageStylesPanel::Update() } break; - case drawing::FillStyle_BITMAP: + case BITMAP: + case PATTERN: { mpBgColorLB->Hide(); mpBgGradientLB->Hide(); mpBgHatchingLB->Hide(); - const SvxBitmapListItem aItem(*static_cast(pSh->GetItem(SID_BITMAP_LIST))); mpBgBitmapLB->Show(); mpBgBitmapLB->Clear(); - mpBgBitmapLB->Fill(aItem.GetBitmapList()); + OUString aBitmapName; + + if( eXFS == BITMAP ) + { + const SvxBitmapListItem aItem(*static_cast(pSh->GetItem(SID_BITMAP_LIST))); + mpBgBitmapLB->Fill(aItem.GetBitmapList()); + aBitmapName = GetBitmapSetOrDefault(); + } + else + { + const SvxPatternListItem aItem(*static_cast(pSh->GetItem(SID_PATTERN_LIST))); + mpBgBitmapLB->Fill(aItem.GetPatternList()); + aBitmapName = GetPatternSetOrDefault(); + } - const OUString aBitmapName = GetBitmapSetOrDefault(); mpBgBitmapLB->SelectEntry( aBitmapName ); } break; @@ -270,7 +292,7 @@ const OUString PageStylesPanel::GetHatchingSetOrDefault() const OUString PageStylesPanel::GetBitmapSetOrDefault() { - if( !mpBgBitmapItem ) + if( !mpBgBitmapItem || mpBgBitmapItem->isPattern() ) { SfxObjectShell* pSh = SfxObjectShell::Current(); const SvxBitmapListItem aBmpListItem(*static_cast(pSh->GetItem(SID_BITMAP_LIST))); @@ -283,6 +305,21 @@ const OUString PageStylesPanel::GetBitmapSetOrDefault() return mpBgBitmapItem->GetName(); } +const OUString PageStylesPanel::GetPatternSetOrDefault() +{ + if( !mpBgBitmapItem || !mpBgBitmapItem->isPattern() ) + { + SfxObjectShell* pSh = SfxObjectShell::Current(); + const SvxPatternListItem aPatternListItem(*static_cast(pSh->GetItem(SID_PATTERN_LIST))); + const GraphicObject aGraphObj = aPatternListItem.GetPatternList()->GetBitmap(0)->GetGraphicObject(); + const OUString aPatternName = aPatternListItem.GetPatternList()->GetBitmap(0)->GetName(); + + mpBgBitmapItem.reset( new XFillBitmapItem( aPatternName, aGraphObj ) ); + } + + return mpBgBitmapItem->GetName(); +} + void PageStylesPanel::NotifyItemUpdate( const sal_uInt16 nSid, const SfxItemState eState, @@ -336,7 +373,7 @@ void PageStylesPanel::NotifyItemUpdate( { if(eState >= SfxItemState::DEFAULT) { - mpBgFillType->SelectEntryPos(1); + mpBgFillType->SelectEntryPos( static_cast(SOLID) ); mpBgColorItem.reset(pState ? static_cast< XFillColorItem* >(pState->Clone()) : nullptr); Update(); } @@ -347,7 +384,7 @@ void PageStylesPanel::NotifyItemUpdate( { if(eState >= SfxItemState::DEFAULT) { - mpBgFillType->SelectEntryPos(3); + mpBgFillType->SelectEntryPos( static_cast(HATCH) ); mpBgHatchItem.reset(pState ? static_cast < XFillHatchItem* >(pState->Clone()) : nullptr); Update(); } @@ -358,7 +395,7 @@ void PageStylesPanel::NotifyItemUpdate( { if(eState >= SfxItemState::DEFAULT) { - mpBgFillType->SelectEntryPos(2); + mpBgFillType->SelectEntryPos( static_cast(GRADIENT) ); mpBgGradientItem.reset(pState ? static_cast< XFillGradientItem* >(pState->Clone()) : nullptr); Update(); } @@ -368,8 +405,14 @@ void PageStylesPanel::NotifyItemUpdate( { if(eState >= SfxItemState::DEFAULT) { - mpBgFillType->SelectEntryPos(4); mpBgBitmapItem.reset(pState ? static_cast< XFillBitmapItem* >(pState->Clone()) : nullptr); + if (mpBgBitmapItem) + { + if (mpBgBitmapItem->isPattern()) + mpBgFillType->SelectEntryPos( static_cast(PATTERN) ); + else + mpBgFillType->SelectEntryPos( static_cast(BITMAP) ); + } Update(); } } @@ -386,19 +429,22 @@ void PageStylesPanel::NotifyItemUpdate( switch(eXFS) { case drawing::FillStyle_NONE: - mpBgFillType->SelectEntryPos(0); + mpBgFillType->SelectEntryPos( static_cast(NONE) ); break; case drawing::FillStyle_SOLID: - mpBgFillType->SelectEntryPos(1); + mpBgFillType->SelectEntryPos( static_cast(SOLID) ); break; case drawing::FillStyle_GRADIENT: - mpBgFillType->SelectEntryPos(2); + mpBgFillType->SelectEntryPos( static_cast(GRADIENT) ); break; case drawing::FillStyle_HATCH: - mpBgFillType->SelectEntryPos(3); + mpBgFillType->SelectEntryPos( static_cast(HATCH) ); break; case drawing::FillStyle_BITMAP: - mpBgFillType->SelectEntryPos(4); + if (mpBgBitmapItem->isPattern()) + mpBgFillType->SelectEntryPos( static_cast(PATTERN) ); + else + mpBgFillType->SelectEntryPos( static_cast(BITMAP) ); break; default: break; @@ -437,40 +483,41 @@ IMPL_LINK_NOARG( PageStylesPanel, ModifyLayoutHdl, ListBox&, void ) IMPL_LINK_NOARG(PageStylesPanel, ModifyFillStyleHdl, ListBox&, void) { - const drawing::FillStyle eXFS = (drawing::FillStyle)mpBgFillType->GetSelectEntryPos(); - const XFillStyleItem aXFillStyleItem(eXFS); + const eFillStyle eXFS = (eFillStyle)mpBgFillType->GetSelectEntryPos(); Update(); switch (eXFS) { - case drawing::FillStyle_NONE: + case NONE: { + const XFillStyleItem aXFillStyleItem(drawing::FillStyle_NONE); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_FILLSTYLE, SfxCallMode::RECORD, { &aXFillStyleItem }); } break; - case drawing::FillStyle_SOLID: + case SOLID: { XFillColorItem aItem( OUString(), mpBgColorItem->GetColorValue() ); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_COLOR, SfxCallMode::RECORD, { &aItem }); } break; - case drawing::FillStyle_GRADIENT: + case GRADIENT: { XFillGradientItem aItem( mpBgGradientItem->GetName(), mpBgGradientItem->GetGradientValue() ); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_GRADIENT, SfxCallMode::RECORD, { &aItem }); } break; - case drawing::FillStyle_HATCH: + case HATCH: { XFillHatchItem aItem( mpBgHatchItem->GetName(), mpBgHatchItem->GetHatchValue() ); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_HATCH, SfxCallMode::RECORD, { &aItem }); } break; - case drawing::FillStyle_BITMAP: + case BITMAP: + case PATTERN: { XFillBitmapItem aItem( mpBgBitmapItem->GetName(), mpBgBitmapItem->GetGraphicObject() ); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_BITMAP, SfxCallMode::RECORD, { &aItem }); @@ -485,17 +532,17 @@ IMPL_LINK_NOARG(PageStylesPanel, ModifyFillStyleHdl, ListBox&, void) void PageStylesPanel::ModifyFillColor() { - const drawing::FillStyle eXFS = (drawing::FillStyle)mpBgFillType->GetSelectEntryPos(); + const eFillStyle eXFS = (eFillStyle)mpBgFillType->GetSelectEntryPos(); SfxObjectShell* pSh = SfxObjectShell::Current(); switch(eXFS) { - case drawing::FillStyle_SOLID: + case SOLID: { XFillColorItem aItem(OUString(), mpBgColorLB->GetSelectEntryColor()); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_COLOR, SfxCallMode::RECORD, { &aItem }); } break; - case drawing::FillStyle_GRADIENT: + case GRADIENT: { XGradient aGradient; aGradient.SetStartColor(mpBgColorLB->GetSelectEntryColor()); @@ -505,7 +552,7 @@ void PageStylesPanel::ModifyFillColor() GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_GRADIENT, SfxCallMode::RECORD, { &aItem }); } break; - case drawing::FillStyle_HATCH: + case HATCH: { const SvxHatchListItem aHatchListItem(*static_cast(pSh->GetItem(SID_HATCH_LIST))); sal_uInt16 nPos = mpBgHatchingLB->GetSelectEntryPos(); @@ -516,13 +563,25 @@ void PageStylesPanel::ModifyFillColor() GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_HATCH, SfxCallMode::RECORD, { &aItem }); } break; - - case drawing::FillStyle_BITMAP: + case BITMAP: + case PATTERN: { - SvxBitmapListItem aBitmapListItem(*static_cast(pSh->GetItem(SID_BITMAP_LIST))); sal_Int16 nPos = mpBgBitmapLB->GetSelectEntryPos(); - GraphicObject aBitmap = aBitmapListItem.GetBitmapList()->GetBitmap(nPos)->GetGraphicObject(); - OUString aBitmapName = aBitmapListItem.GetBitmapList()->GetBitmap(nPos)->GetName(); + GraphicObject aBitmap; + OUString aBitmapName; + + if ( eXFS == BITMAP ) + { + SvxBitmapListItem aBitmapListItem(*static_cast(pSh->GetItem(SID_BITMAP_LIST))); + aBitmap = aBitmapListItem.GetBitmapList()->GetBitmap(nPos)->GetGraphicObject(); + aBitmapName = aBitmapListItem.GetBitmapList()->GetBitmap(nPos)->GetName(); + } + else + { + SvxPatternListItem aPatternListItem(*static_cast(pSh->GetItem(SID_PATTERN_LIST))); + aBitmap = aPatternListItem.GetPatternList()->GetBitmap(nPos)->GetGraphicObject(); + aBitmapName = aPatternListItem.GetPatternList()->GetBitmap(nPos)->GetName(); + } XFillBitmapItem aItem(aBitmapName, aBitmap); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_BITMAP, SfxCallMode::RECORD, { &aItem }); diff --git a/sw/source/uibase/sidebar/PageStylesPanel.hxx b/sw/source/uibase/sidebar/PageStylesPanel.hxx index 13ccd95efa0b..d7d364f0d055 100644 --- a/sw/source/uibase/sidebar/PageStylesPanel.hxx +++ b/sw/source/uibase/sidebar/PageStylesPanel.hxx @@ -111,6 +111,7 @@ private: XGradient GetGradientSetOrDefault(); const OUString GetHatchingSetOrDefault(); const OUString GetBitmapSetOrDefault(); + const OUString GetPatternSetOrDefault(); void ModifyFillColor(); -- cgit