tdf#89466 Fix update of elements and add listener in slidebg
Handle Slide change event, removal of PaperOrientationModifyHdl Fixed sync and update of MasterSlides. Fixed Paper orientation. Change-Id: I63ece7a4717f216f897b265664758c2c14abb191 Reviewed-on: https://gerrit.libreoffice.org/24927 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
This commit is contained in:
committed by
Katarina Behrens
parent
00271c8eaf
commit
833088b180
@@ -33,6 +33,7 @@
|
|||||||
#include "DrawViewShell.hxx"
|
#include "DrawViewShell.hxx"
|
||||||
#include "DrawController.hxx"
|
#include "DrawController.hxx"
|
||||||
#include <com/sun/star/beans/XPropertySet.hpp>
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
||||||
|
#include <boost/concept_check.hpp>
|
||||||
#include "sdresid.hxx"
|
#include "sdresid.hxx"
|
||||||
#include <svtools/controldims.hrc>
|
#include <svtools/controldims.hrc>
|
||||||
#include <svx/gallery.hxx>
|
#include <svx/gallery.hxx>
|
||||||
@@ -59,6 +60,7 @@
|
|||||||
#include <sfx2/objface.hxx>
|
#include <sfx2/objface.hxx>
|
||||||
#include <svx/dlgutil.hxx>
|
#include <svx/dlgutil.hxx>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "EventMultiplexer.hxx"
|
||||||
|
|
||||||
using namespace ::com::sun::star;
|
using namespace ::com::sun::star;
|
||||||
|
|
||||||
@@ -147,6 +149,7 @@ SlideBackground::SlideBackground(
|
|||||||
get(mpFillLB, "fillattr");
|
get(mpFillLB, "fillattr");
|
||||||
get(mpDspMasterBackground, "displaymasterbackground");
|
get(mpDspMasterBackground, "displaymasterbackground");
|
||||||
get(mpDspMasterObjects, "displaymasterobjects");
|
get(mpDspMasterObjects, "displaymasterobjects");
|
||||||
|
addListener();
|
||||||
Initialize();
|
Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,21 +162,9 @@ void SlideBackground::Initialize()
|
|||||||
{
|
{
|
||||||
lcl_FillPaperSizeListbox( *mpPaperSizeBox );
|
lcl_FillPaperSizeListbox( *mpPaperSizeBox );
|
||||||
mpPaperSizeBox->SetSelectHdl(LINK(this,SlideBackground,PaperSizeModifyHdl));
|
mpPaperSizeBox->SetSelectHdl(LINK(this,SlideBackground,PaperSizeModifyHdl));
|
||||||
mpPaperOrientation->SetSelectHdl(LINK(this,SlideBackground,PaperOrientationModifyHdl));
|
mpPaperOrientation->SetSelectHdl(LINK(this,SlideBackground,PaperSizeModifyHdl));
|
||||||
|
|
||||||
::sd::DrawDocShell* pDocSh = dynamic_cast<::sd::DrawDocShell*>( SfxObjectShell::Current() );
|
populateMasterSlideDropdown();
|
||||||
SdDrawDocument* pDoc = pDocSh ? pDocSh->GetDoc() : nullptr;
|
|
||||||
sal_uInt16 nCount = pDoc ? pDoc->GetMasterPageCount() : 0;
|
|
||||||
for( sal_uInt16 nLayout = 0; nLayout < nCount; nLayout++ )
|
|
||||||
{
|
|
||||||
SdPage* pMaster = static_cast<SdPage*>(pDoc->GetMasterPage(nLayout));
|
|
||||||
if( pMaster->GetPageKind() == PK_STANDARD)
|
|
||||||
{
|
|
||||||
OUString aLayoutName(pMaster->GetLayoutName());
|
|
||||||
aLayoutName = aLayoutName.copy(0,aLayoutName.indexOf(SD_LT_SEPARATOR));
|
|
||||||
mpMasterSlide->InsertEntry(aLayoutName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
meUnit = maPaperSizeController.GetCoreMetric();
|
meUnit = maPaperSizeController.GetCoreMetric();
|
||||||
|
|
||||||
@@ -294,8 +285,87 @@ void SlideBackground::Update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SlideBackground::addListener()
|
||||||
|
{
|
||||||
|
Link<tools::EventMultiplexerEvent&,void> aLink( LINK(this, SlideBackground, EventMultiplexerListener) );
|
||||||
|
mrBase.GetEventMultiplexer()->AddEventListener (
|
||||||
|
aLink,
|
||||||
|
tools::EventMultiplexerEvent::EID_CURRENT_PAGE |
|
||||||
|
tools::EventMultiplexerEvent::EID_SHAPE_CHANGED );
|
||||||
|
}
|
||||||
|
|
||||||
|
void SlideBackground::removeListener()
|
||||||
|
{
|
||||||
|
Link<tools::EventMultiplexerEvent&,void> aLink( LINK(this, SlideBackground, EventMultiplexerListener) );
|
||||||
|
mrBase.GetEventMultiplexer()->RemoveEventListener( aLink );
|
||||||
|
}
|
||||||
|
|
||||||
|
IMPL_LINK_TYPED(SlideBackground, EventMultiplexerListener,
|
||||||
|
tools::EventMultiplexerEvent&, rEvent, void)
|
||||||
|
{
|
||||||
|
switch (rEvent.meEventId)
|
||||||
|
{
|
||||||
|
// add more events as per requirement
|
||||||
|
// Master Page change triggers a shape change event. Solves sync problem.
|
||||||
|
case tools::EventMultiplexerEvent::EID_SHAPE_CHANGED:
|
||||||
|
populateMasterSlideDropdown();
|
||||||
|
break;
|
||||||
|
case tools::EventMultiplexerEvent::EID_CURRENT_PAGE:
|
||||||
|
{
|
||||||
|
static sal_uInt16 SidArray[] = {
|
||||||
|
SID_ATTR_PAGE_COLOR,
|
||||||
|
SID_ATTR_PAGE_HATCH,
|
||||||
|
SID_ATTR_PAGE_BITMAP,
|
||||||
|
SID_ATTR_PAGE_GRADIENT,
|
||||||
|
SID_ATTR_PAGE_FILLSTYLE,
|
||||||
|
SID_DISPLAY_MASTER_BACKGROUND,
|
||||||
|
SID_DISPLAY_MASTER_OBJECTS,
|
||||||
|
0 };
|
||||||
|
updateMasterSlideSelection();
|
||||||
|
GetBindings()->Invalidate( SidArray );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SlideBackground::populateMasterSlideDropdown()
|
||||||
|
{
|
||||||
|
mpMasterSlide->Clear();
|
||||||
|
::sd::DrawDocShell* pDocSh = dynamic_cast<::sd::DrawDocShell*>( SfxObjectShell::Current() );
|
||||||
|
SdDrawDocument* pDoc = pDocSh ? pDocSh->GetDoc() : nullptr;
|
||||||
|
sal_uInt16 nCount = pDoc ? pDoc->GetMasterPageCount() : 0;
|
||||||
|
for( sal_uInt16 nLayout = 0; nLayout < nCount; nLayout++ )
|
||||||
|
{
|
||||||
|
SdPage* pMaster = static_cast<SdPage*>(pDoc->GetMasterPage(nLayout));
|
||||||
|
if( pMaster->GetPageKind() == PK_STANDARD)
|
||||||
|
{
|
||||||
|
OUString aLayoutName(pMaster->GetLayoutName());
|
||||||
|
aLayoutName = aLayoutName.copy(0,aLayoutName.indexOf(SD_LT_SEPARATOR));
|
||||||
|
mpMasterSlide->InsertEntry(aLayoutName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateMasterSlideSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SlideBackground::updateMasterSlideSelection()
|
||||||
|
{
|
||||||
|
SdPage* pPage = mrBase.GetMainViewShell().get()->getCurrentPage();
|
||||||
|
if (pPage != nullptr && pPage->TRG_HasMasterPage())
|
||||||
|
{
|
||||||
|
SdrPage& rMasterPage (pPage->TRG_GetMasterPage());
|
||||||
|
SdPage* pMasterPage = static_cast<SdPage*>(&rMasterPage);
|
||||||
|
mpMasterSlide->SelectEntry(pMasterPage->GetName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mpMasterSlide->SetNoSelection();
|
||||||
|
}
|
||||||
|
|
||||||
void SlideBackground::dispose()
|
void SlideBackground::dispose()
|
||||||
{
|
{
|
||||||
|
removeListener();
|
||||||
|
|
||||||
mpPaperSizeBox.clear();
|
mpPaperSizeBox.clear();
|
||||||
mpPaperOrientation.clear();
|
mpPaperOrientation.clear();
|
||||||
mpMasterSlide.clear();
|
mpMasterSlide.clear();
|
||||||
@@ -603,14 +673,6 @@ IMPL_LINK_NOARG_TYPED(SlideBackground, PaperSizeModifyHdl, ListBox&, void)
|
|||||||
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_SIZE, SfxCallMode::RECORD, { &aSizeItem });
|
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_SIZE, SfxCallMode::RECORD, { &aSizeItem });
|
||||||
}
|
}
|
||||||
|
|
||||||
IMPL_LINK_NOARG_TYPED(SlideBackground, PaperOrientationModifyHdl, ListBox&, void)
|
|
||||||
{
|
|
||||||
SvxPageItem aPageItem(SID_ATTR_PAGE);
|
|
||||||
aPageItem.SetLandscape( mpPaperOrientation->GetSelectEntryPos() == 0 );
|
|
||||||
|
|
||||||
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE, SfxCallMode::RECORD,{ &aPageItem });
|
|
||||||
}
|
|
||||||
|
|
||||||
IMPL_LINK_NOARG_TYPED(SlideBackground, FillColorHdl, ListBox&, void)
|
IMPL_LINK_NOARG_TYPED(SlideBackground, FillColorHdl, ListBox&, void)
|
||||||
{
|
{
|
||||||
const drawing::FillStyle eXFS = (drawing::FillStyle)mpFillStyle->GetSelectEntryPos();
|
const drawing::FillStyle eXFS = (drawing::FillStyle)mpFillStyle->GetSelectEntryPos();
|
||||||
|
@@ -41,6 +41,7 @@
|
|||||||
#include <svx/xflbckit.hxx>
|
#include <svx/xflbckit.hxx>
|
||||||
#include <svx/xbtmpit.hxx>
|
#include <svx/xbtmpit.hxx>
|
||||||
#include <svx/xflhtit.hxx>
|
#include <svx/xflhtit.hxx>
|
||||||
|
#include "EventMultiplexer.hxx"
|
||||||
|
|
||||||
namespace sd { namespace sidebar {
|
namespace sd { namespace sidebar {
|
||||||
|
|
||||||
@@ -109,6 +110,7 @@ private:
|
|||||||
DECL_LINK_TYPED(AssignMasterPage, ListBox&, void);
|
DECL_LINK_TYPED(AssignMasterPage, ListBox&, void);
|
||||||
DECL_LINK_TYPED(DspBackground, Button*, void);
|
DECL_LINK_TYPED(DspBackground, Button*, void);
|
||||||
DECL_LINK_TYPED(DspObjects, Button*, void);
|
DECL_LINK_TYPED(DspObjects, Button*, void);
|
||||||
|
DECL_LINK_TYPED(EventMultiplexerListener, tools::EventMultiplexerEvent&, void );
|
||||||
|
|
||||||
void Initialize();
|
void Initialize();
|
||||||
void Update();
|
void Update();
|
||||||
@@ -116,6 +118,10 @@ private:
|
|||||||
XGradient GetGradientSetOrDefault();
|
XGradient GetGradientSetOrDefault();
|
||||||
const OUString GetHatchingSetOrDefault();
|
const OUString GetHatchingSetOrDefault();
|
||||||
const OUString GetBitmapSetOrDefault();
|
const OUString GetBitmapSetOrDefault();
|
||||||
|
void addListener();
|
||||||
|
void removeListener();
|
||||||
|
void populateMasterSlideDropdown();
|
||||||
|
void updateMasterSlideSelection();
|
||||||
};
|
};
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
Reference in New Issue
Block a user