From f6154457c704f75d37ed216d7ac2dbda8fa0c5c4 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Mon, 27 Jan 2020 10:57:31 +0000 Subject: weld DisplayModeToolbarMenu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I210c608d2493c5b8b1ccf32af39c51b144bb45e9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87509 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- sd/UIConfig_simpress.mk | 1 + sd/inc/strings.hrc | 2 - sd/source/ui/controller/displaymodecontroller.cxx | 147 +++++++++------------- sd/uiconfig/simpress/ui/displaywindow.ui | 134 ++++++++++++++++++++ 4 files changed, 197 insertions(+), 87 deletions(-) create mode 100644 sd/uiconfig/simpress/ui/displaywindow.ui diff --git a/sd/UIConfig_simpress.mk b/sd/UIConfig_simpress.mk index 09d97c630000..fe0dcce15873 100644 --- a/sd/UIConfig_simpress.mk +++ b/sd/UIConfig_simpress.mk @@ -115,6 +115,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/simpress,\ sd/uiconfig/simpress/ui/customanimationtexttab \ sd/uiconfig/simpress/ui/customslideshows \ sd/uiconfig/simpress/ui/definecustomslideshow \ + sd/uiconfig/simpress/ui/displaywindow \ sd/uiconfig/simpress/ui/dlgfield \ sd/uiconfig/simpress/ui/dockinganimation \ sd/uiconfig/simpress/ui/effectmenu \ diff --git a/sd/inc/strings.hrc b/sd/inc/strings.hrc index fe3e182f2b2f..9c645f7a6250 100644 --- a/sd/inc/strings.hrc +++ b/sd/inc/strings.hrc @@ -62,8 +62,6 @@ #define STR_AUTOLAYOUT_HANDOUT4 NC_("STR_AUTOLAYOUT_HANDOUT4", "Four Slides") #define STR_AUTOLAYOUT_HANDOUT6 NC_("STR_AUTOLAYOUT_HANDOUT6", "Six Slides") #define STR_AUTOLAYOUT_HANDOUT9 NC_("STR_AUTOLAYOUT_HANDOUT9", "Nine Slides") -#define STR_DISPLAYMODE_EDITMODES NC_("STR_DISPLAYMODE_EDITMODES", "Edit Modes") -#define STR_DISPLAYMODE_MASTERMODES NC_("STR_DISPLAYMODE_MASTERMODES", "Master Modes") #define STR_AUTOLAYOUT_NOTES NC_("STR_AUTOLAYOUT_NOTES", "Notes") #define STR_TRANSFORM NC_("STR_TRANSFORM", "Transform") #define STR_LINEEND NC_("STR_LINEEND", "Line Ends") diff --git a/sd/source/ui/controller/displaymodecontroller.cxx b/sd/source/ui/controller/displaymodecontroller.cxx index 7fc63d053e4d..1513e543fbb9 100644 --- a/sd/source/ui/controller/displaymodecontroller.cxx +++ b/sd/source/ui/controller/displaymodecontroller.cxx @@ -36,6 +36,7 @@ class DisplayModeController : public svt::PopupWindowController public: explicit DisplayModeController( const css::uno::Reference< css::uno::XComponentContext >& rxContext ); + virtual std::unique_ptr weldPopupWindow() override; virtual VclPtr createVclPopupWindow( vcl::Window* pParent ) override; // XInitialization @@ -48,22 +49,25 @@ public: void setToolboxItemImage(const OUString& rImage); }; -class DisplayModeToolbarMenu : public svtools::ToolbarMenu +class DisplayModeToolbarMenu final : public WeldToolbarPopup { public: - DisplayModeToolbarMenu( DisplayModeController& rController, vcl::Window* pParent ); - virtual ~DisplayModeToolbarMenu() override; - virtual void dispose() override; - -protected: - DECL_LINK( SelectToolbarMenuHdl, ToolbarMenu*, void ); - DECL_LINK( SelectValueSetHdl, ValueSet*, void ); - void SelectHdl(void const *); + DisplayModeToolbarMenu(DisplayModeController* pControl, weld::Widget* pParent); + virtual void GrabFocus() override + { + mxDisplayModeSet1->GrabFocus(); + } private: - DisplayModeController& mrController; - VclPtr mpDisplayModeSet1; - VclPtr mpDisplayModeSet2; + rtl::Reference mxControl; + std::unique_ptr mxFrame1; + std::unique_ptr mxDisplayModeSet1; + std::unique_ptr mxDisplayModeSetWin1; + std::unique_ptr mxFrame2; + std::unique_ptr mxDisplayModeSet2; + std::unique_ptr mxDisplayModeSetWin2; + + DECL_LINK(SelectValueSetHdl, SvtValueSet*, void); }; struct snewfoil_value_info @@ -115,7 +119,7 @@ static const snewfoil_value_info mastermodes[] = }; -static void fillLayoutValueSet( ValueSet* pValue, const snewfoil_value_info* pInfo ) +static void fillLayoutValueSet(SvtValueSet* pValue, const snewfoil_value_info* pInfo) { Size aLayoutItemSize; for( ; pInfo->mnId; pInfo++ ) @@ -130,97 +134,60 @@ static void fillLayoutValueSet( ValueSet* pValue, const snewfoil_value_info* pIn } aLayoutItemSize = pValue->CalcItemSizePixel( aLayoutItemSize ); - pValue->SetSizePixel( pValue->CalcWindowSizePixel( aLayoutItemSize ) ); -} + Size aSize(pValue->CalcWindowSizePixel(aLayoutItemSize)); -DisplayModeToolbarMenu::DisplayModeToolbarMenu( DisplayModeController& rController, vcl::Window* pParent ) -: svtools::ToolbarMenu( rController.getFrameInterface(), pParent, WB_CLIPCHILDREN ) -, mrController( rController ) -, mpDisplayModeSet1( nullptr ) -, mpDisplayModeSet2( nullptr ) -{ const sal_Int32 LAYOUT_BORDER_PIX = 7; + aSize.AdjustWidth((pValue->GetColCount() + 1) * LAYOUT_BORDER_PIX ); + aSize.AdjustHeight((pValue->GetLineCount() +1) * LAYOUT_BORDER_PIX ); - OUString aTitle1( SdResId( STR_DISPLAYMODE_EDITMODES ) ); - OUString aTitle2( SdResId( STR_DISPLAYMODE_MASTERMODES ) ); + pValue->GetDrawingArea()->set_size_request(aSize.Width(), aSize.Height()); + pValue->SetOutputSizePixel(aSize); +} - SetSelectHdl( LINK( this, DisplayModeToolbarMenu, SelectToolbarMenuHdl ) ); +DisplayModeToolbarMenu::DisplayModeToolbarMenu(DisplayModeController* pControl, weld::Widget* pParent) + : WeldToolbarPopup(pControl->getFrameInterface(), pParent, "modules/simpress/ui/displaywindow.ui", "DisplayWindow") + , mxControl(pControl) + , mxFrame1(m_xBuilder->weld_frame("editframe")) + , mxDisplayModeSet1(new SvtValueSet(nullptr)) + , mxDisplayModeSetWin1(new weld::CustomWeld(*m_xBuilder, "valueset1", *mxDisplayModeSet1)) + , mxFrame2(m_xBuilder->weld_frame("masterframe")) + , mxDisplayModeSet2(new SvtValueSet(nullptr)) + , mxDisplayModeSetWin2(new weld::CustomWeld(*m_xBuilder, "valueset2", *mxDisplayModeSet2)) +{ + mxDisplayModeSet1->SetStyle(WB_TABSTOP | WB_MENUSTYLEVALUESET | WB_FLATVALUESET | WB_NOBORDER | WB_NO_DIRECTSELECT); + mxDisplayModeSet1->SetStyle(WB_TABSTOP | WB_MENUSTYLEVALUESET | WB_FLATVALUESET | WB_NOBORDER | WB_NO_DIRECTSELECT); - mpDisplayModeSet1 = createEmptyValueSetControl(); - mpDisplayModeSet1->SetSelectHdl( LINK( this, DisplayModeToolbarMenu, SelectValueSetHdl ) ); + mxDisplayModeSet1->SetSelectHdl( LINK( this, DisplayModeToolbarMenu, SelectValueSetHdl ) ); + mxDisplayModeSet2->SetSelectHdl( LINK( this, DisplayModeToolbarMenu, SelectValueSetHdl ) ); sal_Int16 nColCount = 2; - mpDisplayModeSet1->SetColCount( nColCount ); - fillLayoutValueSet( mpDisplayModeSet1, &editmodes[0] ); - - Size aSize( mpDisplayModeSet1->GetOutputSizePixel() ); - aSize.AdjustWidth((mpDisplayModeSet1->GetColCount() + 1) * LAYOUT_BORDER_PIX ); - aSize.AdjustHeight((mpDisplayModeSet1->GetLineCount() +1) * LAYOUT_BORDER_PIX ); - mpDisplayModeSet1->SetOutputSizePixel( aSize ); - - appendEntry( -1, aTitle1 ); - appendEntry( 1, mpDisplayModeSet1 ); - - mpDisplayModeSet2 = createEmptyValueSetControl(); - - mpDisplayModeSet2->SetSelectHdl( LINK( this, DisplayModeToolbarMenu, SelectValueSetHdl ) ); - mpDisplayModeSet2->SetColCount( nColCount ); - - fillLayoutValueSet( mpDisplayModeSet2, &mastermodes[0] ); - - aSize = mpDisplayModeSet2->GetOutputSizePixel(); - aSize.AdjustWidth((mpDisplayModeSet2->GetColCount() + 1) * LAYOUT_BORDER_PIX ); - aSize.AdjustHeight((mpDisplayModeSet2->GetLineCount() + 1) * LAYOUT_BORDER_PIX ); - mpDisplayModeSet2->SetOutputSizePixel( aSize ); - - appendEntry( -1, aTitle2 ); - appendEntry( 2, mpDisplayModeSet2 ); - - SetOutputSizePixel( getMenuSize() ); -} -DisplayModeToolbarMenu::~DisplayModeToolbarMenu() -{ - disposeOnce(); -} + mxDisplayModeSet1->SetColCount( nColCount ); + fillLayoutValueSet( mxDisplayModeSet1.get(), &editmodes[0] ); -void DisplayModeToolbarMenu::dispose() -{ - mpDisplayModeSet1.clear(); - mpDisplayModeSet2.clear(); - svtools::ToolbarMenu::dispose(); + mxDisplayModeSet2->SetColCount( nColCount ); + fillLayoutValueSet( mxDisplayModeSet2.get(), &mastermodes[0] ); } -IMPL_LINK( DisplayModeToolbarMenu, SelectValueSetHdl, ValueSet*, pControl, void ) +IMPL_LINK( DisplayModeToolbarMenu, SelectValueSetHdl, SvtValueSet*, pControl, void ) { - SelectHdl(pControl); -} -IMPL_LINK( DisplayModeToolbarMenu, SelectToolbarMenuHdl, ToolbarMenu *, pControl, void ) -{ - SelectHdl(pControl); -} - -void DisplayModeToolbarMenu::SelectHdl(void const * pControl) -{ - if ( IsInPopupMode() ) - EndPopupMode(); - OUString sCommandURL; OUString sImage; - if( pControl == mpDisplayModeSet1 ) { - sCommandURL = OUString::createFromAscii(editmodes[mpDisplayModeSet1->GetSelectedItemId() - 1 ].msUnoCommand); - sImage = OUString::createFromAscii(editmodes[mpDisplayModeSet1->GetSelectedItemId() - 1 ].msBmpResId); + if( pControl == mxDisplayModeSet1.get() ) { + sCommandURL = OUString::createFromAscii(editmodes[mxDisplayModeSet1->GetSelectedItemId() - 1 ].msUnoCommand); + sImage = OUString::createFromAscii(editmodes[mxDisplayModeSet1->GetSelectedItemId() - 1 ].msBmpResId); } - else if( pControl == mpDisplayModeSet2 ) { - sCommandURL = OUString::createFromAscii(mastermodes[mpDisplayModeSet2->GetSelectedItemId() - 5 ].msUnoCommand); - sImage = OUString::createFromAscii(mastermodes[mpDisplayModeSet2->GetSelectedItemId() - 5 ].msBmpResId); + else if( pControl == mxDisplayModeSet2.get() ) { + sCommandURL = OUString::createFromAscii(mastermodes[mxDisplayModeSet2->GetSelectedItemId() - 5 ].msUnoCommand); + sImage = OUString::createFromAscii(mastermodes[mxDisplayModeSet2->GetSelectedItemId() - 5 ].msBmpResId); } if (!sCommandURL.isEmpty()) - mrController.dispatchCommand( sCommandURL, Sequence< PropertyValue >() ); + mxControl->dispatchCommand( sCommandURL, Sequence< PropertyValue >() ); - mrController.setToolboxItemImage(sImage); + mxControl->setToolboxItemImage(sImage); + mxControl->EndPopupMode(); } DisplayModeController::DisplayModeController( const css::uno::Reference< css::uno::XComponentContext >& rxContext ) @@ -238,9 +205,19 @@ void SAL_CALL DisplayModeController::initialize( const css::uno::Sequence< css:: setToolboxItemImage(BMP_DISPLAYMODE_SLIDE); } +std::unique_ptr DisplayModeController::weldPopupWindow() +{ + return std::make_unique(this, m_pToolbar); +} + VclPtr DisplayModeController::createVclPopupWindow( vcl::Window* pParent ) { - return VclPtr::Create( *this, pParent ); + mxInterimPopover = VclPtr::Create(getFrameInterface(), pParent, + std::make_unique(this, pParent->GetFrameWeld())); + + mxInterimPopover->Show(); + + return mxInterimPopover; } void DisplayModeController::setToolboxItemImage(const OUString& rImage) diff --git a/sd/uiconfig/simpress/ui/displaywindow.ui b/sd/uiconfig/simpress/ui/displaywindow.ui new file mode 100644 index 000000000000..71522c09d189 --- /dev/null +++ b/sd/uiconfig/simpress/ui/displaywindow.ui @@ -0,0 +1,134 @@ + + + + + + False + True + 4 + + + True + False + vertical + 6 + + + True + False + True + True + 0 + none + + + True + False + 6 + + + True + True + True + True + never + never + in + + + True + False + + + True + True + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + True + True + + + + + + + + + + + True + False + Edit Modes + + + + + + + + False + True + 0 + + + + + True + False + True + True + 0 + none + + + True + False + 6 + + + True + True + True + True + never + never + in + + + True + False + + + True + True + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + True + True + + + + + + + + + + + True + False + Master Modes + + + + + + + + False + True + 1 + + + + + + -- cgit